mautourco-components 0.1.2 → 0.2.0

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 (132) hide show
  1. package/dist/components/atoms/Checkbox/Checkbox.js +7 -1
  2. package/dist/components/atoms/Icon/Icon.d.ts +1 -1
  3. package/dist/components/atoms/Icon/Icon.js +22 -1
  4. package/dist/components/atoms/Icon/icons/BuildingIcon.d.ts +8 -0
  5. package/dist/components/atoms/Icon/icons/BuildingIcon.js +36 -0
  6. package/dist/components/atoms/Icon/icons/CalendarOutlineIcon.d.ts +8 -0
  7. package/dist/components/atoms/Icon/icons/CalendarOutlineIcon.js +36 -0
  8. package/dist/components/atoms/Icon/icons/HomeIcon.d.ts +8 -0
  9. package/dist/components/atoms/Icon/icons/HomeIcon.js +25 -0
  10. package/dist/components/atoms/Icon/icons/MinusIcon.d.ts +8 -0
  11. package/dist/components/atoms/Icon/icons/MinusIcon.js +25 -0
  12. package/dist/components/atoms/Icon/icons/PlaneIcon.d.ts +8 -0
  13. package/dist/components/atoms/Icon/icons/PlaneIcon.js +36 -0
  14. package/dist/components/atoms/Icon/icons/PlusIcon.d.ts +8 -0
  15. package/dist/components/atoms/Icon/icons/PlusIcon.js +25 -0
  16. package/dist/components/atoms/Icon/icons/ShipIcon.d.ts +8 -0
  17. package/dist/components/atoms/Icon/icons/ShipIcon.js +36 -0
  18. package/dist/components/atoms/Illustration/Illustration.d.ts +14 -0
  19. package/dist/components/atoms/Illustration/Illustration.js +33 -0
  20. package/dist/components/atoms/Illustration/illustrations.d.ts +51 -0
  21. package/dist/components/atoms/Illustration/illustrations.js +97 -0
  22. package/dist/components/atoms/RatingStar/RatingStar.d.ts +40 -0
  23. package/dist/components/atoms/RatingStar/RatingStar.js +54 -0
  24. package/dist/components/atoms/SegmentedButton/SegmentedButton.d.ts +27 -0
  25. package/dist/components/atoms/SegmentedButton/SegmentedButton.js +49 -0
  26. package/dist/components/atoms/Slider/Slider.d.ts +52 -0
  27. package/dist/components/atoms/Slider/Slider.js +30 -0
  28. package/dist/components/molecules/Calendar/CalendarInput.d.ts +34 -0
  29. package/dist/components/molecules/Calendar/CalendarInput.js +49 -0
  30. package/dist/components/molecules/Calendar/DateTime.d.ts +25 -0
  31. package/dist/components/molecules/Calendar/DateTime.js +106 -0
  32. package/dist/components/molecules/Calendar/TimePicker.d.ts +16 -0
  33. package/dist/components/molecules/Calendar/TimePicker.js +91 -0
  34. package/dist/components/molecules/LocationDropdown/LocationDropdown.d.ts +34 -0
  35. package/dist/components/molecules/LocationDropdown/LocationDropdown.js +120 -0
  36. package/dist/components/molecules/LocationDropdown/index.d.ts +2 -0
  37. package/dist/components/molecules/LocationDropdown/index.js +1 -0
  38. package/dist/components/molecules/RatingTab/RatingTab.d.ts +39 -0
  39. package/dist/components/molecules/RatingTab/RatingTab.js +41 -0
  40. package/dist/components/molecules/TabGroup/TabGroup.d.ts +17 -0
  41. package/dist/components/molecules/TabGroup/TabGroup.js +30 -0
  42. package/dist/components/organisms/CardContainer/CardContainer.d.ts +37 -0
  43. package/dist/components/organisms/CardContainer/CardContainer.js +27 -0
  44. package/dist/components/organisms/DateTimePicker/DateTimePicker.d.ts +15 -0
  45. package/dist/components/organisms/DateTimePicker/DateTimePicker.js +66 -0
  46. package/dist/components/organisms/Dialog/Dialog.d.ts +103 -0
  47. package/dist/components/organisms/Dialog/Dialog.js +162 -0
  48. package/dist/components/organisms/PaxSelector/PaxSelector.d.ts +63 -0
  49. package/dist/components/organisms/PaxSelector/PaxSelector.js +402 -0
  50. package/dist/components/organisms/RoundTrip/RoundTrip.d.ts +54 -0
  51. package/dist/components/organisms/RoundTrip/RoundTrip.js +179 -0
  52. package/dist/components/organisms/RoundTrip/index.d.ts +2 -0
  53. package/dist/components/organisms/RoundTrip/index.js +1 -0
  54. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.d.ts +35 -0
  55. package/dist/components/organisms/SearchBarTransfer/SearchBarTransfer.js +192 -0
  56. package/dist/components/organisms/SearchBarTransfer/index.d.ts +2 -0
  57. package/dist/components/organisms/SearchBarTransfer/index.js +1 -0
  58. package/dist/components/organisms/TransferLine/TransferLine.d.ts +53 -0
  59. package/dist/components/organisms/TransferLine/TransferLine.js +179 -0
  60. package/dist/components/ui/button.d.ts +10 -0
  61. package/dist/components/ui/button.js +56 -0
  62. package/dist/components/ui/calendar.d.ts +8 -0
  63. package/dist/components/ui/calendar.js +87 -0
  64. package/dist/components/ui/popover.d.ts +7 -0
  65. package/dist/components/ui/popover.js +42 -0
  66. package/dist/index.d.ts +26 -0
  67. package/dist/index.js +18 -0
  68. package/dist/lib/utils.d.ts +7 -0
  69. package/dist/lib/utils.js +13 -0
  70. package/package.json +21 -12
  71. package/src/components/atoms/Button/Button.css +34 -34
  72. package/src/components/atoms/Checkbox/Checkbox.tsx +83 -69
  73. package/src/components/atoms/Icon/Icon.tsx +30 -2
  74. package/src/components/atoms/Icon/icons/BuildingIcon.tsx +50 -0
  75. package/src/components/atoms/Icon/icons/CalendarOutlineIcon.tsx +50 -0
  76. package/src/components/atoms/Icon/icons/HomeIcon.tsx +52 -0
  77. package/src/components/atoms/Icon/icons/MinusIcon.tsx +45 -0
  78. package/src/components/atoms/Icon/icons/PlaneIcon.tsx +50 -0
  79. package/src/components/atoms/Icon/icons/PlusIcon.tsx +45 -0
  80. package/src/components/atoms/Icon/icons/ShipIcon.tsx +50 -0
  81. package/src/components/atoms/Illustration/Illustration.tsx +28 -0
  82. package/src/components/atoms/Illustration/illustrations.ts +116 -0
  83. package/src/components/atoms/RatingStar/RatingStar.tsx +114 -0
  84. package/src/components/atoms/SegmentedButton/SegmentedButton.tsx +94 -0
  85. package/src/components/atoms/Slider/Slider.tsx +95 -0
  86. package/src/components/molecules/Calendar/CalendarInput.tsx +135 -0
  87. package/src/components/molecules/Calendar/DateTime.tsx +172 -0
  88. package/src/components/molecules/Calendar/TimePicker.tsx +174 -0
  89. package/src/components/molecules/LocationDropdown/LocationDropdown.tsx +234 -0
  90. package/src/components/molecules/LocationDropdown/index.ts +2 -0
  91. package/src/components/molecules/RatingTab/RatingTab.tsx +96 -0
  92. package/src/components/molecules/TabGroup/TabGroup.tsx +60 -0
  93. package/src/components/molecules/UserCard/UserCard.stories.tsx +2 -2
  94. package/src/components/organisms/CardContainer/CardContainer.tsx +66 -0
  95. package/src/components/organisms/DateTimePicker/DateTimePicker.tsx +110 -0
  96. package/src/components/organisms/Dialog/Dialog.tsx +352 -0
  97. package/src/components/organisms/PaxSelector/PaxSelector.tsx +979 -0
  98. package/src/components/organisms/RoundTrip/RoundTrip.tsx +335 -0
  99. package/src/components/organisms/RoundTrip/index.ts +2 -0
  100. package/src/components/organisms/SearchBarTransfer/SearchBarTransfer.tsx +388 -0
  101. package/src/components/organisms/SearchBarTransfer/index.ts +2 -0
  102. package/src/components/organisms/TransferLine/TransferLine.tsx +369 -0
  103. package/src/components/ui/button.tsx +60 -0
  104. package/src/components/ui/calendar.tsx +246 -0
  105. package/src/components/ui/popover.tsx +46 -0
  106. package/src/styles/components/calendar.css +86 -0
  107. package/src/styles/components/checkbox.css +130 -132
  108. package/src/styles/components/dropdown.css +40 -40
  109. package/src/styles/components/forms.css +51 -51
  110. package/src/styles/components/illustration.css +7 -0
  111. package/src/styles/components/molecule/calendarInput.css +157 -0
  112. package/src/styles/components/molecule/dateTime.css +14 -0
  113. package/src/styles/components/molecule/location-dropdown.css +204 -0
  114. package/src/styles/components/molecule/timePicker.css +79 -0
  115. package/src/styles/components/multiselect-dropdown.css +230 -231
  116. package/src/styles/components/organism/card-container.css +49 -0
  117. package/src/styles/components/organism/dialog.css +241 -0
  118. package/src/styles/components/organism/pax-selector.css +702 -0
  119. package/src/styles/components/organism/round-trip.css +55 -0
  120. package/src/styles/components/organism/search-bar-transfer.css +128 -0
  121. package/src/styles/components/organism/transfer-line.css +86 -0
  122. package/src/styles/components/rating-star.css +39 -0
  123. package/src/styles/components/rating-tab.css +83 -0
  124. package/src/styles/components/segmented-button.css +134 -0
  125. package/src/styles/components/selected-value.css +16 -16
  126. package/src/styles/components/slider.css +86 -0
  127. package/src/styles/components/typography.css +36 -36
  128. package/src/styles/tokens/tokens.css +1093 -1093
  129. package/dist/components/atoms/Typography/Heading/Heading.d.ts +0 -9
  130. package/dist/components/atoms/Typography/Heading/Heading.js +0 -25
  131. package/dist/components/atoms/Typography/Text/Text.d.ts +0 -10
  132. package/dist/components/atoms/Typography/Text/Text.js +0 -77
