mautourco-components 0.2.22 → 0.2.24

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 (119) hide show
  1. package/dist/components/atoms/Icon/icons/LineIcon.d.ts +8 -0
  2. package/dist/components/atoms/Icon/icons/LineIcon.js +21 -0
  3. package/dist/components/atoms/Icon/icons/PlusCircleIcon.js +1 -1
  4. package/dist/components/atoms/Icon/icons/registry.d.ts +1 -0
  5. package/dist/components/atoms/Icon/icons/registry.js +2 -0
  6. package/dist/components/molecules/AccomodationDocket/AccomodationDocket.d.ts +7 -0
  7. package/dist/components/molecules/AccomodationDocket/AccomodationDocket.js +69 -0
  8. package/dist/components/molecules/AccomodationDocket/index.d.ts +2 -0
  9. package/dist/components/molecules/AccomodationDocket/index.js +1 -0
  10. package/dist/components/molecules/AddItemButton/AddItemButton.css +2088 -0
  11. package/dist/components/molecules/AddItemButton/AddItemButton.d.ts +7 -0
  12. package/dist/components/molecules/AddItemButton/AddItemButton.js +19 -0
  13. package/dist/components/molecules/BookingResume/ResumeAccom/ResumeAccom.js +1 -1
  14. package/dist/components/molecules/BookingResume/ResumeExcursion/ResumeExcursion.js +1 -1
  15. package/dist/components/molecules/BookingResume/ResumeTransfer.js +1 -1
  16. package/dist/components/molecules/Calendar/DateTime.d.ts +5 -5
  17. package/dist/components/molecules/Calendar/DateTime.js +48 -37
  18. package/dist/components/molecules/DateDisplay/DateDisplay.css +2100 -0
  19. package/dist/components/molecules/DateDisplay/DateDisplay.d.ts +13 -6
  20. package/dist/components/molecules/DateDisplay/DateDisplay.js +22 -8
  21. package/dist/components/molecules/DocketPrices/DocketPrices.d.ts +19 -0
  22. package/dist/components/molecules/DocketPrices/DocketPrices.js +31 -0
  23. package/dist/components/molecules/DocketPrices/index.d.ts +3 -0
  24. package/dist/components/molecules/DocketPrices/index.js +2 -0
  25. package/dist/components/molecules/ExcursionDocket/ExcursionDocket.d.ts +8 -0
  26. package/dist/components/molecules/ExcursionDocket/ExcursionDocket.js +30 -0
  27. package/dist/components/molecules/ExcursionDocket/index.d.ts +2 -0
  28. package/dist/components/molecules/ExcursionDocket/index.js +1 -0
  29. package/dist/components/molecules/LocationDropdown/LocationDropdown.js +8 -11
  30. package/dist/components/molecules/OtherServiceDocket/OtherServiceDocket.d.ts +8 -0
  31. package/dist/components/molecules/OtherServiceDocket/OtherServiceDocket.js +29 -0
  32. package/dist/components/molecules/OtherServiceDocket/index.d.ts +2 -0
  33. package/dist/components/molecules/OtherServiceDocket/index.js +1 -0
  34. package/dist/components/molecules/PriceDisplay/PriceDisplay.css +2101 -0
  35. package/dist/components/molecules/PriceDisplay/PriceDisplay.d.ts +26 -0
  36. package/dist/components/molecules/PriceDisplay/PriceDisplay.js +132 -0
  37. package/dist/components/molecules/PriceDisplay/index.d.ts +3 -0
  38. package/dist/components/molecules/PriceDisplay/index.js +2 -0
  39. package/dist/components/molecules/ServiceSelector/ServiceSelector.d.ts +3 -0
  40. package/dist/components/molecules/ServiceSelector/ServiceSelector.js +23 -12
  41. package/dist/components/molecules/TransferDocket/TransferDocket.d.ts +8 -0
  42. package/dist/components/molecules/TransferDocket/TransferDocket.js +59 -0
  43. package/dist/components/molecules/TransferDocket/index.d.ts +3 -0
  44. package/dist/components/molecules/TransferDocket/index.js +2 -0
  45. package/dist/components/organisms/BookingAddItem/AddItemNewService.d.ts +12 -0
  46. package/dist/components/organisms/BookingAddItem/AddItemNewService.js +48 -0
  47. package/dist/components/organisms/BookingAddItem/AddItemSelector.d.ts +9 -0
  48. package/dist/components/organisms/BookingAddItem/AddItemSelector.js +23 -0
  49. package/dist/components/organisms/BookingAddItem/BookingAddItem.d.ts +16 -0
  50. package/dist/components/organisms/BookingAddItem/BookingAddItem.js +66 -0
  51. package/dist/components/organisms/BookingAddItem/index.d.ts +3 -0
  52. package/dist/components/organisms/BookingAddItem/index.js +3 -0
  53. package/dist/components/organisms/DateTimePicker/DateTimePicker.js +11 -7
  54. package/dist/components/organisms/Docket/Docket.d.ts +126 -0
  55. package/dist/components/organisms/Docket/Docket.js +125 -0
  56. package/dist/components/organisms/PaxSelector/PaxSelector.d.ts +1 -0
  57. package/dist/components/organisms/PaxSelector/PaxSelector.js +50 -28
  58. package/dist/components/ui/popover.js +1 -1
  59. package/dist/index.d.ts +9 -0
  60. package/dist/index.js +5 -0
  61. package/dist/styles/components/checkbox.css +5 -4
  62. package/dist/styles/components/molecule/accomodation-docket.css +2222 -0
  63. package/dist/styles/components/molecule/calendarInput.css +3 -4
  64. package/dist/styles/components/molecule/docket-prices.css +2095 -0
  65. package/dist/styles/components/molecule/excursion-docket.css +2135 -0
  66. package/dist/styles/components/molecule/other-service-docket.css +2114 -0
  67. package/dist/styles/components/molecule/service-selector.css +70 -21
  68. package/dist/styles/components/molecule/transfer-docket.css +2150 -0
  69. package/dist/styles/components/organism/docket.css +2448 -0
  70. package/dist/types/docket/docket.types.d.ts +11 -0
  71. package/dist/types/docket/docket.types.js +1 -0
  72. package/dist/types/docket/services.types.d.ts +125 -0
  73. package/dist/types/docket/services.types.js +1 -0
  74. package/package.json +1 -1
  75. package/src/components/atoms/Icon/icons/LineIcon.tsx +31 -0
  76. package/src/components/atoms/Icon/icons/PlusCircleIcon.tsx +2 -2
  77. package/src/components/atoms/Icon/icons/registry.tsx +2 -0
  78. package/src/components/molecules/AccomodationDocket/AccomodationDocket.tsx +224 -0
  79. package/src/components/molecules/AccomodationDocket/index.ts +3 -0
  80. package/src/components/molecules/AddItemButton/AddItemButton.css +5 -0
  81. package/src/components/molecules/AddItemButton/AddItemButton.tsx +18 -0
  82. package/src/components/molecules/BookingResume/ResumeAccom/ResumeAccom.tsx +1 -1
  83. package/src/components/molecules/BookingResume/ResumeExcursion/ResumeExcursion.tsx +1 -1
  84. package/src/components/molecules/BookingResume/ResumeTransfer.tsx +1 -1
  85. package/src/components/molecules/Calendar/DateTime.tsx +69 -53
  86. package/src/components/molecules/DateDisplay/DateDisplay.css +21 -0
  87. package/src/components/molecules/DateDisplay/DateDisplay.tsx +52 -24
  88. package/src/components/molecules/DocketPrices/DocketPrices.tsx +56 -0
  89. package/src/components/molecules/DocketPrices/index.ts +4 -0
  90. package/src/components/molecules/ExcursionDocket/ExcursionDocket.tsx +171 -0
  91. package/src/components/molecules/ExcursionDocket/index.ts +2 -0
  92. package/src/components/molecules/LocationDropdown/LocationDropdown.tsx +41 -38
  93. package/src/components/molecules/OtherServiceDocket/OtherServiceDocket.tsx +58 -0
  94. package/src/components/molecules/OtherServiceDocket/index.ts +2 -0
  95. package/src/components/molecules/PriceDisplay/PriceDisplay.css +24 -0
  96. package/src/components/molecules/PriceDisplay/PriceDisplay.tsx +179 -0
  97. package/src/components/molecules/PriceDisplay/index.ts +4 -0
  98. package/src/components/molecules/ServiceSelector/ServiceSelector.tsx +91 -83
  99. package/src/components/molecules/TransferDocket/TransferDocket.tsx +156 -0
  100. package/src/components/molecules/TransferDocket/index.ts +4 -0
  101. package/src/components/organisms/BookingAddItem/AddItemNewService.tsx +95 -0
  102. package/src/components/organisms/BookingAddItem/AddItemSelector.tsx +43 -0
  103. package/src/components/organisms/BookingAddItem/BookingAddItem.tsx +120 -0
  104. package/src/components/organisms/BookingAddItem/index.ts +3 -0
  105. package/src/components/organisms/CarBookingCard/index.ts +1 -0
  106. package/src/components/organisms/DateTimePicker/DateTimePicker.tsx +13 -7
  107. package/src/components/organisms/Docket/Docket.tsx +456 -0
  108. package/src/components/organisms/PaxSelector/PaxSelector.tsx +305 -193
  109. package/src/components/organisms/SearchBarTransfer/index.ts +2 -0
  110. package/src/components/ui/popover.tsx +2 -4
  111. package/src/styles/components/checkbox.css +5 -4
  112. package/src/styles/components/molecule/accomodation-docket.css +117 -0
  113. package/src/styles/components/molecule/calendarInput.css +12 -13
  114. package/src/styles/components/molecule/docket-prices.css +13 -0
  115. package/src/styles/components/molecule/excursion-docket.css +47 -0
  116. package/src/styles/components/molecule/other-service-docket.css +30 -0
  117. package/src/styles/components/molecule/service-selector.css +71 -23
  118. package/src/styles/components/molecule/transfer-docket.css +61 -0
  119. package/src/styles/components/organism/docket.css +360 -0
