@keenmate/web-daterangepicker 1.7.0 → 1.8.1

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.
@@ -1,465 +0,0 @@
1
- // ==============================================================================
2
- // DATE RANGE PICKER - BASE STYLES
3
- // ==============================================================================
4
- // Base container styles, FOUC prevention, and root CSS custom properties
5
-
6
- @use 'variables' as *;
7
-
8
- // ==============================================================================
9
- // CSS CUSTOM PROPERTIES (CSS VARIABLES)
10
- // ==============================================================================
11
- // Define CSS custom properties with SCSS fallbacks for runtime customization.
12
- // Using :host for Shadow DOM (web component) and :root for Light DOM (direct class usage).
13
- //
14
- // CSS custom properties inherit through the Shadow DOM boundary, so external
15
- // :root definitions will cascade into the component. The :host/:root selector
16
- // here sets defaults that can be overridden.
17
-
18
- :host,
19
- :root {
20
- // ===========================================================================
21
- // BASE REM UNIT
22
- // ===========================================================================
23
- // Internal 10px-based unit for clean math. Override to scale the component.
24
- // Default 10px produces same visual output as standard 16px rem.
25
- // Set to 1rem in Pure Admin (10px base) to scale with document.
26
- //
27
- // IMPORTANT: For web components, set --drp-rem on the <web-daterangepicker>
28
- // element itself or on :root. Setting on wrapper divs won't work due to
29
- // shadow DOM encapsulation.
30
- --drp-rem: 10px;
31
-
32
- // ===========================================================================
33
- // SPACING
34
- // ===========================================================================
35
-
36
- --drp-spacing-xs: #{$drp-spacing-xs}; // 4px
37
- --drp-spacing-sm: #{$drp-spacing-sm}; // 8px
38
- --drp-spacing-md: #{$drp-spacing-md}; // 16px
39
- --drp-spacing-lg: #{$drp-spacing-lg}; // 24px
40
- --drp-spacing-xl: #{$drp-spacing-xl}; // 32px
41
-
42
- // ===========================================================================
43
- // BASE TYPOGRAPHY (with theme-designer integration)
44
- // ===========================================================================
45
- // Priority chain: --drp-* → --base-* → calc default
46
-
47
- // Font sizes (unitless multipliers from theme-designer, multiplied by --drp-rem)
48
- // Theme-designer outputs: --base-font-size-sm: 1.4 (unitless)
49
- // Component computes: calc(1.4 * 10px) = 14px
50
- --drp-font-size-2xs: calc(var(--base-font-size-2xs, 1) * var(--drp-rem)); // 10px
51
- --drp-font-size-xs: calc(var(--base-font-size-xs, 1.2) * var(--drp-rem)); // 12px
52
- --drp-font-size-sm: calc(var(--base-font-size-sm, 1.4) * var(--drp-rem)); // 14px
53
- --drp-font-size-base: calc(var(--base-font-size-base, 1.6) * var(--drp-rem)); // 16px
54
- --drp-font-size-lg: calc(var(--base-font-size-lg, 1.8) * var(--drp-rem)); // 18px
55
- --drp-font-size-xl: calc(var(--base-font-size-xl, 2) * var(--drp-rem)); // 20px
56
- --drp-font-size-2xl: calc(var(--base-font-size-2xl, 2.4) * var(--drp-rem)); // 24px
57
-
58
- // Font weights (reference theme-designer base variables)
59
- --drp-font-weight-normal: var(--base-font-weight-normal, 400);
60
- --drp-font-weight-medium: var(--base-font-weight-medium, 500);
61
- --drp-font-weight-semibold: var(--base-font-weight-semibold, 600);
62
-
63
- // Line heights (reference theme-designer base variables)
64
- --drp-line-height-tight: var(--base-line-height-tight, 1.25);
65
- --drp-line-height-normal: var(--base-line-height-normal, 1.5);
66
- --drp-line-height-relaxed: var(--base-line-height-relaxed, 1.75);
67
-
68
- // ===========================================================================
69
- // COLORS (not affected by density)
70
- // ===========================================================================
71
-
72
- --drp-dropdown-background: #{$drp-calendar-bg};
73
- --drp-border-color: #{$drp-border-color};
74
- --drp-primary-bg: #{$drp-color-neutral-lighter};
75
- --drp-primary-bg-hover: #{$drp-color-neutral-light};
76
- --drp-accent-color: #{$drp-color-accent};
77
- --drp-accent-color-hover: #{$drp-color-accent-dark};
78
- --drp-text-primary: #{$drp-color-neutral-darkest};
79
- --drp-text-secondary: #{$drp-color-neutral-dark};
80
- --drp-text-on-accent: #{$drp-color-white};
81
- --drp-button-text-color: #{$drp-color-white};
82
- --drp-tooltip-background: #{$drp-tooltip-bg};
83
- --drp-tooltip-text-color: #{$drp-tooltip-color};
84
-
85
- // Loading overlay (for async operations)
86
- --drp-loading-overlay-background: rgba(255, 255, 255, 0.8);
87
- --drp-loading-spinner-color: var(--drp-border-color);
88
- --drp-loading-spinner-accent: var(--drp-accent-color);
89
-
90
- // ===========================================================================
91
- // OTHER PROPERTIES (not affected by density)
92
- // ===========================================================================
93
-
94
- --drp-border-width-base: #{$drp-border-width-base};
95
- --drp-border-radius: #{$drp-border-radius};
96
- --drp-shadow-xl: #{$drp-shadow-xl};
97
- --drp-transition-fast: #{$drp-transition-fast};
98
- --drp-easing-snappy: #{$drp-easing-snappy};
99
- --drp-input-padding-h: #{$drp-input-padding-h};
100
- --drp-grid-columns: #{$drp-grid-columns};
101
- --drp-grid-rows: #{$drp-grid-rows};
102
-
103
- // ===========================================================================
104
- // INPUT FIELD SEMANTIC VARIABLES
105
- // ===========================================================================
106
- // Semantic variables for input customization (loosely coupled)
107
-
108
- // Input colors
109
- --drp-input-background: var(--drp-dropdown-background);
110
- --drp-input-color: var(--drp-text-primary);
111
- --drp-input-border-color: var(--drp-border-color);
112
- --drp-input-border-color-hover: var(--drp-accent-color);
113
- --drp-input-border-color-focus: var(--drp-accent-color);
114
- --drp-input-placeholder-color: var(--drp-text-secondary);
115
- --drp-input-background-disabled: var(--drp-primary-bg);
116
-
117
- // Input focus state
118
- --drp-input-focus-shadow-color: rgba(59, 130, 246, 0.1);
119
- --drp-input-focus-shadow-size: 3px;
120
-
121
- // Input icon
122
- --drp-input-icon-opacity: #{$drp-input-icon-opacity};
123
-
124
- // ===========================================================================
125
- // INPUT SIZE VARIANTS (BASE VALUES)
126
- // ===========================================================================
127
- // Five size variants for the input element (xs, sm, md, lg, xl)
128
-
129
- --drp-input-size-xs-font: #{$font-size-xs};
130
- --drp-input-size-xs-padding-v: #{$padding-xs};
131
- --drp-input-size-xs-padding-h: calc(0.8 * var(--drp-rem)); // 8px (aligned with web-multiselect, was 4px)
132
- --drp-input-size-xs-height: calc(3.1 * var(--drp-rem)); // 31px
133
- --drp-input-size-xs-icon-size: 0.75em;
134
-
135
- --drp-input-size-sm-font: calc(1.3 * var(--drp-rem)); // 13px (aligned with web-multiselect)
136
- --drp-input-size-sm-padding-v: calc(0.5 * var(--drp-rem)); // 5px (aligned with web-multiselect)
137
- --drp-input-size-sm-padding-h: #{$drp-spacing-sm};
138
- --drp-input-size-sm-height: calc(3.3 * var(--drp-rem)); // 33px
139
- --drp-input-size-sm-icon-size: 0.875em;
140
-
141
- --drp-input-size-md-font: calc(1.4 * var(--drp-rem)); // 14px (aligned with web-multiselect, was 16px)
142
- --drp-input-size-md-padding-v: #{$drp-spacing-sm};
143
- --drp-input-size-md-padding-h: #{$padding-base};
144
- --drp-input-size-md-height: calc(3.5 * var(--drp-rem)); // 35px
145
- --drp-input-size-md-icon-size: 1em;
146
-
147
- --drp-input-size-lg-font: calc(1.6 * var(--drp-rem)); // 16px (aligned with web-multiselect, was 18px)
148
- --drp-input-size-lg-padding-v: calc(1.0 * var(--drp-rem)); // 10px (aligned with web-multiselect, was 16px)
149
- --drp-input-size-lg-padding-h: calc(1.4 * var(--drp-rem)); // 14px (aligned with web-multiselect, was 16px)
150
- --drp-input-size-lg-height: calc(3.8 * var(--drp-rem)); // 38px
151
- --drp-input-size-lg-icon-size: 1.125em;
152
-
153
- --drp-input-size-xl-font: calc(1.8 * var(--drp-rem)); // 18px (aligned with web-multiselect, was 20px)
154
- --drp-input-size-xl-padding-v: calc(1.2 * var(--drp-rem)); // 12px (aligned with web-multiselect, was 16px)
155
- --drp-input-size-xl-padding-h: calc(1.6 * var(--drp-rem)); // 16px (aligned with web-multiselect, was 24px)
156
- --drp-input-size-xl-height: calc(4.1 * var(--drp-rem)); // 41px
157
- --drp-input-size-xl-icon-size: 1.25em;
158
-
159
- // ===========================================================================
160
- // HEADER & NAVIGATION SEMANTIC VARIABLES
161
- // ===========================================================================
162
-
163
- --drp-header-text-color: var(--drp-text-primary);
164
- --drp-header-bg-hover: var(--drp-primary-bg);
165
- --drp-header-bg-active: var(--drp-primary-bg-hover);
166
-
167
- --drp-nav-text-color: var(--drp-text-primary);
168
- --drp-nav-border-color: var(--drp-border-color);
169
- --drp-nav-bg-hover: var(--drp-primary-bg);
170
- --drp-nav-bg-active: var(--drp-primary-bg-hover);
171
- --drp-nav-border-hover: var(--drp-accent-color);
172
-
173
- --drp-rolling-bg: var(--drp-primary-bg);
174
- --drp-rolling-border-color: var(--drp-border-color);
175
- --drp-rolling-scrollbar-thumb: var(--drp-border-color);
176
- --drp-rolling-scrollbar-thumb-hover: var(--drp-accent-color);
177
- --drp-rolling-item-bg-hover: var(--drp-primary-bg);
178
- --drp-rolling-item-bg-selected: var(--drp-accent-color);
179
- --drp-rolling-item-color-selected: var(--drp-text-on-accent);
180
- --drp-rolling-item-bg-selected-hover: var(--drp-accent-color-hover);
181
-
182
- // ===========================================================================
183
- // CALENDAR GRID & DAY CELLS SEMANTIC VARIABLES
184
- // ===========================================================================
185
-
186
- --drp-weekday-color: var(--drp-text-secondary);
187
-
188
- --drp-day-text-color: var(--drp-text-primary);
189
- --drp-day-bg-hover: var(--drp-primary-bg);
190
- --drp-day-border-hover: var(--drp-accent-color);
191
- --drp-day-today-border: var(--drp-accent-color);
192
- --drp-day-selected-bg: var(--drp-accent-color);
193
- --drp-day-selected-color: var(--drp-text-on-accent);
194
- --drp-day-selected-bg-hover: var(--drp-accent-color-hover);
195
- --drp-day-focused-outline: var(--drp-accent-color);
196
- --drp-day-disabled-color: var(--drp-text-secondary);
197
- --drp-day-other-month-color: var(--drp-text-secondary);
198
- --drp-day-range-bg: var(--drp-accent-color);
199
- --drp-day-range-color: var(--drp-text-on-accent);
200
-
201
- // ===========================================================================
202
- // SUMMARY & ACTIONS SEMANTIC VARIABLES
203
- // ===========================================================================
204
-
205
- --drp-summary-text-color: var(--drp-text-secondary);
206
- --drp-summary-border-color: var(--drp-border-color);
207
- --drp-summary-count-color: var(--drp-accent-color);
208
-
209
- --drp-button-border-color: var(--drp-border-color);
210
- --drp-button-bg-hover: var(--drp-primary-bg);
211
- --drp-button-border-hover: var(--drp-accent-color);
212
- --drp-button-today-color: var(--drp-accent-color);
213
- --drp-button-clear-color: var(--drp-text-secondary);
214
- --drp-button-cancel-color: var(--drp-text-secondary);
215
- --drp-button-apply-bg: var(--drp-accent-color);
216
- --drp-button-apply-color: var(--drp-button-text-color);
217
- --drp-button-apply-border: var(--drp-accent-color);
218
- --drp-button-apply-bg-hover: var(--drp-accent-color-hover);
219
-
220
- // ===========================================================================
221
- // BADGE SYSTEM SEMANTIC VARIABLES
222
- // ===========================================================================
223
-
224
- --drp-badge-number-bg: var(--drp-accent-color);
225
- --drp-badge-number-color: var(--drp-text-on-accent);
226
- --drp-badge-count-bg: #{$drp-color-error};
227
- --drp-badge-count-color: #{$drp-color-white};
228
- --drp-badge-text-bg: var(--drp-text-secondary);
229
- --drp-badge-text-color: #{$drp-color-white};
230
-
231
- // ===========================================================================
232
- // UNIFIED NAV SEMANTIC VARIABLES
233
- // ===========================================================================
234
-
235
- --drp-unified-range-text-color: var(--drp-text-primary);
236
- --drp-unified-range-bg-hover: var(--drp-primary-bg);
237
- --drp-unified-range-bg-active: var(--drp-primary-bg-hover);
238
- --drp-unified-month-color: var(--drp-text-secondary);
239
- --drp-unified-rolling-disabled-color: var(--drp-text-secondary);
240
- }
241
-
242
- // ==============================================================================
243
- // DATE PICKER INPUT FIELD
244
- // ==============================================================================
245
-
246
- // Input element itself (actual <input> tag)
247
- .drp-input {
248
- width: 100%;
249
- font-family: var(--drp-font-family, var(--base-font-family, inherit));
250
- font-size: var(--drp-input-size-md-font);
251
- line-height: var(--drp-line-height-normal);
252
- color: var(--drp-input-color);
253
- background-color: var(--drp-input-background);
254
- border: var(--drp-border-width-base) solid var(--drp-input-border-color);
255
- border-radius: var(--drp-border-radius);
256
- padding: var(--drp-input-size-md-padding-v) var(--drp-input-size-md-padding-h);
257
- padding-right: calc(var(--drp-input-size-md-padding-h) * 2.5); // Extra space for calendar icon
258
- height: var(--drp-input-size-md-height);
259
- box-sizing: border-box;
260
- transition: border-color var(--drp-transition-fast) var(--drp-easing-snappy),
261
- box-shadow var(--drp-transition-fast) var(--drp-easing-snappy);
262
-
263
- &::placeholder {
264
- color: var(--drp-input-placeholder-color);
265
- opacity: 0.6;
266
- }
267
-
268
- &:hover:not(:disabled) {
269
- border-color: var(--drp-input-border-color-hover);
270
- }
271
-
272
- &:focus {
273
- outline: none;
274
- border-color: var(--drp-input-border-color-focus);
275
- box-shadow: 0 0 0 var(--drp-input-focus-shadow-size) var(--drp-input-focus-shadow-color);
276
- }
277
-
278
- &:disabled {
279
- opacity: #{$drp-opacity-disabled};
280
- cursor: not-allowed;
281
- background-color: var(--drp-input-background-disabled);
282
- }
283
-
284
- // Size variants
285
- &.drp-input--xs {
286
- font-size: var(--drp-input-size-xs-font);
287
- padding: var(--drp-input-size-xs-padding-v) var(--drp-input-size-xs-padding-h);
288
- padding-right: calc(var(--drp-input-size-xs-padding-h) * 2.5);
289
- height: var(--drp-input-size-xs-height);
290
- }
291
-
292
- &.drp-input--sm {
293
- font-size: var(--drp-input-size-sm-font);
294
- padding: var(--drp-input-size-sm-padding-v) var(--drp-input-size-sm-padding-h);
295
- padding-right: calc(var(--drp-input-size-sm-padding-h) * 2.5);
296
- height: var(--drp-input-size-sm-height);
297
- }
298
-
299
- &.drp-input--lg {
300
- font-size: var(--drp-input-size-lg-font);
301
- padding: var(--drp-input-size-lg-padding-v) var(--drp-input-size-lg-padding-h);
302
- padding-right: calc(var(--drp-input-size-lg-padding-h) * 2.5);
303
- height: var(--drp-input-size-lg-height);
304
- }
305
-
306
- &.drp-input--xl {
307
- font-size: var(--drp-input-size-xl-font);
308
- padding: var(--drp-input-size-xl-padding-v) var(--drp-input-size-xl-padding-h);
309
- padding-right: calc(var(--drp-input-size-xl-padding-h) * 2.5);
310
- height: var(--drp-input-size-xl-height);
311
- }
312
- }
313
-
314
- // Input wrapper container (for positioning calendar icon)
315
- .drp-date-picker-input {
316
- position: relative;
317
- cursor: pointer;
318
- display: inline-block;
319
- width: 100%;
320
-
321
- // Calendar icon
322
- &::after {
323
- content: '📅';
324
- position: absolute;
325
- right: var(--drp-input-size-md-padding-h);
326
- top: 50%;
327
- transform: translateY(-50%);
328
- pointer-events: none;
329
- opacity: var(--drp-input-icon-opacity);
330
- font-size: var(--drp-input-size-md-icon-size);
331
- }
332
-
333
- // Size variant icon positioning
334
- &.drp-date-picker-input--xs::after {
335
- right: var(--drp-input-size-xs-padding-h);
336
- font-size: var(--drp-input-size-xs-icon-size);
337
- }
338
-
339
- &.drp-date-picker-input--sm::after {
340
- right: var(--drp-input-size-sm-padding-h);
341
- font-size: var(--drp-input-size-sm-icon-size);
342
- }
343
-
344
- &.drp-date-picker-input--lg::after {
345
- right: var(--drp-input-size-lg-padding-h);
346
- font-size: var(--drp-input-size-lg-icon-size);
347
- }
348
-
349
- &.drp-date-picker-input--xl::after {
350
- right: var(--drp-input-size-xl-padding-h);
351
- font-size: var(--drp-input-size-xl-icon-size);
352
- }
353
- }
354
-
355
- // ==============================================================================
356
- // CALENDAR POPUP CONTAINER
357
- // ==============================================================================
358
-
359
- .drp-date-picker {
360
- position: absolute;
361
- z-index: $drp-z-index-dropdown;
362
- font-family: var(--drp-font-family, var(--base-font-family, inherit));
363
- background: var(--drp-dropdown-background);
364
- border: var(--drp-border-width-base) solid var(--drp-border-color);
365
- border-radius: var(--drp-border-radius);
366
- box-shadow: var(--drp-shadow-xl);
367
- padding: var(--drp-spacing-md);
368
- min-width: $drp-month-min-width;
369
- max-width: $drp-calendar-max-width;
370
- box-sizing: border-box;
371
- user-select: none;
372
-
373
- // Badge row height
374
- --drp-badge-row-height: #{$drp-badge-max-height};
375
-
376
- // Hide by default
377
- &:not(.drp-date-picker--visible) {
378
- display: none;
379
- }
380
-
381
- // Inline mode modifier
382
- &--inline {
383
- position: relative !important;
384
- display: block !important;
385
- z-index: auto;
386
- min-width: 0;
387
- max-width: 100%;
388
- width: fit-content;
389
- box-sizing: border-box;
390
- }
391
- }
392
-
393
- // ==============================================================================
394
- // MONTHS CONTAINER (MULTI-MONTH LAYOUT)
395
- // ==============================================================================
396
-
397
- .drp-date-picker__months {
398
- display: flex;
399
- gap: var(--drp-spacing-lg);
400
-
401
- // Allow wrapping for inline mode on small screens
402
- .drp-date-picker--inline & {
403
- flex-wrap: wrap;
404
- }
405
-
406
- // Grid layout mode
407
- &--grid {
408
- display: grid;
409
- grid-template-columns: repeat(var(--drp-grid-columns, 3), minmax(0, 1fr));
410
- grid-template-rows: repeat(var(--drp-grid-rows, 2), auto);
411
- gap: var(--drp-spacing-lg);
412
- width: 100%;
413
-
414
- // Responsive breakpoints
415
- @media (max-width: 1200px) {
416
- grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 3), minmax(0, 1fr));
417
- }
418
-
419
- @media (max-width: 768px) {
420
- grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 2), minmax(0, 1fr));
421
- }
422
-
423
- @media (max-width: 480px) {
424
- grid-template-columns: minmax(0, 1fr);
425
- }
426
- }
427
- }
428
-
429
- // ==============================================================================
430
- // INDIVIDUAL MONTH CONTAINER
431
- // ==============================================================================
432
-
433
- .drp-date-picker__month {
434
- flex: 1;
435
- min-width: $drp-month-min-width;
436
-
437
- // Make month a flex column container so calendar-container can fill vertical space
438
- display: flex;
439
- flex-direction: column;
440
-
441
- // Allow shrinking for inline mode
442
- .drp-date-picker--inline & {
443
- min-width: $drp-month-min-width-inline;
444
- }
445
-
446
- // Grid layout: remove min-width to allow proper grid sizing
447
- .drp-date-picker__months--grid & {
448
- min-width: 0;
449
- width: 100%;
450
- }
451
- }
452
-
453
- // Calendar container for swapping between calendar grid and rolling selector
454
- .drp-date-picker__calendar-container {
455
- position: relative; // Establishes containing block for absolute positioning
456
-
457
- // Fill available vertical space in month container
458
- flex: 1;
459
- display: flex;
460
- flex-direction: column;
461
- min-height: 0; // Allow flex item to shrink below content size if needed
462
-
463
- // Calendar grid (weekdays + days) determines minimum size
464
- // Rolling selector overlays absolutely and fills this expanded space
465
- }