@@ -1,13 +1,13 @@
1
1
  /* Styles Input centralisés: consomment uniquement des variables CSS issues de Style Dictionary */
2
2
 
3
3
  .input-field {
4
- font-family: var(--typography-font-family-sans);
5
- font-size: var(--input-font-size-default);
6
- line-height: var(--input-line-height-default);
7
- border-radius: var(--input-border-radius-default);
8
- border-width: var(--input-border-width-default);
4
+ font-family: var(--typography-font-family-sans, Inter,system-ui,sans-serif);
5
+ font-size: var(--input-font-size-default, 1rem);
6
+ line-height: var(--input-line-height-default, 1.5rem);
7
+ border-radius: 0.375rem;
8
+ border-width: 1px;
9
9
  border-style: solid;
10
- padding: var(--input-padding-vertical) var(--input-padding-horizontal);
10
+ padding: var(--input-padding-vertical, 0.5rem) var(--input-padding-horizontal, 0.75rem);
11
11
  width: 100%;
12
12
  box-sizing: border-box;
13
13
  transition: all 0.2s ease-in-out;
@@ -24,119 +24,119 @@
24
24
  position: absolute;
25
25
  top: 50%;
26
26
  transform: translateY(-50%);
27
- color: var(--input-state-default-placeholder-color);
28
- width: var(--input-search-iconSize, 16px);
29
- height: var(--input-search-iconSize, 16px);
27
+ color: var(--color-slate-400);
28
+ width: var(--input-search-iconSize, 1rem);
29
+ height: var(--input-search-iconSize, 1rem);
30
30
  }
