@keenmate/web-daterangepicker 1.0.0-rc01 → 1.0.0-rc03

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/dist/style.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";:root{--drp-card-bg: #ffffff;--drp-border-color: #e5e7eb;--drp-primary-bg: #f3f4f6;--drp-primary-bg-hover: #e5e7eb;--drp-accent-color: #3b82f6;--drp-accent-color-hover: #2563eb;--drp-text-primary: #111827;--drp-text-secondary: #6b7280;--drp-spacing-xs: .25rem;--drp-spacing-sm: .5rem;--drp-spacing-md: 1rem;--drp-spacing-lg: 1.5rem;--drp-spacing-xl: 2rem;--drp-font-size-2xs: .625rem;--drp-font-size-xs: .75rem;--drp-font-size-sm: .875rem;--drp-font-size-base: 1rem;--drp-font-size-lg: 1.125rem;--drp-font-size-xl: 1.25rem;--drp-font-size-2xl: 1.5rem;--drp-font-weight-medium: 500;--drp-font-weight-semibold: 600;--drp-border-width-base: 1px;--drp-border-radius: .375rem;--drp-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--drp-transition-fast: .15s;--drp-easing-snappy: cubic-bezier(.4, 0, .2, 1);--drp-input-padding-h: .75rem}.pa-date-picker-input{position:relative;cursor:pointer}.pa-date-picker-input:after{content:"📅";position:absolute;right:var(--drp-input-padding-h);top:50%;transform:translateY(-50%);pointer-events:none;opacity:.6}.pa-date-picker{position:absolute;z-index:9500;background:var(--drp-card-bg);border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);box-shadow:var(--drp-shadow-xl);padding:var(--drp-spacing-md);min-width:280px;-webkit-user-select:none;user-select:none}.pa-date-picker:not(.pa-date-picker--visible){display:none}.pa-date-picker__months{display:flex;gap:var(--drp-spacing-lg)}.pa-date-picker__month{flex:1;min-width:280px}.pa-date-picker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--drp-spacing-md);gap:var(--drp-spacing-sm)}.pa-date-picker__month-year{flex:1;text-align:center;font-weight:var(--drp-font-weight-semibold);font-size:var(--drp-font-size-base);padding:var(--drp-spacing-sm) var(--drp-spacing-md);border-radius:var(--drp-border-radius);cursor:pointer;transition:background-color var(--drp-transition-fast) var(--drp-easing-snappy)}.pa-date-picker__month-year:hover{background-color:var(--drp-primary-bg)}.pa-date-picker__month-year:active{background-color:var(--drp-primary-bg-hover)}.pa-date-picker__nav{width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);background:transparent;cursor:pointer;transition:all var(--drp-transition-fast) var(--drp-easing-snappy);font-size:var(--drp-font-size-lg);color:var(--drp-text-primary)}.pa-date-picker__nav:hover{background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.pa-date-picker__nav:active{background-color:var(--drp-primary-bg-hover)}.pa-date-picker__nav--prev:before{content:"‹"}.pa-date-picker__nav--next:before{content:"›"}.pa-date-picker__rolling-selector{display:none}.pa-date-picker__rolling-selector.pa-date-picker__rolling-selector--visible{display:flex}.pa-date-picker__rolling-selector.pa-date-picker__rolling-selector--visible~.pa-date-picker__weekdays,.pa-date-picker__rolling-selector.pa-date-picker__rolling-selector--visible~.pa-date-picker__days{display:none}.pa-date-picker__rolling-selector{gap:var(--drp-spacing-md);margin-bottom:var(--drp-spacing-md)}.pa-date-picker__rolling-list{flex:1;height:100%;overflow-y:auto;border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);scroll-behavior:smooth}.pa-date-picker__rolling-list::-webkit-scrollbar{width:6px}.pa-date-picker__rolling-list::-webkit-scrollbar-track{background:var(--drp-primary-bg)}.pa-date-picker__rolling-list::-webkit-scrollbar-thumb{background:var(--drp-border-color);border-radius:3px}.pa-date-picker__rolling-list::-webkit-scrollbar-thumb:hover{background:var(--drp-accent-color)}.pa-date-picker__rolling-item{padding:var(--drp-spacing-sm) var(--drp-spacing-md);text-align:center;cursor:pointer;font-size:var(--drp-font-size-sm);transition:background-color var(--drp-transition-fast) var(--drp-easing-snappy)}.pa-date-picker__rolling-item:hover{background-color:var(--drp-primary-bg)}.pa-date-picker__rolling-item--selected{background-color:var(--drp-accent-color);color:#fff;font-weight:var(--drp-font-weight-semibold)}.pa-date-picker__rolling-item--selected:hover{background-color:var(--drp-accent-color-hover)}.pa-date-picker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--drp-spacing-xs);margin-bottom:var(--drp-spacing-sm)}.pa-date-picker__weekday{text-align:center;font-size:var(--drp-font-size-xs);font-weight:var(--drp-font-weight-semibold);color:var(--drp-text-secondary);padding:var(--drp-spacing-xs);text-transform:uppercase}.pa-date-picker__days{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--drp-spacing-xs);margin-bottom:var(--drp-spacing-md)}.pa-date-picker__day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:var(--drp-font-size-sm);border-radius:var(--drp-border-radius);cursor:pointer;transition:all var(--drp-transition-fast) var(--drp-easing-snappy);border:2px solid transparent}.pa-date-picker__day:hover:not(.pa-date-picker__day--disabled):not(.pa-date-picker__day--other-month){background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.pa-date-picker__day--today{border-color:var(--drp-accent-color);font-weight:var(--drp-font-weight-semibold)}.pa-date-picker__day--selected{background-color:var(--drp-accent-color);color:#fff;font-weight:var(--drp-font-weight-semibold)}.pa-date-picker__day--selected:hover{background-color:var(--drp-accent-color-hover)}.pa-date-picker__day--focused{outline:2px solid var(--drp-accent-color);outline-offset:2px}.pa-date-picker__day--disabled{color:var(--drp-text-secondary);opacity:.4;cursor:not-allowed}.pa-date-picker__day--disabled:hover{background-color:transparent;border-color:transparent}.pa-date-picker__day--other-month{color:var(--drp-text-secondary);opacity:.5}.pa-date-picker__day--other-month.pa-date-picker__day--range-start,.pa-date-picker__day--other-month.pa-date-picker__day--range-end,.pa-date-picker__day--other-month.pa-date-picker__day--in-range,.pa-date-picker__day--other-month.pa-date-picker__day--drag-preview{opacity:1}.pa-date-picker__day--range-start,.pa-date-picker__day--range-end{background-color:var(--drp-accent-color);color:#fff;font-weight:var(--drp-font-weight-semibold);cursor:grab;-webkit-user-select:none;user-select:none}.pa-date-picker__day--range-start:active,.pa-date-picker__day--range-end:active{cursor:grabbing}.pa-date-picker__day--in-range{background-color:color-mix(in srgb,var(--drp-accent-color) 15%,transparent)}.pa-date-picker__day--in-range:hover{background-color:color-mix(in srgb,var(--drp-accent-color) 25%,transparent)}.pa-date-picker__day--dragging{cursor:grabbing!important;opacity:.7;transform:scale(1.1);transition:transform var(--drp-transition-fast) var(--drp-easing-snappy)}.pa-date-picker__day--drag-preview{background-color:color-mix(in srgb,var(--drp-accent-color) 30%,transparent);border:2px dashed var(--drp-accent-color)}.pa-date-picker__day--drag-preview.pa-date-picker__day--range-start,.pa-date-picker__day--drag-preview.pa-date-picker__day--range-end{background-color:color-mix(in srgb,var(--drp-accent-color) 60%,transparent);color:#fff}.pa-date-picker__summary{text-align:center;padding:var(--drp-spacing-md);border-top:var(--drp-border-width-base) solid var(--drp-border-color);font-size:var(--drp-font-size-sm);color:var(--drp-text-secondary)}.pa-date-picker__summary--visible{display:block}.pa-date-picker__summary--hidden{display:none}.pa-date-picker__summary-count{font-weight:var(--drp-font-weight-semibold);color:var(--drp-accent-color);font-size:var(--drp-font-size-base)}.pa-date-picker__actions{display:flex;gap:var(--drp-spacing-sm);justify-content:space-between;padding-top:var(--drp-spacing-sm);border-top:var(--drp-border-width-base) solid var(--drp-border-color)}.pa-date-picker__button{flex:1;padding:var(--drp-spacing-sm) var(--drp-spacing-md);border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);background:transparent;cursor:pointer;font-size:var(--drp-font-size-sm);font-weight:var(--drp-font-weight-medium);transition:all var(--drp-transition-fast) var(--drp-easing-snappy)}.pa-date-picker__button:hover{background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.pa-date-picker__button--today{color:var(--drp-accent-color)}.pa-date-picker__button--clear{color:var(--drp-text-secondary)}.pa-date-picker__button--apply{background-color:var(--drp-accent-color);color:#fff;border-color:var(--drp-accent-color)}.pa-date-picker__button--apply:hover{background-color:var(--drp-accent-color-hover)}.pa-date-picker__button--cancel{color:var(--drp-text-secondary)}.pa-date-picker--xs{padding:var(--drp-spacing-sm);min-width:240px}.pa-date-picker--xs .pa-date-picker__month-year{font-size:var(--drp-font-size-xs);padding:var(--drp-spacing-xs) var(--drp-spacing-sm)}.pa-date-picker--xs .pa-date-picker__nav{width:1.5rem;height:1.5rem;font-size:var(--drp-font-size-sm)}.pa-date-picker--xs .pa-date-picker__weekday{font-size:var(--drp-font-size-2xs)}.pa-date-picker--xs .pa-date-picker__day{font-size:var(--drp-font-size-xs)}.pa-date-picker--sm{padding:var(--drp-spacing-sm);min-width:260px}.pa-date-picker--sm .pa-date-picker__month-year{font-size:var(--drp-font-size-sm);padding:var(--drp-spacing-xs) var(--drp-spacing-sm)}.pa-date-picker--sm .pa-date-picker__nav{width:1.75rem;height:1.75rem;font-size:var(--drp-font-size-base)}.pa-date-picker--sm .pa-date-picker__day{font-size:var(--drp-font-size-xs)}.pa-date-picker--lg{padding:var(--drp-spacing-lg);min-width:320px}.pa-date-picker--lg .pa-date-picker__month-year{font-size:var(--drp-font-size-lg);padding:var(--drp-spacing-md) var(--drp-spacing-lg)}.pa-date-picker--lg .pa-date-picker__nav{width:2.5rem;height:2.5rem;font-size:var(--drp-font-size-xl)}.pa-date-picker--lg .pa-date-picker__day{font-size:var(--drp-font-size-base)}.pa-date-picker--xl{padding:var(--drp-spacing-xl);min-width:360px}.pa-date-picker--xl .pa-date-picker__month-year{font-size:var(--drp-font-size-xl);padding:var(--drp-spacing-lg) var(--drp-spacing-xl)}.pa-date-picker--xl .pa-date-picker__nav{width:3rem;height:3rem;font-size:var(--drp-font-size-2xl)}.pa-date-picker--xl .pa-date-picker__day{font-size:var(--drp-font-size-lg)}.pa-date-picker--inline{position:static;display:block;box-shadow:none}
1
+ @charset "UTF-8";:host{--drp-card-bg: #ffffff;--drp-border-color: #e5e7eb;--drp-primary-bg: #f3f4f6;--drp-primary-bg-hover: #e5e7eb;--drp-accent-color: #3b82f6;--drp-accent-color-hover: #2563eb;--drp-text-primary: #111827;--drp-text-secondary: #6b7280;--drp-accent-text-color: #ffffff;--drp-button-text-color: #ffffff;--drp-spacing-xs: .25rem;--drp-spacing-sm: .5rem;--drp-spacing-md: 1rem;--drp-spacing-lg: 1.5rem;--drp-spacing-xl: 2rem;--drp-font-size-2xs: .625rem;--drp-font-size-xs: .75rem;--drp-font-size-sm: .875rem;--drp-font-size-base: 1rem;--drp-font-size-lg: 1.125rem;--drp-font-size-xl: 1.25rem;--drp-font-size-2xl: 1.5rem;--drp-font-weight-medium: 500;--drp-font-weight-semibold: 600;--drp-border-width-base: 1px;--drp-border-radius: .375rem;--drp-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);--drp-transition-fast: .15s;--drp-easing-snappy: cubic-bezier(.4, 0, .2, 1);--drp-input-padding-h: .75rem;--drp-grid-columns: 3;--drp-grid-rows: 2}.drp-date-picker-input{position:relative;cursor:pointer}.drp-date-picker-input:after{content:"📅";position:absolute;right:var(--drp-input-padding-h);top:50%;transform:translateY(-50%);pointer-events:none;opacity:.6}.drp-date-picker{position:absolute;z-index:9500;background:var(--drp-card-bg);border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);box-shadow:var(--drp-shadow-xl);padding:var(--drp-spacing-md);min-width:280px;max-width:calc(100vw - 2rem);box-sizing:border-box;-webkit-user-select:none;user-select:none}.drp-date-picker:not(.drp-date-picker--visible){display:none}.drp-date-picker--inline{position:relative!important;display:block!important;z-index:auto;min-width:0;max-width:100%;width:fit-content;box-sizing:border-box}.drp-date-picker__months{display:flex;gap:var(--drp-spacing-lg)}.drp-date-picker--inline .drp-date-picker__months{flex-wrap:wrap}.drp-date-picker__months--grid{display:grid;grid-template-columns:repeat(var(--drp-grid-columns, 3),minmax(0,1fr));grid-template-rows:repeat(var(--drp-grid-rows, 2),auto);gap:var(--drp-spacing-lg);width:100%}@media (max-width: 1200px){.drp-date-picker__months--grid{grid-template-columns:repeat(min(var(--drp-grid-columns, 3),3),minmax(0,1fr))}}@media (max-width: 768px){.drp-date-picker__months--grid{grid-template-columns:repeat(min(var(--drp-grid-columns, 3),2),minmax(0,1fr))}}@media (max-width: 480px){.drp-date-picker__months--grid{grid-template-columns:minmax(0,1fr)}}.drp-date-picker__month{flex:1;min-width:280px}.drp-date-picker--inline .drp-date-picker__month{min-width:250px}.drp-date-picker__months--grid .drp-date-picker__month{min-width:0;width:100%}.drp-date-picker__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--drp-spacing-md);gap:var(--drp-spacing-sm)}.drp-date-picker__month-year{flex:1;text-align:center;font-weight:var(--drp-font-weight-semibold);font-size:var(--drp-font-size-base);color:var(--drp-text-primary);padding:var(--drp-spacing-sm) var(--drp-spacing-md);border-radius:var(--drp-border-radius);cursor:pointer;transition:background-color var(--drp-transition-fast) var(--drp-easing-snappy)}.drp-date-picker__month-year:hover{background-color:var(--drp-primary-bg)}.drp-date-picker__month-year:active{background-color:var(--drp-primary-bg-hover)}.drp-date-picker__nav{width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);background:transparent;cursor:pointer;transition:all var(--drp-transition-fast) var(--drp-easing-snappy);font-size:var(--drp-font-size-lg);color:var(--drp-text-primary)}.drp-date-picker__nav:hover{background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.drp-date-picker__nav:active{background-color:var(--drp-primary-bg-hover)}.drp-date-picker__nav--disabled,.drp-date-picker__nav[disabled]{opacity:.6;cursor:not-allowed;pointer-events:none}.drp-date-picker__nav--disabled:hover,.drp-date-picker__nav[disabled]:hover{background-color:transparent;border-color:var(--drp-border-color)}.drp-date-picker__nav--prev:before{content:"‹"}.drp-date-picker__nav--next:before{content:"›"}.drp-date-picker__rolling-selector{display:none}.drp-date-picker__rolling-selector.drp-date-picker__rolling-selector--visible{display:flex}.drp-date-picker__rolling-selector.drp-date-picker__rolling-selector--visible~.drp-date-picker__weekdays,.drp-date-picker__rolling-selector.drp-date-picker__rolling-selector--visible~.drp-date-picker__days{display:none}.drp-date-picker__rolling-selector{gap:var(--drp-spacing-md);margin-bottom:var(--drp-spacing-md)}.drp-date-picker__rolling-list{flex:1;height:100%;overflow-y:auto;border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);scroll-behavior:smooth}.drp-date-picker__rolling-list::-webkit-scrollbar{width:6px}.drp-date-picker__rolling-list::-webkit-scrollbar-track{background:var(--drp-primary-bg)}.drp-date-picker__rolling-list::-webkit-scrollbar-thumb{background:var(--drp-border-color);border-radius:3px}.drp-date-picker__rolling-list::-webkit-scrollbar-thumb:hover{background:var(--drp-accent-color)}.drp-date-picker__rolling-item{padding:var(--drp-spacing-sm) var(--drp-spacing-md);text-align:center;cursor:pointer;font-size:var(--drp-font-size-sm);transition:background-color var(--drp-transition-fast) var(--drp-easing-snappy)}.drp-date-picker__rolling-item:hover{background-color:var(--drp-primary-bg)}.drp-date-picker__rolling-item--selected{background-color:var(--drp-accent-color);color:var(--drp-accent-text-color);font-weight:var(--drp-font-weight-semibold)}.drp-date-picker__rolling-item--selected:hover{background-color:var(--drp-accent-color-hover)}.drp-date-picker__weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--drp-spacing-xs);margin-bottom:var(--drp-spacing-sm)}.drp-date-picker__weekday{text-align:center;font-size:var(--drp-font-size-xs);font-weight:var(--drp-font-weight-semibold);color:var(--drp-text-secondary);padding:var(--drp-spacing-xs);text-transform:uppercase}.drp-date-picker__days{display:flex;flex-direction:column;gap:var(--drp-spacing-xs);margin-bottom:var(--drp-spacing-md)}.drp-date-picker__date-row{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--drp-spacing-xs)}.drp-date-picker__day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:var(--drp-font-size-sm);color:var(--drp-text-primary);border-radius:var(--drp-border-radius);cursor:pointer;transition:all var(--drp-transition-fast) var(--drp-easing-snappy);border:2px solid transparent;position:relative}.drp-date-picker__day:hover:not(.drp-date-picker__day--disabled):not(.drp-date-picker__day--other-month){background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.drp-date-picker__day--today{border-color:var(--drp-accent-color);font-weight:var(--drp-font-weight-semibold)}.drp-date-picker__day--selected{background-color:var(--drp-accent-color);color:var(--drp-accent-text-color);font-weight:var(--drp-font-weight-semibold)}.drp-date-picker__day--selected:hover{background-color:var(--drp-accent-color-hover)}.drp-date-picker__day--focused{outline:2px solid var(--drp-accent-color);outline-offset:2px}.drp-date-picker__day--disabled{color:var(--drp-text-secondary);opacity:.6;cursor:not-allowed;position:relative}.drp-date-picker__day--disabled:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.1) 0px,rgba(0,0,0,.1) 1px,transparent 1px,transparent 6px);border-radius:var(--drp-border-radius);pointer-events:none}.drp-date-picker__day--disabled:hover{background-color:transparent;border-color:transparent}.drp-date-picker__day--other-month{color:var(--drp-text-secondary);opacity:.5}.drp-date-picker__day--other-month.drp-date-picker__day--range-start,.drp-date-picker__day--other-month.drp-date-picker__day--range-end,.drp-date-picker__day--other-month.drp-date-picker__day--in-range,.drp-date-picker__day--other-month.drp-date-picker__day--drag-preview{opacity:1}.drp-date-picker__day--range-start,.drp-date-picker__day--range-end{background-color:var(--drp-accent-color);color:var(--drp-accent-text-color);font-weight:var(--drp-font-weight-semibold);cursor:grab;-webkit-user-select:none;user-select:none}.drp-date-picker__day--range-start:active,.drp-date-picker__day--range-end:active{cursor:grabbing}.drp-date-picker__day--in-range{background-color:color-mix(in srgb,var(--drp-accent-color) 15%,transparent)}.drp-date-picker__day--in-range:hover{background-color:color-mix(in srgb,var(--drp-accent-color) 25%,transparent)}.drp-date-picker__day--dragging{cursor:grabbing!important;opacity:.7;transform:scale(1.1);transition:transform var(--drp-transition-fast) var(--drp-easing-snappy)}.drp-date-picker__day--drag-preview{background-color:color-mix(in srgb,var(--drp-accent-color) 30%,transparent);border:2px dashed var(--drp-accent-color)}.drp-date-picker__day--drag-preview.drp-date-picker__day--range-start,.drp-date-picker__day--drag-preview.drp-date-picker__day--range-end{background-color:color-mix(in srgb,var(--drp-accent-color) 60%,transparent);color:var(--drp-accent-text-color)}.drp-date-picker__day--drag-invalid{background-color:color-mix(in srgb,#ef4444 20%,transparent)!important;border-color:#ef4444!important;border-style:dashed!important}.drp-date-picker__day.holiday{background-color:color-mix(in srgb,#ef4444 10%,transparent)}.drp-date-picker__day.holiday:hover:not(.drp-date-picker__day--disabled){background-color:color-mix(in srgb,#ef4444 20%,transparent)}.drp-date-picker__day.event{background-color:color-mix(in srgb,#10b981 10%,transparent)}.drp-date-picker__day.event:hover:not(.drp-date-picker__day--disabled){background-color:color-mix(in srgb,#10b981 20%,transparent)}.drp-date-picker__badge-row{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--drp-spacing-xs);margin-bottom:var(--drp-spacing-xs);max-height:1rem;min-height:1rem}.drp-date-picker__badge-cell{display:flex;align-items:center;justify-content:center;font-size:var(--drp-font-size-2xs);padding:1px 2px;border-radius:2px;transition:all var(--drp-transition-fast) var(--drp-easing-snappy);cursor:pointer;height:100%;max-height:1rem}.drp-date-picker__badge-cell:empty{visibility:hidden}.drp-date-picker__badge-cell:hover:not(:empty){transform:scale(1.05)}.drp-date-picker__badge-cell.badge-number{background-color:#10b981;color:#fff;font-size:.7rem;font-weight:600}.drp-date-picker__badge-cell.badge-count{background-color:#ef4444;color:#fff;font-size:.7rem;font-weight:700}.drp-date-picker__badge-cell.badge-text{background-color:#6b7280;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase}.drp-date-picker__summary{text-align:center;padding:var(--drp-spacing-md);border-top:var(--drp-border-width-base) solid var(--drp-border-color);font-size:var(--drp-font-size-sm);color:var(--drp-text-secondary)}.drp-date-picker__summary--visible{display:block}.drp-date-picker__summary--hidden{display:none}.drp-date-picker__summary-count{font-weight:var(--drp-font-weight-semibold);color:var(--drp-accent-color);font-size:var(--drp-font-size-base)}.drp-date-picker__actions{display:flex;gap:var(--drp-spacing-sm);justify-content:space-between;padding-top:var(--drp-spacing-sm);border-top:var(--drp-border-width-base) solid var(--drp-border-color)}.drp-date-picker__button{flex:1;padding:var(--drp-spacing-sm) var(--drp-spacing-md);border:var(--drp-border-width-base) solid var(--drp-border-color);border-radius:var(--drp-border-radius);background:transparent;cursor:pointer;font-size:var(--drp-font-size-sm);font-weight:var(--drp-font-weight-medium);transition:all var(--drp-transition-fast) var(--drp-easing-snappy)}.drp-date-picker__button:hover{background-color:var(--drp-primary-bg);border-color:var(--drp-accent-color)}.drp-date-picker__button--today{color:var(--drp-accent-color)}.drp-date-picker__button--clear{color:var(--drp-text-secondary)}.drp-date-picker__button--apply{background-color:var(--drp-accent-color);color:var(--drp-button-text-color);border-color:var(--drp-accent-color)}.drp-date-picker__button--apply:hover{background-color:var(--drp-accent-color-hover)}.drp-date-picker__button--cancel{color:var(--drp-text-secondary)}.drp-date-picker__tooltip{position:absolute;z-index:9999;background-color:var(--drp-text-primary);color:#fff;padding:var(--drp-spacing-xs) var(--drp-spacing-sm);border-radius:var(--drp-border-radius);font-size:var(--drp-font-size-xs);line-height:1.4;max-width:200px;word-wrap:break-word;pointer-events:none;opacity:0;transition:opacity var(--drp-transition-fast) var(--drp-easing-snappy)}.drp-date-picker__tooltip--visible{opacity:1}.drp-date-picker__tooltip-arrow{position:absolute;background-color:var(--drp-text-primary);width:8px;height:8px;transform:rotate(45deg)}.drp-date-picker__loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#fffc;display:flex;align-items:center;justify-content:center;z-index:9500;border-radius:.375rem}.drp-date-picker__loading-spinner{width:40px;height:40px;border:4px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:drp-spin .8s linear infinite}@keyframes drp-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.drp-font-xs{--drp-font-size-2xs: .4375rem;--drp-font-size-xs: .525rem;--drp-font-size-sm: .6125rem;--drp-font-size-base: .7rem;--drp-font-size-lg: .7875rem;--drp-font-size-xl: .875rem;--drp-font-size-2xl: 1.05rem}.drp-font-sm{--drp-font-size-2xs: .53125rem;--drp-font-size-xs: .6375rem;--drp-font-size-sm: .74375rem;--drp-font-size-base: .85rem;--drp-font-size-lg: .95625rem;--drp-font-size-xl: 1.0625rem;--drp-font-size-2xl: 1.275rem}.drp-font-lg{--drp-font-size-2xs: .75rem;--drp-font-size-xs: .9rem;--drp-font-size-sm: 1.05rem;--drp-font-size-base: 1.2rem;--drp-font-size-lg: 1.35rem;--drp-font-size-xl: 1.5rem;--drp-font-size-2xl: 1.8rem}.drp-font-xl{--drp-font-size-2xs: .875rem;--drp-font-size-xs: 1.05rem;--drp-font-size-sm: 1.225rem;--drp-font-size-base: 1.4rem;--drp-font-size-lg: 1.575rem;--drp-font-size-xl: 1.75rem;--drp-font-size-2xl: 2.1rem}.drp-spacing-xs{--drp-spacing-xs: .175rem;--drp-spacing-sm: .35rem;--drp-spacing-md: .7rem;--drp-spacing-lg: 1.05rem;--drp-spacing-xl: 1.4rem}.drp-spacing-xs .drp-date-picker__month{min-width:196px}.drp-spacing-sm{--drp-spacing-xs: .2125rem;--drp-spacing-sm: .425rem;--drp-spacing-md: .85rem;--drp-spacing-lg: 1.275rem;--drp-spacing-xl: 1.7rem}.drp-spacing-sm .drp-date-picker__month{min-width:238px}.drp-spacing-lg{--drp-spacing-xs: .3rem;--drp-spacing-sm: .6rem;--drp-spacing-md: 1.2rem;--drp-spacing-lg: 1.8rem;--drp-spacing-xl: 2.4rem}.drp-spacing-lg .drp-date-picker__month{min-width:336px}.drp-spacing-xl{--drp-spacing-xs: .35rem;--drp-spacing-sm: .7rem;--drp-spacing-md: 1.4rem;--drp-spacing-lg: 2.1rem;--drp-spacing-xl: 2.8rem}.drp-spacing-xl .drp-date-picker__month{min-width:392px}@media (max-width: 1200px){.drp-responsive.drp-font-xl{--drp-font-size-2xs: .75rem;--drp-font-size-xs: .9rem;--drp-font-size-sm: 1.05rem;--drp-font-size-base: 1.2rem;--drp-font-size-lg: 1.35rem;--drp-font-size-xl: 1.5rem;--drp-font-size-2xl: 1.8rem}}@media (max-width: 768px){.drp-responsive.drp-font-xl{--drp-font-size-2xs: .625rem;--drp-font-size-xs: .75rem;--drp-font-size-sm: .875rem;--drp-font-size-base: 1rem;--drp-font-size-lg: 1.125rem;--drp-font-size-xl: 1.25rem;--drp-font-size-2xl: 1.5rem}}@media (max-width: 1200px){.drp-responsive.drp-font-lg{--drp-font-size-2xs: .625rem;--drp-font-size-xs: .75rem;--drp-font-size-sm: .875rem;--drp-font-size-base: 1rem;--drp-font-size-lg: 1.125rem;--drp-font-size-xl: 1.25rem;--drp-font-size-2xl: 1.5rem}}@media (max-width: 768px){.drp-responsive.drp-font-lg{--drp-font-size-2xs: .53125rem;--drp-font-size-xs: .6375rem;--drp-font-size-sm: .74375rem;--drp-font-size-base: .85rem;--drp-font-size-lg: .95625rem;--drp-font-size-xl: 1.0625rem;--drp-font-size-2xl: 1.275rem}}@media (max-width: 768px){.drp-responsive.drp-font-md{--drp-font-size-2xs: .53125rem;--drp-font-size-xs: .6375rem;--drp-font-size-sm: .74375rem;--drp-font-size-base: .85rem;--drp-font-size-lg: .95625rem;--drp-font-size-xl: 1.0625rem;--drp-font-size-2xl: 1.275rem}}@media (max-width: 768px){.drp-responsive.drp-font-sm{--drp-font-size-2xs: .4375rem;--drp-font-size-xs: .525rem;--drp-font-size-sm: .6125rem;--drp-font-size-base: .7rem;--drp-font-size-lg: .7875rem;--drp-font-size-xl: .875rem;--drp-font-size-2xl: 1.05rem}}@media (max-width: 1200px){.drp-responsive.drp-spacing-xl{--drp-spacing-xs: .3rem;--drp-spacing-sm: .6rem;--drp-spacing-md: 1.2rem;--drp-spacing-lg: 1.8rem;--drp-spacing-xl: 2.4rem}.drp-responsive.drp-spacing-xl .drp-date-picker__month{min-width:336px}}@media (max-width: 768px){.drp-responsive.drp-spacing-xl{--drp-spacing-xs: .25rem;--drp-spacing-sm: .5rem;--drp-spacing-md: 1rem;--drp-spacing-lg: 1.5rem;--drp-spacing-xl: 2rem}.drp-responsive.drp-spacing-xl .drp-date-picker__month{min-width:280px}}@media (max-width: 1200px){.drp-responsive.drp-spacing-lg{--drp-spacing-xs: .25rem;--drp-spacing-sm: .5rem;--drp-spacing-md: 1rem;--drp-spacing-lg: 1.5rem;--drp-spacing-xl: 2rem}.drp-responsive.drp-spacing-lg .drp-date-picker__month{min-width:280px}}@media (max-width: 768px){.drp-responsive.drp-spacing-lg{--drp-spacing-xs: .2125rem;--drp-spacing-sm: .425rem;--drp-spacing-md: .85rem;--drp-spacing-lg: 1.275rem;--drp-spacing-xl: 1.7rem}.drp-responsive.drp-spacing-lg .drp-date-picker__month{min-width:238px}}@media (max-width: 768px){.drp-responsive.drp-spacing-md{--drp-spacing-xs: .2125rem;--drp-spacing-sm: .425rem;--drp-spacing-md: .85rem;--drp-spacing-lg: 1.275rem;--drp-spacing-xl: 1.7rem}.drp-responsive.drp-spacing-md .drp-date-picker__month{min-width:238px}}@media (max-width: 768px){.drp-responsive.drp-spacing-sm{--drp-spacing-xs: .175rem;--drp-spacing-sm: .35rem;--drp-spacing-md: .7rem;--drp-spacing-lg: 1.05rem;--drp-spacing-xl: 1.4rem}.drp-responsive.drp-spacing-sm .drp-date-picker__month{min-width:196px}}.drp-date-picker--xs{padding:var(--drp-spacing-sm);min-width:240px}.drp-date-picker--xs .drp-date-picker__month-year{font-size:var(--drp-font-size-xs);padding:var(--drp-spacing-xs) var(--drp-spacing-sm)}.drp-date-picker--xs .drp-date-picker__nav{width:1.5rem;height:1.5rem;font-size:var(--drp-font-size-sm)}.drp-date-picker--xs .drp-date-picker__weekday{font-size:var(--drp-font-size-2xs)}.drp-date-picker--xs .drp-date-picker__day{font-size:var(--drp-font-size-xs)}.drp-date-picker--sm{padding:var(--drp-spacing-sm);min-width:260px}.drp-date-picker--sm .drp-date-picker__month-year{font-size:var(--drp-font-size-sm);padding:var(--drp-spacing-xs) var(--drp-spacing-sm)}.drp-date-picker--sm .drp-date-picker__nav{width:1.75rem;height:1.75rem;font-size:var(--drp-font-size-base)}.drp-date-picker--sm .drp-date-picker__day{font-size:var(--drp-font-size-xs)}.drp-date-picker--lg{padding:var(--drp-spacing-lg);min-width:320px}.drp-date-picker--lg .drp-date-picker__month-year{font-size:var(--drp-font-size-lg);padding:var(--drp-spacing-md) var(--drp-spacing-lg)}.drp-date-picker--lg .drp-date-picker__nav{width:2.5rem;height:2.5rem;font-size:var(--drp-font-size-xl)}.drp-date-picker--lg .drp-date-picker__day{font-size:var(--drp-font-size-base)}.drp-date-picker--xl{padding:var(--drp-spacing-xl);min-width:360px}.drp-date-picker--xl .drp-date-picker__month-year{font-size:var(--drp-font-size-xl);padding:var(--drp-spacing-lg) var(--drp-spacing-xl)}.drp-date-picker--xl .drp-date-picker__nav{width:3rem;height:3rem;font-size:var(--drp-font-size-2xl)}.drp-date-picker--xl .drp-date-picker__day{font-size:var(--drp-font-size-lg)}.drp-date-picker--inline{position:static;display:block;box-shadow:none}
package/package.json CHANGED
@@ -1,19 +1,25 @@
1
1
  {
2
2
  "name": "@keenmate/web-daterangepicker",
3
- "version": "1.0.0-rc01",
3
+ "version": "1.0.0-rc03",
4
4
  "description": "Lightweight date picker web component with excellent keyboard navigation and range selection",
5
5
  "type": "module",
6
6
  "main": "./dist/date-range-picker.umd.js",
7
7
  "module": "./dist/date-range-picker.js",
8
+ "types": "./dist/index.d.ts",
8
9
  "style": "./dist/style.css",
9
10
  "exports": {
10
11
  ".": {
12
+ "types": "./dist/index.d.ts",
11
13
  "import": "./dist/date-range-picker.js",
12
14
  "require": "./dist/date-range-picker.umd.js",
13
15
  "default": "./dist/date-range-picker.js"
14
16
  },
15
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",
16
21
  "./dist/*": "./dist/*",
22
+ "./src/scss/*": "./src/scss/*",
17
23
  "./package.json": "./package.json"
18
24
  },
19
25
  "sideEffects": [
@@ -22,7 +28,8 @@
22
28
  "*.css"
23
29
  ],
24
30
  "files": [
25
- "dist"
31
+ "dist",
32
+ "src/scss"
26
33
  ],
27
34
  "scripts": {
28
35
  "dev": "vite",
@@ -63,6 +70,8 @@
63
70
  "vite": "^5.0.8"
64
71
  },
65
72
  "dependencies": {
66
- "@floating-ui/dom": "^1.5.3"
73
+ "@floating-ui/dom": "^1.5.3",
74
+ "loglevel": "^1.9.2",
75
+ "loglevel-plugin-prefix": "^0.8.4"
67
76
  }
68
77
  }
@@ -0,0 +1,72 @@
1
+ // ==============================================================================
2
+ // DATE RANGE PICKER - BADGES
3
+ // ==============================================================================
4
+ // Badge system for displaying event markers, counts, and labels on calendar days
5
+
6
+ @use 'variables' as *;
7
+
8
+ // ==============================================================================
9
+ // BADGE ROWS (GRID-BASED SYSTEM)
10
+ // ==============================================================================
11
+
12
+ .drp-date-picker__badge-row {
13
+ display: grid;
14
+ grid-template-columns: repeat(7, 1fr);
15
+ gap: var(--drp-spacing-xs);
16
+ margin-bottom: var(--drp-spacing-xs);
17
+ max-height: $drp-badge-max-height;
18
+ min-height: $drp-badge-max-height;
19
+ }
20
+
21
+ .drp-date-picker__badge-cell {
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ font-size: var(--drp-font-size-2xs);
26
+ padding: $drp-badge-padding-v $drp-badge-padding-h;
27
+ border-radius: $drp-badge-border-radius;
28
+ transition: all var(--drp-transition-fast) var(--drp-easing-snappy);
29
+ cursor: pointer;
30
+ height: 100%;
31
+ max-height: $drp-badge-max-height;
32
+
33
+ &:empty {
34
+ visibility: hidden;
35
+ }
36
+
37
+ &:hover:not(:empty) {
38
+ transform: scale(1.05);
39
+ }
40
+ }
41
+
42
+ // ==============================================================================
43
+ // BADGE TYPE STYLES
44
+ // ==============================================================================
45
+
46
+ // Number Badge (e.g., day number, count)
47
+ .drp-date-picker__badge-cell.badge-number {
48
+ background-color: $drp-badge-number-bg;
49
+ color: $drp-badge-number-color;
50
+ font-size: 0.7rem;
51
+ font-weight: 600;
52
+ }
53
+
54
+ // Count Badge (e.g., number of events)
55
+ .drp-date-picker__badge-cell.badge-count {
56
+ background-color: $drp-badge-count-bg;
57
+ color: $drp-badge-count-color;
58
+ font-size: 0.7rem;
59
+ font-weight: 700;
60
+ }
61
+
62
+ // Text Badge (generic)
63
+ // Note: Background colors for specific badge types (holiday, event, birthday, etc.)
64
+ // should be defined by the application, not the component library.
65
+ // See index.html examples for how to customize badge colors for your use case.
66
+ .drp-date-picker__badge-cell.badge-text {
67
+ background-color: $drp-badge-text-bg;
68
+ color: $drp-badge-text-color;
69
+ font-size: 0.65rem;
70
+ font-weight: 700;
71
+ text-transform: uppercase;
72
+ }
@@ -0,0 +1,171 @@
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 instead of :root for proper shadow DOM support
13
+
14
+ :host {
15
+ // Colors
16
+ --drp-card-bg: #{$drp-calendar-bg};
17
+ --drp-border-color: #{$drp-border-color};
18
+ --drp-primary-bg: #{$drp-color-neutral-lighter};
19
+ --drp-primary-bg-hover: #{$drp-color-neutral-light};
20
+ --drp-accent-color: #{$drp-color-accent};
21
+ --drp-accent-color-hover: #{$drp-color-accent-dark};
22
+ --drp-text-primary: #{$drp-color-neutral-darkest};
23
+ --drp-text-secondary: #{$drp-color-neutral-dark};
24
+ --drp-accent-text-color: #{$drp-color-white};
25
+ --drp-button-text-color: #{$drp-color-white};
26
+
27
+ // Spacing
28
+ --drp-spacing-xs: #{$drp-spacing-xs};
29
+ --drp-spacing-sm: #{$drp-spacing-sm};
30
+ --drp-spacing-md: #{$drp-spacing-md};
31
+ --drp-spacing-lg: #{$drp-spacing-lg};
32
+ --drp-spacing-xl: #{$drp-spacing-xl};
33
+
34
+ // Typography
35
+ --drp-font-size-2xs: #{$drp-font-size-2xs};
36
+ --drp-font-size-xs: #{$drp-font-size-xs};
37
+ --drp-font-size-sm: #{$drp-font-size-sm};
38
+ --drp-font-size-base: #{$drp-font-size-base};
39
+ --drp-font-size-lg: #{$drp-font-size-lg};
40
+ --drp-font-size-xl: #{$drp-font-size-xl};
41
+ --drp-font-size-2xl: #{$drp-font-size-2xl};
42
+ --drp-font-weight-medium: #{$drp-font-weight-medium};
43
+ --drp-font-weight-semibold: #{$drp-font-weight-semibold};
44
+
45
+ // Borders
46
+ --drp-border-width-base: #{$drp-border-width-base};
47
+ --drp-border-radius: #{$drp-border-radius};
48
+
49
+ // Shadows
50
+ --drp-shadow-xl: #{$drp-shadow-xl};
51
+
52
+ // Transitions
53
+ --drp-transition-fast: #{$drp-transition-fast};
54
+ --drp-easing-snappy: #{$drp-easing-snappy};
55
+
56
+ // Input
57
+ --drp-input-padding-h: #{$drp-input-padding-h};
58
+
59
+ // Grid
60
+ --drp-grid-columns: #{$drp-grid-columns};
61
+ --drp-grid-rows: #{$drp-grid-rows};
62
+ }
63
+
64
+ // ==============================================================================
65
+ // DATE PICKER INPUT FIELD
66
+ // ==============================================================================
67
+
68
+ .drp-date-picker-input {
69
+ position: relative;
70
+ cursor: pointer;
71
+
72
+ &::after {
73
+ content: '📅';
74
+ position: absolute;
75
+ right: var(--drp-input-padding-h);
76
+ top: 50%;
77
+ transform: translateY(-50%);
78
+ pointer-events: none;
79
+ opacity: $drp-input-icon-opacity;
80
+ }
81
+ }
82
+
83
+ // ==============================================================================
84
+ // CALENDAR POPUP CONTAINER
85
+ // ==============================================================================
86
+
87
+ .drp-date-picker {
88
+ position: absolute;
89
+ z-index: $drp-z-index-dropdown;
90
+ background: var(--drp-card-bg);
91
+ border: var(--drp-border-width-base) solid var(--drp-border-color);
92
+ border-radius: var(--drp-border-radius);
93
+ box-shadow: var(--drp-shadow-xl);
94
+ padding: var(--drp-spacing-md);
95
+ min-width: $drp-month-min-width;
96
+ max-width: $drp-calendar-max-width;
97
+ box-sizing: border-box;
98
+ user-select: none;
99
+
100
+ // Hide by default
101
+ &:not(.drp-date-picker--visible) {
102
+ display: none;
103
+ }
104
+
105
+ // Inline mode modifier
106
+ &--inline {
107
+ position: relative !important;
108
+ display: block !important;
109
+ z-index: auto;
110
+ min-width: 0;
111
+ max-width: 100%;
112
+ width: fit-content;
113
+ box-sizing: border-box;
114
+ }
115
+ }
116
+
117
+ // ==============================================================================
118
+ // MONTHS CONTAINER (MULTI-MONTH LAYOUT)
119
+ // ==============================================================================
120
+
121
+ .drp-date-picker__months {
122
+ display: flex;
123
+ gap: var(--drp-spacing-lg);
124
+
125
+ // Allow wrapping for inline mode on small screens
126
+ .drp-date-picker--inline & {
127
+ flex-wrap: wrap;
128
+ }
129
+
130
+ // Grid layout mode
131
+ &--grid {
132
+ display: grid;
133
+ grid-template-columns: repeat(var(--drp-grid-columns, 3), minmax(0, 1fr));
134
+ grid-template-rows: repeat(var(--drp-grid-rows, 2), auto);
135
+ gap: var(--drp-spacing-lg);
136
+ width: 100%;
137
+
138
+ // Responsive breakpoints
139
+ @media (max-width: 1200px) {
140
+ grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 3), minmax(0, 1fr));
141
+ }
142
+
143
+ @media (max-width: 768px) {
144
+ grid-template-columns: repeat(min(var(--drp-grid-columns, 3), 2), minmax(0, 1fr));
145
+ }
146
+
147
+ @media (max-width: 480px) {
148
+ grid-template-columns: minmax(0, 1fr);
149
+ }
150
+ }
151
+ }
152
+
153
+ // ==============================================================================
154
+ // INDIVIDUAL MONTH CONTAINER
155
+ // ==============================================================================
156
+
157
+ .drp-date-picker__month {
158
+ flex: 1;
159
+ min-width: $drp-month-min-width;
160
+
161
+ // Allow shrinking for inline mode
162
+ .drp-date-picker--inline & {
163
+ min-width: $drp-month-min-width-inline;
164
+ }
165
+
166
+ // Grid layout: remove min-width to allow proper grid sizing
167
+ .drp-date-picker__months--grid & {
168
+ min-width: 0;
169
+ width: 100%;
170
+ }
171
+ }
@@ -0,0 +1,219 @@
1
+ // ==============================================================================
2
+ // DATE RANGE PICKER - CALENDAR GRID
3
+ // ==============================================================================
4
+ // Weekday labels, days grid, and individual day cells with all states
5
+
6
+ @use 'variables' as *;
7
+
8
+ // ==============================================================================
9
+ // WEEKDAY LABELS
10
+ // ==============================================================================
11
+
12
+ .drp-date-picker__weekdays {
13
+ display: grid;
14
+ grid-template-columns: repeat(7, 1fr);
15
+ gap: var(--drp-spacing-xs);
16
+ margin-bottom: var(--drp-spacing-sm);
17
+ }
18
+
19
+ .drp-date-picker__weekday {
20
+ text-align: center;
21
+ font-size: var(--drp-font-size-xs);
22
+ font-weight: var(--drp-font-weight-semibold);
23
+ color: var(--drp-text-secondary);
24
+ padding: var(--drp-spacing-xs);
25
+ text-transform: uppercase;
26
+ }
27
+
28
+ // ==============================================================================
29
+ // DAYS GRID
30
+ // ==============================================================================
31
+
32
+ .drp-date-picker__days {
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: var(--drp-spacing-xs);
36
+ margin-bottom: var(--drp-spacing-md);
37
+ }
38
+
39
+ .drp-date-picker__date-row {
40
+ display: grid;
41
+ grid-template-columns: repeat(7, 1fr);
42
+ gap: var(--drp-spacing-xs);
43
+ }
44
+
45
+ // ==============================================================================
46
+ // DAY CELLS
47
+ // ==============================================================================
48
+
49
+ .drp-date-picker__day {
50
+ aspect-ratio: 1;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ font-size: var(--drp-font-size-sm);
55
+ color: var(--drp-text-primary);
56
+ border-radius: var(--drp-border-radius);
57
+ cursor: pointer;
58
+ transition: all var(--drp-transition-fast) var(--drp-easing-snappy);
59
+ border: $drp-day-border-width solid $drp-day-border-color;
60
+ position: relative; // For absolute positioning of labels
61
+
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);
65
+ }
66
+
67
+ // --------------------------------------
68
+ // Today
69
+ // --------------------------------------
70
+ &--today {
71
+ border-color: var(--drp-accent-color);
72
+ font-weight: var(--drp-font-weight-semibold);
73
+ }
74
+
75
+ // --------------------------------------
76
+ // Selected
77
+ // --------------------------------------
78
+ &--selected {
79
+ background-color: var(--drp-accent-color);
80
+ color: var(--drp-accent-text-color);
81
+ font-weight: var(--drp-font-weight-semibold);
82
+
83
+ &:hover {
84
+ background-color: var(--drp-accent-color-hover);
85
+ }
86
+ }
87
+
88
+ // --------------------------------------
89
+ // Focused (keyboard navigation)
90
+ // --------------------------------------
91
+ &--focused {
92
+ outline: $drp-day-focused-outline-width solid var(--drp-accent-color);
93
+ outline-offset: $drp-day-focused-outline-offset;
94
+ }
95
+
96
+ // --------------------------------------
97
+ // Disabled
98
+ // --------------------------------------
99
+ &--disabled {
100
+ color: var(--drp-text-secondary);
101
+ opacity: $drp-day-disabled-opacity;
102
+ cursor: not-allowed;
103
+ position: relative;
104
+
105
+ // Diagonal hatched pattern overlay
106
+ &::before {
107
+ content: '';
108
+ position: absolute;
109
+ top: 0;
110
+ left: 0;
111
+ right: 0;
112
+ bottom: 0;
113
+ background-image: repeating-linear-gradient(
114
+ 45deg,
115
+ rgba(0, 0, 0, $drp-day-disabled-pattern-opacity) 0px,
116
+ rgba(0, 0, 0, $drp-day-disabled-pattern-opacity) 1px,
117
+ transparent 1px,
118
+ transparent 6px
119
+ );
120
+ border-radius: var(--drp-border-radius);
121
+ pointer-events: none;
122
+ }
123
+
124
+ &:hover {
125
+ background-color: transparent;
126
+ border-color: transparent;
127
+ }
128
+ }
129
+
130
+ // --------------------------------------
131
+ // Other month days (previous/next month)
132
+ // --------------------------------------
133
+ &--other-month {
134
+ color: var(--drp-text-secondary);
135
+ opacity: $drp-day-other-month-opacity;
136
+
137
+ // Reset opacity when other-month days are part of range selection
138
+ &.drp-date-picker__day--range-start,
139
+ &.drp-date-picker__day--range-end,
140
+ &.drp-date-picker__day--in-range,
141
+ &.drp-date-picker__day--drag-preview {
142
+ opacity: 1;
143
+ }
144
+ }
145
+
146
+ // --------------------------------------
147
+ // Range selection states
148
+ // --------------------------------------
149
+ &--range-start,
150
+ &--range-end {
151
+ background-color: var(--drp-accent-color);
152
+ color: var(--drp-accent-text-color);
153
+ font-weight: var(--drp-font-weight-semibold);
154
+ cursor: grab;
155
+ user-select: none;
156
+
157
+ &:active {
158
+ cursor: grabbing;
159
+ }
160
+ }
161
+
162
+ &--in-range {
163
+ background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-in-range-bg-opacity * 100%, transparent);
164
+
165
+ &:hover {
166
+ background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-in-range-hover-bg-opacity * 100%, transparent);
167
+ }
168
+ }
169
+
170
+ // --------------------------------------
171
+ // Dragging states
172
+ // --------------------------------------
173
+ &--dragging {
174
+ cursor: grabbing !important;
175
+ opacity: $drp-day-dragging-opacity;
176
+ transform: scale($drp-day-dragging-scale);
177
+ transition: transform var(--drp-transition-fast) var(--drp-easing-snappy);
178
+ }
179
+
180
+ &--drag-preview {
181
+ background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-drag-preview-bg-opacity * 100%, transparent);
182
+ border: $drp-day-border-width $drp-day-drag-preview-border-style var(--drp-accent-color);
183
+
184
+ &.drp-date-picker__day--range-start,
185
+ &.drp-date-picker__day--range-end {
186
+ background-color: color-mix(in srgb, var(--drp-accent-color) $drp-day-drag-preview-edge-bg-opacity * 100%, transparent);
187
+ color: var(--drp-accent-text-color);
188
+ }
189
+ }
190
+
191
+ &--drag-invalid {
192
+ background-color: color-mix(in srgb, $drp-day-drag-invalid-bg $drp-day-drag-invalid-bg-opacity * 100%, transparent) !important;
193
+ border-color: $drp-day-drag-invalid-bg !important;
194
+ border-style: dashed !important;
195
+ }
196
+ }
197
+
198
+ // ==============================================================================
199
+ // SPECIAL DATE HIGHLIGHTING (EXAMPLES)
200
+ // ==============================================================================
201
+ // These are example classes showing how to highlight special dates.
202
+ // Applications should define their own classes with appropriate colors.
203
+ // The .holiday and .event classes here use component colors as examples only.
204
+
205
+ .drp-date-picker__day.holiday {
206
+ background-color: color-mix(in srgb, $drp-color-error $drp-holiday-bg-opacity * 100%, transparent);
207
+
208
+ &:hover:not(.drp-date-picker__day--disabled) {
209
+ background-color: color-mix(in srgb, $drp-color-error $drp-holiday-hover-bg-opacity * 100%, transparent);
210
+ }
211
+ }
212
+
213
+ .drp-date-picker__day.event {
214
+ background-color: color-mix(in srgb, $drp-color-success $drp-event-bg-opacity * 100%, transparent);
215
+
216
+ &:hover:not(.drp-date-picker__day--disabled) {
217
+ background-color: color-mix(in srgb, $drp-color-success $drp-event-hover-bg-opacity * 100%, transparent);
218
+ }
219
+ }