mautourco-components 0.2.46 → 0.2.47

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 (31) hide show
  1. package/dist/components/molecules/AgeSelector/AgeSelector.d.ts +20 -0
  2. package/dist/components/molecules/AgeSelector/AgeSelector.js +84 -0
  3. package/dist/components/molecules/LocationDropdown/LocationDropdown.js +1 -1
  4. package/dist/components/organisms/PaxSelector/PaxSelector.d.ts +5 -0
  5. package/dist/components/organisms/PaxSelector/PaxSelector.js +100 -114
  6. package/dist/components/organisms/RoundTrip/RoundTrip.d.ts +2 -0
  7. package/dist/components/organisms/RoundTrip/RoundTrip.js +7 -7
  8. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.d.ts +4 -0
  9. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.js +19 -57
  10. package/dist/components/organisms/TransferLine/TransferLine.d.ts +9 -5
  11. package/dist/components/organisms/TransferLine/TransferLine.js +52 -35
  12. package/dist/index.d.ts +19 -16
  13. package/dist/index.js +3 -1
  14. package/dist/styles/components/molecule/age-selector.css +216 -0
  15. package/dist/styles/components/molecule/calendarInput.css +25 -6
  16. package/dist/styles/components/molecule/location-dropdown.css +16 -4
  17. package/dist/styles/components/organism/pax-selector.css +27 -189
  18. package/dist/styles/components/organism/transfer-line.css +40 -0
  19. package/dist/styles/mautourco.css +1 -0
  20. package/package.json +1 -1
  21. package/src/components/molecules/AgeSelector/AgeSelector.tsx +172 -0
  22. package/src/components/molecules/LocationDropdown/LocationDropdown.tsx +1 -1
  23. package/src/components/organisms/PaxSelector/PaxSelector.tsx +132 -208
  24. package/src/components/organisms/RoundTrip/RoundTrip.tsx +7 -0
  25. package/src/components/organisms/SearchBarTransfer/SearchBarTransfer.tsx +34 -54
  26. package/src/components/organisms/TransferLine/TransferLine.tsx +107 -85
  27. package/src/styles/components/molecule/age-selector.css +136 -0
  28. package/src/styles/components/molecule/calendarInput.css +12 -4
  29. package/src/styles/components/molecule/location-dropdown.css +9 -2
  30. package/src/styles/components/organism/pax-selector.css +25 -186
  31. package/src/styles/components/organism/transfer-line.css +31 -0
@@ -32,7 +32,7 @@ import TransferLine from "../TransferLine/TransferLine";
32
32
  var transferIdCounter = 0;