@@ -0,0 +1,11 @@
1
+ import { ServiceDocket } from './services.types';
2
+ export interface DocketPrice {
3
+ currency: string;
4
+ amount: number;
5
+ }
6
+ export interface Docket {
7
+ id: number | string;
8
+ services: ServiceDocket[];
9
+ prices: DocketPrice[];
10
+ dockets?: Docket[];
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,125 @@
1
+ import { CancellationPolicy, Offer } from '../table';
2
+ type ServiceType = 'accommodation' | 'transfer' | 'excursion' | 'otherService';
3
+ export interface ServiceDocket {
4
+ type: ServiceType;
5
+ }
6
+ export interface HotelAmenity {
7
+ AmenityIcon: string;
8
+ AmenityName: string;
9
+ }
10
+ export interface RoomDocket {
11
+ room_detail_id?: number;
12
+ Dates: string[];
13
+ RoomName?: string;
14
+ RoomPrice?: number;
15
+ RoomAmenities?: Record<string, any>;
16
+ RoomImage?: string;
17
+ AdultCount?: number;
18
+ TeenCount?: number;
19
+ ChildCount?: number;
20
+ InfantCount?: number;
21
+ MealPlan?: string;
22
+ Mealsupplement?: number;
23
+ quotationPrice?: number;
24
+ ClientType?: string;
25
+ cancellation_policy?: CancellationPolicy[];
26
+ Offers?: Offer[];
27
+ Status?: string;
28
+ Mandatory?: any[];
29
+ paxAge?: any[];
30
+ isEmpty?: boolean;
31
+ }
32
+ export interface AccomodationDocket extends ServiceDocket {
33
+ type: 'accommodation';
34
+ HotelName: string;
35
+ HotelId: number;
36
+ HotelAmenities: HotelAmenity[];
37
+ Dates: [string, string];
38
+ Images: string[];
39
+ Total: string;
40
+ Currency: string;
41
+ Description: string;
42
+ TitleDescription: string;
43
+ Rooms: RoomDocket[];
44
+ }
45
+ export interface TransferDocket extends ServiceDocket {
46
+ type: 'transfer';
47
+ IdTransfer: number;
48
+ TransferDate: string;
49
+ TransferTime: string;
50
+ TransferType: string;
51
+ LocationFromId: number;
52
+ LocationFromName: string;
53
+ LocationFromDetails: string;
54
+ LocationToId: number;
55
+ LocationToName: string;
56
+ LocationToDetails: string;
57
+ Currency: string;
58
+ TotalPrice: number;
59
+ AdultCount: number;
60
+ TeenCount: number;
61
+ ChildCount: number;
62
+ InfantCount: number;
63
+ VehicleTypeId: number;
64
+ VehicleTypeName: string;
65
+ vehicleTypeCategory: string;
66
+ Vehicle_type: string;
67
+ capacity: number;
68
+ CarCount: number;
69
+ Car_selected: boolean;
70
+ luggage: any[];
71
+ LuggageTruck: number;
72
+ LuggageCar: number;
73
+ baby_seat_count: number;
74
+ HandlingFee: string;
75
+ HandlingFeeAdult: number;
76
+ HandlingFeeChild: number;
77
+ HandlingFeeDetails: string | null;
78
+ HandlingType: string;
79
+ Remarks: string;
80
+ Flight: string;
81
+ Pic_url: string;
82
+ IsSearched: boolean;
83
+ IsFieldManually: boolean;
84
+ paxAge: any[];
85
+ otherServices: {
86
+ serviceDetailID: number;
87
+ serviceID: number;
88
+ clientRefs: any[];
89
+ }[];
90
+ }
91
+ export interface ExcursionDocket extends ServiceDocket {
92
+ type: 'excursion';
93
+ ExcursionID: number;
94
+ ExcursionName: string;
95
+ ServiceDate: string;
96
+ SelectedHotel?: string;
97
+ SelectedHotelDetails?: string;
98
+ Currency: string;
99
+ TotalPrice: string | number;
100
+ AdultCount: number;
101
+ TeenCount?: number;
102
+ ChildCount?: number;
103
+ InfantCount?: number;
104
+ Duration?: string;
105
+ MealIncluded?: boolean;
106
+ Meal?: string;
107
+ Accessibility?: string;
108
+ VehicleType?: string;
109
+ VehicleTypeName?: string;
110
+ paxAge?: any[];
111
+ }
112
+ export interface OtherServiceDocket extends ServiceDocket {
113
+ type: 'otherService';
114
+ service_detail_id: number;
115
+ service_for: string;
116
+ service_date?: string;
117
+ Currency: string;
118
+ TotalPrice: string | number;
119
+ AdultCount: number;
120
+ TeenCount?: number;
121
+ ChildCount?: number;
122
+ InfantCount?: number;
123
+ paxAge?: any[];
124
+ }
125
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mautourco-components",
3
- "version": "0.2.22",
3
+ "version": "0.2.24",
4
4
  "private": false,
5
5
  "description": "Bibliothèque de composants Motorco pour le redesign",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+
3
+ interface LineIconProps {
4
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ className?: string;
6
+ color?: string;
7
+ }
8
+
9
+ const LineIcon: React.FC<LineIconProps> = ({ size = 'md', className = '', color }) => {
10
+ // Line icon always takes full width and has 1px height
11
+ const classes = `w-full h-px ${className}`;
12
+
13
+ // Default stroke color from Figma: #A3A3A3
14
+ const strokeColor = color || '#A3A3A3';
15
+
16
+ return (
17
+ <svg
18
+ className={classes}
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ width="336"
21
+ height="1"
22
+ viewBox="0 0 336 1"
23
+ fill="none"
24
+ preserveAspectRatio="none"
25
+ style={{ width: '100%', height: '1px' }}>
26
+ <path d="M0 0.5L336 0.499971" stroke={strokeColor} strokeDasharray="4 4" />
27
+ </svg>
28
+ );
29
+ };
30
+
31
+ export default LineIcon;
@@ -45,12 +45,12 @@ const PlusCircleIcon: React.FC<PlusCircleIconProps> = ({
45
45
  <g clipPath="url(#clip0_7074_66340)">
46
46
  <path
47
47
  d="M13.915 8.00098C13.915 4.7334 11.2666 2.08416 7.99902 2.08398C4.73134 2.08398 2.08203 4.73329 2.08203 8.00098C2.08221 11.2685 4.73145 13.917 7.99902 13.917C11.2664 13.9168 13.9149 11.2684 13.915 8.00098ZM7.24902 10.667V8.75098H5.33203C4.91793 8.75098 4.58221 8.41504 4.58203 8.00098C4.58203 7.58676 4.91782 7.25098 5.33203 7.25098H7.24902V5.33398C7.24902 4.91977 7.58481 4.58398 7.99902 4.58398C8.41309 4.58416 8.74902 4.91988 8.74902 5.33398V7.25098H10.665L10.7422 7.25488C11.1203 7.29337 11.415 7.61271 11.415 8.00098C11.4149 8.38912 11.1202 8.70862 10.7422 8.74707L10.665 8.75098H8.74902V10.667C8.74902 11.0811 8.41309 11.4168 7.99902 11.417C7.58481 11.417 7.24902 11.0812 7.24902 10.667ZM15.415 8.00098C15.4149 12.0968 12.0949 15.4168 7.99902 15.417C3.90302 15.417 0.582208 12.0969 0.582031 8.00098C0.582031 3.90487 3.90291 0.583984 7.99902 0.583984C12.095 0.584161 15.415 3.90497 15.415 8.00098Z"
48
- fill="white"
48
+ fill="currentColor"
49
49
  />
50
50
  </g>
51
51
  <defs>
52
52
  <clipPath id="clip0_7074_66340">
53
- <rect width="16" height="16" fill="white" />
53
+ <rect width="16" height="16" fill="currentColor" />
54
54
  </clipPath>
55
55
  </defs>
56
56
  </svg>
@@ -30,6 +30,7 @@ import FacebookIcon from './FacebookIcon';
30
30
  import HomeIcon from './HomeIcon';
31
31
  import InfoIcon from './InfoIcon';
32
32
  import LandIcon from './Land';
33
+ import LineIcon from './LineIcon';
33
34
  import LinkedInIcon from './LinkedInIcon';
34
35
  import LuggageIcon from './LuggageIcon';
35
36
  import MapIcon from './MapIcon';
@@ -139,6 +140,7 @@ export const ICONS = {
139
140
  bike: BikeIcon as unknown as IconComponent,
140
141
  air: AirIcon as unknown as IconComponent,
141
142
  luggage: LuggageIcon as unknown as IconComponent,
143
+ line: LineIcon as unknown as IconComponent,
142
144
  'car-front': CarFrontIcon as unknown as IconComponent,
143
145
  sea: SeaIcon as unknown as IconComponent,
144
146
  catamaran: CatamaranIcon as unknown as IconComponent,
@@ -0,0 +1,224 @@
1
+ import { differenceInDays } from 'date-fns';
2
+ import React from 'react';
3
+ import { AccomodationDocket as AccomodationDocketType } from '../../../types/docket/services.types';
4
+ import Chip from '../../atoms/Chip/Chip';
5
+ import Icon from '../../atoms/Icon/Icon';
6
+ import { Text } from '../../atoms/Typography/Typography';
7
+ import { DateDisplay } from '../DateDisplay/DateDisplay';
8
+ import TextWithIcon from '../TextWithIcon/TextWithIcon';
9
+ import '../../../styles/components/molecule/accomodation-docket.css';
10
+
11
+ export interface AccomodationDocketProps {
12
+ data: AccomodationDocketType;
13
+ }
14
+
15
+ const clientTypeMap: Record<string, string> = {
16
+ standard: 'Standard',
17
+ honeymooners: 'Honeymooners',
18
+ vip: 'VIP',
19
+ vvip: 'VVIP',
20
+ };
21
+
22
+ export const AccomodationDocket: React.FC<AccomodationDocketProps> = ({ data }) => {
23
+ const { HotelName, TitleDescription, Total, Currency, Dates, Rooms } = data;
24
+
25
+ const calculateNights = (dates: string[]): number => {
26
+ if (dates && dates.length >= 2) {
27
+ return differenceInDays(new Date(dates[1]), new Date(dates[0]));
28
+ }
29
+ return 0;
30
+ };
31
+
32
+ const formatChildrenInfo = (
33
+ room: AccomodationDocketType['Rooms'][0]
34
+ ): React.ReactNode => {
35
+ if (!room.ChildCount || room.ChildCount === 0) {
36
+ return null;
37
+ }
38
+
39
+ const childrenInfo: React.ReactNode[] = [];
40
+ const paxAges = room.paxAge || [];
41
+
42
+ // Group children by age
43
+ const childGroups: Array<{ count: number; age: number }> = [];
44
+
45
+ if (paxAges.length > 0) {
46
+ // Count children by age
47
+ const ageCounts: Record<number, number> = {};
48
+ paxAges.forEach((age: any) => {
49
+ const ageNum = typeof age === 'number' ? age : parseInt(age, 10);
50
+ if (!isNaN(ageNum)) {
51
+ ageCounts[ageNum] = (ageCounts[ageNum] || 0) + 1;
52
+ }
53
+ });
54
+
55
+ Object.entries(ageCounts).forEach(([age, count]) => {
56
+ childGroups.push({ count, age: parseInt(age, 10) });
57
+ });
58
+ } else {
59
+ // If no age info, just show total count
60
+ childGroups.push({ count: room.ChildCount, age: 0 });
61
+ }
62
+
63
+ return (
64
+ <div className="accomodation-docket__children">
65
+ {childGroups.map((group, index) => (
66
+ <React.Fragment key={`child-${index}`}>
67
+ {index > 0 && <div className="accomodation-docket__divider-vertical" />}
68
+ <span className="accomodation-docket__child-info">
69
+ <Text size="sm" variant="medium" color="default">
70
+ {group.count} Child{group.count > 1 ? 'ren' : ''}
71
+ </Text>
72
+ {group.age > 0 ? (
73
+ <Text
74
+ size="sm"
75
+ variant="medium"
76
+ className="accomodation-docket__child-age">
77
+ {' '}
78
+ ({group.age} y.o)
79
+ </Text>
80
+ ) : null}
81
+ </span>
82
+ </React.Fragment>
83
+ ))}
84
+ </div>
85
+ );
86
+ };
87
+
88
+ const renderRoomDetails = (room: AccomodationDocketType['Rooms'][0], index: number) => {
89
+ const isRoomEmpty = room.isEmpty || !room.Dates || room.Dates.length === 0;
90
+
91
+ return (
92
+ <div key={`room-${index}`} className="accomodation-docket__room">
93
+ <div className="accomodation-docket__room-header">
94
+ <TextWithIcon icon="accom" textVariant="bold" textSize="sm" color="subtle">
95
+ Room {index + 1}
96
+ </TextWithIcon>
97
+ </div>
98
+
99
+ {isRoomEmpty ? (
100
+ <div className="accomodation-docket__room-empty">
101
+ <Text variant="bold" size="sm" color="state-error">
102
+ Please select your second room
103
+ </Text>
104
+ </div>
105
+ ) : (
106
+ <div className="accomodation-docket__room-details">
107
+ <div className="accomodation-docket__date-section">
108
+ {room.Dates && room.Dates.length >= 2 && (
109
+ <DateDisplay
110
+ dates={room.Dates}
111
+ calendarSize="sm"
112
+ arrowSize="sm"
113
+ textSize="sm"
114
+ colorMode="green"
115
+ />
116
+ )}
117
+ {room.Dates && room.Dates.length >= 2 && (
118
+ <TextWithIcon icon="night" textSize="sm" color="subtle">
119
+ {calculateNights(room.Dates)} nights
120
+ </TextWithIcon>
121
+ )}
122
+ </div>
123
+
124
+ <div className="accomodation-docket__client-info">
125
+ {room.ClientType && (
126
+ <div className="accomodation-docket__client-type">
127
+ <Text variant="bold" size="sm" color="subtle">
128
+ Client type:{' '}
129
+ </Text>
130
+ <Text variant="medium" size="sm" color="subtle">
131
+ {clientTypeMap[room.ClientType.toLowerCase()] || room.ClientType}
132
+ </Text>
133
+ </div>
134
+ )}
135
+
136
+ <div className="accomodation-docket__guests">
137
+ {room.AdultCount && room.AdultCount > 0 && (
138
+ <TextWithIcon icon="user" textSize="sm" color="subtle">
139
+ {room.AdultCount} Adult{room.AdultCount > 1 ? 's' : ''}
140
+ </TextWithIcon>
141
+ )}
142
+ {room.ChildCount && room.ChildCount > 0 ? (
143
+ <div className="accomodation-docket__children-wrapper">
144
+ <Icon
145
+ name="user"
146
+ size="sm"
147
+ color="var(--color-text-subtle, #303642)"
148
+ />
149
+ {formatChildrenInfo(room)}
150
+ </div>
151
+ ) : null}
152
+ </div>
153
+ </div>
154
+
155
+ <div className="accomodation-docket__room-info">
156
+ {room.RoomName && (
157
+ <TextWithIcon
158
+ icon="accom"
159
+ textSize="sm"
160
+ color="subtle"
161
+ textLeading="none">
162
+ {room.RoomName}
163
+ </TextWithIcon>
164
+ )}
165
+ {room.MealPlan && (
166
+ <div className="accomodation-docket__meal-plan">
167
+ <div className="accomodation-docket__meal-plan-label">
168
+ <TextWithIcon
169
+ icon="utensils"
170
+ textSize="sm"
171
+ color="subtle"
172
+ textLeading="none">
173
+ Meal-Plan
174
+ </TextWithIcon>
175
+ <div className="accomodation-docket__divider-vertical" />
176
+ </div>
177
+ <Text variant="medium" size="sm" color="subtle" leading="none">
178
+ {room.MealPlan}
179
+ </Text>
180
+ </div>
181
+ )}
182
+ </div>
183
+ </div>
184
+ )}
185
+ </div>
186
+ );
187
+ };
188
+
189
+ return (
190
+ <div className="accomodation-docket">
191
+ <div className="accomodation-docket__header">
192
+ <div className="accomodation-docket__title-section">
193
+ <div className="accomodation-docket__title-bar" />
194
+ <Icon name="accom" size="sm" />
195
+ <Text variant="bold" size="sm" color="accent">
196
+ Accommodation
197
+ </Text>
198
+ </div>
199
+ {Total && Currency && (
200
+ <Chip type="filled" color="accent" size="sm">
201
+ {Currency} {Total}
202
+ </Chip>
203
+ )}
204
+ </div>
205
+
206
+ {TitleDescription && (
207
+ <div className="accomodation-docket__hotel-name">
208
+ <Text variant="bold" size="base" color="default">
209
+ {TitleDescription.split('\n').map((line, index) => (
210
+ <React.Fragment key={`line-${index}`}>
211
+ {line}
212
+ {index < TitleDescription.split('\n').length - 1 && <br />}
213
+ </React.Fragment>
214
+ ))}
215
+ </Text>
216
+ </div>
217
+ )}
218
+
219
+ <div className="accomodation-docket__rooms">
220
+ {Rooms.map((room, index) => renderRoomDetails(room, index))}
221
+ </div>
222
+ </div>
223
+ );
224
+ };
@@ -0,0 +1,3 @@
1
+ export { AccomodationDocket } from './AccomodationDocket';
2
+ export type { AccomodationDocketProps } from './AccomodationDocket';
3
+
@@ -0,0 +1,5 @@
1
+ .add-item-button {
2
+ @apply p-4 gap-y-4 text-center flex flex-col items-center justify-center;
3
+ border: solid 1px var(--card-color-border-default);
4
+ border-radius: var(--card-border-radius-default);
5
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import Icon from '../../atoms/Icon/Icon';
3
+ import { Text } from '../../atoms/Typography/Typography';
4
+ import './AddItemButton.css';
5
+
6
+ export interface AddItemButtonProps {
7
+ label: React.ReactNode;
8
+ onClick?: () => void;
9
+ }
10
+
11
+ export const AddItemButton: React.FC<AddItemButtonProps> = ({ label, onClick }) => {
12
+ return (
13
+ <button className="add-item-button" onClick={onClick}>
14
+ <Icon name="plus-circle" size="lg" />
15
+ <Text variant="medium">{label}</Text>
16
+ </button>
17
+ );
18
+ };
@@ -33,7 +33,7 @@ export const ResumeAccom: React.FC<ResumeAccomProps> = (props) => {
33
33
  className="resume-accom">
34
34
  <ServiceTitle title={hotelName} />
35
35
  <div className="space-y-2 mt-4">
36
- <DateDisplay dates={dates} textColor="accent" />
36
+ <DateDisplay dates={dates} colorMode="green" />
37
37
  <TextWithIcon icon="night">{stay} Nights</TextWithIcon>
38
38
  <Text variant="medium" size="sm" leading="4">
39
39
  <strong>Client types:</strong> {clientType}
@@ -45,7 +45,7 @@ export const ResumeExcursion: React.FC<ResumeExcursionProps> = (props) => {
45
45
  image={image}
46
46
  className="resume-excursion">
47
47
  <div className="space-y-3">
48
- <DateDisplay dates={[date]} textColor="accent" />
48
+ <DateDisplay dates={[date]} colorMode="green" />
49
49
  <div className="space-y-1">
50
50
  <TextWithIcon icon={type} textSize="sm" textVariant="medium">
51
51
  {mapType[type]}
@@ -35,7 +35,7 @@ export const ResumeTransfer: React.FC<ResumeTransferProps> = (props) => {
35
35
  icon="car-front"
36
36
  image={image}>
37
37
  <div className="space-y-3">
38
- <DateDisplay dates={[date]} textColor="accent" />
38
+ <DateDisplay dates={[date]} colorMode="green" />
39
39
  <FromTo from={location.from} to={location.to} />
40
40
  <div className="space-y-1">
41
41
  <PaxDisplay pax={pax} />