@brickclay-org/ui 0.1.88 → 0.1.90
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/fesm2022/brickclay-org-ui.mjs +19 -15
- package/fesm2022/brickclay-org-ui.mjs.map +1 -1
- package/index.d.ts +3 -5
- package/package.json +1 -1
- package/src/lib/calender/components/custom-calendar/custom-calendar.component.css +898 -0
- package/src/lib/calender/components/scheduled-date-picker/scheduled-date-picker.component.css +373 -0
- package/src/lib/calender/components/time-picker/time-picker.component.css +331 -0
- package/src/lib/menu/menu.css +18 -0
- package/src/styles.css +3 -0
|
@@ -0,0 +1,898 @@
|
|
|
1
|
+
/* @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); */
|
|
2
|
+
|
|
3
|
+
.calendar-container,
|
|
4
|
+
.calendar-container * {
|
|
5
|
+
font-family: 'Inter', sans-serif !important;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* --------------------------
|
|
9
|
+
CALENDAR CONTAINER
|
|
10
|
+
---------------------------*/
|
|
11
|
+
.calendar-container {
|
|
12
|
+
position: relative;
|
|
13
|
+
display: inline-block;
|
|
14
|
+
width: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* --------------------------
|
|
18
|
+
INPUT WRAPPER
|
|
19
|
+
---------------------------*/
|
|
20
|
+
.input-wrapper {
|
|
21
|
+
position: relative;
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.calendar-input {
|
|
27
|
+
width: 100%;
|
|
28
|
+
padding: 9px 14px 9px 40px;
|
|
29
|
+
border: 1px solid #ddd;
|
|
30
|
+
border-radius: 8px;
|
|
31
|
+
font-size: 14px;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
background: #fff;
|
|
34
|
+
transition: all 0.2s;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.calendar-input:hover {
|
|
38
|
+
border-color: #999;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.calendar-input:focus {
|
|
42
|
+
outline: none;
|
|
43
|
+
border-color: #999;
|
|
44
|
+
/* box-shadow: 0 0 0 3px rgb(106 106 106 / 10%); */
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.calendar-icon {
|
|
48
|
+
position: absolute;
|
|
49
|
+
left: 12px;
|
|
50
|
+
pointer-events: none;
|
|
51
|
+
font-size: 18px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.clear-btn {
|
|
55
|
+
position: absolute;
|
|
56
|
+
right: 9px;
|
|
57
|
+
background: none;
|
|
58
|
+
border: none;
|
|
59
|
+
font-size: 20px;
|
|
60
|
+
color: #999;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
padding: 0;
|
|
63
|
+
width: 20px;
|
|
64
|
+
height: 20px;
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: center;
|
|
68
|
+
line-height: 1;
|
|
69
|
+
transition: color 0.2s;
|
|
70
|
+
top: 8px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.clear-btn:hover {
|
|
74
|
+
color: #333;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* --------------------------
|
|
78
|
+
CALENDAR POPUP
|
|
79
|
+
---------------------------*/
|
|
80
|
+
.calendar-popup {
|
|
81
|
+
/* Position is owned by whichever render path is active — CDK's overlay pane positions itself
|
|
82
|
+
for the non-inline path (see the component's cdkConnectedOverlay template), and
|
|
83
|
+
.inline-calendar below sets its own position for the inline path. No position/top/left here. */
|
|
84
|
+
width: 320px;
|
|
85
|
+
background: #fff;
|
|
86
|
+
border-radius: 12px;
|
|
87
|
+
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
|
|
88
|
+
/* padding: 16px; */
|
|
89
|
+
/* Only load-bearing for .inline-calendar (position: relative, normal document flow) — a static
|
|
90
|
+
element's z-index is a no-op, and the non-inline path has no position here at all (see above).
|
|
91
|
+
For that path, stacking is CDK's job: .cdk-overlay-pane defaults to z-index:1000 on its own;
|
|
92
|
+
to go higher, raise it via the `panelClass` input (e.g. panelClass="!z-[1100]"), not here. */
|
|
93
|
+
z-index: 1000;
|
|
94
|
+
animation: slideDown 0.2s ease-out;
|
|
95
|
+
/* CDK's overlay container lives outside .calendar-container, so the inherited font from
|
|
96
|
+
`.calendar-container *` no longer reaches this element in the (non-inline) common case —
|
|
97
|
+
re-declare it unconditionally. */
|
|
98
|
+
font-family: 'Inter', sans-serif;
|
|
99
|
+
/* Only takes effect once max-width:1024px's `overflow: auto` makes this scroll — thin instead
|
|
100
|
+
of the browser's default scrollbar, matching .ranges below. */
|
|
101
|
+
scrollbar-width: thin;
|
|
102
|
+
scrollbar-color: #c1c1c1 transparent;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.calendar-popup::-webkit-scrollbar {
|
|
106
|
+
width: 6px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.calendar-popup::-webkit-scrollbar-track {
|
|
110
|
+
background: transparent;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.calendar-popup::-webkit-scrollbar-thumb {
|
|
114
|
+
background: #c1c1c1;
|
|
115
|
+
border-radius: 3px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.calendar-popup::-webkit-scrollbar-thumb:hover {
|
|
119
|
+
background: #a8a8a8;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.calendar-popup:focus-visible {
|
|
123
|
+
outline: 0 !important;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* Inline Calendar Mode */
|
|
127
|
+
.calendar-popup.inline-calendar {
|
|
128
|
+
position: relative;
|
|
129
|
+
top: 0;
|
|
130
|
+
left: 0;
|
|
131
|
+
width: 100%;
|
|
132
|
+
margin-top: 0;
|
|
133
|
+
animation: none;
|
|
134
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.calendar-container.inline-mode {
|
|
138
|
+
display: block;
|
|
139
|
+
width: 100%;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* Increase width for dual calendar */
|
|
143
|
+
.calendar-popup.dual-calendar-mode {
|
|
144
|
+
width: 600px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.calendar-popup.dual-calendar-mode.has-ranges {
|
|
148
|
+
width: 730px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.calendar-popup.has-ranges {
|
|
152
|
+
width: 450px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* .calendar-popup.dual-calendar-mode.has-ranges .dual-calendar {
|
|
156
|
+
border-left: 1px solid #eee;
|
|
157
|
+
} */
|
|
158
|
+
|
|
159
|
+
/* Vertical placement itself is CDK's job now (see .calendar-popup above) — this only swaps the
|
|
160
|
+
open animation direction to match whichever side CDK actually landed the popup on. */
|
|
161
|
+
.calendar-popup.drop-up {
|
|
162
|
+
animation: slideUp 0.2s ease-out;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@keyframes slideDown {
|
|
166
|
+
from {
|
|
167
|
+
opacity: 0;
|
|
168
|
+
transform: translateY(-10px);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
to {
|
|
172
|
+
opacity: 1;
|
|
173
|
+
transform: translateY(0);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@keyframes slideUp {
|
|
178
|
+
from {
|
|
179
|
+
opacity: 0;
|
|
180
|
+
transform: translateY(10px);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
to {
|
|
184
|
+
opacity: 1;
|
|
185
|
+
transform: translateY(0);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* --------------------------
|
|
190
|
+
RANGES SECTION
|
|
191
|
+
---------------------------*/
|
|
192
|
+
.ranges {
|
|
193
|
+
display: flex;
|
|
194
|
+
flex-direction: column;
|
|
195
|
+
gap: 4px;
|
|
196
|
+
margin-bottom: 16px;
|
|
197
|
+
padding-bottom: 16px;
|
|
198
|
+
border-bottom: 1px solid #eee;
|
|
199
|
+
/* max-height: 300px; */
|
|
200
|
+
/* overflow-y: auto; */
|
|
201
|
+
min-width: 150px;
|
|
202
|
+
padding-right: 8px;
|
|
203
|
+
scrollbar-width: thin;
|
|
204
|
+
scrollbar-color: #888 #f1f1f1;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.range-btn {
|
|
208
|
+
padding: 7px 10px;
|
|
209
|
+
border: 1px solid transparent;
|
|
210
|
+
background: transparent;
|
|
211
|
+
border-radius: 4px;
|
|
212
|
+
cursor: pointer;
|
|
213
|
+
text-align: left;
|
|
214
|
+
font-size: 14px;
|
|
215
|
+
transition: all 0.2s;
|
|
216
|
+
color: #838383;
|
|
217
|
+
font-weight: 500;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.range-btn:hover {
|
|
221
|
+
background: #f5f5f5;
|
|
222
|
+
color: #000;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.range-btn.active {
|
|
226
|
+
background: #f0f0f0;
|
|
227
|
+
color: #000;
|
|
228
|
+
font-weight: 500;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* --------------------------
|
|
232
|
+
CALENDAR WRAPPER
|
|
233
|
+
---------------------------*/
|
|
234
|
+
.calendar-wrapper {
|
|
235
|
+
/*width: 100%;*/
|
|
236
|
+
padding: 0 12px 12px 12px;
|
|
237
|
+
/* border-left: 1px solid #eee; */
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* --------------------------
|
|
241
|
+
HEADER (Month + Year + Arrows)
|
|
242
|
+
---------------------------*/
|
|
243
|
+
.header {
|
|
244
|
+
display: flex;
|
|
245
|
+
justify-content: space-between;
|
|
246
|
+
align-items: center;
|
|
247
|
+
padding: 12px 0;
|
|
248
|
+
/* margin-bottom: 8px; */
|
|
249
|
+
/* The bk-month-grid header has no nav-btn children (just centered text) — pin the same
|
|
250
|
+
height as the day/year headers (30px nav-btn + this padding) so it doesn't shrink. */
|
|
251
|
+
min-height: 54px;
|
|
252
|
+
box-sizing: border-box;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.month-year {
|
|
256
|
+
font-size: 15px;
|
|
257
|
+
font-weight: 500;
|
|
258
|
+
color: #333;
|
|
259
|
+
flex: 1;
|
|
260
|
+
display: flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
justify-content: center;
|
|
263
|
+
/* gap: 4px; */
|
|
264
|
+
text-align: center;
|
|
265
|
+
text-transform: capitalize;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Clickable month / year labels — open the bk-month-grid / bk-year-grid quick-pick. */
|
|
269
|
+
.bk-month-year-btn {
|
|
270
|
+
@apply bg-transparent border-0 rounded py-1 px-1 cursor-pointer transition-all duration-200;
|
|
271
|
+
font: inherit;
|
|
272
|
+
color: inherit;
|
|
273
|
+
text-transform: inherit;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.bk-month-year-btn:hover:not(:disabled) {
|
|
277
|
+
@apply text-black;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.bk-month-year-btn:disabled {
|
|
281
|
+
@apply cursor-not-allowed text-[#ccc] opacity-50;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.nav-btn {
|
|
285
|
+
background: none;
|
|
286
|
+
border: none;
|
|
287
|
+
font-size: 24px;
|
|
288
|
+
cursor: pointer;
|
|
289
|
+
padding: 11.5px 14px;
|
|
290
|
+
color: #666;
|
|
291
|
+
border-radius: 4px;
|
|
292
|
+
transition: all 0.2s;
|
|
293
|
+
line-height: 1;
|
|
294
|
+
height: 30px;
|
|
295
|
+
width: 30px;
|
|
296
|
+
display: flex;
|
|
297
|
+
justify-content: center;
|
|
298
|
+
align-items: center;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.nav-btn:hover {
|
|
302
|
+
background: #f0f0f0;
|
|
303
|
+
color: #000;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* Shared bounding box for every header chevron ("<", ">", "<<", ">>") so the
|
|
307
|
+
single-chevron icons (native 7x12) and double-chevron icons (native 16x16)
|
|
308
|
+
read as the same size instead of the double ones looming larger. */
|
|
309
|
+
.nav-btn img {
|
|
310
|
+
/* width: 9px; */
|
|
311
|
+
/* height: 14px; */
|
|
312
|
+
/* object-fit: contain; */
|
|
313
|
+
max-width: none !important;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.nav-btn:disabled {
|
|
317
|
+
cursor: not-allowed;
|
|
318
|
+
opacity: 0.35;
|
|
319
|
+
pointer-events: none;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* --------------------------
|
|
323
|
+
MONTH / YEAR QUICK-PICK GRIDS
|
|
324
|
+
Shown in place of the day table when the header's month or year
|
|
325
|
+
label is clicked. Cell styling mirrors .calendar-day so the picker
|
|
326
|
+
reads as the same control, just at a coarser granularity.
|
|
327
|
+
---------------------------*/
|
|
328
|
+
/* Wraps a bk-month-grid/bk-year-grid together with its "Today" quick-jump button. Fixed (not min)
|
|
329
|
+
height, matching the day table's rendered height (thead + 6 rows) — so switching between
|
|
330
|
+
the day/month/year views never resizes the popup. The grid takes the remaining space
|
|
331
|
+
above the button instead of the button adding extra height on top. */
|
|
332
|
+
.bk-grid-picker {
|
|
333
|
+
@apply flex flex-col box-border h-[256px];
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Both grids: 3 cols x 4 rows (12 months / a 12-year page), same orientation. Rows size to
|
|
337
|
+
their own (short) content and pack tightly at the top instead of stretching/spreading to
|
|
338
|
+
fill the box — cells stay short like day cells, and the "Today" button sits right under
|
|
339
|
+
the packed rows instead of being pushed to the bottom by spread-out gaps. */
|
|
340
|
+
.bk-month-grid,
|
|
341
|
+
.bk-year-grid {
|
|
342
|
+
@apply grid grid-cols-3 auto-rows-min shrink-0 gap-[18px];
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* "Today" quick-jump — full width, sits right under the grid; any leftover height in the
|
|
346
|
+
fixed-height .bk-grid-picker box collapses below it instead of spreading through the grid. */
|
|
347
|
+
.bk-today-btn {
|
|
348
|
+
@apply shrink-0 w-full p-2 mt-2 border border-[#eee] rounded-md bg-transparent text-[#333] text-[13px] font-medium cursor-pointer transition-all duration-200;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.bk-today-btn:hover:not(:disabled) {
|
|
352
|
+
@apply bg-[#efefef] text-black;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.bk-today-btn:disabled {
|
|
356
|
+
@apply text-[#ddd] cursor-not-allowed opacity-50;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* Short, pill-like cells so the picker reads like the day-grid's cells, just at a
|
|
360
|
+
coarser granularity. */
|
|
361
|
+
.bk-month-cell,
|
|
362
|
+
.bk-year-cell {
|
|
363
|
+
@apply flex items-center justify-center py-2.5 px-1 text-[13px] font-medium text-[#333] bg-transparent border-0 rounded-md cursor-pointer text-center transition-all duration-200;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/* Excludes .active/.current so hovering a selected or today cell can't override its own
|
|
367
|
+
look — without :not(.active), :hover:not(:disabled) actually outranks .active alone on
|
|
368
|
+
specificity (three class-level selectors vs two), so hovering a selected month/year briefly
|
|
369
|
+
turned it back to the plain hover gray, losing the black "selected" indicator. */
|
|
370
|
+
.bk-month-cell:hover:not(:disabled):not(.active):not(.current),
|
|
371
|
+
.bk-year-cell:hover:not(:disabled):not(.active):not(.current) {
|
|
372
|
+
@apply bg-[#efefef] text-black;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.bk-month-cell.active,
|
|
376
|
+
.bk-year-cell.active {
|
|
377
|
+
@apply bg-black text-white font-semibold;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/* Today's month / year — same gray-background "current" marker as .calendar-day.today gives the
|
|
381
|
+
day grid, independent of .active (the picked/displayed month or year). */
|
|
382
|
+
.bk-month-cell.current:not(.active),
|
|
383
|
+
.bk-year-cell.current:not(.active) {
|
|
384
|
+
@apply bg-[#e5e4e4] font-semibold;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.bk-month-cell:disabled,
|
|
388
|
+
.bk-year-cell:disabled {
|
|
389
|
+
@apply text-[#ddd] cursor-not-allowed opacity-50;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/* --------------------------
|
|
393
|
+
CALENDAR TABLE
|
|
394
|
+
---------------------------*/
|
|
395
|
+
.calendar-table {
|
|
396
|
+
width: 100%;
|
|
397
|
+
border-collapse: collapse;
|
|
398
|
+
text-align: center;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.weekday-header {
|
|
402
|
+
font-size: 12px;
|
|
403
|
+
color: #7e7e7e;
|
|
404
|
+
font-weight: 600;
|
|
405
|
+
padding: 8px 4px;
|
|
406
|
+
/*text-transform: uppercase;*/
|
|
407
|
+
letter-spacing: 0.3px;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/* --------------------------
|
|
411
|
+
DATE CELLS
|
|
412
|
+
---------------------------*/
|
|
413
|
+
.calendar-day {
|
|
414
|
+
padding: 8px 4px;
|
|
415
|
+
font-size: 14px;
|
|
416
|
+
cursor: pointer;
|
|
417
|
+
border-radius: 6px;
|
|
418
|
+
transition: all 0.2s;
|
|
419
|
+
position: relative;
|
|
420
|
+
color: #333;
|
|
421
|
+
font-weight: 500;
|
|
422
|
+
line-height: 1.5;
|
|
423
|
+
/* text-align: center; */
|
|
424
|
+
/* width: 40px; */
|
|
425
|
+
/* height: 40px; */
|
|
426
|
+
/* display: flex; */
|
|
427
|
+
/* align-items: center; */
|
|
428
|
+
/* justify-content: center; */
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.calendar-day:hover:not(.disabled):not(.other-month) {
|
|
432
|
+
background: #efefef;
|
|
433
|
+
color: #000;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.calendar-day.other-month {
|
|
437
|
+
color: #ccc;
|
|
438
|
+
cursor: default;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.calendar-day.disabled {
|
|
442
|
+
color: #ddd;
|
|
443
|
+
cursor: not-allowed;
|
|
444
|
+
opacity: 0.5;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/* --------------------------
|
|
448
|
+
SELECTED DATE (Active) - Start and End dates
|
|
449
|
+
---------------------------*/
|
|
450
|
+
.calendar-day.active {
|
|
451
|
+
background: #000 !important;
|
|
452
|
+
color: white !important;
|
|
453
|
+
font-weight: 600;
|
|
454
|
+
/* border-radius: 50%;
|
|
455
|
+
width: 32px;
|
|
456
|
+
height: 32px;
|
|
457
|
+
display: flex;
|
|
458
|
+
align-items: center;
|
|
459
|
+
justify-content: center;
|
|
460
|
+
margin: 0 auto; */
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/* --------------------------
|
|
464
|
+
TODAY DATE
|
|
465
|
+
---------------------------*/
|
|
466
|
+
.calendar-day.today {
|
|
467
|
+
/* border: 2px solid #007bff; */
|
|
468
|
+
font-weight: 600;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.calendar-day.today:not(.active) {
|
|
472
|
+
background: #e5e4e4;
|
|
473
|
+
/* color: #007bff; */
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.calendar-day.active:hover {
|
|
477
|
+
background: #000 !important;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.calendar-day.today.disabled,
|
|
481
|
+
.bk-month-cell.current:disabled,
|
|
482
|
+
.bk-year-cell.current:disabled {
|
|
483
|
+
color: #a9a9a9;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/* --------------------------
|
|
487
|
+
IN-RANGE DATES - Dates between start and end
|
|
488
|
+
---------------------------*/
|
|
489
|
+
.calendar-day.in-range {
|
|
490
|
+
background: #f5f5f5;
|
|
491
|
+
color: #333;
|
|
492
|
+
border-radius: 0;
|
|
493
|
+
position: relative;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
.calendar-day.in-range:hover {
|
|
497
|
+
background: #e8e8e8;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* Make in-range dates span full width */
|
|
501
|
+
.calendar-day.in-range::before {
|
|
502
|
+
content: '';
|
|
503
|
+
position: absolute;
|
|
504
|
+
left: 0;
|
|
505
|
+
right: 0;
|
|
506
|
+
top: 0;
|
|
507
|
+
bottom: 0;
|
|
508
|
+
background: #f5f5f5;
|
|
509
|
+
z-index: -1;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.calendar-day.in-range:hover::before {
|
|
513
|
+
background: #e8e8e8;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/* --------------------------
|
|
517
|
+
MULTI-SELECTED DATES
|
|
518
|
+
---------------------------*/
|
|
519
|
+
.calendar-day.multi-selected {
|
|
520
|
+
background: #4caf50;
|
|
521
|
+
color: white;
|
|
522
|
+
font-weight: 600;
|
|
523
|
+
border-radius: 6px;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.calendar-day.multi-selected:hover {
|
|
527
|
+
background: #45a049;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/* --------------------------
|
|
531
|
+
DUAL CALENDAR
|
|
532
|
+
---------------------------*/
|
|
533
|
+
.dual-calendar {
|
|
534
|
+
display: flex;
|
|
535
|
+
/* gap: 24px; */
|
|
536
|
+
width: 100%;
|
|
537
|
+
/* border-left: 1px solid #eee; */
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.calendar-left,
|
|
541
|
+
.calendar-right {
|
|
542
|
+
flex: 1;
|
|
543
|
+
min-width: 0;
|
|
544
|
+
padding: 0 12px 12px;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/* When ranges are shown, adjust layout */
|
|
548
|
+
.calendar-popup.has-ranges {
|
|
549
|
+
display: flex;
|
|
550
|
+
flex-direction: row;
|
|
551
|
+
/* gap: 16px; */
|
|
552
|
+
/* padding: 20px; */
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.calendar-popup.has-ranges .ranges {
|
|
556
|
+
margin-bottom: 0;
|
|
557
|
+
padding-bottom: 0;
|
|
558
|
+
border-bottom: none;
|
|
559
|
+
/* border-right: 1px solid #993535; */
|
|
560
|
+
padding: 10px;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.calendar-popup.has-ranges .dual-calendar,
|
|
564
|
+
.calendar-popup.has-ranges .calendar-wrapper {
|
|
565
|
+
flex: 1;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.calendar-right .header {
|
|
569
|
+
justify-content: space-between;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
.calendar-right .header .month-year {
|
|
573
|
+
text-align: center;
|
|
574
|
+
flex: 1;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/* --------------------------
|
|
578
|
+
TIMEPICKER SECTION
|
|
579
|
+
---------------------------*/
|
|
580
|
+
.timepicker-section {
|
|
581
|
+
margin-top: 12px;
|
|
582
|
+
padding-top: 12px;
|
|
583
|
+
/* padding-bottom: 16px; */
|
|
584
|
+
border-top: 1px solid #eee;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.timepicker-label {
|
|
588
|
+
font-size: 12px;
|
|
589
|
+
font-weight: 500;
|
|
590
|
+
color: #000000;
|
|
591
|
+
margin-bottom: 4px;
|
|
592
|
+
/* text-transform: uppercase; */
|
|
593
|
+
letter-spacing: -0.28px;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/* .timepicker-controls {
|
|
597
|
+
display: flex;
|
|
598
|
+
justify-content: center;
|
|
599
|
+
} */
|
|
600
|
+
|
|
601
|
+
/* --------------------------
|
|
602
|
+
FOOTER (Apply/Cancel Buttons)
|
|
603
|
+
---------------------------*/
|
|
604
|
+
.footer {
|
|
605
|
+
padding: 12px;
|
|
606
|
+
/* margin-top: 12px; */
|
|
607
|
+
display: flex;
|
|
608
|
+
justify-content: flex-end;
|
|
609
|
+
gap: 8px;
|
|
610
|
+
border-top: 1px solid #eee;
|
|
611
|
+
/* padding-top: 16px; */
|
|
612
|
+
/*width: 100%;*/
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.btn-cancel,
|
|
616
|
+
.btn-apply {
|
|
617
|
+
padding: 8px 16px;
|
|
618
|
+
border: none;
|
|
619
|
+
border-radius: 4px;
|
|
620
|
+
font-size: 14px;
|
|
621
|
+
font-weight: 500;
|
|
622
|
+
cursor: pointer;
|
|
623
|
+
transition: all 0.2s;
|
|
624
|
+
min-width: 80px;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.btn-cancel {
|
|
628
|
+
background: #fff;
|
|
629
|
+
color: #666;
|
|
630
|
+
border: 1px solid #ddd;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/* .btn-cancel:hover {
|
|
634
|
+
background: #f5f5f5;
|
|
635
|
+
border-color: #bbb;
|
|
636
|
+
} */
|
|
637
|
+
|
|
638
|
+
.btn-apply {
|
|
639
|
+
background: #000;
|
|
640
|
+
color: #fff;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/* .btn-apply:hover {
|
|
644
|
+
background: #333;
|
|
645
|
+
} */
|
|
646
|
+
|
|
647
|
+
.btn-apply:active {
|
|
648
|
+
transform: translateY(0);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* --------------------------
|
|
652
|
+
RESPONSIVE DESIGN
|
|
653
|
+
---------------------------*/
|
|
654
|
+
@media (max-width: 576px) {
|
|
655
|
+
.calendar-popup.dual-calendar-mode {
|
|
656
|
+
max-width: 300px;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
@media (max-width: 768px) {
|
|
661
|
+
.dual-calendar {
|
|
662
|
+
flex-direction: column;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/* .calendar-popup.dual-calendar-mode.append-to-body {
|
|
666
|
+
max-width: 350px;
|
|
667
|
+
} */
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
@media (min-width: 577px) and (max-width: 1024px) {
|
|
671
|
+
.calendar-popup.dual-calendar-mode {
|
|
672
|
+
max-width: 500px;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
/* @media (min-width: 1025px) {
|
|
678
|
+
.calendar-popup.dual-calendar-mode.append-to-body {
|
|
679
|
+
max-width: 600px;
|
|
680
|
+
}
|
|
681
|
+
} */
|
|
682
|
+
|
|
683
|
+
@media (max-width: 1024px) {
|
|
684
|
+
.calendar-popup {
|
|
685
|
+
width: 100%;
|
|
686
|
+
max-width: 320px;
|
|
687
|
+
max-height: 300px;
|
|
688
|
+
overflow: auto;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.calendar-popup.dual-calendar-mode {
|
|
692
|
+
width: 100%;
|
|
693
|
+
max-width: 100%;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
.calendar-popup.has-ranges {
|
|
698
|
+
flex-direction: column;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.calendar-popup.has-ranges .ranges {
|
|
702
|
+
border-right: none;
|
|
703
|
+
border-bottom: 1px solid #eee;
|
|
704
|
+
padding-right: 0;
|
|
705
|
+
margin-right: 0;
|
|
706
|
+
padding-bottom: 16px;
|
|
707
|
+
margin-bottom: 16px;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/* --------------------------
|
|
713
|
+
SCROLLBAR STYLING
|
|
714
|
+
---------------------------*/
|
|
715
|
+
.ranges::-webkit-scrollbar {
|
|
716
|
+
width: 6px;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
.ranges::-webkit-scrollbar-track {
|
|
720
|
+
background: #f1f1f1;
|
|
721
|
+
border-radius: 3px;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.ranges::-webkit-scrollbar-thumb {
|
|
725
|
+
background: #888;
|
|
726
|
+
border-radius: 3px;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.ranges::-webkit-scrollbar-thumb:hover {
|
|
730
|
+
background: #555;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.w-100 {
|
|
734
|
+
width: 100%;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
.flex-grow-1 {
|
|
738
|
+
flex-grow: 1;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
.calendar-input.calendar-input-has-error {
|
|
742
|
+
@apply border-[#d11e14];
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
.calendar-input:disabled {
|
|
746
|
+
cursor: not-allowed;
|
|
747
|
+
border-color: rgb(227 227 231);
|
|
748
|
+
background-color: rgb(244 244 246);
|
|
749
|
+
color: rgb(161 163 174);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.btn-apply:disabled {
|
|
753
|
+
cursor: not-allowed !important;
|
|
754
|
+
opacity: 0.7;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.calendar-day.calendar-day-keyboard-focus:not(.disabled):not(.other-month) {
|
|
758
|
+
outline: 0px solid #000;
|
|
759
|
+
/* outline-offset: 0.5px; */
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/* --------------------------
|
|
763
|
+
COMPACT VARIANT
|
|
764
|
+
Opt-in via [compact]="true". All rules are scoped to
|
|
765
|
+
.calendar-popup.compact so the default layout is never affected.
|
|
766
|
+
---------------------------*/
|
|
767
|
+
.calendar-popup.compact {
|
|
768
|
+
width: 240px;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
.calendar-popup.compact.has-ranges {
|
|
772
|
+
width: 380px;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
.calendar-popup.compact.dual-calendar-mode {
|
|
776
|
+
width: 480px;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
.calendar-popup.compact.dual-calendar-mode.has-ranges {
|
|
780
|
+
width: 600px;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/* Header */
|
|
784
|
+
.calendar-popup.compact .header {
|
|
785
|
+
padding: 8px 0;
|
|
786
|
+
min-height: 40px;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.calendar-popup.compact .month-year {
|
|
790
|
+
font-size: 13px;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.calendar-popup.compact .nav-btn {
|
|
794
|
+
height: 24px;
|
|
795
|
+
width: 24px;
|
|
796
|
+
padding: 6px 8px;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/* Wrapper padding */
|
|
800
|
+
.calendar-popup.compact .calendar-wrapper {
|
|
801
|
+
padding: 0 8px 8px 8px;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
.calendar-popup.compact .calendar-left,
|
|
805
|
+
.calendar-popup.compact .calendar-right {
|
|
806
|
+
padding: 0 8px 8px;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/* Weekday + day cells */
|
|
810
|
+
.calendar-popup.compact .weekday-header {
|
|
811
|
+
font-size: 11px;
|
|
812
|
+
padding: 4px 2px;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
.calendar-popup.compact .calendar-day {
|
|
816
|
+
font-size: 12px;
|
|
817
|
+
padding: 5px 2px;
|
|
818
|
+
line-height: 1.3;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
/* Ranges */
|
|
822
|
+
.calendar-popup.compact .ranges {
|
|
823
|
+
min-width: 120px;
|
|
824
|
+
gap: 2px;
|
|
825
|
+
margin-bottom: 8px;
|
|
826
|
+
padding-bottom: 8px;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
.calendar-popup.compact.has-ranges .ranges {
|
|
830
|
+
padding: 6px;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.calendar-popup.compact .range-btn {
|
|
834
|
+
font-size: 12px;
|
|
835
|
+
padding: 5px 8px;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/* Timepicker */
|
|
839
|
+
.calendar-popup.compact .timepicker-section {
|
|
840
|
+
margin-top: 8px;
|
|
841
|
+
padding-top: 8px;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
.calendar-popup.compact .timepicker-label {
|
|
845
|
+
font-size: 11px;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/* Footer */
|
|
849
|
+
.calendar-popup.compact .footer {
|
|
850
|
+
padding: 8px;
|
|
851
|
+
gap: 6px;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
.calendar-popup.compact .btn-cancel,
|
|
855
|
+
.calendar-popup.compact .btn-apply {
|
|
856
|
+
font-size: 11px;
|
|
857
|
+
padding: 6px 12px;
|
|
858
|
+
min-width: 64px;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
/* Month / year quick-pick */
|
|
862
|
+
.calendar-popup.compact .bk-month-year-btn {
|
|
863
|
+
@apply text-[13px] py-px px-1;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
.calendar-popup.compact .nav-btn img {
|
|
867
|
+
width: 12px;
|
|
868
|
+
height: 8px;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.calendar-popup.compact .bk-nav-btn-year img {
|
|
872
|
+
width: 12px;
|
|
873
|
+
height: 12px;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
.calendar-popup.compact .bk-grid-picker {
|
|
877
|
+
/* Matches the compact day table's rendered height (thead + 6 rows). */
|
|
878
|
+
@apply h-[178px];
|
|
879
|
+
/* Unlike the default size — where the month/year grid's natural height already fills its
|
|
880
|
+
256px box almost exactly — compact's smaller gap/cell padding renders noticeably shorter
|
|
881
|
+
than 178px. Top-packing (the base .bk-grid-picker behaviour) then leaves an ugly empty band
|
|
882
|
+
dangling below the Today button. Center the grid + button in the leftover space instead. */
|
|
883
|
+
@apply justify-center;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
.calendar-popup.compact .bk-month-grid,
|
|
887
|
+
.calendar-popup.compact .bk-year-grid {
|
|
888
|
+
@apply gap-1;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.calendar-popup.compact .bk-month-cell,
|
|
892
|
+
.calendar-popup.compact .bk-year-cell {
|
|
893
|
+
@apply text-[11px] py-1.5 px-0.5;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.calendar-popup.compact .bk-today-btn {
|
|
897
|
+
@apply text-[11px] p-[5px];
|
|
898
|
+
}
|