31
31
 
32
- .input-icon--leading { left: var(--input-padding-horizontal); }
33
- .input-icon--trailing { right: var(--input-padding-horizontal); }
32
+ .input-icon--leading { left: var(--input-padding-horizontal, 0.75rem); }
33
+ .input-icon--trailing { right: var(--input-padding-horizontal, 0.75rem); }
34
34
 
35
35
  .input-field--with-icon.input-field--icon-leading {
36
- padding-left: calc(var(--input-padding-horizontal) + var(--input-search-iconSize, 16px) + 8px);
36
+ padding-left: calc(var(--input-padding-horizontal, 0.75rem) + var(--input-search-iconSize, 1rem) + 0.5rem);
37
37
  }
38
38
 
39
39
  .input-field--with-icon.input-field--icon-trailing {
40
- padding-right: calc(var(--input-padding-horizontal) + var(--input-search-iconSize, 16px) + 8px);
40
+ padding-right: calc(var(--input-padding-horizontal, 0.75rem) + var(--input-search-iconSize, 1rem) + 0.5rem);
41
41
  }
42
42
 
43
43
  .input-field:focus {
44
- border-color: var(--input-state-focus-border-color);
44
+ border-color: var(--color-atoll-green-800);
45
45
  }
46
46
 
47
47
  /* État par défaut */
48
48
  .input-field--default {
49
- background-color: var(--input-state-default-background-color);
50
- border-color: var(--input-state-default-border-color);
51
- color: var(--input-state-default-text-color);
49
+ background-color: var(--color-white);
50
+ border-color: var(--color-slate-300);
51
+ color: var(--color-slate-900);
52
52
  }