33
33
  var SearchBarTransfer = function (_a) {
34
34
  var _b, _c;
35
- var _d = _a.mode, initialMode = _d === void 0 ? "roundtrip" : _d, _e = _a.locations, locations = _e === void 0 ? { options: [], groups: [] } : _e, defaultRoundTripData = _a.defaultRoundTripData, defaultTransferLines = _a.defaultTransferLines, _f = _a.defaultSameVehicle, defaultSameVehicle = _f === void 0 ? false : _f, onSearch = _a.onSearch, onChange = _a.onChange, _g = _a.className, className = _g === void 0 ? "" : _g;
35
+ var _d = _a.mode, initialMode = _d === void 0 ? "roundtrip" : _d, _e = _a.locations, locations = _e === void 0 ? { options: [], groups: [] } : _e, defaultRoundTripData = _a.defaultRoundTripData, defaultTransferLines = _a.defaultTransferLines, _f = _a.defaultSameVehicle, defaultSameVehicle = _f === void 0 ? false : _f, onSearch = _a.onSearch, onChange = _a.onChange, onRemove = _a.onRemove, _g = _a.className, className = _g === void 0 ? "" : _g, _h = _a.scrollOnOpen, scrollOnOpen = _h === void 0 ? false : _h;
36
36
  // Generate unique ID for transfer lines
37
37
  var generateTransferId = function () {
38
38
  transferIdCounter += 1;
@@ -44,11 +44,11 @@ var SearchBarTransfer = function (_a) {
44
44
  return [];
45
45
  return lines.map(function (line) { return (__assign(__assign({}, line), { id: line.id || generateTransferId() })); });
46
46
  };
47
- var _h = useState(initialMode), mode = _h[0], setMode = _h[1];
48
- var _j = useState(defaultSameVehicle), sameVehicle = _j[0], setSameVehicle = _j[1];
49
- var _k = useState(defaultRoundTripData), roundTripData = _k[0], setRoundTripData = _k[1];
50
- var _l = useState(initializeTransferLines(defaultTransferLines)), transferLines = _l[0], setTransferLines = _l[1];
51
- var _m = useState(null), error = _m[0], setError = _m[1];
47
+ var _j = useState(initialMode), mode = _j[0], setMode = _j[1];
48
+ var _k = useState(defaultSameVehicle), sameVehicle = _k[0], setSameVehicle = _k[1];
49
+ var _l = useState(defaultRoundTripData), roundTripData = _l[0], setRoundTripData = _l[1];
50
+ var _m = useState(initializeTransferLines(defaultTransferLines)), transferLines = _m[0], setTransferLines = _m[1];
51
+ var _o = useState(null), error = _o[0], setError = _o[1];
52
52
  // Notify parent of changes
53
53
  useEffect(function () {
54
54
  var data = {
@@ -69,25 +69,9 @@ var SearchBarTransfer = function (_a) {
69
69
  var transferMode = newMode;
70
70
  if (transferMode === mode)
71
71
  return;
72
- if (transferMode === "custom" && mode === "roundtrip" && roundTripData) {
73
- // Parse roundtrip to two transfer lines
74
- var arrivalTransfer = {
75
- id: generateTransferId(),
76
- type: "arrival",
77
- paxData: roundTripData.paxData,
78
- transferDate: roundTripData.arrivalDate,
79
- pickupPoint: roundTripData.pickupDropoffPoint,
80
- dropoffPoint: roundTripData.accommodation,
81
- };
82
- var departureTransfer = {
83
- id: generateTransferId(),
84
- type: "departure",
85
- paxData: roundTripData.paxData,
86
- transferDate: roundTripData.departureDate,
87
- pickupPoint: roundTripData.accommodation,
88
- dropoffPoint: roundTripData.pickupDropoffPoint,
89
- };
90
- setTransferLines([arrivalTransfer, departureTransfer]);
72
+ if (transferMode === "custom" && mode === "roundtrip") {
73
+ // When switching to custom mode, reset transfer lines (will show placeholder)
74
+ setTransferLines([]);
91
75
  setRoundTripData(undefined);
92
76
  }
93
77
  else if (transferMode === "roundtrip" && mode === "custom") {
@@ -108,42 +92,15 @@ var SearchBarTransfer = function (_a) {
108
92
  };
109
93
  // Render transfer type buttons
110
94
  var renderTransferTypeButtons = function (onClick) { return (_jsxs("div", { className: "search-bar-transfer__add-buttons", children: [_jsx(Button, { variant: "outline-secondary", size: "sm", leadingIcon: "plus", onClick: function () { return onClick("arrival"); }, children: "Add Arrival" }), _jsx(Button, { variant: "outline-secondary", size: "sm", leadingIcon: "plus", onClick: function () { return onClick("departure"); }, children: "Add Departure" }), _jsx(Button, { variant: "outline-secondary", size: "sm", leadingIcon: "plus", onClick: function () { return onClick("inter-hotel"); }, children: "Add Inter-Hotel" })] })); };
111
- // Handle adding transfer from round-trip mode (converts round-trip to custom and adds new transfer)
95
+ // Handle adding transfer from round-trip mode (switches to custom and adds new transfer)
112
96
  var handleAddTransferFromRoundTrip = function (type) {
113
- if (!roundTripData) {
114
- // If no round trip data, just add a new transfer and switch to custom
115
- var newTransfer_1 = {
116
- id: generateTransferId(),
117
- type: type,
118
- };
119
- setTransferLines([newTransfer_1]);
120
- setMode("custom");
121
- return;
122
- }
123
- // Convert roundtrip to two transfer lines
124
- var arrivalTransfer = {
125
- id: generateTransferId(),
126
- type: "arrival",
127
- paxData: roundTripData.paxData,
128
- transferDate: roundTripData.arrivalDate,
129
- pickupPoint: roundTripData.pickupDropoffPoint,
130
- dropoffPoint: roundTripData.accommodation,
131
- };
132
- var departureTransfer = {
133
- id: generateTransferId(),
134
- type: "departure",
135
- paxData: roundTripData.paxData,
136
- transferDate: roundTripData.departureDate,
137
- pickupPoint: roundTripData.accommodation,
138
- dropoffPoint: roundTripData.pickupDropoffPoint,
139
- };
140
97
  // Add the new transfer of the clicked type
141
98
  var newTransfer = {
142
99
  id: generateTransferId(),
143
100
  type: type,
144
101
  };
145
- // Set all transfers and switch to custom mode
146
- setTransferLines([arrivalTransfer, departureTransfer, newTransfer]);
102
+ // Set the transfer and switch to custom mode
103
+ setTransferLines([newTransfer]);
147
104
  setRoundTripData(undefined);
148
105
  setMode("custom");
149
106
  setError(null);
@@ -156,6 +113,11 @@ var SearchBarTransfer = function (_a) {
156
113
  };
157
114
  // Handle transfer line deletion
158
115
  var handleDeleteTransferLine = function (id) {
116
+ var index = transferLines.findIndex(function (line) { return line.id === id; });
117
+ var transferLine = transferLines.find(function (line) { return line.id === id; });
118
+ if (index !== -1 && transferLine) {
119
+ onRemove === null || onRemove === void 0 ? void 0 : onRemove(index, transferLine);
120
+ }
159
121
  setTransferLines(function (prevLines) { return prevLines.filter(function (line) { return line.id !== id; }); });
160
122
  };
161
123
  // Validate data
@@ -207,7 +169,7 @@ var SearchBarTransfer = function (_a) {
207
169
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(data);
208
170
  }
209
171
  };
210
- return (_jsxs("div", { className: "search-bar-transfer ".concat(className), children: [_jsxs("div", { className: "search-bar-transfer__header", children: [_jsx(Heading, { level: 5, variant: "bold", color: "accent", children: "Select your transfer details" }), _jsx("div", { className: "search-bar-transfer__mode-selector", children: _jsx(SegmentedButton, { options: modeOptions, value: mode, onChange: handleModeChange, name: "transfer-mode" }) })] }), mode === "roundtrip" ? (_jsxs(_Fragment, { children: [_jsx(RoundTrip, { id: "roundtrip-main", locations: locations, paxData: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.paxData, arrivalDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.arrivalDate, departureDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.departureDate, pickupDropoffPoint: (_b = roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.pickupDropoffPoint) === null || _b === void 0 ? void 0 : _b.id, accommodation: (_c = roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.accommodation) === null || _c === void 0 ? void 0 : _c.id, onChange: setRoundTripData, checkEmpty: error !== null }), _jsx("div", { className: "search-bar-transfer__transfer-type", children: renderTransferTypeButtons(handleAddTransferFromRoundTrip) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__transfer-type", children: [_jsx(Text, { size: "lg", variant: "bold", color: "subtle", as: "div", className: "search-bar-transfer__transfer-type-label", children: "Select a transfer type you want to add" }), renderTransferTypeButtons(handleAddTransfer)] }), transferLines.length > 0 && (_jsx("div", { className: "search-bar-transfer__transfer-lines", children: (function () {
172
+ return (_jsxs("div", { className: "search-bar-transfer ".concat(className), children: [_jsxs("div", { className: "search-bar-transfer__header", children: [_jsx(Heading, { level: 5, variant: "bold", color: "accent", children: "Select your transfer details" }), _jsx("div", { className: "search-bar-transfer__mode-selector", children: _jsx(SegmentedButton, { options: modeOptions, value: mode, onChange: handleModeChange, name: "transfer-mode" }) })] }), mode === "roundtrip" ? (_jsxs(_Fragment, { children: [_jsx(RoundTrip, { id: "roundtrip-main", locations: locations, paxData: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.paxData, arrivalDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.arrivalDate, departureDate: roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.departureDate, pickupDropoffPoint: (_b = roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.pickupDropoffPoint) === null || _b === void 0 ? void 0 : _b.id, accommodation: (_c = roundTripData === null || roundTripData === void 0 ? void 0 : roundTripData.accommodation) === null || _c === void 0 ? void 0 : _c.id, onChange: setRoundTripData, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }), _jsx("div", { className: "search-bar-transfer__transfer-type", children: renderTransferTypeButtons(handleAddTransferFromRoundTrip) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__transfer-type", children: [_jsx(Text, { size: "lg", variant: "bold", color: "subtle", as: "div", className: "search-bar-transfer__transfer-type-label", children: "Select a transfer type you want to add" }), renderTransferTypeButtons(handleAddTransfer)] }), transferLines.length === 0 && (_jsx(TransferLine, { id: "placeholder-transfer", type: "inter-hotel", locations: locations, onDataChange: function () { }, showDelete: false, disabled: true, scrollOnOpen: scrollOnOpen })), transferLines.length > 0 && (_jsx("div", { className: "search-bar-transfer__transfer-lines", children: (function () {
211
173
  // Group transfers by type
212
174
  var groupedTransfers = {
213
175
  arrival: [],
@@ -228,7 +190,7 @@ var SearchBarTransfer = function (_a) {
228
190
  };
229
191
  return nonEmptyGroups.map(function (type, groupIndex) { return (_jsxs(React.Fragment, { children: [_jsxs("div", { className: "search-bar-transfer__category-header", children: [_jsx(Icon, { name: categoryInfo[type].icon, size: "md" }), _jsx(Text, { size: "md", variant: "bold", color: "default", as: "span", children: categoryInfo[type].label })] }), groupedTransfers[type].map(function (line) {
230
192
  var _a, _b;
231
- return (_jsx(TransferLine, { id: line.id, type: line.type, paxData: line.paxData, transferDate: line.transferDate, pickupPoint: (_a = line.pickupPoint) === null || _a === void 0 ? void 0 : _a.id, dropoffPoint: (_b = line.dropoffPoint) === null || _b === void 0 ? void 0 : _b.id, locations: locations, onDataChange: function (data) { return handleTransferLineChange(line.id, data); }, onDelete: function () { return handleDeleteTransferLine(line.id); }, showDelete: transferLines.length > 1, checkEmpty: error !== null }, line.id));
193
+ return (_jsx(TransferLine, { id: line.id, type: line.type, paxData: line.paxData, transferDate: line.transferDate, pickupPoint: (_a = line.pickupPoint) === null || _a === void 0 ? void 0 : _a.id, dropoffPoint: (_b = line.dropoffPoint) === null || _b === void 0 ? void 0 : _b.id, locations: locations, onDataChange: function (data) { return handleTransferLineChange(line.id, data); }, onDelete: function () { return handleDeleteTransferLine(line.id); }, showDelete: transferLines.length > 1, checkEmpty: error !== null, scrollOnOpen: scrollOnOpen }, line.id));
232
194
  }), groupIndex < nonEmptyGroups.length - 1 && (_jsx("svg", { className: "search-bar-transfer__divider", xmlns: "http://www.w3.org/2000/svg", width: "100%", height: "1", viewBox: "0 0 1076 1", fill: "none", preserveAspectRatio: "none", children: _jsx("path", { d: "M0 0.5L1076 0.499906", stroke: "var(--color-border-medium, #A3A3A3)", strokeWidth: "1", strokeDasharray: "10 10" }) }))] }, type)); });
233
195
  })() }))] })), _jsxs("div", { className: "search-bar-transfer__actions", children: [_jsx(Checkbox, { checked: sameVehicle, onChange: setSameVehicle, label: "Use the same vehicle for all your transfers" }), _jsxs("div", { className: "search-bar-transfer__cta", children: [error && (_jsx(Toast, { text: error, type: "danger" })), _jsx(Button, { variant: "primary", size: "lg", onClick: handleSearch, children: "Search" })] })] })] }));
234
196
  };
@@ -1,8 +1,8 @@
1
- import React from "react";
2
- import "../../../styles/components/organism/transfer-line.css";
3
- import { LocationData, LocationGroup, LocationOption } from "../../molecules/LocationDropdown/LocationDropdown";
4
- import { PaxData } from "../PaxSelector/PaxSelector";
5
- export type TransferType = "arrival" | "departure" | "inter-hotel";
1
+ import React from 'react';
2
+ import '../../../styles/components/organism/transfer-line.css';
3
+ import { LocationData, LocationGroup, LocationOption } from '../../molecules/LocationDropdown/LocationDropdown';
4
+ import { PaxData } from '../PaxSelector/PaxSelector';
5
+ export type TransferType = 'arrival' | 'departure' | 'inter-hotel';
6
6
  export type { LocationData };
7
7
  export interface TransferLineData {
8
8
  id: string;
@@ -50,6 +50,10 @@ export interface TransferLineProps {
50
50
  className?: string;
51
51
  /** Whether to check if inputs are empty */
52
52
  checkEmpty?: boolean;
53
+ /** Whether the transfer line is disabled (placeholder state) */
54
+ disabled?: boolean;
55
+ /** Whether to scroll to the input when the calendar opens */
56
+ scrollOnOpen?: boolean;
53
57
  }
54
58
  declare const TransferLine: React.FC<TransferLineProps>;
55
59
  export default TransferLine;
@@ -19,19 +19,19 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19
19
  return to.concat(ar || Array.prototype.slice.call(from));
20
20
  };
21
21
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
- import React, { useState } from "react";
23
- import "../../../styles/components/organism/transfer-line.css";
24
- import Icon from "../../atoms/Icon/Icon";
25
- import { Text } from "../../atoms/Typography/Typography";
26
- import LocationDropdown from "../../molecules/LocationDropdown/LocationDropdown";
27
- import DateTimePicker from "../DateTimePicker/DateTimePicker";
28
- import PaxSelector from "../PaxSelector/PaxSelector";
22
+ import React, { useState } from 'react';
23
+ import '../../../styles/components/organism/transfer-line.css';
24
+ import Icon from '../../atoms/Icon/Icon';
25
+ import { Text } from '../../atoms/Typography/Typography';
26
+ import LocationDropdown from '../../molecules/LocationDropdown/LocationDropdown';
27
+ import DateTimePicker from '../DateTimePicker/DateTimePicker';
28
+ import PaxSelector from '../PaxSelector/PaxSelector';
29
29
  var TransferLine = function (_a) {
30
- var id = _a.id, type = _a.type, paxData = _a.paxData, transferDate = _a.transferDate, pickupPoint = _a.pickupPoint, dropoffPoint = _a.dropoffPoint, _b = _a.locations, locations = _b === void 0 ? { options: [], groups: [] } : _b, onPaxChange = _a.onPaxChange, onDateChange = _a.onDateChange, onPickupChange = _a.onPickupChange, onDropoffChange = _a.onDropoffChange, onDataChange = _a.onDataChange, onDelete = _a.onDelete, _c = _a.showDelete, showDelete = _c === void 0 ? true : _c, _d = _a.showTitle, showTitle = _d === void 0 ? false : _d, _e = _a.className, className = _e === void 0 ? "" : _e, _f = _a.checkEmpty, checkEmpty = _f === void 0 ? false : _f;
31
- var _g = useState(paxData), internalPaxData = _g[0], setInternalPaxData = _g[1];
32
- var _h = useState(transferDate), internalTransferDate = _h[0], setInternalTransferDate = _h[1];
33
- var _j = useState(null), internalPickupPoint = _j[0], setInternalPickupPoint = _j[1];
34
- var _k = useState(null), internalDropoffPoint = _k[0], setInternalDropoffPoint = _k[1];
30
+ var id = _a.id, type = _a.type, paxData = _a.paxData, transferDate = _a.transferDate, pickupPoint = _a.pickupPoint, dropoffPoint = _a.dropoffPoint, _b = _a.locations, locations = _b === void 0 ? { options: [], groups: [] } : _b, onPaxChange = _a.onPaxChange, onDateChange = _a.onDateChange, onPickupChange = _a.onPickupChange, onDropoffChange = _a.onDropoffChange, onDataChange = _a.onDataChange, onDelete = _a.onDelete, _c = _a.showDelete, showDelete = _c === void 0 ? true : _c, _d = _a.showTitle, showTitle = _d === void 0 ? false : _d, _e = _a.className, className = _e === void 0 ? '' : _e, _f = _a.checkEmpty, checkEmpty = _f === void 0 ? false : _f, _g = _a.disabled, disabled = _g === void 0 ? false : _g, _h = _a.scrollOnOpen, scrollOnOpen = _h === void 0 ? false : _h;
31
+ var _j = useState(paxData), internalPaxData = _j[0], setInternalPaxData = _j[1];
32
+ var _k = useState(transferDate), internalTransferDate = _k[0], setInternalTransferDate = _k[1];
33
+ var _l = useState(null), internalPickupPoint = _l[0], setInternalPickupPoint = _l[1];
34
+ var _m = useState(null), internalDropoffPoint = _m[0], setInternalDropoffPoint = _m[1];
35
35
  // Helper function to get all locations (from options and groups)
36
36
  var getAllLocations = function (options, groups) {
37
37
  var groupOptions = groups.flatMap(function (group) { return group.options; });
@@ -62,8 +62,9 @@ var TransferLine = function (_a) {
62
62
  var _a = filterLocations(position), options = _a.options, groups = _a.groups;
63
63
  var allLocations = getAllLocations(options, groups);
64
64
  // For arrival pickup or departure dropoff, default to first airport
65
- if ((type === 'arrival' && position === 'pickup') || (type === 'departure' && position === 'dropoff')) {
66
- return allLocations.find(function (loc) { return loc.type === 'airport'; }) || allLocations[0] || null;
65
+ if ((type === 'arrival' && position === 'pickup') ||
66
+ (type === 'departure' && position === 'dropoff')) {
67
+ return (allLocations.find(function (loc) { return loc.type === 'airport'; }) || allLocations[0] || null);
67
68
  }
68
69
  return null;
69
70
  };
@@ -132,29 +133,36 @@ var TransferLine = function (_a) {
132
133
  };
133
134
  onDataChange === null || onDataChange === void 0 ? void 0 : onDataChange(completeData);
134
135
  // eslint-disable-next-line react-hooks/exhaustive-deps
135
- }, [id, type, internalPaxData, internalTransferDate, internalPickupPoint, internalDropoffPoint]);
136
+ }, [
137
+ id,
138
+ type,
139
+ internalPaxData,
140
+ internalTransferDate,
141
+ internalPickupPoint,
142
+ internalDropoffPoint,
143
+ ]);
136
144
  var getTypeIcon = function () {
137
145
  switch (type) {
138
- case "arrival":
139
- return "arrival";
140
- case "departure":
141
- return "departure";
142
- case "inter-hotel":
143
- return "building";
146
+ case 'arrival':
147
+ return 'arrival';
148
+ case 'departure':
149
+ return 'departure';
150
+ case 'inter-hotel':
151
+ return 'building';
144
152
  default:
145
- return "arrival";
153
+ return 'arrival';
146
154
  }
147
155
  };
148
156
  var getTypeLabel = function () {
149
157
  switch (type) {
150
- case "arrival":
151
- return "Arrival";
152
- case "departure":
153
- return "Departure";
154
- case "inter-hotel":
155
- return "Inter-Hotel";
158
+ case 'arrival':
159
+ return 'Arrival';
160
+ case 'departure':
161
+ return 'Departure';
162
+ case 'inter-hotel':
163
+ return 'Inter-Hotel';
156
164
  default:
157
- return "Transfer";
165
+ return 'Transfer';
158
166
  }
159
167
  };
160
168
  var handlePaxChange = function (newPaxData) {
@@ -175,14 +183,23 @@ var TransferLine = function (_a) {
175
183
  onDropoffChange === null || onDropoffChange === void 0 ? void 0 : onDropoffChange(location);
176
184
  };
177
185
  // Check if inputs are empty (when checkEmpty is true)
178
- var isPaxEmpty = checkEmpty && (!internalPaxData ||
179
- (internalPaxData.adults === 0 &&
180
- internalPaxData.teens === 0 &&
181
- internalPaxData.children === 0 &&
182
- (internalPaxData.infants === undefined || internalPaxData.infants === 0)));
186
+ var isPaxEmpty = checkEmpty &&
187
+ (!internalPaxData ||
188
+ (internalPaxData.adults === 0 &&
189
+ internalPaxData.teens === 0 &&
190
+ internalPaxData.children === 0 &&
191
+ (internalPaxData.infants === undefined || internalPaxData.infants === 0)));
183
192
  var isDateEmpty = checkEmpty && (!internalTransferDate || internalTransferDate === '');
184
193
  var isPickupEmpty = checkEmpty && !internalPickupPoint;
185
194
  var isDropoffEmpty = checkEmpty && !internalDropoffPoint;
186
- return (_jsxs("div", { className: "transfer-line transfer-line--".concat(type, " ").concat(className), "data-transfer-id": id, children: [showTitle && (_jsxs("div", { className: "transfer-line__header", children: [_jsx(Icon, { name: getTypeIcon(), size: "sm", className: "transfer-line__header-icon" }), _jsx(Text, { size: "sm", variant: "medium", className: "transfer-line__header-label", children: getTypeLabel() })] })), _jsxs("div", { className: "transfer-line__content-container", children: [_jsxs("div", { className: "transfer-line__content", children: [_jsx("div", { className: "transfer-line__field transfer-line__field--pax ".concat(isPaxEmpty ? 'transfer-line__field--error' : ''), children: _jsx(PaxSelector, { label: "Number of pax", value: internalPaxData, onChange: handlePaxChange, placeholder: "2 pax", className: isPaxEmpty ? 'pax-selector--error' : '' }) }), _jsxs("div", { className: "transfer-line__field transfer-line__field--date", children: [_jsx(Text, { size: "sm", variant: "regular", className: "transfer-line__field-label", children: "Transfer date" }), _jsx(DateTimePicker, { placeholder: "DD/MM/YYYY", mode: "calendar", iconPosition: "left", numberOfMonths: 1, iconBGFull: false, showChevron: true, onValueChange: handleDateChange, selectionMode: "single", defaultValue: internalTransferDate, inputClassName: "transfer-line__date-picker", state: isDateEmpty ? 'error' : undefined })] }), _jsx("div", { className: "transfer-line__field transfer-line__field--pickup", children: _jsx(LocationDropdown, { label: "Pick-up point", options: filterLocations('pickup').options, groups: filterLocations('pickup').groups, selectedValue: (internalPickupPoint === null || internalPickupPoint === void 0 ? void 0 : internalPickupPoint.id) || null, onSelectionChange: handlePickupChange, placeholder: "Select a pick-up point", direction: "pickup", type: type === 'inter-hotel' ? 'accommodation' : type === 'arrival' ? 'airport-port' : 'accommodation', showGroupTitles: false, error: isPickupEmpty }) }), _jsx("div", { className: "transfer-line__field transfer-line__field--dropoff", children: _jsx(LocationDropdown, { label: "Drop-off point", options: filterLocations('dropoff').options, groups: filterLocations('dropoff').groups, selectedValue: (internalDropoffPoint === null || internalDropoffPoint === void 0 ? void 0 : internalDropoffPoint.id) || null, onSelectionChange: handleDropoffChange, placeholder: "Select a drop-off point", direction: "dropoff", type: type === 'inter-hotel' ? 'accommodation' : type === 'departure' ? 'airport-port' : 'accommodation', showGroupTitles: false, error: isDropoffEmpty }) })] }), showDelete && (_jsx("div", { className: "transfer-line__delete", children: _jsx("button", { type: "button", className: "transfer-line__delete-btn", onClick: onDelete, "aria-label": "Delete transfer line", children: _jsx(Icon, { name: "delete", size: "sm", className: "transfer-line__delete-icon" }) }) }))] })] }));
195
+ return (_jsxs("div", { className: "transfer-line transfer-line--".concat(type, " ").concat(disabled ? 'transfer-line--disabled' : '', " ").concat(className), "data-transfer-id": id, children: [showTitle && (_jsxs("div", { className: "transfer-line__header", children: [_jsx(Icon, { name: getTypeIcon(), size: "sm", className: "transfer-line__header-icon" }), _jsx(Text, { size: "sm", variant: "medium", className: "transfer-line__header-label", children: getTypeLabel() })] })), _jsxs("div", { className: "transfer-line__content-container", children: [_jsxs("div", { className: "transfer-line__content", children: [_jsx("div", { className: "transfer-line__field transfer-line__field--pax ".concat(isPaxEmpty ? 'transfer-line__field--error' : ''), children: _jsx(PaxSelector, { label: "Number of pax", value: internalPaxData, onChange: handlePaxChange, placeholder: "2 pax", className: isPaxEmpty ? 'pax-selector--error' : '', disabled: disabled, scrollOnOpen: scrollOnOpen }) }), _jsxs("div", { className: "transfer-line__field transfer-line__field--date", children: [_jsx(Text, { size: "sm", variant: "regular", className: "transfer-line__field-label", children: "Transfer date" }), _jsx(DateTimePicker, { placeholder: "DD/MM/YYYY", mode: "calendar", iconPosition: "left", numberOfMonths: 1, iconBGFull: false, showChevron: true, onValueChange: handleDateChange, selectionMode: "single", defaultValue: internalTransferDate, inputClassName: "transfer-line__date-picker", state: isDateEmpty ? 'error' : undefined, disabled: disabled, scrollOnOpen: scrollOnOpen })] }), _jsx("div", { className: "transfer-line__field transfer-line__field--pickup", children: _jsx(LocationDropdown, { label: "Pick-up point", options: filterLocations('pickup').options, groups: filterLocations('pickup').groups, selectedValue: (internalPickupPoint === null || internalPickupPoint === void 0 ? void 0 : internalPickupPoint.id) || null, onSelectionChange: handlePickupChange, placeholder: "Select a pick-up point", direction: "pickup", type: type === 'inter-hotel'
196
+ ? 'accommodation'
197
+ : type === 'arrival'
198
+ ? 'airport-port'
199
+ : 'accommodation', showGroupTitles: false, error: isPickupEmpty, disabled: disabled, scrollOnOpen: scrollOnOpen }) }), _jsx("div", { className: "transfer-line__field transfer-line__field--dropoff", children: _jsx(LocationDropdown, { label: "Drop-off point", options: filterLocations('dropoff').options, groups: filterLocations('dropoff').groups, selectedValue: (internalDropoffPoint === null || internalDropoffPoint === void 0 ? void 0 : internalDropoffPoint.id) || null, onSelectionChange: handleDropoffChange, placeholder: "Select a drop-off point", direction: "dropoff", type: type === 'inter-hotel'
200
+ ? 'accommodation'
201
+ : type === 'departure'
202
+ ? 'airport-port'
203
+ : 'accommodation', showGroupTitles: false, error: isDropoffEmpty, disabled: disabled, scrollOnOpen: scrollOnOpen }) })] }), showDelete && !disabled && (_jsx("div", { className: "transfer-line__delete", children: _jsx("button", { type: "button", className: "transfer-line__delete-btn", onClick: onDelete, "aria-label": "Delete transfer line", children: _jsx(Icon, { name: "delete", size: "sm", className: "transfer-line__delete-icon" }) }) }))] })] }));
187
204
  };
188
205
  export default TransferLine;
package/dist/index.d.ts CHANGED
@@ -17,8 +17,9 @@ export { DateDisplay } from './components/molecules/DateDisplay/DateDisplay';
17
17
  export { DocketPrices } from './components/molecules/DocketPrices/DocketPrices';
18
18
  export { PriceDisplay } from './components/molecules/PriceDisplay/PriceDisplay';
19
19
  export { TransferDocket } from './components/molecules/TransferDocket/TransferDocket';
20
- export { ActionDropdown, type ActionDropdownItem, } from './components/molecules/ActionDropdown/ActionDropdown';
20
+ export { ActionDropdown, type ActionDropdownItem } from './components/molecules/ActionDropdown/ActionDropdown';
21
21
  export { AddItemButton } from './components/molecules/AddItemButton/AddItemButton';
22
+ export { default as AgeSelector } from './components/molecules/AgeSelector/AgeSelector';
22
23
  export * from './components/molecules/BookingResume';
23
24
  export { Breadcrumbs } from './components/molecules/Breadcrumbs/Breadcrumbs';
24
25
  export { default as CalendarInput } from './components/molecules/Calendar/CalendarInput';
@@ -85,41 +86,43 @@ export { default as UserIcon } from './components/atoms/Icon/icons/User';
85
86
  export { priceFormatter } from './lib/price-formatter';
86
87
  export type { DividerProps } from './components/atoms/Divider/Divider';
87
88
  export type { FeatureRowProps } from './components/molecules/FeatureRow/FeatureRow';
88
- export type { LocationData, LocationDropdownProps, LocationGroup, LocationOption, } from './components/molecules/LocationDropdown/LocationDropdown';
89
- export type { ServiceOption, ServiceSelectorProps, ServiceType, } from './components/molecules/ServiceSelector/ServiceSelector';
89
+ export type { LocationData, LocationDropdownProps, LocationGroup, LocationOption } from './components/molecules/LocationDropdown/LocationDropdown';
90
+ export type { ServiceOption, ServiceSelectorProps, ServiceType } from './components/molecules/ServiceSelector/ServiceSelector';
90
91
  export type { StepperProps } from './components/molecules/Stepper/Stepper';
91
- export type { CarBookingCardPriceRow, CarBookingCardProps, CarBookingCardSize, CarBookingCardState, CarBookingCardType, } from './components/organisms/CarBookingCard/CarBookingCard';
92
- export type { CardContainerProps, CardContainerSpacing, } from './components/organisms/CardContainer/CardContainer';
92
+ export type { CarBookingCardPriceRow, CarBookingCardProps, CarBookingCardSize, CarBookingCardState, CarBookingCardType } from './components/organisms/CarBookingCard/CarBookingCard';
93
+ export type { CardContainerProps, CardContainerSpacing } from './components/organisms/CardContainer/CardContainer';
93
94
  export type { DateTimePickerProps } from './components/organisms/DateTimePicker/DateTimePicker';
94
95
  export type { DialogProps, DialogSize } from './components/organisms/Dialog/Dialog';
95
96
  export type { FooterProps } from './components/organisms/Footer/Footer';
96
- export type { DocketDetailsData, DocketServiceType, MultipleQuotationDocketProps, } from './components/organisms/MultipleQuotationDocket';
97
- export type { ClientType, PaxData, PaxSelectorProps, } from './components/organisms/PaxSelector/PaxSelector';
98
- export type { RoundTripData, RoundTripProps, RoundTripTransfer, } from './components/organisms/RoundTrip/RoundTrip';
99
- export type { SearchBarTransferData, SearchBarTransferProps, TransferMode, } from './components/organisms/SearchBarTransfer/SearchBarTransfer';
97
+ export type { DocketDetailsData, DocketServiceType, MultipleQuotationDocketProps } from './components/organisms/MultipleQuotationDocket';
98
+ export { CHILD_CATEGORY_AGES } from './components/organisms/PaxSelector/PaxSelector';
99
+ export type { ClientType, PaxData, PaxSelectorProps } from './components/organisms/PaxSelector/PaxSelector';
100
+ export type { RoundTripData, RoundTripProps, RoundTripTransfer } from './components/organisms/RoundTrip/RoundTrip';
101
+ export type { SearchBarTransferData, SearchBarTransferProps, TransferMode } from './components/organisms/SearchBarTransfer/SearchBarTransfer';
100
102
  export type { TopNavigationProps } from './components/organisms/TopNavigation/TopNavigation';
101
- export type { TransferLineData, TransferLineProps, TransferType, } from './components/organisms/TransferLine/TransferLine';
103
+ export type { TransferLineData, TransferLineProps, TransferType } from './components/organisms/TransferLine/TransferLine';
102
104
  export type { CheckboxProps } from './components/atoms/Checkbox/Checkbox';
103
105
  export type { InputProps } from './components/atoms/Inputs/Input/Input';
104
106
  export type { AddItemButtonProps } from './components/molecules/AddItemButton/AddItemButton';
105
- export type { BreadcrumbsItem, BreadcrumbsProps, } from './components/molecules/Breadcrumbs/Breadcrumbs';
107
+ export type { AgeSelectorProps } from './components/molecules/AgeSelector/AgeSelector';
108
+ export type { BreadcrumbsItem, BreadcrumbsProps } from './components/molecules/Breadcrumbs/Breadcrumbs';
106
109
  export type { DocketPricesProps } from './components/molecules/DocketPrices/DocketPrices';
107
110
  export type { FromToProps } from './components/molecules/FromTo/FromTo';
108
111
  export type { PaxChipsProps, PaxCount } from './components/molecules/PaxChips/PaxChips';
109
112
  export type { PriceDisplayProps } from './components/molecules/PriceDisplay/PriceDisplay';
110
113
  export type { SectionTitleProps } from './components/molecules/SectionTitle/SectionTitle';
111
- export type { DetailsColProps, ItemColProps, RowAccommodationProps, RowExcursionProps, RowTransferProps, } from './components/molecules/TableServiceItem';
114
+ export type { DetailsColProps, ItemColProps, RowAccommodationProps, RowExcursionProps, RowTransferProps } from './components/molecules/TableServiceItem';
112
115
  export type { ServiceAccommodationProps } from './components/molecules/TimelineItem/ServiceAccommodation';
113
116
  export type { ServiceExcursionProps } from './components/molecules/TimelineItem/ServiceExcursion';
114
117
  export type { ServiceTransferProps } from './components/molecules/TimelineItem/ServiceTransfer';
115
118
  export type { TimelineHeaderProps } from './components/molecules/TimelineItem/TimelineHeader';
116
119
  export type { ToastProps } from './components/molecules/Toast/Toast';
117
120
  export type { TransferDocketProps } from './components/molecules/TransferDocket/TransferDocket';
118
- export type { ComparisonData, DialogComparisonProps, MultiComparisonData, } from './components/organisms/DialogComparison/DialogComparison';
121
+ export type { ComparisonData, DialogComparisonProps, MultiComparisonData } from './components/organisms/DialogComparison/DialogComparison';
119
122
  export type { DialogDeleteConfirmProps } from './components/organisms/DialogDeleteConfirm/DialogDeleteConfirm';
120
123
  export type { DialogQuoteRenameProps } from './components/organisms/DialogQuoteRename/DialogQuoteRename';
121
124
  export type { SelectedQuote } from './components/organisms/DialogSendingMail/DialogSendingMailMultiple/DialogSendingMailMultiple';
122
- export type { FilterType, QuoteHeaderProps, } from './components/organisms/QuoteHeader/QuoteHeader';
123
- export type { TimelineProps, TimelineServices, } from './components/organisms/Timeline/Timeline';
124
- export type { AccomodationDocket as AccomodationDocketType, ExcursionDocket as ExcursionDocketType, OtherServiceDocket as OtherServiceDocketType, ServiceDocket as ServiceDocketType, TransferDocket as TransferDocketType, } from './types/docket/services.types';
125
+ export type { FilterType, QuoteHeaderProps } from './components/organisms/QuoteHeader/QuoteHeader';
126
+ export type { TimelineProps, TimelineServices } from './components/organisms/Timeline/Timeline';
127
+ export type { AccomodationDocket as AccomodationDocketType, ExcursionDocket as ExcursionDocketType, OtherServiceDocket as OtherServiceDocketType, ServiceDocket as ServiceDocketType, TransferDocket as TransferDocketType } from './types/docket/services.types';
125
128
  export * from './types/table';
package/dist/index.js CHANGED
@@ -19,8 +19,9 @@ export { DocketPrices } from './components/molecules/DocketPrices/DocketPrices';
19
19
  export { PriceDisplay } from './components/molecules/PriceDisplay/PriceDisplay';
20
20
  export { TransferDocket } from './components/molecules/TransferDocket/TransferDocket';
21
21
  // Molecules - Composed components
22
- export { ActionDropdown, } from './components/molecules/ActionDropdown/ActionDropdown';
22
+ export { ActionDropdown } from './components/molecules/ActionDropdown/ActionDropdown';
23
23
  export { AddItemButton } from './components/molecules/AddItemButton/AddItemButton';
24
+ export { default as AgeSelector } from './components/molecules/AgeSelector/AgeSelector';
24
25
  export * from './components/molecules/BookingResume';
25
26
  export { Breadcrumbs } from './components/molecules/Breadcrumbs/Breadcrumbs';
26
27
  export { default as CalendarInput } from './components/molecules/Calendar/CalendarInput';
@@ -89,4 +90,5 @@ export { default as SettingsIcon } from './components/atoms/Icon/icons/Settings'
89
90
  export { default as UserIcon } from './components/atoms/Icon/icons/User';
90
91
  // Utils
91
92
  export { priceFormatter } from './lib/price-formatter';
93
+ export { CHILD_CATEGORY_AGES } from './components/organisms/PaxSelector/PaxSelector';
92
94
  export * from './types/table';
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ /* AgeSelector Component Styles */
6
+
7
+ .age-selector {
8
+ position: relative;
9
+ display: flex;
10
+ width: 5rem;
11
+ flex-direction: column;
12
+ gap: 0.5rem;
13
+ }
14
+
15
+ /* Label */
16
+
17
+ .age-selector__label {
18
+ font-size: 0.875rem;
19
+ line-height: 1.25rem;
20
+ font-weight: 400;
21
+ color: var(--dropdown-color-label-default,#262626);
22
+ }
23
+
24
+ .age-selector__required {
25
+ color: var(--chip-color-red-outline-foreground,#991b1b);
26
+ }
27
+
28
+ /* Container */
29
+
30
+ .age-selector__container {
31
+ position: relative;
32
+ width: 100%;
33
+ }
34
+
35
+ /* Input wrapper - matching Figma design */
36
+
37
+ .age-selector__input {
38
+ display: flex;
39
+ width: 100%;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ gap: 0.5rem;
43
+ border-radius: 0.75rem;
44
+ border-width: 1px;
45
+ --tw-border-opacity: 1;
46
+ border-color: rgb(38 38 38 / var(--tw-border-opacity, 1));
47
+ --tw-bg-opacity: 1;
48
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
49
+ padding-left: 1rem;
50
+ padding-right: 1rem;
51
+ padding-top: 0.75rem;
52
+ padding-bottom: 0.75rem;
53
+ transition-property: all;
54
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
55
+ transition-duration: 200ms;
56
+ cursor: default;
57
+ }
58
+
59
+ .age-selector__input:hover {
60
+ border-color: var(--dropdown-color-border-hover,#0f7173);
61
+ }
62
+
63
+ .age-selector__input--open {
64
+ border-color: var(--dropdown-color-border-hover,#0f7173);
65
+ }
66
+
67
+ .age-selector__input--default .age-selector__input-field::placeholder {
68
+ color: var(--dropdown-selector-color-filled-foreground-default,#737373);
69
+ }
70
+
71
+ /* Input field */
72
+
73
+ .age-selector__input-field {
74
+ flex: 1 1 0%;
75
+ border-style: none;
76
+ background-color: #ffffff00;
77
+ outline: 2px solid transparent;
78
+ outline-offset: 2px;
79
+ font-size: 0.875rem;
80
+ font-weight: 500;
81
+ line-height: 1.25rem;
82
+ color: var(--dropdown-color-foreground-value,#262626);
83
+ cursor: text;
84
+ min-width: 0;
85
+ }
86
+
87
+ .age-selector__input-field::placeholder {
88
+ color: var(--dropdown-selector-color-filled-foreground-default,#737373);
89
+ }
90
+
91
+ /* Dropdown button */
92
+
93
+ .age-selector__dropdown-btn {
94
+ display: flex;
95
+ flex-shrink: 0;
96
+ align-items: center;
97
+ justify-content: center;
98
+ cursor: pointer;
99
+ border-style: none;
100
+ background-color: #ffffff00;
101
+ margin: 0px;
102
+ padding: 0px;
103
+ transition-property: all;
104
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
105
+ transition-duration: 200ms;
106
+ }
107
+
108
+ .age-selector__dropdown-btn:hover {
109
+ opacity: 0.8;
110
+ }
111
+
112
+ /* Icon */
113
+
114
+ .age-selector__icon {
115
+ color: var(--color-text-default,#262626);
116
+ transition-property: transform;
117
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
118
+ transition-duration: 200ms;
119
+ }
120
+
121
+ .age-selector__icon--open {
122
+ --tw-rotate: 180deg;
123
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
124
+ }
125
+
126
+ /* Dropdown menu */
127
+
128
+ .age-selector__dropdown {
129
+ position: absolute;
130
+ top: 100%;
131
+ left: 0px;
132
+ right: 0px;
133
+ margin-top: 0.25rem;
134
+ border-radius: 0.75rem;
135
+ border-width: 1px;
136
+ border-color: var(--color-border-subtle,#e5e5e5);
137
+ --tw-bg-opacity: 1;
138
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
139
+ max-height: 12rem;
140
+ overflow-y: auto;
141
+ z-index: 50;
142
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
143
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
144
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
145
+ animation: age-selector-dropdown-enter 0.15s ease-out;
146
+ }
147
+
148
+ @keyframes age-selector-dropdown-enter {
149
+ from {
150
+ opacity: 0;
151
+ transform: translateY(-4px);
152
+ }
153
+ to {
154
+ opacity: 1;
155
+ transform: translateY(0);
156
+ }
157
+ }
158
+
159
+ /* Dropdown option */
160
+
161
+ .age-selector__option {
162
+ width: 100%;
163
+ padding-left: 0.75rem;
164
+ padding-right: 0.75rem;
165
+ padding-top: 0.5rem;
166
+ padding-bottom: 0.5rem;
167
+ font-size: 0.875rem;
168
+ font-weight: 500;
169
+ line-height: 1.25rem;
170
+ color: var(--color-text-default,#262626);
171
+ cursor: pointer;
172
+ --tw-bg-opacity: 1;
173
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
174
+ transition-property: all;
175
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
176
+ transition-duration: 150ms;
177
+ }
178
+
179
+ .age-selector__option:hover {
180
+ background-color: var(--dropdown-selector-color-select-item-background-hover,#115b5e);
181
+ --tw-text-opacity: 1;
182
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
183
+ }
184
+
185
+ .age-selector__option--selected {
186
+ background-color: var(--dropdown-selector-color-select-item-background-selected,#0f7173);
187
+ --tw-text-opacity: 1;
188
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
189
+ }
190
+
191
+ .age-selector__option--selected:hover {
192
+ background-color: var(--dropdown-selector-color-select-item-background-selected,#0f7173);
193
+ }
194
+
195
+ /* Scrollbar styling */
196
+
197
+ .age-selector__dropdown::-webkit-scrollbar {
198
+ width: 0.375rem;
199
+ }
200
+
201
+ .age-selector__dropdown::-webkit-scrollbar-track {
202
+ border-radius: 0.25rem;
203
+ --tw-bg-opacity: 1;
204
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
205
+ }
206
+
207
+ .age-selector__dropdown::-webkit-scrollbar-thumb {
208
+ border-radius: 0.25rem;
209
+ --tw-bg-opacity: 1;
210
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));
211
+ }
212
+
213
+ .age-selector__dropdown::-webkit-scrollbar-thumb:hover {
214
+ --tw-bg-opacity: 1;
215
+ background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));
216
+ }