@keenmate/web-daterangepicker 1.7.0 → 1.8.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keenmate/web-daterangepicker",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "Lightweight date picker web component with excellent keyboard navigation and range selection",
5
5
  "type": "module",
6
6
  "main": "./dist/web-daterangepicker.umd.js",
@@ -15,11 +15,11 @@
15
15
  "default": "./dist/web-daterangepicker.js"
16
16
  },
17
17
  "./style.css": "./dist/style.css",
18
- "./scss": "./src/scss/main.scss",
19
- "./scss/variables": "./src/scss/_variables.scss",
20
- "./scss/base": "./src/scss/_base.scss",
18
+ "./css": "./src/css/main.css",
19
+ "./css/variables": "./src/css/_variables.css",
20
+ "./css/base": "./src/css/_base.css",
21
21
  "./dist/*": "./dist/*",
22
- "./src/scss/*": "./src/scss/*",
22
+ "./src/css/*": "./src/css/*",
23
23
  "./package.json": "./package.json"
24
24
  },
25
25
  "sideEffects": [
@@ -29,7 +29,7 @@
29
29
  ],
30
30
  "files": [
31
31
  "dist",
32
- "src/scss"
32
+ "src/css"
33
33
  ],
34
34
  "scripts": {
35
35
  "dev": "vite",
@@ -66,7 +66,6 @@
66
66
  },
67
67
  "devDependencies": {
68
68
  "rimraf": "^5.0.5",
69
- "sass": "^1.69.5",
70
69
  "typescript": "^5.3.3",
71
70
  "vite": "^5.0.8"
72
71
  },
