@keenmate/web-daterangepicker 1.9.4 → 1.10.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/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A lightweight, accessible date picker web component with excellent keyboard navigation and range selection support.
4
4
 
5
+ > **⚠️ Security Notice:** This component intentionally allows raw HTML in rendering callbacks and message content to give developers full control over content display. If you display user-generated content, you must sanitize it yourself. See [HTML Injection (XSS) Notice](#html-injection-xss-notice) for the complete list of affected callbacks and methods.
6
+
5
7
  ## Features
6
8
 
7
9
  - 🎯 **Input Masking** - Auto-format dates as you type with separator insertion
@@ -165,6 +167,8 @@ picker.disabled = true;
165
167
  | `clearSelection()` | Clear the current selection |
166
168
  | `getInputValue()` | Get the current value as a string |
167
169
  | `setInputValue(value: string)` | Set the value |
170
+ | `showMessage(html: string)` | Display a message in the calendar with custom HTML content |
171
+ | `hideMessage()` | Hide the currently displayed message |
168
172
 
169
173
  ## Events
170
174
 
@@ -172,6 +176,7 @@ picker.disabled = true;
172
176
  |-------|--------|-------------|
173
177
  | `date-select` | `{ date?, dateRange?, formattedValue }` | Fired when a date is selected |
174
178
  | `change` | `{ date?, dateRange?, formattedValue }` | Fired when selection changes |
179
+ | `custom-action` | `{ [key: string]: string }` | Fired when a button with `data-action="custom"` is clicked. Detail contains all `data-*` attributes as camelCase keys. |
175
180
 
176
181
  ## Keyboard Shortcuts
177
182
 
@@ -325,6 +330,171 @@ picker.customStylesCallback = () => `
325
330
  `;
326
331
  ```
327
332
 
333
+ ### Date Selection Validation (beforeDateSelectCallback)
334
+
335
+ Validate or modify date selections before they're applied. Supports async validation (e.g., API calls):
336
+
337
+ ```javascript
338
+ const picker = document.querySelector('web-daterangepicker');
339
+
340
+ picker.beforeDateSelectCallback = async (selection) => {
341
+ // selection is Date (single mode) or { start: Date, end: Date } (range mode)
342
+
343
+ // Example: Check availability via API
344
+ const response = await fetch('/api/check-availability', {
345
+ method: 'POST',
346
+ body: JSON.stringify({
347
+ start: selection.start.toISOString(),
348
+ end: selection.end.toISOString()
349
+ })
350
+ });
351
+ const { available, message } = await response.json();
352
+
353
+ if (!available) {
354
+ return {
355
+ action: 'restore',
356
+ message: message,
357
+ showInvalidRange: true // Keep selection visible with error styling
358
+ };
359
+ }
360
+
361
+ return { action: 'accept' };
362
+ };
363
+ ```
364
+
365
+ **Return object options:**
366
+
367
+ | Property | Type | Description |
368
+ |----------|------|-------------|
369
+ | `action` | `'accept' \| 'adjust' \| 'restore' \| 'clear'` | **Required.** What to do with the selection |
370
+ | `message` | `string` | Optional message to display in the calendar |
371
+ | `showInvalidRange` | `boolean` | When `true` with `action: 'restore'`, keeps the invalid selection visible with red error styling |
372
+ | `adjustedDate` | `Date` | For `action: 'adjust'` in single mode - the corrected date |
373
+ | `adjustedStartDate` | `Date` | For `action: 'adjust'` in range mode - the corrected start date |
374
+ | `adjustedEndDate` | `Date` | For `action: 'adjust'` in range mode - the corrected end date |
375
+
376
+ **Action behaviors:**
377
+
378
+ - **`accept`**: Apply the selection as-is. Hides any existing message.
379
+ - **`adjust`**: Apply corrected dates instead (use with `adjustedDate` or `adjustedStartDate`/`adjustedEndDate`)
380
+ - **`restore`**: Revert to previous selection. Use `showInvalidRange: true` to show what was attempted.
381
+ - **`clear`**: Clear the selection entirely.
382
+
383
+ **Example: Minimum nights validation with error display:**
384
+
385
+ ```javascript
386
+ picker.beforeDateSelectCallback = (range) => {
387
+ const nights = Math.floor((range.end - range.start) / (1000 * 60 * 60 * 24));
388
+
389
+ if (nights < 2) {
390
+ return {
391
+ action: 'restore',
392
+ message: 'Minimum 2 nights required',
393
+ showInvalidRange: true // Shows attempted range with red styling
394
+ };
395
+ }
396
+
397
+ if (nights > 14) {
398
+ return {
399
+ action: 'restore',
400
+ message: 'Maximum 14 nights allowed',
401
+ showInvalidRange: true
402
+ };
403
+ }
404
+
405
+ return { action: 'accept' };
406
+ };
407
+ ```
408
+
409
+ ### Bulk Metadata Loading (beforeMonthChangedCallback)
410
+
411
+ Load metadata for all visible dates in a single API call when the user navigates months. Much more efficient than `getDateMetadataCallback` which is called per-date:
412
+
413
+ ```javascript
414
+ const picker = document.querySelector('web-daterangepicker');
415
+
416
+ picker.beforeMonthChangedCallback = async (context) => {
417
+ // context: { year, month, monthIndex, firstVisibleDate, lastVisibleDate }
418
+
419
+ // Fetch availability for all visible dates in one call
420
+ const response = await fetch('/api/availability', {
421
+ method: 'POST',
422
+ body: JSON.stringify({
423
+ start: context.firstVisibleDate.toISOString(),
424
+ end: context.lastVisibleDate.toISOString()
425
+ })
426
+ });
427
+ const data = await response.json();
428
+
429
+ // Build metadata map (key: YYYY-MM-DD, value: DateInfo)
430
+ const metadata = new Map();
431
+ data.forEach(day => {
432
+ metadata.set(day.date, {
433
+ badgeText: `$${day.price}`,
434
+ isDisabled: !day.available,
435
+ dayTooltip: `${day.roomsLeft} rooms available`
436
+ });
437
+ });
438
+
439
+ return { action: 'accept', metadata };
440
+ };
441
+ ```
442
+
443
+ **Return object options:**
444
+
445
+ | Property | Type | Description |
446
+ |----------|------|-------------|
447
+ | `action` | `'accept' \| 'block'` | **Required.** Allow or prevent month navigation |
448
+ | `metadata` | `Map<string, DateInfo>` | Bulk metadata keyed by `YYYY-MM-DD`. Cached and used instead of `getDateMetadataCallback` |
449
+ | `monthHeaders` | `Map<string, string>` | Custom month headers keyed by `YYYY-MM` (e.g., `"2026-01"` → `"Jan 2026 (5 rooms)"`) |
450
+ | `message` | `string` | Optional message to display (useful with `action: 'block'`) |
451
+
452
+ **Performance:** 1 API call per month navigation vs 35-42 calls with `getDateMetadataCallback`.
453
+
454
+ ### Messages & Custom Actions
455
+
456
+ Display contextual messages in the calendar with interactive buttons:
457
+
458
+ ```javascript
459
+ const picker = document.querySelector('web-daterangepicker');
460
+
461
+ // Show a simple message
462
+ picker.showMessage('<p>Please select a check-in date</p>');
463
+
464
+ // Show a message with a close button
465
+ picker.showMessage(`
466
+ <p>Weekend dates have higher rates</p>
467
+ <button data-action="close-message">Got it</button>
468
+ `);
469
+
470
+ // Show a message with custom action buttons
471
+ picker.showMessage(`
472
+ <p>These dates are unavailable. Try:</p>
473
+ <button data-action="custom" data-start-date="2026-01-14" data-end-date="2026-01-17">
474
+ Jan 14 - Jan 17
475
+ </button>
476
+ `);
477
+
478
+ // Handle custom action button clicks
479
+ picker.addEventListener('custom-action', (e) => {
480
+ const { startDate, endDate } = e.detail;
481
+ if (startDate && endDate) {
482
+ picker.selectedRanges = [{
483
+ start: new Date(startDate),
484
+ end: new Date(endDate)
485
+ }];
486
+ picker.hideMessage();
487
+ }
488
+ });
489
+
490
+ // Hide message programmatically
491
+ picker.hideMessage();
492
+ ```
493
+
494
+ **Built-in button actions:**
495
+ - `data-action="close-message"` - Closes the message (no event fired)
496
+ - `data-action="custom"` - Fires `custom-action` event with all `data-*` attributes
497
+
328
498
  ## Range Selection Modes
329
499
 
330
500
  When selecting date ranges that include disabled dates (e.g., selecting a working week where weekends are disabled), you can control how the selection is handled using the `disabled-dates-handling` attribute:
@@ -522,6 +692,16 @@ All KeenMate components follow a consistent naming convention for **Tier 1 varia
522
692
 
523
693
  Learn the pattern once, apply it across all components.
524
694
 
695
+ #### Component Variables Manifest
696
+
697
+ This package exports a `component-variables.manifest.json` file that documents all supported CSS variables for tooling integration (e.g., Theme Designer, IDE autocomplete):
698
+
699
+ ```javascript
700
+ import manifest from '@keenmate/web-daterangepicker/component-variables.manifest.json';
701
+ // manifest.baseVariables - list of --base-* variables the component responds to
702
+ // manifest.componentVariables - list of --drp-* component-specific variables
703
+ ```
704
+
525
705
  ### CSS Custom Properties
526
706
 
527
707
  Customize the appearance using CSS custom properties:
@@ -678,6 +858,29 @@ npm run preview
678
858
 
679
859
  For older browser support, use the compiled `dist/style.css` which is processed by Vite.
680
860
 
861
+ ## HTML Injection (XSS) Notice
862
+
863
+ The following callbacks and methods allow **raw HTML injection** and are intentionally **NOT XSS-safe**. This gives developers full control over rendering but requires sanitizing untrusted data:
864
+
865
+ | Callback/Method | Output Used In | Risk Level |
866
+ |-----------------|---------------|------------|
867
+ | `showMessage(html)` | Message area (innerHTML) | HTML injection |
868
+ | `renderDayCallback` | Day cells (innerHTML) | HTML injection |
869
+ | `renderDayContentCallback` | Day cells (innerHTML) | HTML injection |
870
+ | `getDateMetadataCallback` (badgeText, dayTooltip) | Badges/tooltips (innerHTML) | HTML injection |
871
+ | `formatSummaryCallback` | Summary display (innerHTML) | HTML injection |
872
+ | `getMonthHeaderCallback` | Month headers (innerHTML) | HTML injection |
873
+ | `getUnifiedHeaderCallback` | Unified header (innerHTML) | HTML injection |
874
+ | `customStylesCallback` | Style tag (textContent) | CSS injection |
875
+ | `actionButtons[].label` | Button labels (innerHTML) | HTML injection |
876
+
877
+ **Safe callbacks** (output is escaped or used as data):
878
+ - `beforeDateSelectCallback`, `beforeMonthChangedCallback` (return action objects)
879
+ - `onSelect`, `onChange` (event handlers)
880
+ - `getDateMetadataCallback` (isDisabled, dayClass, badgeClass - CSS class names only)
881
+
882
+ **If displaying user-generated content**, sanitize it before passing to these callbacks or methods.
883
+
681
884
  ## Changelog
682
885
 
683
886
  See [CHANGELOG.md](https://github.com/keenmate/web-daterangepicker/blob/main/CHANGELOG.md) for version history and migration guides.
@@ -0,0 +1,268 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/keenmate/schemas/main/component-variables.schema.json",
3
+ "component": "@keenmate/web-daterangepicker",
4
+ "prefix": "drp",
5
+ "baseVariables": [
6
+ { "name": "base-accent-color", "required": true, "usage": "Selected dates, focus rings, buttons" },
7
+ { "name": "base-accent-color-hover", "required": false, "usage": "Accent hover state" },
8
+ { "name": "base-text-color-1", "required": true, "usage": "Primary text (dates, headers, inputs)" },
9
+ { "name": "base-text-color-3", "required": false, "usage": "Secondary text (weekdays, placeholders)" },
10
+ { "name": "base-text-color-on-accent", "required": false, "usage": "Text on accent backgrounds" },
11
+ { "name": "base-main-bg", "required": true, "usage": "Primary background" },
12
+ { "name": "base-hover-bg", "required": false, "usage": "Hover states for buttons and days" },
13
+ { "name": "base-disabled-bg", "required": false, "usage": "Disabled/readonly surface backgrounds" },
14
+ { "name": "base-border-color", "required": true, "usage": "Input, dropdown, button borders" },
15
+ { "name": "base-border", "required": false, "usage": "Full border shorthand" },
16
+ { "name": "base-dropdown-bg", "required": false, "usage": "Calendar dropdown background" },
17
+ { "name": "base-input-bg", "required": false, "usage": "Input field background" },
18
+ { "name": "base-input-color", "required": false, "usage": "Input text color" },
19
+ { "name": "base-input-border", "required": false, "usage": "Input border" },
20
+ { "name": "base-input-border-hover", "required": false, "usage": "Input border on hover" },
21
+ { "name": "base-input-border-focus", "required": false, "usage": "Input border when focused" },
22
+ { "name": "base-input-placeholder-color", "required": false, "usage": "Placeholder text color" },
23
+ { "name": "base-input-bg-disabled", "required": false, "usage": "Disabled input background" },
24
+ { "name": "base-tooltip-bg", "required": false, "usage": "Tooltip background" },
25
+ { "name": "base-tooltip-text-color", "required": false, "usage": "Tooltip text color" },
26
+ { "name": "base-font-family", "required": false, "usage": "All text in component" },
27
+ { "name": "base-font-size-2xs", "required": false, "usage": "Badge font size (multiplier)" },
28
+ { "name": "base-font-size-xs", "required": false, "usage": "Extra small text (multiplier)" },
29
+ { "name": "base-font-size-sm", "required": false, "usage": "Small text, day cells (multiplier)" },
30
+ { "name": "base-font-size-base", "required": false, "usage": "Base text size (multiplier)" },
31
+ { "name": "base-font-size-lg", "required": false, "usage": "Large text (multiplier)" },
32
+ { "name": "base-font-size-xl", "required": false, "usage": "Extra large text (multiplier)" },
33
+ { "name": "base-font-size-2xl", "required": false, "usage": "Header text (multiplier)" },
34
+ { "name": "base-font-weight-normal", "required": false, "usage": "Normal text weight" },
35
+ { "name": "base-font-weight-medium", "required": false, "usage": "Medium text weight" },
36
+ { "name": "base-font-weight-semibold", "required": false, "usage": "Semibold text (headers, selected)" },
37
+ { "name": "base-line-height-tight", "required": false, "usage": "Tight line height" },
38
+ { "name": "base-line-height-normal", "required": false, "usage": "Normal line height" },
39
+ { "name": "base-line-height-relaxed", "required": false, "usage": "Relaxed line height" },
40
+ { "name": "base-border-radius-sm", "required": false, "usage": "Small radius (days, buttons)" },
41
+ { "name": "base-border-radius-md", "required": false, "usage": "Medium radius (inputs)" },
42
+ { "name": "base-border-radius-lg", "required": false, "usage": "Large radius (dropdown)" },
43
+ { "name": "base-input-size-xs-height", "required": false, "usage": "Extra small input height (multiplier)" },
44
+ { "name": "base-input-size-sm-height", "required": false, "usage": "Small input height (multiplier)" },
45
+ { "name": "base-input-size-md-height", "required": false, "usage": "Medium input height (multiplier)" },
46
+ { "name": "base-input-size-lg-height", "required": false, "usage": "Large input height (multiplier)" },
47
+ { "name": "base-input-size-xl-height", "required": false, "usage": "Extra large input height (multiplier)" }
48
+ ],
49
+ "componentVariables": [
50
+ { "name": "drp-rem", "category": "sizing", "usage": "Base sizing unit for proportional scaling (default: 10px)" },
51
+
52
+ { "name": "drp-spacing-xs", "category": "spacing", "usage": "Extra small spacing (4px)" },
53
+ { "name": "drp-spacing-sm", "category": "spacing", "usage": "Small spacing (8px)" },
54
+ { "name": "drp-spacing-md", "category": "spacing", "usage": "Medium spacing (16px)" },
55
+ { "name": "drp-spacing-lg", "category": "spacing", "usage": "Large spacing (24px)" },
56
+ { "name": "drp-spacing-xl", "category": "spacing", "usage": "Extra large spacing (32px)" },
57
+
58
+ { "name": "drp-font-size-2xs", "category": "typography", "usage": "Extra extra small font (10px)" },
59
+ { "name": "drp-font-size-xs", "category": "typography", "usage": "Extra small font (12px)" },
60
+ { "name": "drp-font-size-sm", "category": "typography", "usage": "Small font (14px)" },
61
+ { "name": "drp-font-size-base", "category": "typography", "usage": "Base font (16px)" },
62
+ { "name": "drp-font-size-lg", "category": "typography", "usage": "Large font (18px)" },
63
+ { "name": "drp-font-size-xl", "category": "typography", "usage": "Extra large font (20px)" },
64
+ { "name": "drp-font-size-2xl", "category": "typography", "usage": "Header font (24px)" },
65
+ { "name": "drp-font-weight-normal", "category": "typography", "usage": "Normal font weight" },
66
+ { "name": "drp-font-weight-medium", "category": "typography", "usage": "Medium font weight" },
67
+ { "name": "drp-font-weight-semibold", "category": "typography", "usage": "Semibold font weight" },
68
+ { "name": "drp-line-height-tight", "category": "typography", "usage": "Tight line height (1.25)" },
69
+ { "name": "drp-line-height-normal", "category": "typography", "usage": "Normal line height (1.5)" },
70
+ { "name": "drp-line-height-relaxed", "category": "typography", "usage": "Relaxed line height (1.75)" },
71
+
72
+ { "name": "drp-dropdown-bg", "category": "surface", "usage": "Calendar dropdown background" },
73
+ { "name": "drp-border-color", "category": "border", "usage": "Default border color" },
74
+ { "name": "drp-border", "category": "border", "usage": "Full border shorthand" },
75
+ { "name": "drp-primary-bg", "category": "surface", "usage": "Primary background color" },
76
+ { "name": "drp-primary-bg-hover", "category": "surface", "usage": "Primary background hover" },
77
+
78
+ { "name": "drp-accent-color", "category": "accent", "usage": "Primary accent color" },
79
+ { "name": "drp-accent-color-hover", "category": "accent", "usage": "Accent color on hover" },
80
+
81
+ { "name": "drp-text-primary", "category": "text", "usage": "Primary text color" },
82
+ { "name": "drp-text-secondary", "category": "text", "usage": "Secondary text color" },
83
+ { "name": "drp-text-color-on-accent", "category": "text", "usage": "Text on accent backgrounds" },
84
+ { "name": "drp-button-accent-text-color", "category": "text", "usage": "Button text on accent" },
85
+
86
+ { "name": "drp-tooltip-bg", "category": "tooltip", "usage": "Tooltip background" },
87
+ { "name": "drp-tooltip-text-color", "category": "tooltip", "usage": "Tooltip text color" },
88
+ { "name": "drp-tooltip-line-height", "category": "tooltip", "usage": "Tooltip line height" },
89
+ { "name": "drp-tooltip-max-width", "category": "tooltip", "usage": "Tooltip max width" },
90
+ { "name": "drp-tooltip-arrow-size", "category": "tooltip", "usage": "Tooltip arrow size" },
91
+
92
+ { "name": "drp-loading-overlay-bg", "category": "loading", "usage": "Loading overlay background" },
93
+ { "name": "drp-loading-spinner-size", "category": "loading", "usage": "Loading spinner size" },
94
+ { "name": "drp-loading-spinner-border-width", "category": "loading", "usage": "Loading spinner border width" },
95
+ { "name": "drp-loading-spinner-color", "category": "loading", "usage": "Loading spinner color" },
96
+ { "name": "drp-loading-spinner-accent", "category": "loading", "usage": "Loading spinner accent" },
97
+
98
+ { "name": "drp-border-width-base", "category": "border", "usage": "Base border width" },
99
+ { "name": "drp-border-radius-sm", "category": "radius", "usage": "Small border radius (4px)" },
100
+ { "name": "drp-border-radius-md", "category": "radius", "usage": "Medium border radius (6px)" },
101
+ { "name": "drp-border-radius-lg", "category": "radius", "usage": "Large border radius (8px)" },
102
+ { "name": "drp-border-radius", "category": "radius", "usage": "Default border radius" },
103
+ { "name": "drp-shadow-xl", "category": "shadow", "usage": "Extra large shadow" },
104
+
105
+ { "name": "drp-transition-fast", "category": "transition", "usage": "Fast transition duration" },
106
+ { "name": "drp-easing-snappy", "category": "transition", "usage": "Snappy easing function" },
107
+
108
+ { "name": "drp-z-index-dropdown", "category": "z-index", "usage": "Dropdown z-index" },
109
+ { "name": "drp-z-index-tooltip", "category": "z-index", "usage": "Tooltip z-index" },
110
+
111
+ { "name": "drp-input-padding-h", "category": "input", "usage": "Input horizontal padding" },
112
+ { "name": "drp-grid-columns", "category": "layout", "usage": "Grid columns" },
113
+ { "name": "drp-grid-rows", "category": "layout", "usage": "Grid rows" },
114
+
115
+ { "name": "drp-opacity-disabled", "category": "opacity", "usage": "Disabled element opacity" },
116
+ { "name": "drp-opacity-other-month", "category": "opacity", "usage": "Other month day opacity" },
117
+ { "name": "drp-opacity-hover", "category": "opacity", "usage": "Hover state opacity" },
118
+ { "name": "drp-opacity-dragging", "category": "opacity", "usage": "Dragging state opacity" },
119
+
120
+ { "name": "drp-input-bg", "category": "input", "usage": "Input background" },
121
+ { "name": "drp-input-color", "category": "input", "usage": "Input text color" },
122
+ { "name": "drp-input-border", "category": "input", "usage": "Input border" },
123
+ { "name": "drp-input-border-hover", "category": "input", "usage": "Input border on hover" },
124
+ { "name": "drp-input-border-focus", "category": "input", "usage": "Input border when focused" },
125
+ { "name": "drp-input-placeholder-color", "category": "input", "usage": "Placeholder text color" },
126
+ { "name": "drp-input-bg-disabled", "category": "input", "usage": "Disabled input background" },
127
+ { "name": "drp-input-focus-shadow-color", "category": "input", "usage": "Input focus shadow color" },
128
+ { "name": "drp-input-focus-shadow-size", "category": "input", "usage": "Input focus shadow size" },
129
+ { "name": "drp-input-icon-opacity", "category": "input", "usage": "Input icon opacity" },
130
+
131
+ { "name": "drp-input-size-xs-font", "category": "input-size", "usage": "XS input font size" },
132
+ { "name": "drp-input-size-xs-padding-v", "category": "input-size", "usage": "XS vertical padding" },
133
+ { "name": "drp-input-size-xs-padding-h", "category": "input-size", "usage": "XS horizontal padding" },
134
+ { "name": "drp-input-size-xs-height", "category": "input-size", "usage": "XS input height" },
135
+ { "name": "drp-input-size-xs-icon-size", "category": "input-size", "usage": "XS icon size" },
136
+ { "name": "drp-input-size-sm-font", "category": "input-size", "usage": "SM input font size" },
137
+ { "name": "drp-input-size-sm-padding-v", "category": "input-size", "usage": "SM vertical padding" },
138
+ { "name": "drp-input-size-sm-padding-h", "category": "input-size", "usage": "SM horizontal padding" },
139
+ { "name": "drp-input-size-sm-height", "category": "input-size", "usage": "SM input height" },
140
+ { "name": "drp-input-size-sm-icon-size", "category": "input-size", "usage": "SM icon size" },
141
+ { "name": "drp-input-size-md-font", "category": "input-size", "usage": "MD input font size" },
142
+ { "name": "drp-input-size-md-padding-v", "category": "input-size", "usage": "MD vertical padding" },
143
+ { "name": "drp-input-size-md-padding-h", "category": "input-size", "usage": "MD horizontal padding" },
144
+ { "name": "drp-input-size-md-height", "category": "input-size", "usage": "MD input height" },
145
+ { "name": "drp-input-size-md-icon-size", "category": "input-size", "usage": "MD icon size" },
146
+ { "name": "drp-input-size-lg-font", "category": "input-size", "usage": "LG input font size" },
147
+ { "name": "drp-input-size-lg-padding-v", "category": "input-size", "usage": "LG vertical padding" },
148
+ { "name": "drp-input-size-lg-padding-h", "category": "input-size", "usage": "LG horizontal padding" },
149
+ { "name": "drp-input-size-lg-height", "category": "input-size", "usage": "LG input height" },
150
+ { "name": "drp-input-size-lg-icon-size", "category": "input-size", "usage": "LG icon size" },
151
+ { "name": "drp-input-size-xl-font", "category": "input-size", "usage": "XL input font size" },
152
+ { "name": "drp-input-size-xl-padding-v", "category": "input-size", "usage": "XL vertical padding" },
153
+ { "name": "drp-input-size-xl-padding-h", "category": "input-size", "usage": "XL horizontal padding" },
154
+ { "name": "drp-input-size-xl-height", "category": "input-size", "usage": "XL input height" },
155
+ { "name": "drp-input-size-xl-icon-size", "category": "input-size", "usage": "XL icon size" },
156
+
157
+ { "name": "drp-header-text-color", "category": "header", "usage": "Header text color" },
158
+ { "name": "drp-header-bg-hover", "category": "header", "usage": "Header hover background" },
159
+ { "name": "drp-header-bg-active", "category": "header", "usage": "Header active background" },
160
+
161
+ { "name": "drp-nav-text-color", "category": "navigation", "usage": "Navigation text color" },
162
+ { "name": "drp-nav-border-color", "category": "navigation", "usage": "Navigation border color" },
163
+ { "name": "drp-nav-border", "category": "navigation", "usage": "Navigation border" },
164
+ { "name": "drp-nav-bg-hover", "category": "navigation", "usage": "Navigation hover background" },
165
+ { "name": "drp-nav-bg-active", "category": "navigation", "usage": "Navigation active background" },
166
+ { "name": "drp-nav-border-hover", "category": "navigation", "usage": "Navigation hover border color" },
167
+ { "name": "drp-nav-border-hover-full", "category": "navigation", "usage": "Navigation hover border full" },
168
+ { "name": "drp-nav-size", "category": "navigation", "usage": "Navigation button size" },
169
+
170
+ { "name": "drp-rolling-bg", "category": "rolling", "usage": "Rolling selector background" },
171
+ { "name": "drp-rolling-border-color", "category": "rolling", "usage": "Rolling selector border color" },
172
+ { "name": "drp-rolling-border", "category": "rolling", "usage": "Rolling selector border" },
173
+ { "name": "drp-rolling-scrollbar-width", "category": "rolling", "usage": "Scrollbar width" },
174
+ { "name": "drp-rolling-scrollbar-thumb", "category": "rolling", "usage": "Scrollbar thumb color" },
175
+ { "name": "drp-rolling-scrollbar-thumb-hover", "category": "rolling", "usage": "Scrollbar thumb hover color" },
176
+ { "name": "drp-rolling-item-bg-hover", "category": "rolling", "usage": "Rolling item hover background" },
177
+ { "name": "drp-rolling-item-color", "category": "rolling", "usage": "Rolling item color" },
178
+ { "name": "drp-rolling-item-bg-selected", "category": "rolling", "usage": "Selected rolling item background" },
179
+ { "name": "drp-rolling-item-color-selected", "category": "rolling", "usage": "Selected rolling item color" },
180
+ { "name": "drp-rolling-item-bg-selected-hover", "category": "rolling", "usage": "Selected rolling item hover background" },
181
+ { "name": "drp-rolling-item-justify-content", "category": "rolling", "usage": "Rolling item justify content" },
182
+ { "name": "drp-rolling-item-min-height", "category": "rolling", "usage": "Rolling item min height" },
183
+ { "name": "drp-rolling-item-padding-v", "category": "rolling", "usage": "Rolling item vertical padding" },
184
+ { "name": "drp-rolling-item-padding-h", "category": "rolling", "usage": "Rolling item horizontal padding" },
185
+ { "name": "drp-rolling-item-font-size", "category": "rolling", "usage": "Rolling item font size" },
186
+ { "name": "drp-rolling-item-font-weight-selected", "category": "rolling", "usage": "Selected rolling item font weight" },
187
+
188
+ { "name": "drp-weekday-color", "category": "calendar", "usage": "Weekday header color" },
189
+
190
+ { "name": "drp-day-text-color", "category": "day", "usage": "Day cell text color" },
191
+ { "name": "drp-day-bg-hover", "category": "day", "usage": "Day cell hover background" },
192
+ { "name": "drp-day-border-hover", "category": "day", "usage": "Day cell hover border color" },
193
+ { "name": "drp-day-today-border", "category": "day", "usage": "Today's date border color" },
194
+ { "name": "drp-day-selected-bg", "category": "day", "usage": "Selected day background" },
195
+ { "name": "drp-day-selected-color", "category": "day", "usage": "Selected day text color" },
196
+ { "name": "drp-day-selected-bg-hover", "category": "day", "usage": "Selected day hover background" },
197
+ { "name": "drp-day-focused-outline", "category": "day", "usage": "Focused day outline color" },
198
+ { "name": "drp-day-disabled-color", "category": "day", "usage": "Disabled day text color" },
199
+ { "name": "drp-day-other-month-color", "category": "day", "usage": "Other month day color" },
200
+ { "name": "drp-day-range-bg", "category": "day", "usage": "Range selection background" },
201
+ { "name": "drp-day-range-color", "category": "day", "usage": "Range selection text color" },
202
+ { "name": "drp-day-border-width", "category": "day", "usage": "Day cell border width" },
203
+ { "name": "drp-day-border-color", "category": "day", "usage": "Day cell border color" },
204
+ { "name": "drp-day-border", "category": "day", "usage": "Day cell border" },
205
+ { "name": "drp-day-focused-outline-width", "category": "day", "usage": "Focused outline width" },
206
+ { "name": "drp-day-focused-outline-offset", "category": "day", "usage": "Focused outline offset" },
207
+ { "name": "drp-day-in-range-bg-opacity", "category": "day", "usage": "In-range day background opacity" },
208
+ { "name": "drp-day-in-range-hover-bg-opacity", "category": "day", "usage": "In-range hover background opacity" },
209
+ { "name": "drp-day-drag-preview-bg-opacity", "category": "day", "usage": "Drag preview background opacity" },
210
+ { "name": "drp-day-drag-preview-edge-bg-opacity", "category": "day", "usage": "Drag preview edge background opacity" },
211
+ { "name": "drp-day-disabled-pattern-opacity", "category": "day", "usage": "Disabled pattern opacity" },
212
+ { "name": "drp-day-dragging-scale", "category": "day", "usage": "Dragging day scale" },
213
+ { "name": "drp-day-drag-preview-border-style", "category": "day", "usage": "Drag preview border style" },
214
+ { "name": "drp-day-drag-border", "category": "day", "usage": "Drag preview border" },
215
+ { "name": "drp-day-drag-invalid-bg", "category": "day", "usage": "Invalid drag background" },
216
+ { "name": "drp-day-drag-invalid-bg-opacity", "category": "day", "usage": "Invalid drag background opacity" },
217
+
218
+ { "name": "drp-holiday-color", "category": "special-dates", "usage": "Holiday text color" },
219
+ { "name": "drp-holiday-bg-opacity", "category": "special-dates", "usage": "Holiday background opacity" },
220
+ { "name": "drp-holiday-hover-bg-opacity", "category": "special-dates", "usage": "Holiday hover background opacity" },
221
+ { "name": "drp-event-color", "category": "special-dates", "usage": "Event text color" },
222
+ { "name": "drp-event-bg-opacity", "category": "special-dates", "usage": "Event background opacity" },
223
+ { "name": "drp-event-hover-bg-opacity", "category": "special-dates", "usage": "Event hover background opacity" },
224
+
225
+ { "name": "drp-summary-text-color", "category": "summary", "usage": "Summary text color" },
226
+ { "name": "drp-summary-border-color", "category": "summary", "usage": "Summary border color" },
227
+ { "name": "drp-summary-border", "category": "summary", "usage": "Summary border" },
228
+ { "name": "drp-summary-count-color", "category": "summary", "usage": "Summary count color" },
229
+
230
+ { "name": "drp-button-border-color", "category": "button", "usage": "Button border color" },
231
+ { "name": "drp-button-border", "category": "button", "usage": "Button border" },
232
+ { "name": "drp-button-bg", "category": "button", "usage": "Button background" },
233
+ { "name": "drp-button-bg-hover", "category": "button", "usage": "Button hover background" },
234
+ { "name": "drp-button-color", "category": "button", "usage": "Button text color" },
235
+ { "name": "drp-button-border-hover", "category": "button", "usage": "Button hover border color" },
236
+ { "name": "drp-button-border-hover-full", "category": "button", "usage": "Button hover border full" },
237
+ { "name": "drp-button-today-color", "category": "button", "usage": "Today button color" },
238
+ { "name": "drp-button-clear-color", "category": "button", "usage": "Clear button color" },
239
+ { "name": "drp-button-cancel-color", "category": "button", "usage": "Cancel button color" },
240
+ { "name": "drp-button-apply-bg", "category": "button", "usage": "Apply button background" },
241
+ { "name": "drp-button-apply-color", "category": "button", "usage": "Apply button text color" },
242
+ { "name": "drp-button-apply-border", "category": "button", "usage": "Apply button border" },
243
+ { "name": "drp-button-apply-bg-hover", "category": "button", "usage": "Apply button hover background" },
244
+
245
+ { "name": "drp-badge-font-size", "category": "badge", "usage": "Badge font size" },
246
+ { "name": "drp-badge-padding-v", "category": "badge", "usage": "Badge vertical padding" },
247
+ { "name": "drp-badge-padding-h", "category": "badge", "usage": "Badge horizontal padding" },
248
+ { "name": "drp-badge-border-radius", "category": "badge", "usage": "Badge border radius" },
249
+ { "name": "drp-badge-max-height", "category": "badge", "usage": "Badge max height" },
250
+ { "name": "drp-badge-row-height", "category": "badge", "usage": "Badge row height" },
251
+ { "name": "drp-badge-number-bg", "category": "badge", "usage": "Number badge background" },
252
+ { "name": "drp-badge-number-color", "category": "badge", "usage": "Number badge text color" },
253
+ { "name": "drp-badge-count-bg", "category": "badge", "usage": "Count badge background" },
254
+ { "name": "drp-badge-count-color", "category": "badge", "usage": "Count badge text color" },
255
+ { "name": "drp-badge-text-bg", "category": "badge", "usage": "Text badge background" },
256
+ { "name": "drp-badge-text-color", "category": "badge", "usage": "Text badge text color" },
257
+
258
+ { "name": "drp-unified-range-text-color", "category": "unified-nav", "usage": "Unified nav range text color" },
259
+ { "name": "drp-unified-range-bg-hover", "category": "unified-nav", "usage": "Unified nav range hover background" },
260
+ { "name": "drp-unified-range-bg-active", "category": "unified-nav", "usage": "Unified nav range active background" },
261
+ { "name": "drp-unified-month-color", "category": "unified-nav", "usage": "Unified nav month color" },
262
+ { "name": "drp-unified-rolling-disabled-color", "category": "unified-nav", "usage": "Unified nav disabled color" },
263
+
264
+ { "name": "drp-month-min-width", "category": "layout", "usage": "Month panel min width" },
265
+ { "name": "drp-month-min-width-inline", "category": "layout", "usage": "Inline month panel min width" },
266
+ { "name": "drp-calendar-max-width", "category": "layout", "usage": "Calendar max width" }
267
+ ]
268
+ }