53
53
 
54
54
  .input-field--default::placeholder {
55
- color: var(--input-state-default-placeholder-color);
55
+ color: var(--color-slate-400);
56
56
  }
57
57
 
58
58
  /* État focus */
59
59
  .input-field--focus {
60
- background-color: var(--input-state-focus-background-color);
61
- border-color: var(--input-state-focus-border-color);
62
- color: var(--input-state-focus-text-color);
60
+ background-color: var(--color-white);
61
+ border-color: var(--color-atoll-green-800);
62
+ color: var(--color-slate-900);
63
63
  }
64
64
 
65
65
  .input-field--focus::placeholder {
66
- color: var(--input-state-focus-placeholder-color);
66
+ color: var(--color-slate-400);
67
67
  }
68
68
 
69
69
  /* État success */
70
70
  .input-field--success {
71
- background-color: var(--input-state-success-background-color);
72
- border-color: var(--input-state-success-border-color);
73
- color: var(--input-state-success-text-color);
71
+ background-color: var(--color-green-50);
72
+ border-color: var(--color-green-500);
73
+ color: var(--color-green-700);
74
74
  }
75
75
 
76
76
  .input-field--success::placeholder {
77
- color: var(--input-state-success-placeholder-color);
77
+ color: var(--color-green-400);
78
78
  }
79
79
 
80
80
  /* État error */
81
81
  .input-field--error {
82
- background-color: var(--input-state-error-background-color);
83
- border-color: var(--input-state-error-border-color);
84
- color: var(--input-state-error-text-color);
82
+ background-color: var(--color-red-50);
83
+ border-color: var(--color-red-500);
84
+ color: var(--color-red-700);
85
85
  }
86
86
 
87
87
  .input-field--error::placeholder {
88
- color: var(--input-state-error-placeholder-color);
88
+ color: var(--color-red-400);
89
89
  }
90
90
 
91
91
  /* État disabled */
92
92
  .input-field--disabled {
93
- background-color: var(--input-state-disabled-background-color);
94
- border-color: var(--input-state-disabled-border-color);
95
- color: var(--input-state-disabled-text-color);
93
+ background-color: var(--color-slate-100);
94
+ border-color: var(--color-slate-200);
95
+ color: var(--color-slate-400);
96
96
  cursor: not-allowed;
97
97
  }
98
98
 
99
99
  .input-field--disabled::placeholder {
100
- color: var(--input-state-disabled-placeholder-color);
100
+ color: var(--color-slate-300);
101
101
  }
102
102
 
103
103
  /* Styles pour le showcase */
104
104
  .input-showcase {
105
- background-color: var(--color-neutral-50);
106
- padding: var(--spacing-xl);
107
- border-radius: var(--spacing-sm);
108
- border-left: 4px dotted var(--color-primary-500);
109
- margin: var(--spacing-lg) 0;
105
+ background-color: var(--color-slate-50);
106
+ padding: var(--spacing-xl, 2rem);
107
+ border-radius: var(--spacing-sm, 0.5rem);
108
+ border-left: 4px dotted var(--color-atoll-green-800);
109
+ margin: var(--spacing-lg, 1.5rem) 0;
110
110
  }
111
111
 
112
112
  .input-showcase h1 {
113
- font-family: var(--typography-font-family-sans);
114
- font-size: var(--typography-font-size-2xl);
115
- font-weight: var(--typography-font-weight-bold);
116
- color: var(--color-neutral-900);
117
- margin: 0 0 var(--spacing-lg) 0;
113
+ font-family: var(--typography-font-family-sans, Inter,system-ui,sans-serif);
114
+ font-size: var(--typography-font-size-2xl, 1.5re);
115
+ font-weight: var(--font-weight-font-bold);
116
+ color: var(--color-slate-900);
117
+ margin: 0 0 var(--spacing-lg, 1.5rem) 0;
118
118
  }
119
119
 
120
120
  .input-showcase h2 {
121
- font-family: var(--typography-font-family-sans);
122
- font-size: var(--typography-font-size-lg);
123
- font-weight: var(--typography-font-weight-medium);
124
- color: var(--color-neutral-700);
121
+ font-family: var(--typography-font-family-sans, Inter,system-ui,sans-serif);
122
+ font-size: var(--typography-font-size-lg, 1.125rem);
123
+ font-weight: var(--font-weight-font-medium);
124
+ color: var(--color-slate-700);
125
125
  text-transform: uppercase;
126
126
  letter-spacing: 0.05em;
127
- margin: 0 0 var(--spacing-md) 0;
127
+ margin: 0 0 var(--spacing-md, 1rem) 0;
128
128
  }
