kahuna-base-react-components 1.3.2 → 1.3.3

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kahuna-base-react-components",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "Kahuna Base React Components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -1,4 +1,4 @@
1
- import React, { CSSProperties, useEffect, useRef, useState } from "react"
1
+ import React, { useEffect, useState } from "react"
2
2
  import Calendar from "react-calendar"
3
3
  import "./KSelectRangeDateCustom.css"
4
4
  //@ts-ignore
@@ -118,28 +118,46 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
118
118
  }
119
119
 
120
120
  const tileClassName = ({ date, view }: { date: Date; view: string }) => {
121
- if (view === "year") {
121
+ if (view === "month") {
122
+
123
+ if (Array.isArray(range) && range[0] && !range[1] && hoveredDate &&
124
+ ((date.getTime() > hoveredDate.getTime() && date.getTime() < range[0].getTime()) ||
125
+ date.getTime() < hoveredDate.getTime() && date.getTime() > range[0].getTime()) ) {
126
+
127
+ return "hovered-range-day"
128
+ }
129
+
122
130
  // Apply active class for current month
123
131
  if (!(Array.isArray(range) && range[0] && range[1])) return
124
132
 
125
133
  if (
126
134
  range[0]?.getFullYear() === date.getFullYear() &&
127
135
  range[0]?.getMonth() === date.getMonth() &&
136
+ range[0]?.getDate() === date.getDate() &&
128
137
  range[1]?.getFullYear() === date.getFullYear() &&
129
- range[1]?.getMonth() === date.getMonth()
138
+ range[1]?.getMonth() === date.getMonth() &&
139
+ range[1]?.getDate() === date.getDate()
130
140
  ) {
131
- return "active-month-first-month active-month-last-month"
132
- } else if (range[0]?.getFullYear() === date.getFullYear() && range[0]?.getMonth() === date.getMonth()) {
133
- return "active-month-first-month"
134
- } else if (range[1]?.getFullYear() === date.getFullYear() && range[1]?.getMonth() === date.getMonth()) {
135
- return "active-month-last-month"
141
+ return "active-day-first-day active-day-last-day"
142
+ } else if (range[0]?.getFullYear() === date.getFullYear() && range[0]?.getMonth() === date.getMonth() && range[0]?.getDate() === date.getDate()) {
143
+ return "active-day-first-day"
144
+ } else if (range[1]?.getFullYear() === date.getFullYear() && range[1]?.getMonth() === date.getMonth() && range[1]?.getDate() === date.getDate()) {
145
+ return "active-day-last-day"
136
146
  } else if (range[0]?.getTime() < date.getTime() && date.getTime() < range[1]?.getTime()) {
137
- if (date.getMonth() % 3 === 0) {
138
- return "active-month-range-month-left"
139
- } else if (date.getMonth() % 3 === 1) {
140
- return "active-month-range-month-middle"
147
+ const weekStartsOn = 1
148
+ const col = (date.getDay() - weekStartsOn + 7) % 7
149
+ const dayOfMonth = date.getDate()
150
+ const lastDayOfMonth = new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()
151
+ if (col === 6) {
152
+ return "active-day-range-day-left"
153
+ } else if (col === 5) {
154
+ return "active-day-range-day-right"
155
+ } else if (dayOfMonth === 1) {
156
+ return "active-day-range-day-middle first-day-of-month"
157
+ } else if (dayOfMonth === lastDayOfMonth) {
158
+ return "active-day-range-day-middle last-day-of-month"
141
159
  } else {
142
- return "active-month-range-month-right"
160
+ return "active-day-range-day-middle"
143
161
  }
144
162
  }
145
163
 
@@ -148,15 +166,15 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
148
166
  }
149
167
 
150
168
  const tileContent = ({ date, view }: { date: Date; view: string }) => {
151
- if (view === "year") {
152
- const month = date.toLocaleString(lang.locale, { month: "long" })
169
+ if (view === "month") {
170
+ const day = date.getDate()
153
171
  return (
154
172
  <div className="absolute left-0 top-0 h-full w-full flex items-center justify-center tile-content-external-div">
155
173
  {Array.isArray(range) &&
156
174
  range[1] !== null &&
157
- ((range[0]?.getFullYear() === date.getFullYear() && range[0]?.getMonth() === date.getMonth()) ||
158
- (range[1]?.getFullYear() === date.getFullYear() && range[1]?.getMonth() === date.getMonth())) && (
159
- <abbr>{month}</abbr>
175
+ ((range[0]?.getFullYear() === date.getFullYear() && range[0]?.getMonth() === date.getMonth() && range[0]?.getDate() === date.getDate()) ||
176
+ (range[1]?.getFullYear() === date.getFullYear() && range[1]?.getMonth() === date.getMonth() && range[1]?.getDate() === date.getDate())) && (
177
+ <abbr>{day}</abbr>
160
178
  )}
161
179
  </div>
162
180
  )
@@ -177,6 +195,8 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
177
195
  }
178
196
  }, [range])
179
197
 
198
+ const [hoveredDate, setHoveredDate] = useState<Date | null>(null)
199
+
180
200
  const renderPopUpCalendar = () => {
181
201
  return (
182
202
  <div className="flex flex-row">
@@ -185,7 +205,7 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
185
205
  style={{
186
206
  border: "1px solid #F3F3F3",
187
207
  borderRightWidth: "0px",
188
- borderTopLeftRadius: "0px",
208
+ borderTopLeftRadius: "16px",
189
209
  borderBottomLeftRadius: "16px"
190
210
  }}
191
211
  >
@@ -261,9 +281,27 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
261
281
  />
262
282
  </div>
263
283
  <div className="flex flex-col gap-0">
264
- <div className="flex flex-row">
284
+ <div className="flex flex-row"
285
+ onMouseOver={e => {
286
+ const tile = (e.target as HTMLElement).closest(".react-calendar__tile")
287
+ if (!tile) return
288
+ const abbr = tile.querySelector("abbr[aria-label]") as HTMLElement | null;
289
+ if (!abbr) return
290
+ const label = abbr.getAttribute("aria-label")!
291
+ const date = new Date(label)
292
+ setHoveredDate(date)
293
+ }
294
+ }
295
+ onMouseOut={e => {
296
+
297
+ const leftTile = (e.target as HTMLElement).closest(".react-calendar__tile")
298
+ if (leftTile) {
299
+ setHoveredDate(null)
300
+ }
301
+ }
302
+ }>
265
303
  <Calendar
266
- className="kselect-range left-calendar"
304
+ className="kselect-range-date left-calendar"
267
305
  allowPartialRange
268
306
  tileClassName={tileClassName}
269
307
  tileContent={tileContent}
@@ -294,7 +332,7 @@ const KSelectRangeDate: React.FC<KSelectRangeDateProps> = (props) => {
294
332
  maxDate={props.maximumDate || undefined}
295
333
  />
296
334
  <Calendar
297
- className="kselect-range right-calendar"
335
+ className="kselect-range-date right-calendar"
298
336
  tileClassName={tileClassName}
299
337
  tileContent={tileContent}
300
338
  locale={lang.locale}
@@ -3,7 +3,7 @@
3
3
  border-right: none !important;
4
4
  }
5
5
 
6
- .react-calendar.kselect-range {
6
+ .react-calendar.kselect-range-date {
7
7
  width: 350px;
8
8
  max-width: 100%;
9
9
  background: white;
@@ -19,17 +19,17 @@
19
19
  font-weight: 500;
20
20
  }
21
21
 
22
- .kselect-range .react-calendar--doubleView {
22
+ .kselect-range-date .react-calendar--doubleView {
23
23
  width: 700px;
24
24
  }
25
25
 
26
- .kselect-range .react-calendar--doubleView .react-calendar__viewContainer {
26
+ .kselect-range-date .react-calendar--doubleView .react-calendar__viewContainer {
27
27
  display: flex;
28
28
  margin: -0.5em;
29
29
  border-radius: 16px;
30
30
  }
31
31
 
32
- .kselect-range .react-calendar--doubleView .react-calendar__viewContainer>* {
32
+ .kselect-range-date .react-calendar--doubleView .react-calendar__viewContainer>* {
33
33
  width: 50%;
34
34
  margin: 0.5em;
35
35
  }
@@ -42,23 +42,23 @@
42
42
  box-sizing: border-box;
43
43
  }
44
44
 
45
- .kselect-range .react-calendar button {
45
+ .kselect-range-date .react-calendar button {
46
46
  margin: 0;
47
47
  border: 0;
48
48
  outline: none;
49
49
  }
50
50
 
51
- .kselect-range .react-calendar button:enabled:hover {
51
+ .kselect-range-date .react-calendar button:enabled:hover {
52
52
  cursor: pointer;
53
53
  }
54
54
 
55
- .kselect-range .react-calendar__navigation {
55
+ .kselect-range-date .react-calendar__navigation {
56
56
  display: flex;
57
57
  height: 36px;
58
58
  align-items: center;
59
59
  }
60
60
 
61
- .kselect-range .react-calendar__navigation button {
61
+ .kselect-range-date .react-calendar__navigation button {
62
62
  width: 44px;
63
63
  color: #111;
64
64
  font-weight: 500;
@@ -67,38 +67,42 @@
67
67
  background: none;
68
68
  }
69
69
 
70
- .kselect-range .react-calendar__navigation button:disabled {
70
+ .kselect-range-date .react-calendar__navigation button:disabled {
71
71
  background-color: #FFF;
72
72
  }
73
73
 
74
- .kselect-range .react-calendar__navigation button:enabled:hover,
75
- .kselect-range .react-calendar__navigation button:enabled:focus {
74
+ .kselect-range-date .react-calendar__navigation button:enabled:hover,
75
+ .kselect-range-date .react-calendar__navigation button:enabled:focus {
76
76
  background-color: #F0F0F0;
77
77
  }
78
78
 
79
- .kselect-range .react-calendar__month-view__weekdays {
79
+ .kselect-range-date .react-calendar__month-view__weekdays {
80
80
  text-align: center;
81
81
  text-transform: uppercase;
82
82
  font: inherit;
83
83
  font-size: 0.75em;
84
84
  font-weight: bold;
85
+ width: 280px;
86
+ justify-content: center !important;
87
+ margin-left: 15px;
88
+
85
89
  }
86
90
 
87
- .kselect-range .react-calendar__month-view__weekdays__weekday {
91
+ .kselect-range-date .react-calendar__month-view__weekdays__weekday {
88
92
  font-family: Inter;
89
93
  font-size: 14px;
90
94
  font-style: normal;
91
95
  font-weight: 500;
92
96
  line-height: 20px;
93
97
  letter-spacing: -0.084px;
94
- width: 40px;
98
+ width: 40px ;
95
99
  height: 40px;
96
100
  display: flex;
97
101
  align-items: center;
98
102
  justify-content: center;
99
103
  }
100
104
 
101
- .kselect-range .react-calendar__month-view__weekNumbers .react-calendar__tile {
105
+ .kselect-range-date .react-calendar__month-view__weekNumbers .react-calendar__tile {
102
106
  display: flex;
103
107
  align-items: center;
104
108
  justify-content: center;
@@ -108,17 +112,19 @@
108
112
  position: relative;
109
113
  }
110
114
 
111
- .kselect-range .react-calendar__month-view__days {
112
- justify-content: space-between;
115
+ .kselect-range-date .react-calendar__month-view__days {
116
+ justify-content: center;
117
+ row-gap: 4px;
113
118
 
114
119
  }
115
120
 
116
- .kselect-range .react-calendar__month-view__days__day {
121
+ .kselect-range-date .react-calendar__month-view__days__day {
117
122
  flex-basis: auto !important;
118
123
  border-radius: 20px;
124
+ position: relative;
119
125
  }
120
126
 
121
- .kselect-range .react-calendar__month-view__days__day--weekend {
127
+ .kselect-range-date .react-calendar__month-view__days__day--weekend {
122
128
  font-size: 14px;
123
129
  font-style: normal;
124
130
  font-weight: 500;
@@ -126,22 +132,39 @@
126
132
  /* 142.857% */
127
133
  letter-spacing: -0.084px;
128
134
  color: #1F1F1F;
135
+ width: 40px;
136
+ }
137
+ .kselect-range-date .hovered-range-day {
138
+ background-color: #F0F0F0 !important;
129
139
  }
130
140
 
131
- .kselect-range .react-calendar__month-view__days__day--neighboringMonth,
132
- .kselect-range .react-calendar__decade-view__years__year--neighboringDecade,
133
- .kselect-range .react-calendar__century-view__decades__decade--neighboringCentury {
141
+ .kselect-range-date .react-calendar__month-view__days__day--neighboringMonth {
142
+ color: rgba(0, 0, 0, 0) !important;
143
+ background-color: rgba(0, 0, 0, 0) !important;
144
+ }
145
+ .kselect-range-date .react-calendar__month-view__days__day--neighboringMonth.active-day-range-day-middle {
146
+ background-color: rgba(0, 0, 0, 0) !important;
147
+ }
148
+ .kselect-range-date .react-calendar__month-view__days__day--neighboringMonth.active-day-range-day-left {
149
+ background: rgba(0, 0, 0, 0) !important;
150
+ }
151
+ .kselect-range-date .react-calendar__month-view__days__day--neighboringMonth.active-day-range-day-right {
152
+ background: rgba(0, 0, 0, 0) !important;
153
+ }
154
+
155
+ .kselect-range-date .react-calendar__decade-view__years__year--neighboringDecade,
156
+ .kselect-range-date .react-calendar__century-view__decades__decade--neighboringCentury {
134
157
  color: #D6D6D6;
135
158
  }
136
159
 
137
- .kselect-range .react-calendar__year-view .react-calendar__tile,
138
- .kselect-range .react-calendar__decade-view .react-calendar__tile,
139
- .kselect-range .react-calendar__century-view .react-calendar__tile {
160
+ .kselect-range-date .react-calendar__year-view .react-calendar__tile,
161
+ .kselect-range-date .react-calendar__decade-view .react-calendar__tile,
162
+ .kselect-range-date .react-calendar__century-view .react-calendar__tile {
140
163
  padding: 0;
141
164
  /*old value : 2em 0.5em*/
142
165
  }
143
166
 
144
- .kselect-range .react-calendar__navigation__arrow {
167
+ .kselect-range-date .react-calendar__navigation__arrow {
145
168
  display: flex;
146
169
  align-items: center;
147
170
  justify-content: center;
@@ -151,7 +174,7 @@
151
174
  ;
152
175
  }
153
176
 
154
- .kselect-range .react-calendar__tile {
177
+ .kselect-range-date .react-calendar__tile {
155
178
  height: 40px;
156
179
  width: 40px !important;
157
180
  background: none;
@@ -159,44 +182,44 @@
159
182
  font: inherit;
160
183
  }
161
184
 
162
- .kselect-range .react-calendar__tile:disabled {
185
+ .kselect-range-date .react-calendar__tile:disabled {
163
186
  background-color: #f0f0f0;
164
187
  color: #ababab;
165
188
  }
166
189
 
167
- .kselect-range .react-calendar__month-view__days__day--neighboringMonth:disabled,
168
- .kselect-range .react-calendar__decade-view__years__year--neighboringDecade:disabled,
169
- .kselect-range .react-calendar__century-view__decades__decade--neighboringCentury:disabled {
190
+ .kselect-range-date .react-calendar__month-view__days__day--neighboringMonth:disabled,
191
+ .kselect-range-date .react-calendar__decade-view__years__year--neighboringDecade:disabled,
192
+ .kselect-range-date .react-calendar__century-view__decades__decade--neighboringCentury:disabled {
170
193
  color: #cdcdcd;
171
194
  }
172
195
 
173
- .kselect-range .react-calendar__tile:enabled:hover,
174
- .kselect-range .react-calendar__tile:enabled:focus {
196
+ .kselect-range-date .react-calendar__tile:enabled:hover,
197
+ .kselect-range-date .react-calendar__tile:enabled:focus {
175
198
  background-color: #F0F0F0;
176
199
  }
177
200
 
178
- .kselect-range .react-calendar__tile--now {
201
+ .kselect-range-date .react-calendar__tile--now {
179
202
  background: #F2FE67
180
203
  }
181
204
 
182
- .kselect-range .react-calendar__tile--now:enabled:hover,
183
- .kselect-range.react-calendar__tile--now:enabled:focus {
205
+ .kselect-range-date .react-calendar__tile--now:enabled:hover,
206
+ .kselect-range-date.react-calendar__tile--now:enabled:focus {
184
207
  background: #FFFFA9;
185
208
  }
186
209
 
187
- .kselect-range .react-calendar__tile--hasActive {
210
+ .kselect-range-date .react-calendar__tile--hasActive {
188
211
  background: #111111;
189
212
  /*76baff*/
190
213
  color: #FFFFFF;
191
214
  }
192
215
 
193
- .kselect-range .react-calendar__tile--hasActive:enabled:hover,
194
- .kselect-range .react-calendar__tile--hasActive:enabled:focus {
216
+ .kselect-range-date .react-calendar__tile--hasActive:enabled:hover,
217
+ .kselect-range-date .react-calendar__tile--hasActive:enabled:focus {
195
218
  background: #111111;
196
219
  /*old value: #a9d4ff*/
197
220
  }
198
221
 
199
- .kselect-range .react-calendar__tile--active {
222
+ .kselect-range-date .react-calendar__tile--active {
200
223
  background-color: #111;
201
224
  color: white;
202
225
  border-radius: 0px;
@@ -206,20 +229,20 @@
206
229
  .react-calendar__tile--hover.react-calendar__tile--active {
207
230
  background-color: #111 !important;
208
231
  }
209
- .kselect-range .react-calendar__tile--active:enabled:focus {
232
+ .kselect-range-date .react-calendar__tile--active:enabled:focus {
210
233
  background: #111111;
211
234
  /*old value: 1087ff*/
212
235
  }
213
236
 
214
- .kselect-range .react-calendar--selectRange .react-calendar__tile--hover {
237
+ .kselect-range-date .react-calendar--selectRange .react-calendar__tile--hover {
215
238
  background-color: #F0F0F0;
216
239
  }
217
240
 
218
- .kselect-range .react-calendar__month-view__weekdays__weekday {
241
+ .kselect-range-date .react-calendar__month-view__weekdays__weekday {
219
242
  text-decoration: none !important;
220
243
  }
221
244
 
222
- .kselect-range .react-calendar__month-view__weekdays__weekday--weekend {
245
+ .kselect-range-date .react-calendar__month-view__weekdays__weekday--weekend {
223
246
  text-decoration: none;
224
247
  }
225
248
 
@@ -228,7 +251,7 @@ abbr:where([title]) {
228
251
  color: #3D3D3D;
229
252
  }
230
253
 
231
- .kselect-range .react-calendar__navigation__label__labelText {
254
+ .kselect-range-date .react-calendar__navigation__label__labelText {
232
255
  color: #111;
233
256
  font-size: 16px;
234
257
  font-weight: 500 !important;
@@ -236,49 +259,64 @@ abbr:where([title]) {
236
259
  letter-spacing: -0.176px;
237
260
  }
238
261
 
239
- .kselect-range .react-calendar__year-view__months {
262
+ .kselect-range-date .react-calendar__year-view__months {
240
263
  row-gap: 8px;
241
264
  }
242
265
 
243
- .kselect-range .react-calendar__year-view__months__month {
266
+ .kselect-range-date .react-calendar__year-view__months__month {
244
267
  padding: 0px !important;
245
268
  position: relative;
246
269
  }
247
270
 
248
- .kselect-range .active-month-first-month {
271
+ .kselect-range-date .active-day-first-day:not(.react-calendar__month-view__days__day--neighboringMonth) {
249
272
  background-color: #F0F0F0 !important;
250
273
  border-top-left-radius: 999px !important;
251
274
  border-bottom-left-radius: 999px !important;
252
275
  }
253
276
 
254
- .active-month-first-month .tile-content-external-div {
277
+ .active-day-first-day .tile-content-external-div {
255
278
  background-color: #111;
256
279
  border-radius: 999px !important;
257
280
  }
281
+ .active-day-first-day.react-calendar__month-view__days__day--neighboringMonth .tile-content-external-div {
282
+ display: none;
283
+ }
258
284
 
259
- .kselect-range .active-month-last-month {
285
+ .kselect-range-date .active-day-last-day:not(.react-calendar__month-view__days__day--neighboringMonth) {
260
286
  background-color: #F0F0F0 !important;
261
287
  border-top-right-radius: 999px !important;
262
288
  border-bottom-right-radius: 999px !important;
263
289
  }
264
290
 
265
- .active-month-last-month .tile-content-external-div {
291
+ .active-day-last-day .tile-content-external-div {
266
292
  background-color: #111;
267
293
  border-radius: 999px !important;
268
294
  }
295
+ .active-day-last-day.react-calendar__month-view__days__day--neighboringMonth .tile-content-external-div {
296
+ display: none;
297
+ }
269
298
 
270
- .kselect-range .active-month-range-month-left {
271
- background: linear-gradient(90deg, #FFF 0%, #F0F0F0 30.28%, #F0F0F0 100%);
299
+ .kselect-range-date .active-day-range-day-left {
300
+ background: linear-gradient(90deg, #FFF 0%, #F0F0F0 69.72%, #F0F0F0 100%);
272
301
  color: #1F1F1F;
273
302
  }
274
303
 
275
- .kselect-range .active-month-range-month-middle {
304
+ .kselect-range-date .active-day-range-day-middle {
276
305
  background-color: #F0F0F0 !important;
277
306
  color: #1F1F1F;
278
307
  }
279
308
 
280
- .kselect-range .active-month-range-month-right {
281
- background: linear-gradient(90deg, #F0F0F0 0%, #F0F0F0 69.72%, #FFF 100%);
309
+ .active-day-range-day-middle.first-day-of-month:not(.react-calendar__month-view__days__day--neighboringMonth) {
310
+ background: linear-gradient(90deg, #FFF 0%, #F0F0F0 69.72%, #F0F0F0 100%);
311
+ color: #1F1F1F;
312
+ }
313
+ .active-day-range-day-middle.last-day-of-month:not(.react-calendar__month-view__days__day--neighboringMonth) {
314
+ background: linear-gradient(90deg, #F0F0F0 0%, #F0F0F0 30.28%, #FFF 100%);
315
+ color: #1F1F1F;
316
+ }
317
+
318
+ .kselect-range-date .active-day-range-day-right {
319
+ background: linear-gradient(90deg, #F0F0F0 0%, #F0F0F0 30.28%, #FFF 100%);
282
320
  color: #1F1F1F;
283
321
  }
284
322
  .range-bottom-center {