@keenmate/web-daterangepicker 1.1.0 → 1.3.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.1.0",
3
+ "version": "1.3.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",
@@ -47,16 +47,16 @@
47
47
 
48
48
  // Number Badge (e.g., day number, count)
49
49
  .drp-date-picker__badge-cell.badge-number {
50
- background-color: $drp-badge-number-bg;
51
- color: $drp-badge-number-color;
50
+ background-color: var(--drp-badge-number-bg);
51
+ color: var(--drp-badge-number-color);
52
52
  font-size: 0.7rem;
53
53
  font-weight: 600;
54
54
  }
55
55
 
56
56
  // Count Badge (e.g., number of events)
57
57
  .drp-date-picker__badge-cell.badge-count {
58
- background-color: $drp-badge-count-bg;
59
- color: $drp-badge-count-color;
58
+ background-color: var(--drp-badge-count-bg);
59
+ color: var(--drp-badge-count-color);
60
60
  font-size: 0.7rem;
61
61
  font-weight: 700;
62
62
  }
@@ -66,8 +66,8 @@
66
66
  // should be defined by the application, not the component library.
67
67
  // See index.html examples for how to customize badge colors for your use case.
68
68
  .drp-date-picker__badge-cell.badge-text {
69
- background-color: $drp-badge-text-bg;
70
- color: $drp-badge-text-color;
69
+ background-color: var(--drp-badge-text-bg);
70
+ color: var(--drp-badge-text-color);
71
71
  font-size: 0.65rem;
72
72
  font-weight: 700;
73
73
  text-transform: uppercase;
@@ -9,9 +9,10 @@
9
9
  // CSS CUSTOM PROPERTIES (CSS VARIABLES)
10
10
  // ==============================================================================
11
11
  // Define CSS custom properties with SCSS fallbacks for runtime customization
12
- // Using :host instead of :root for proper shadow DOM support
12
+ // Using :host for Shadow DOM (web component) and :root for Light DOM (direct class usage)
13
13
 
14
- :host {
14
+ :host,
15
+ :root {
15
16
  // ===========================================================================
16
17
  // SIZING SCALE SYSTEM (THREE INDEPENDENT MULTIPLIERS)
17
18
  // ===========================================================================
@@ -86,24 +87,220 @@
86
87
  --drp-input-padding-h: #{$drp-input-padding-h};
87
88
  --drp-grid-columns: #{$drp-grid-columns};
88
89
  --drp-grid-rows: #{$drp-grid-rows};
90
+
91
+ // ===========================================================================
92
+ // INPUT FIELD SEMANTIC VARIABLES
93
+ // ===========================================================================
94
+ // Semantic variables for input customization (loosely coupled)
95
+
96
+ // Input colors
97
+ --drp-input-background: var(--drp-card-bg);
98
+ --drp-input-color: var(--drp-text-primary);
99
+ --drp-input-border-color: var(--drp-border-color);
100
+ --drp-input-border-color-hover: var(--drp-accent-color);
101
+ --drp-input-border-color-focus: var(--drp-accent-color);
102
+ --drp-input-placeholder-color: var(--drp-text-secondary);
103
+ --drp-input-disabled-background: var(--drp-primary-bg);
104
+
105
+ // Input focus state
106
+ --drp-input-focus-shadow-color: rgba(59, 130, 246, 0.1);
107
+ --drp-input-focus-shadow-size: 3px;
108
+
109
+ // Input icon
110
+ --drp-input-icon-opacity: #{$drp-input-icon-opacity};
111
+
112
+ // ===========================================================================
113
+ // INPUT SIZE VARIANTS (BASE VALUES)
114
+ // ===========================================================================
115
+ // Three size variants for the input element
116
+
117
+ --drp-input-size-sm-font: #{$drp-font-size-sm};
118
+ --drp-input-size-sm-padding-v: #{$drp-spacing-xs};
119
+ --drp-input-size-sm-padding-h: #{$drp-spacing-sm};
120
+ --drp-input-size-sm-height: 2rem;
121
+ --drp-input-size-sm-icon-size: 0.875em;
122
+
123
+ --drp-input-size-md-font: #{$drp-font-size-base};
124
+ --drp-input-size-md-padding-v: #{$drp-spacing-sm};
125
+ --drp-input-size-md-padding-h: #{$padding-base};
126
+ --drp-input-size-md-height: 2.5rem;
127
+ --drp-input-size-md-icon-size: 1em;
128
+
129
+ --drp-input-size-lg-font: #{$drp-font-size-lg};
130
+ --drp-input-size-lg-padding-v: #{$drp-spacing-md};
131
+ --drp-input-size-lg-padding-h: #{$drp-spacing-md};
132
+ --drp-input-size-lg-height: 3rem;
133
+ --drp-input-size-lg-icon-size: 1.125em;
134
+
135
+ // ===========================================================================
136
+ // HEADER & NAVIGATION SEMANTIC VARIABLES
137
+ // ===========================================================================
138
+
139
+ --drp-header-text-color: var(--drp-text-primary);
140
+ --drp-header-bg-hover: var(--drp-primary-bg);
141
+ --drp-header-bg-active: var(--drp-primary-bg-hover);
142
+
143
+ --drp-nav-text-color: var(--drp-text-primary);
144
+ --drp-nav-border-color: var(--drp-border-color);
145
+ --drp-nav-bg-hover: var(--drp-primary-bg);
146
+ --drp-nav-bg-active: var(--drp-primary-bg-hover);
147
+ --drp-nav-border-hover: var(--drp-accent-color);
148
+
149
+ --drp-rolling-bg: var(--drp-primary-bg);
150
+ --drp-rolling-border-color: var(--drp-border-color);
151
+ --drp-rolling-scrollbar-thumb: var(--drp-border-color);
152
+ --drp-rolling-scrollbar-thumb-hover: var(--drp-accent-color);
153
+ --drp-rolling-item-bg-hover: var(--drp-primary-bg);
154
+ --drp-rolling-item-bg-selected: var(--drp-accent-color);
155
+ --drp-rolling-item-color-selected: var(--drp-accent-text-color);
156
+ --drp-rolling-item-bg-selected-hover: var(--drp-accent-color-hover);
157
+
158
+ // ===========================================================================
159
+ // CALENDAR GRID & DAY CELLS SEMANTIC VARIABLES
160
+ // ===========================================================================
161
+
162
+ --drp-weekday-color: var(--drp-text-secondary);
163
+
164
+ --drp-day-text-color: var(--drp-text-primary);
165
+ --drp-day-bg-hover: var(--drp-primary-bg);
166
+ --drp-day-border-hover: var(--drp-accent-color);
167
+ --drp-day-today-border: var(--drp-accent-color);
168
+ --drp-day-selected-bg: var(--drp-accent-color);
169
+ --drp-day-selected-color: var(--drp-accent-text-color);
170
+ --drp-day-selected-bg-hover: var(--drp-accent-color-hover);
171
+ --drp-day-focused-outline: var(--drp-accent-color);
172
+ --drp-day-disabled-color: var(--drp-text-secondary);
173
+ --drp-day-other-month-color: var(--drp-text-secondary);
174
+ --drp-day-range-bg: var(--drp-accent-color);
175
+ --drp-day-range-color: var(--drp-accent-text-color);
176
+
177
+ // ===========================================================================
178
+ // SUMMARY & ACTIONS SEMANTIC VARIABLES
179
+ // ===========================================================================
180
+
181
+ --drp-summary-text-color: var(--drp-text-secondary);
182
+ --drp-summary-border-color: var(--drp-border-color);
183
+ --drp-summary-count-color: var(--drp-accent-color);
184
+
185
+ --drp-button-border-color: var(--drp-border-color);
186
+ --drp-button-bg-hover: var(--drp-primary-bg);
187
+ --drp-button-border-hover: var(--drp-accent-color);
188
+ --drp-button-today-color: var(--drp-accent-color);
189
+ --drp-button-clear-color: var(--drp-text-secondary);
190
+ --drp-button-cancel-color: var(--drp-text-secondary);
191
+ --drp-button-apply-bg: var(--drp-accent-color);
192
+ --drp-button-apply-color: var(--drp-button-text-color);
193
+ --drp-button-apply-border: var(--drp-accent-color);
194
+ --drp-button-apply-bg-hover: var(--drp-accent-color-hover);
195
+
196
+ // ===========================================================================
197
+ // BADGE SYSTEM SEMANTIC VARIABLES
198
+ // ===========================================================================
199
+
200
+ --drp-badge-number-bg: var(--drp-accent-color);
201
+ --drp-badge-number-color: var(--drp-accent-text-color);
202
+ --drp-badge-count-bg: #{$drp-color-error};
203
+ --drp-badge-count-color: #{$drp-color-white};
204
+ --drp-badge-text-bg: var(--drp-text-secondary);
205
+ --drp-badge-text-color: #{$drp-color-white};
206
+
207
+ // ===========================================================================
208
+ // UNIFIED NAV SEMANTIC VARIABLES
209
+ // ===========================================================================
210
+
211
+ --drp-unified-range-text-color: var(--drp-text-primary);
212
+ --drp-unified-range-bg-hover: var(--drp-primary-bg);
213
+ --drp-unified-range-bg-active: var(--drp-primary-bg-hover);
214
+ --drp-unified-month-color: var(--drp-text-secondary);
215
+ --drp-unified-rolling-disabled-color: var(--drp-text-secondary);
89
216
  }
90
217
 
91
218
  // ==============================================================================
92
219
  // DATE PICKER INPUT FIELD
93
220
  // ==============================================================================
94
221
 
222
+ // Input element itself (actual <input> tag)
223
+ .drp-input {
224
+ width: 100%;
225
+ font-family: inherit;
226
+ font-size: var(--drp-input-size-md-font);
227
+ line-height: 1.5;
228
+ color: var(--drp-input-color);
229
+ background-color: var(--drp-input-background);
230
+ border: var(--drp-border-width-base) solid var(--drp-input-border-color);
231
+ border-radius: var(--drp-border-radius);
232
+ padding: var(--drp-input-size-md-padding-v) var(--drp-input-size-md-padding-h);
233
+ padding-right: calc(var(--drp-input-size-md-padding-h) * 2.5); // Extra space for calendar icon
234
+ height: var(--drp-input-size-md-height);
235
+ box-sizing: border-box;
236
+ transition: border-color var(--drp-transition-fast) var(--drp-easing-snappy),
237
+ box-shadow var(--drp-transition-fast) var(--drp-easing-snappy);
238
+
239
+ &::placeholder {
240
+ color: var(--drp-input-placeholder-color);
241
+ opacity: 0.6;
242
+ }
243
+
244
+ &:hover:not(:disabled) {
245
+ border-color: var(--drp-input-border-color-hover);
246
+ }
247
+
248
+ &:focus {
249
+ outline: none;
250
+ border-color: var(--drp-input-border-color-focus);
251
+ box-shadow: 0 0 0 var(--drp-input-focus-shadow-size) var(--drp-input-focus-shadow-color);
252
+ }
253
+
254
+ &:disabled {
255
+ opacity: #{$drp-opacity-disabled};
256
+ cursor: not-allowed;
257
+ background-color: var(--drp-input-disabled-background);
258
+ }
259
+
260
+ // Size variants
261
+ &.drp-input--sm {
262
+ font-size: var(--drp-input-size-sm-font);
263
+ padding: var(--drp-input-size-sm-padding-v) var(--drp-input-size-sm-padding-h);
264
+ padding-right: calc(var(--drp-input-size-sm-padding-h) * 2.5);
265
+ height: var(--drp-input-size-sm-height);
266
+ }
267
+
268
+ &.drp-input--lg {
269
+ font-size: var(--drp-input-size-lg-font);
270
+ padding: var(--drp-input-size-lg-padding-v) var(--drp-input-size-lg-padding-h);
271
+ padding-right: calc(var(--drp-input-size-lg-padding-h) * 2.5);
272
+ height: var(--drp-input-size-lg-height);
273
+ }
274
+ }
275
+
276
+ // Input wrapper container (for positioning calendar icon)
95
277
  .drp-date-picker-input {
96
278
  position: relative;
97
279
  cursor: pointer;
280
+ display: inline-block;
281
+ width: 100%;
98
282
 
283
+ // Calendar icon
99
284
  &::after {
100
285
  content: '📅';
101
286
  position: absolute;
102
- right: var(--drp-input-padding-h);
287
+ right: var(--drp-input-size-md-padding-h);
103
288
  top: 50%;
104
289
  transform: translateY(-50%);
105
290
  pointer-events: none;
106
- opacity: $drp-input-icon-opacity;
291
+ opacity: var(--drp-input-icon-opacity);
292
+ font-size: var(--drp-input-size-md-icon-size);
293
+ }
294
+
295
+ // Size variant icon positioning
296
+ &.drp-date-picker-input--sm::after {
297
+ right: var(--drp-input-size-sm-padding-h);
298
+ font-size: var(--drp-input-size-sm-icon-size);
299
+ }
300
+
301
+ &.drp-date-picker-input--lg::after {
302
+ right: var(--drp-input-size-lg-padding-h);
303
+ font-size: var(--drp-input-size-lg-icon-size);
107
304
  }
108
305
  }
109
306
 
@@ -20,7 +20,7 @@
20
20
  text-align: center;
21
21
  font-size: var(--drp-font-size-xs);
22
22
  font-weight: var(--drp-font-weight-semibold);
23
- color: var(--drp-text-secondary);
23
+ color: var(--drp-weekday-color);
24
24
  padding: var(--drp-spacing-xs);
25
25
  text-transform: uppercase;
26
26
  }
@@ -52,7 +52,7 @@
52
52
  align-items: center;
53
53
  justify-content: center;
54
54
  font-size: var(--drp-font-size-sm);
55
- color: var(--drp-text-primary);
55
+ color: var(--drp-day-text-color);
56
56
  border-radius: var(--drp-border-radius);
57
57
  cursor: pointer;
58
58
  // Scale border width with cell-scale
@@ -60,15 +60,15 @@
60
60
  position: relative; // For absolute positioning of labels
61
61
 
62
62
  &:hover:not(.drp-date-picker__day--disabled):not(.drp-date-picker__day--other-month) {
63
- background-color: var(--drp-primary-bg);
64
- border-color: var(--drp-accent-color);
63
+ background-color: var(--drp-day-bg-hover);
64
+ border-color: var(--drp-day-border-hover);
65
65
  }
66
66
 
67
67
  // --------------------------------------
68
68
  // Today
69
69
  // --------------------------------------
70
70
  &--today {
71
- border-color: var(--drp-accent-color);
71
+ border-color: var(--drp-day-today-border);
72
72
  font-weight: var(--drp-font-weight-semibold);
73
73
  }
74
74
 
@@ -76,12 +76,12 @@
76
76
  // Selected
77
77
  // --------------------------------------
78
78
  &--selected {
79
- background-color: var(--drp-accent-color);
80
- color: var(--drp-accent-text-color);
79
+ background-color: var(--drp-day-selected-bg);
80
+ color: var(--drp-day-selected-color);
81
81
  font-weight: var(--drp-font-weight-semibold);
82
82
 
83
83
  &:hover {
84
- background-color: var(--drp-accent-color-hover);
84
+ background-color: var(--drp-day-selected-bg-hover);
85
85
  }
86
86
  }
87
87
 
@@ -90,7 +90,7 @@
90
90
  // --------------------------------------
91
91
  &--focused {
92
92
  // Scale outline with cell-scale
93
- outline: calc(#{$drp-day-focused-outline-width} * var(--drp-cell-scale)) solid var(--drp-accent-color);
93
+ outline: calc(#{$drp-day-focused-outline-width} * var(--drp-cell-scale)) solid var(--drp-day-focused-outline);
94
94
  outline-offset: calc(#{$drp-day-focused-outline-offset} * var(--drp-cell-scale));
95
95
  }
96
96
 
@@ -98,7 +98,7 @@
98
98
  // Disabled
99
99
  // --------------------------------------
100
100
  &--disabled {
101
- color: var(--drp-text-secondary);
101
+ color: var(--drp-day-disabled-color);
102
102
  opacity: $drp-day-disabled-opacity;
103
103
  cursor: not-allowed;
104
104
  position: relative;
@@ -132,7 +132,7 @@
132
132
  // Other month days (previous/next month)
133
133
  // --------------------------------------
134
134
  &--other-month {
135
- color: var(--drp-text-secondary);
135
+ color: var(--drp-day-other-month-color);
136
136
  opacity: $drp-day-other-month-opacity;
137
137
 
138
138
  // Reset opacity when other-month days are part of range selection
@@ -149,8 +149,8 @@
149
149
  // --------------------------------------
150
150
  &--range-start,
151
151
  &--range-end {
152
- background-color: var(--drp-accent-color);
153
- color: var(--drp-accent-text-color);
152
+ background-color: var(--drp-day-range-bg);
153
+ color: var(--drp-day-range-color);
154
154
  font-weight: var(--drp-font-weight-semibold);
155
155
  cursor: grab;
156
156
  user-select: none;
@@ -161,10 +161,10 @@
161
161
  }
162
162
 
163
163
  &--in-range {
164
- background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-in-range-bg-opacity * 100%, transparent);
164
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) $drp-day-in-range-bg-opacity * 100%, transparent);
165
165
 
166
166
  &:hover {
167
- background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-in-range-hover-bg-opacity * 100%, transparent);
167
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) $drp-day-in-range-hover-bg-opacity * 100%, transparent);
168
168
  }
169
169
  }