129
129
 
130
130
  .input-variants {
131
131
  display: grid;
132
132
  grid-template-columns: 1fr 1fr 1fr;
133
- gap: var(--spacing-xl);
133
+ gap: var(--spacing-xl, 2rem);
134
134
  }
135
135
 
136
136
  .input-variant-section {
137
137
  display: flex;
138
138
  flex-direction: column;
139
- gap: var(--spacing-md);
139
+ gap: var(--spacing-md, 1rem);
140
140
  }
141
141
 
142
142
  .input-example {
@@ -0,0 +1,7 @@
1
+ .illustration {
2
+ display: block;
3
+ max-width: 100%;
4
+ height: auto;
5
+ }
6
+
7
+
@@ -0,0 +1,157 @@
1
+ .calendar-input {
2
+ @apply w-full h-11 overflow-hidden p-0 bg-white border border-[var(--color-tuna-500)] flex items-center gap-2 rounded-xl;
3
+ min-width: 0;
4
+ }
5
+
6
+ /* Set minimum width only on larger screens where there's space */
7
+ @media (min-width: 768px) {
8
+ .calendar-input {
9
+ min-width: 190px;
10
+ }
11
+ }
12
+
13
+ .calendar-input__input-wrapper {
14
+ @apply flex items-center flex-1 h-full min-w-0 p-3;
15
+ }
16
+
17
+ /* Remove left padding when icon is on the right */
18
+ .calendar-input--icon-right .calendar-input__input-wrapper {
19
+ @apply pl-4;
20
+ }
21
+
22
+ /* Remove right padding when icon is on the left */
23
+ .calendar-input--icon-left .calendar-input__input-wrapper {
24
+ @apply pr-4 pl-0;
25
+ }
26
+
27
+ .calendar-input__icon-button.calendar-input__icon-button--left {
28
+ @apply justify-end w-fit pl-4;
29
+ }
30
+
31
+ .calendar-input__field {
32
+ @apply flex-1 bg-transparent border-none outline-none w-full text-[var(--color-neutral-800)] text-sm leading-5;
33
+ }
34
+
35
+ .calendar-input__field:disabled {
36
+ @apply cursor-not-allowed text-[var(--color-neutral-400)];
37
+ }
38
+
39
+ .calendar-input__icon-button {
40
+ @apply flex items-center justify-center w-10 h-full opacity-100 cursor-pointer;
41
+ }
42
+
43
+ .calendar-input__icon-button--right {
44
+ @apply rounded-r-md;
45
+ }
46
+
47
+ .calendar-input__icon-button--left {
48
+ @apply rounded-l-md;
49
+ }
50
+
51
+ .calendar-input__icon-button--full-bg {
52
+ @apply text-white bg-[var(--color-text-accent)];
53
+ }
54
+
55
+ .calendar-input__chevron {
56
+ @apply flex items-center justify-center w-5 h-5 shrink-0 text-[var(--color-neutral-800)];
57
+ transition: transform 0.2s ease;
58
+ }
59
+
60
+ .calendar-input__chevron--open {
61
+ transform: rotate(180deg);
62
+ }
63
+
64
+ /* Ensure label and icon remain visible when wrapper is set to active via data-state */
65
+ .calendar-input-wrapper[data-state="active"] .calendar-input__label,
66
+ .calendar-input-wrapper[data-state="active"] .calendar-input__icon-button {
67
+ @apply visible opacity-100;
68
+ }
69
+
70
+ /* Defensive: ensure label stays visible and above other elements */
71
+ .calendar-input-wrapper .calendar-input__label {
72
+ @apply block z-[2];
73
+ }
74
+
75
+ /* STATE VARIANTS */
76
+
77
+ /* Default state */
78
+ .calendar-input--default {
79
+ @apply border-[var(--color-tuna-500)];
80
+ }
81
+
82
+ .calendar-input--default .calendar-input__icon-button--full-bg {
83
+ @apply bg-[var(--color-atoll-green-800)]
84
+ }
85
+
86
+ /* Active state (focused) */
87
+ .calendar-input--active {
88
+ @apply border-[var(--color-neutral-800)]
89
+ }
90
+
91
+ /* Typing state */
92
+ .calendar-input--typing {
93
+ @apply border-[var(--color-neutral-800)]
94
+ }
95
+
96
+ /* Success state */
97
+ .calendar-input--success {
98
+ @apply bg-[var(--color-green-50)] border-[var(--color-green-700)];
99
+ }
100
+
101
+ .calendar-input--success .calendar-input__field {
102
+ @apply text-[var(--color-green-700)]
103
+ }
104
+
105
+ .calendar-input--success .calendar-input__icon-button--full-bg {
106
+ @apply bg-[var(--color-green-700)] !text-white;
107
+ }
108
+
109
+ .calendar-input--success .calendar-input__icon-button {
110
+ @apply bg-none text-[var(--color-green-700)];
111
+ }
112
+
113
+ /* Error state */
114
+ .calendar-input--error {
115
+ @apply border-[var(--color-coral-red-600)] bg-[var(--color-coral-red-200)];
116
+ }
117
+
118
+ .calendar-input--error .calendar-input__field {
119
+ @apply text-[var(--color-coral-red-600)];
120
+ }
121
+
122
+ .calendar-input--error .calendar-input__icon-button {
123
+ @apply !bg-none !text-[var(--color-coral-red-600)];
124
+ }
125
+
126
+ .calendar-input--error .calendar-input__icon-button--full-bg {
127
+ @apply bg-[var(--color-coral-red-600)] !text-white;
128
+ }
129
+
130
+ /* Disabled state */
131
+ .calendar-input--disabled {
132
+ @apply border-[var(--color-neutral-400)] bg-[var(--color-surface-50)]
133
+ }
134
+
135
+ .calendar-input--disabled .calendar-input__field {
136
+ @apply cursor-not-allowed text-[var(--color-tuna-400)];
137
+ }
138
+
139
+ .calendar-input--disabled .calendar-input__icon-button {
140
+ @apply !bg-none !text-[var(--color-tuna-400)]
141
+ }
142
+
143
+ .calendar-input--disabled .calendar-input__icon-button--full-bg {
144
+ @apply !bg-[var(--color-gray-200)] !text-[var(--color-tuna-400)]
145
+ }
146
+
147
+ /* Responsive design */
148
+ @media (max-width: 640px) {
149
+ .calendar-input__icon-button {
150
+ @apply max-w-sm p-2;
151
+ }
152
+
153
+ .calendar-input__input-wrapper {
154
+ @apply px-3 py-2;
155
+ }
156
+
157
+ }
@@ -0,0 +1,14 @@
1
+ .ds-datetime {
2
+ display: flex;
3
+ gap: 16px;
4
+ align-items: flex-start;
5
+ }
6
+
7
+ .ds-datetime__calendar { flex: 0 0 320px; }
8
+ .ds-datetime__time { width: 160px; }
9
+ .ds-datetime__label { display:block; font-size: 12px; margin-bottom: 8px; }
10
+
11
+ @media (max-width: 640px) {
12
+ .ds-datetime { flex-direction: column; }
13
+ .ds-datetime__calendar, .ds-datetime__time { width: 100%; }
14
+ }
@@ -0,0 +1,204 @@
1
+ /* Location Dropdown Component Styles */
2
+
3
+ .location-dropdown {
4
+ @apply relative w-full flex flex-col gap-2;
5
+ }
6
+
7
+ /* Label */
8
+ .location-dropdown__label {
9
+ @apply text-[var(--color-neutral-800)] text-sm;
10
+ }
11
+
12
+ .location-dropdown__label p {
13
+ @apply leading-normal;
14
+ }
15
+
16
+ /* Input / Trigger */
17
+ .location-dropdown__input {
18
+ @apply w-full h-11 px-3 py-2.5 bg-white border border-[var(--color-tuna-500)] rounded-xl flex items-center justify-between gap-2 cursor-pointer transition-all duration-200;
19
+ }
20
+
21
+ .location-dropdown__input:hover {
22
+ @apply border-[var(--color-neutral-800)];
23
+ }
24
+
25
+ .location-dropdown__input-content {
26
+ @apply flex items-center gap-2 flex-1 min-w-0;
27
+ }
28
+
29
+ .location-dropdown__input-icon {
30
+ @apply text-[var(--color-neutral-800)] flex-shrink-0;
31
+ }
32
+
33
+ .location-dropdown__input-icon--placeholder {
34
+ @apply text-[var(--color-neutral-400)];
35
+ }
36
+
37
+ .location-dropdown__input-text {
38
+ @apply text-sm leading-5 text-[var(--color-neutral-800)] font-medium truncate;
39
+ }
40
+
41
+ .location-dropdown__input-text--placeholder {
42
+ @apply text-[var(--color-neutral-400)] font-normal;
43
+ }
44
+
45
+ .location-dropdown__input-chevron {
46
+ @apply text-[var(--color-neutral-800)] flex-shrink-0 transition-transform duration-200;
47
+ }
48
+
49
+ /* Input States */
50
+ .location-dropdown__input--default {
51
+ @apply border-[var(--color-tuna-500)];
52
+ }
53
+
54
+ .location-dropdown__input--open {
55
+ @apply border-[var(--color-neutral-800)] shadow-sm;
56
+ }
57
+
58
+ .location-dropdown__input--open .location-dropdown__input-chevron {
59
+ @apply !transform !rotate-180;
60
+ }
61
+
62
+ .location-dropdown__input--selected {
63
+ @apply border-[var(--color-tuna-500)];
64
+ }
65
+
66
+ .location-dropdown__input--error {
67
+ @apply border-[var(--color-coral-red-600)] bg-[var(--color-coral-red-50)];
68
+ }
69
+
70
+ .location-dropdown__input--error .location-dropdown__input-text {
71
+ @apply text-[var(--color-coral-red-600)];
72
+ }
73
+
74
+ .location-dropdown__input--error .location-dropdown__input-icon,
75
+ .location-dropdown__input--error .location-dropdown__input-chevron {
76
+ @apply text-[var(--color-coral-red-600)];
77
+ }
78
+
79
+ .location-dropdown__input--disabled {
80
+ @apply bg-[var(--color-surface-50)] border-[var(--color-neutral-400)] cursor-not-allowed opacity-60;
81
+ }
82
+
83
+ .location-dropdown__input--disabled .location-dropdown__input-text,
84
+ .location-dropdown__input--disabled .location-dropdown__input-icon,
85
+ .location-dropdown__input--disabled .location-dropdown__input-chevron {
86
+ @apply text-[var(--color-neutral-400)];
87
+ }
88
+
89
+ /* Dropdown Panel */
90
+ .location-dropdown__panel {
91
+ @apply absolute top-full left-0 right-0 mt-2 bg-white rounded-xl overflow-hidden z-50 w-[17.5rem] border border-[var(--color-neutral-200)];
92
+ }
93
+
94
+ .location-dropdown__content {
95
+ @apply overflow-y-auto overflow-x-hidden;
96
+ scrollbar-width: thin;
97
+ scrollbar-color: #9ca3af #f3f4f6;
98
+ }
99
+
100
+ .location-dropdown__content::-webkit-scrollbar {
101
+ @apply w-1.5;
102
+ }
103
+
104
+ .location-dropdown__content::-webkit-scrollbar-track {
105
+ @apply bg-[#f3f4f6] rounded;
106
+ }
107
+
108
+ .location-dropdown__content::-webkit-scrollbar-thumb {
109
+ @apply bg-[#9ca3af] rounded;
110
+ }
111
+
112
+ .location-dropdown__options-wrapper {
113
+ @apply flex flex-col gap-3 p-4;
114
+ }
115
+
116
+ /* Group */
117
+ .location-dropdown__group {
118
+ @apply flex flex-col;
119
+ }
120
+
121
+ .location-dropdown__group-header {
122
+ @apply px-2 py-2 text-xs font-bold text-[var(--color-neutral-800)] uppercase tracking-wide;
123
+ }
124
+
125
+ .location-dropdown__divider {
126
+ @apply w-full h-px bg-[var(--color-neutral-200)] my-2;
127
+ }
128
+
129
+ .location-dropdown__group-options {
130
+ @apply flex flex-col gap-3;
131
+ }
132
+
133
+ /* Option Item */
134
+ .location-dropdown__option {
135
+ @apply flex items-center gap-2 px-2 py-2 cursor-pointer transition-all duration-150 rounded-lg;
136
+ }
137
+
138
+ .location-dropdown__option:hover {
139
+ @apply bg-[var(--color-surface-50)];
140
+ }
141
+
142
+ .location-dropdown__option--selected {
143
+ @apply bg-[#f0fdfb] border-[0.5px] border-solid border-[#15b7b6];
144
+ }
145
+
146
+ .location-dropdown__option--selected:hover {
147
+ @apply bg-[#e6fcf9];
148
+ }
149
+
150
+ .location-dropdown__option--disabled {
151
+ @apply opacity-50 cursor-not-allowed;
152
+ }
153
+
154
+ .location-dropdown__option--disabled:hover {
155
+ @apply bg-transparent;
156
+ }
157
+
158
+ .location-dropdown__option-icon {
159
+ @apply text-[var(--color-neutral-800)] flex-shrink-0;
160
+ }
161
+
162
+ .location-dropdown__option--selected .location-dropdown__option-icon {
163
+ @apply text-[var(--color-atoll-green-800)];
164
+ }
165
+
166
+ .location-dropdown__option-text {
167
+ @apply text-sm leading-5 text-[var(--color-neutral-800)] font-medium flex-1 min-w-0;
168
+ }
169
+
170
+ .location-dropdown__option--selected .location-dropdown__option-text {
171
+ @apply text-[var(--color-atoll-green-800)] font-semibold;
172
+ }
173
+
174
+ /* Type-specific adjustments */
175
+ .location-dropdown--airport-port .location-dropdown__content {
176
+ @apply max-h-[auto];
177
+ }
178
+
179
+ .location-dropdown--accommodation .location-dropdown__content {
180
+ @apply max-h-[240px];
181
+ }
182
+
183
+ .location-dropdown--pickup-dropoff .location-dropdown__content {
184
+ @apply max-h-[240px];
185
+ }
186
+
187
+ /* Responsive design */
188
+ @media (max-width: 640px) {
189
+ .location-dropdown__input {
190
+ @apply px-2.5 py-2;
191
+ }
192
+
193
+ .location-dropdown__input-text {
194
+ @apply text-xs;
195
+ }
196
+
197
+ .location-dropdown__option {
198
+ @apply px-2 py-1.5;
199
+ }
200
+
201
+ .location-dropdown__option-text {
202
+ @apply text-xs;
203
+ }
204
+ }
@@ -0,0 +1,79 @@
1
+ .time-picker-wrapper {
2
+ @apply flex flex-col gap-2 w-fit;
3
+ }
4
+
5
+ .time-picker__label {
6
+ @apply m-0 font-sans text-sm font-medium leading-5 text-[var(--input-color-label-default)];
7
+ }
8
+
9
+ .time-picker {
10
+ @apply flex items-center gap-3 p-0 h-11;
11
+ }
12
+
13
+ .time-picker__input {
14
+ @apply w-[2.8125rem] h-[2.8125rem] px-3 rounded-xl bg-white border border-[var(--color-tuna-500)]
15
+ }
16
+
17
+ .time-picker__input:focus-visible,
18
+ .time-picker__input:active {
19
+ @apply shadow-none outline-none;
20
+ }
21
+
22
+ .time-picker__colon {
23
+ @apply font-sans text-sm leading-5
24
+ text-[var(--input-color-foreground-default)];
25
+ }
26
+
27
+ .time-picker__am-pm {
28
+ @apply flex items-center overflow-hidden rounded-md h-11 shrink-0;
29
+ }
30
+
31
+ .time-picker__seg {
32
+ @apply border border-[var(--segmented-button-color-border-default)]
33
+ bg-[var(--segmented-button-color-background-default)]
34
+ py-2 px-3 min-w-[3.82rem]
35
+ h-full flex items-center justify-center
36
+ cursor-pointer
37
+ text-[var(--color-tuna-700)] font-bold text-sm;
38
+ }
39
+
40
+ .time-picker__seg--left {
41
+ @apply border-r-0 rounded-l-md;
42
+ }
43
+
44
+ .time-picker__seg--right {
45
+ @apply border-l-0 rounded-r-md;
46
+ }
47
+
48
+ .time-picker__seg--selected {
49
+ @apply bg-[var(--segmented-button-color-background-selected)]
50
+ border-[var(--segmented-button-color-border-selected)]
51
+ text-[var(--segmented-button-color-foreground-selected)];
52
+ }
53
+
54
+ .time-picker--default .time-picker__unit {
55
+ @apply bg-[var(--input-color-background-default)]
56
+ border-[var(--input-color-border-default)];
57
+ }
58
+
59
+ .time-picker--active .time-picker__unit,
60
+ .time-picker--typing .time-picker__unit {
61
+ @apply border-2 border-[var(--input-color-border-active)];
62
+ }
63
+
64
+ .time-picker--success .time-picker__unit {
65
+ @apply bg-[var(--color-success-50)]
66
+ border-[var(--color-success-500)];
67
+ }
68
+
69
+ .time-picker--error .time-picker__unit {
70
+ @apply bg-[var(--color-error-50)]
71
+ border-[var(--color-error-500)];
72
+ }
73
+
74
+ .time-picker--disabled .time-picker__unit,
75
+ .time-picker--disabled .time-picker__seg {
76
+ @apply bg-[var(--input-color-background-disabled)]
77
+ border-[var(--input-color-border-disabled)]
78
+ cursor-not-allowed opacity-60;
79
+ }