@@ -0,0 +1,67 @@
1
+ /* ==============================================================================
2
+ DATE RANGE PICKER - BADGES
3
+ ==============================================================================
4
+ Badge system for displaying event markers, counts, and labels on calendar days */
5
+
6
+ /* ==============================================================================
7
+ BADGE ROWS (GRID-BASED SYSTEM)
8
+ ============================================================================== */
9
+
10
+ .drp-date-picker__badge-row {
11
+ display: grid;
12
+ grid-template-columns: repeat(7, 1fr);
13
+ gap: var(--drp-spacing-xs);
14
+ max-height: var(--drp-badge-row-height);
15
+ min-height: var(--drp-badge-row-height);
16
+ }
17
+
18
+ .drp-date-picker__badge-cell {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ font-size: var(--drp-font-size-2xs);
23
+ padding: var(--drp-badge-padding-v) var(--drp-badge-padding-h);
24
+ border-radius: var(--drp-badge-border-radius);
25
+ cursor: pointer;
26
+ max-height: var(--drp-badge-row-height);
27
+ }
28
+
29
+ .drp-date-picker__badge-cell:empty {
30
+ visibility: hidden;
31
+ }
32
+
33
+ .drp-date-picker__badge-cell:hover:not(:empty) {
34
+ transform: scale(1.05);
35
+ }
36
+
37
+ /* ==============================================================================
38
+ BADGE TYPE STYLES
39
+ ============================================================================== */
40
+
41
+ /* Number Badge (e.g., day number, count) */
42
+ .drp-date-picker__badge-cell.badge-number {
43
+ background-color: var(--drp-badge-number-bg);
44
+ color: var(--drp-badge-number-color);
45
+ font-size: calc(1.12 * var(--drp-rem)); /* 11.2px */
46
+ font-weight: 600;
47
+ }
48
+
49
+ /* Count Badge (e.g., number of events) */
50
+ .drp-date-picker__badge-cell.badge-count {
51
+ background-color: var(--drp-badge-count-bg);
52
+ color: var(--drp-badge-count-color);
53
+ font-size: calc(1.12 * var(--drp-rem)); /* 11.2px */
54
+ font-weight: 700;
55
+ }
56
+
57
+ /* Text Badge (generic)
58
+ Note: Background colors for specific badge types (holiday, event, birthday, etc.)
59
+ should be defined by the application, not the component library.
60
+ See index.html examples for how to customize badge colors for your use case. */
61
+ .drp-date-picker__badge-cell.badge-text {
62
+ background-color: var(--drp-badge-text-bg);
63
+ color: var(--drp-badge-text-color);
64
+ font-size: calc(1.04 * var(--drp-rem)); /* 10.4px */
65
+ font-weight: 700;
66
+ text-transform: uppercase;
67
+ }
@@ -0,0 +1,232 @@
1
+ /* ==============================================================================
2
+ DATE RANGE PICKER - BASE STYLES
3
+ ==============================================================================
4
+ Base container styles, input field, and calendar popup */
5
+
6
+ /* ==============================================================================
7
+ DATE PICKER INPUT FIELD
8
+ ============================================================================== */
9
+
10
+ /* Input element itself (actual <input> tag) */
11
+ .drp-input {
12
+ width: 100%;
13
+ font-family: var(--drp-font-family, var(--base-font-family, inherit));
14
+ font-size: var(--drp-input-size-md-font);
15
+ line-height: var(--drp-line-height-normal);
16
+ color: var(--drp-input-color);
17
+ background-color: var(--drp-input-background);
18
+ border: var(--drp-border-width-base) solid var(--drp-input-border-color);
19
+ border-radius: var(--drp-border-radius);
20
+ padding: var(--drp-input-size-md-padding-v) var(--drp-input-size-md-padding-h);
21
+ padding-right: calc(var(--drp-input-size-md-padding-h) * 2.5); /* Extra space for calendar icon */
22
+ height: var(--drp-input-size-md-height);
23
+ box-sizing: border-box;
24
+ transition: border-color var(--drp-transition-fast) var(--drp-easing-snappy),
25
+ box-shadow var(--drp-transition-fast) var(--drp-easing-snappy);
26
+ }
27
+
28
+ .drp-input::placeholder {
29
+ color: var(--drp-input-placeholder-color);
30
+ opacity: 0.6;
31
+ }
32
+
33
+ .drp-input:hover:not(:disabled) {
34
+ border-color: var(--drp-input-border-color-hover);
35
+ }
36
+
37
+ .drp-input:focus {
38
+ outline: none;
39
+ border-color: var(--drp-input-border-color-focus);
40
+ box-shadow: 0 0 0 var(--drp-input-focus-shadow-size) var(--drp-input-focus-shadow-color);
41
+ }
42
+
43
+ .drp-input:disabled {
44
+ opacity: var(--drp-opacity-disabled);
45
+ cursor: not-allowed;
46
+ background-color: var(--drp-input-background-disabled);
47
+ }
48
+
49
+ /* Input Size Variants */
50
+ .drp-input.drp-input--xs {
51
+ font-size: var(--drp-input-size-xs-font);
52
+ padding: var(--drp-input-size-xs-padding-v) var(--drp-input-size-xs-padding-h);
53
+ padding-right: calc(var(--drp-input-size-xs-padding-h) * 2.5);
54
+ height: var(--drp-input-size-xs-height);
55
+ }
56
+
57
+ .drp-input.drp-input--sm {
58
+ font-size: var(--drp-input-size-sm-font);
59
+ padding: var(--drp-input-size-sm-padding-v) var(--drp-input-size-sm-padding-h);
60
+ padding-right: calc(var(--drp-input-size-sm-padding-h) * 2.5);
61
+ height: var(--drp-input-size-sm-height);
62
+ }
63
+
64
+ .drp-input.drp-input--lg {
65
+ font-size: var(--drp-input-size-lg-font);
66
+ padding: var(--drp-input-size-lg-padding-v) var(--drp-input-size-lg-padding-h);
67
+ padding-right: calc(var(--drp-input-size-lg-padding-h) * 2.5);
68
+ height: var(--drp-input-size-lg-height);
69
+ }
70
+
71
+ .drp-input.drp-input--xl {
72
+ font-size: var(--drp-input-size-xl-font);
73
+ padding: var(--drp-input-size-xl-padding-v) var(--drp-input-size-xl-padding-h);
74
+ padding-right: calc(var(--drp-input-size-xl-padding-h) * 2.5);
75
+ height: var(--drp-input-size-xl-height);
76
+ }
77
+
78
+ /* ==============================================================================
79
+ INPUT WRAPPER CONTAINER (for positioning calendar icon)
80
+ ============================================================================== */
81
+
82
+ .drp-date-picker-input {
83
+ position: relative;
84
+ cursor: pointer;
85
+ display: inline-block;
86
+ width: 100%;
87
+ }
88
+
89
+ /* Calendar icon */
90
+ .drp-date-picker-input::after {
91
+ content: '📅';
92
+ position: absolute;
93
+ right: var(--drp-input-size-md-padding-h);
94
+ top: 50%;
95
+ transform: translateY(-50%);
96
+ pointer-events: none;
97
+ opacity: var(--drp-input-icon-opacity);
98
+ font-size: var(--drp-input-size-md-icon-size);
99
+ }
100
+
101
+ /* Size variant icon positioning */
102
+ .drp-date-picker-input.drp-date-picker-input--xs::after {
103
+ right: var(--drp-input-size-xs-padding-h);
104
+ font-size: var(--drp-input-size-xs-icon-size);
105
+ }
106
+
107
+ .drp-date-picker-input.drp-date-picker-input--sm::after {
108
+ right: var(--drp-input-size-sm-padding-h);
109
+ font-size: var(--drp-input-size-sm-icon-size);
110
+ }
111
+
112
+ .drp-date-picker-input.drp-date-picker-input--lg::after {
113
+ right: var(--drp-input-size-lg-padding-h);
114
+ font-size: var(--drp-input-size-lg-icon-size);
115
+ }
116
+
117
+ .drp-date-picker-input.drp-date-picker-input--xl::after {
118
+ right: var(--drp-input-size-xl-padding-h);
119
+ font-size: var(--drp-input-size-xl-icon-size);
120
+ }
121
+
122
+ /* ==============================================================================
123
+ CALENDAR POPUP CONTAINER
124
+ ============================================================================== */
125
+
126
+ .drp-date-picker {
127
+ position: absolute;
128
+ z-index: var(--drp-z-index-dropdown);
129
+ font-family: var(--drp-font-family, var(--base-font-family, inherit));
130
+ background: var(--drp-dropdown-background);
131
+ border: var(--drp-border-width-base) solid var(--drp-border-color);
132
+ border-radius: var(--drp-border-radius-lg);
133
+ box-shadow: var(--drp-shadow-xl);
134
+ padding: var(--drp-spacing-md);
135
+ min-width: var(--drp-month-min-width);
136
+ max-width: var(--drp-calendar-max-width);
137
+ box-sizing: border-box;
138
+ user-select: none;
139
+ }
140
+
141
+ /* Hide by default */
142
+ .drp-date-picker:not(.drp-date-picker--visible) {
143
+ display: none;
144
+ }
145
+
146
+ /* Inline mode modifier */
147
+ .drp-date-picker--inline {
148
+ position: relative !important;
149
+ display: block !important;
150
+ z-index: auto;
151
+ min-width: 0;
152
+ max-width: 100%;
153
+ width: fit-content;
154
+ box-sizing: border-box;
155
+ }
156
+
157
+ /* ==============================================================================
158
+ MONTHS CONTAINER (MULTI-MONTH LAYOUT)
159
+ ============================================================================== */
160
+
161
+ .drp-date-picker__months {
162
+ display: flex;
163
+ gap: var(--drp-spacing-lg);
164
+ }
165
+
166
+ /* Allow wrapping for inline mode on small screens */
167
+ .drp-date-picker--inline .drp-date-picker__months {
168
+ flex-wrap: wrap;
169
+ }
170
+
171
+ /* Grid layout mode */
172
+ .drp-date-picker__months--grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(var(--drp-grid-columns, 3), minmax(0, 1fr));
175
+ grid-template-rows: repeat(var(--drp-grid-rows, 2), auto);
176
+ gap: var(--drp-spacing-lg);
177
+ width: 100%;
178
+ }
179
+
180
+ /* Responsive breakpoints for grid */
181
+ @media (max-width: 1200px) {
182
+ .drp-date-picker__months--grid {
183
+ grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 3), minmax(0, 1fr));
184
+ }
185
+ }
186
+
187
+ @media (max-width: 768px) {
188
+ .drp-date-picker__months--grid {
189
+ grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 2), minmax(0, 1fr));
190
+ }
191
+ }
192
+
193
+ @media (max-width: 480px) {
194
+ .drp-date-picker__months--grid {
195
+ grid-template-columns: minmax(0, 1fr);
196
+ }
197
+ }
198
+
199
+ /* ==============================================================================
200
+ INDIVIDUAL MONTH CONTAINER
201
+ ============================================================================== */
202
+
203
+ .drp-date-picker__month {
204
+ flex: 1;
205
+ min-width: var(--drp-month-min-width);
206
+ /* Make month a flex column container so calendar-container can fill vertical space */
207
+ display: flex;
208
+ flex-direction: column;
209
+ }
210
+
211
+ /* Allow shrinking for inline mode */
212
+ .drp-date-picker--inline .drp-date-picker__month {
213
+ min-width: var(--drp-month-min-width-inline);
214
+ }
215
+
216
+ /* Grid layout: remove min-width to allow proper grid sizing */
217
+ .drp-date-picker__months--grid .drp-date-picker__month {
218
+ min-width: 0;
219
+ width: 100%;
220
+ }
221
+
222
+ /* Calendar container for swapping between calendar grid and rolling selector */
223
+ .drp-date-picker__calendar-container {
224
+ position: relative; /* Establishes containing block for absolute positioning */
225
+ /* Fill available vertical space in month container */
226
+ flex: 1;
227
+ display: flex;
228
+ flex-direction: column;
229
+ min-height: 0; /* Allow flex item to shrink below content size if needed */
230
+ /* Calendar grid (weekdays + days) determines minimum size
231
+ Rolling selector overlays absolutely and fills this expanded space */
232
+ }
@@ -0,0 +1,240 @@
1
+ /* ==============================================================================
2
+ DATE RANGE PICKER - CALENDAR GRID
3
+ ==============================================================================
4
+ Weekday labels, days grid, and individual day cells with all states */
5
+
6
+ /* ==============================================================================
7
+ WEEKDAY LABELS
8
+ ============================================================================== */
9
+
10
+ .drp-date-picker__weekdays {
11
+ display: grid;
12
+ grid-template-columns: repeat(7, 1fr);
13
+ gap: var(--drp-spacing-xs);
14
+ margin-bottom: var(--drp-spacing-sm);
15
+ }
16
+
17
+ .drp-date-picker__weekday {
18
+ text-align: center;
19
+ font-size: var(--drp-font-size-xs);
20
+ font-weight: var(--drp-font-weight-semibold);
21
+ color: var(--drp-weekday-color);
22
+ padding: var(--drp-spacing-xs);
23
+ text-transform: uppercase;
24
+ }
25
+
26
+ /* ==============================================================================
27
+ DAYS GRID
28
+ ============================================================================== */
29
+
30
+ .drp-date-picker__days {
31
+ display: flex;
32
+ flex-direction: column;
33
+ gap: var(--drp-spacing-xs);
34
+ margin-bottom: var(--drp-spacing-md);
35
+ }
36
+
37
+ .drp-date-picker__date-row {
38
+ display: grid;
39
+ grid-template-columns: repeat(7, 1fr);
40
+ gap: var(--drp-spacing-xs);
41
+ }
42
+
43
+ /* ==============================================================================
44
+ DAY CELLS
45
+ ============================================================================== */
46
+
47
+ .drp-date-picker__day {
48
+ aspect-ratio: 1;
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ font-size: var(--drp-font-size-sm);
53
+ color: var(--drp-day-text-color);
54
+ border-radius: var(--drp-border-radius-sm);
55
+ cursor: pointer;
56
+ border: var(--drp-day-border-width) solid var(--drp-day-border-color);
57
+ position: relative; /* For absolute positioning of labels */
58
+ }
59
+
60
+ .drp-date-picker__day:hover:not(.drp-date-picker__day--disabled):not(.drp-date-picker__day--other-month) {
61
+ background-color: var(--drp-day-bg-hover);
62
+ border-color: var(--drp-day-border-hover);
63
+ }
64
+
65
+ /* --------------------------------------
66
+ Today
67
+ -------------------------------------- */
68
+ .drp-date-picker__day--today {
69
+ border-color: var(--drp-day-today-border);
70
+ font-weight: var(--drp-font-weight-semibold);
71
+ }
72
+
73
+ /* --------------------------------------
74
+ Selected
75
+ -------------------------------------- */
76
+ .drp-date-picker__day--selected {
77
+ background-color: var(--drp-day-selected-bg);
78
+ color: var(--drp-day-selected-color);
79
+ font-weight: var(--drp-font-weight-semibold);
80
+ }
81
+
82
+ .drp-date-picker__day--selected:hover {
83
+ background-color: var(--drp-day-selected-bg-hover);
84
+ }
85
+
86
+ /* --------------------------------------
87
+ Focused (keyboard navigation)
88
+ -------------------------------------- */
89
+ .drp-date-picker__day--focused {
90
+ outline: var(--drp-day-focused-outline-width) solid var(--drp-day-focused-outline);
91
+ outline-offset: var(--drp-day-focused-outline-offset);
92
+ }
93
+
94
+ /* --------------------------------------
95
+ Disabled
96
+ -------------------------------------- */
97
+ .drp-date-picker__day--disabled {
98
+ color: var(--drp-day-disabled-color);
99
+ opacity: var(--drp-opacity-disabled);
100
+ cursor: not-allowed;
101
+ position: relative;
102
+ }
103
+
104
+ /* Diagonal hatched pattern overlay */
105
+ .drp-date-picker__day--disabled::before {
106
+ content: '';
107
+ position: absolute;
108
+ top: 0;
109
+ left: 0;
110
+ right: 0;
111
+ bottom: 0;
112
+ background-image: repeating-linear-gradient(
113
+ 45deg,
114
+ rgba(0, 0, 0, var(--drp-day-disabled-pattern-opacity)) 0px,
115
+ rgba(0, 0, 0, var(--drp-day-disabled-pattern-opacity)) 1px,
116
+ transparent 1px,
117
+ transparent 6px
118
+ );
119
+ border-radius: var(--drp-border-radius-sm);
120
+ pointer-events: none;
121
+ }
122
+
123
+ .drp-date-picker__day--disabled:hover {
124
+ background-color: transparent;
125
+ border-color: transparent;
126
+ }
127
+
128
+ /* Disabled day that is also in range - show range background behind disabled overlay */
129
+ .drp-date-picker__day--disabled.drp-date-picker__day--in-range {
130
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) calc(var(--drp-day-in-range-bg-opacity) * 100%), transparent);
131
+ }
132
+
133
+ /* --------------------------------------
134
+ Other month days (previous/next month)
135
+ -------------------------------------- */
136
+ .drp-date-picker__day--other-month {
137
+ color: var(--drp-day-other-month-color);
138
+ opacity: var(--drp-opacity-other-month);
139
+ }
140
+
141
+ /* Reset opacity when other-month days are part of range selection */
142
+ .drp-date-picker__day--other-month.drp-date-picker__day--range-start,
143
+ .drp-date-picker__day--other-month.drp-date-picker__day--range-end,
144
+ .drp-date-picker__day--other-month.drp-date-picker__day--in-range,
145
+ .drp-date-picker__day--other-month.drp-date-picker__day--drag-preview {
146
+ opacity: 1;
147
+ }
148
+
149
+ /* --------------------------------------
150
+ Range selection states
151
+ -------------------------------------- */
152
+ .drp-date-picker__day--range-start,
153
+ .drp-date-picker__day--range-end {
154
+ background-color: var(--drp-day-range-bg);
155
+ color: var(--drp-day-range-color);
156
+ font-weight: var(--drp-font-weight-semibold);
157
+ cursor: grab;
158
+ user-select: none;
159
+ }
160
+
161
+ .drp-date-picker__day--range-start:active,
162
+ .drp-date-picker__day--range-end:active {
163
+ cursor: grabbing;
164
+ }
165
+
166
+ .drp-date-picker__day--in-range {
167
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) calc(var(--drp-day-in-range-bg-opacity) * 100%), transparent);
168
+ }
169
+
170
+ .drp-date-picker__day--in-range:hover {
171
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) calc(var(--drp-day-in-range-hover-bg-opacity) * 100%), transparent);
172
+ }
173
+
174
+ /* --------------------------------------
175
+ Dragging states
176
+ -------------------------------------- */
177
+ .drp-date-picker__day--dragging {
178
+ cursor: grabbing !important;
179
+ opacity: var(--drp-opacity-dragging);
180
+ transform: scale(var(--drp-day-dragging-scale));
181
+ transition: transform var(--drp-transition-fast) var(--drp-easing-snappy);
182
+ }
183
+
184
+ .drp-date-picker__day--drag-preview {
185
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) calc(var(--drp-day-drag-preview-bg-opacity) * 100%), transparent);
186
+ border: var(--drp-day-border-width) var(--drp-day-drag-preview-border-style) var(--drp-day-range-bg);
187
+ }
188
+
189
+ .drp-date-picker__day--drag-preview.drp-date-picker__day--range-start,
190
+ .drp-date-picker__day--drag-preview.drp-date-picker__day--range-end {
191
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) calc(var(--drp-day-drag-preview-edge-bg-opacity) * 100%), transparent);
192
+ color: var(--drp-day-range-color);
193
+ }
194
+
195
+ .drp-date-picker__day--drag-invalid {
196
+ background-color: color-mix(in srgb, var(--drp-day-drag-invalid-bg) calc(var(--drp-day-drag-invalid-bg-opacity) * 100%), transparent) !important;
197
+ border-color: var(--drp-day-drag-invalid-bg) !important;
198
+ border-style: dashed !important;
199
+ }
200
+
201
+ /* ==============================================================================
202
+ SPECIAL DATE HIGHLIGHTING (EXAMPLES)
203
+ ==============================================================================
204
+ These are example classes showing how to highlight special dates.
205
+ Applications should define their own classes with appropriate colors.
206
+ The .holiday and .event classes here use component colors as examples only. */
207
+
208
+ .drp-date-picker__day.holiday {
209
+ background-color: color-mix(in srgb, var(--drp-holiday-color) calc(var(--drp-holiday-bg-opacity) * 100%), transparent);
210
+ }
211
+
212
+ .drp-date-picker__day.holiday:hover:not(.drp-date-picker__day--disabled) {
213
+ background-color: color-mix(in srgb, var(--drp-holiday-color) calc(var(--drp-holiday-hover-bg-opacity) * 100%), transparent);
214
+ }
215
+
216
+ .drp-date-picker__day.event {
217
+ background-color: color-mix(in srgb, var(--drp-event-color) calc(var(--drp-event-bg-opacity) * 100%), transparent);
218
+ }
219
+
220
+ .drp-date-picker__day.event:hover:not(.drp-date-picker__day--disabled) {
221
+ background-color: color-mix(in srgb, var(--drp-event-color) calc(var(--drp-event-hover-bg-opacity) * 100%), transparent);
222
+ }
223
+
224
+ /* ==============================================================================
225
+ ROLLING SELECTOR - DISABLED ITEMS
226
+ ==============================================================================
227
+ Styling for disabled years/months in the rolling selector
228
+ (e.g., when outside rollingYearRange/rollingMonthRange or minDate/maxDate) */
229
+
230
+ .drp-date-picker__rolling-item--disabled {
231
+ color: var(--drp-unified-rolling-disabled-color);
232
+ opacity: 0.4;
233
+ cursor: not-allowed;
234
+ pointer-events: none; /* Prevent clicking */
235
+ text-decoration: line-through;
236
+ }
237
+
238
+ .drp-date-picker__rolling-item--disabled:hover {
239
+ background-color: transparent;
240
+ }