170
170
 
@@ -179,14 +179,14 @@
179
179
  }
180
180
 
181
181
  &--drag-preview {
182
- background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-drag-preview-bg-opacity * 100%, transparent);
182
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) $drp-day-drag-preview-bg-opacity * 100%, transparent);
183
183
  // Scale border width with cell-scale
184
- border: calc(#{$drp-day-border-width} * var(--drp-cell-scale)) $drp-day-drag-preview-border-style var(--drp-accent-color);
184
+ border: calc(#{$drp-day-border-width} * var(--drp-cell-scale)) $drp-day-drag-preview-border-style var(--drp-day-range-bg);
185
185
 
186
186
  &.drp-date-picker__day--range-start,
187
187
  &.drp-date-picker__day--range-end {
188
- background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-drag-preview-edge-bg-opacity * 100%, transparent);
189
- color: var(--drp-accent-text-color);
188
+ background-color: color-mix(in srgb, var(--drp-day-range-bg) $drp-day-drag-preview-edge-bg-opacity * 100%, transparent);
189
+ color: var(--drp-day-range-color);
190
190
  }
191
191
  }
192
192
 
@@ -227,7 +227,7 @@
227
227
  // (e.g., when outside rollingYearRange/rollingMonthRange or minDate/maxDate)
228
228
 
229
229
  .drp-date-picker__rolling-item--disabled {
230
- color: var(--drp-text-secondary);
230
+ color: var(--drp-unified-rolling-disabled-color);
231
231
  opacity: 0.4;
232
232
  cursor: not-allowed;
233
233
  pointer-events: none; // Prevent clicking