@forgeroute/ui 0.4.12 → 0.4.14
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.
|
@@ -34493,6 +34493,17 @@ var CalendarComponent = class CalendarComponent {
|
|
|
34493
34493
|
this.monthCells = computed(() => buildMonthCells(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "monthCells" }] : /* istanbul ignore next */ []);
|
|
34494
34494
|
this.weekDays = computed(() => buildWeekDays(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "weekDays" }] : /* istanbul ignore next */ []);
|
|
34495
34495
|
this.periodLabel = computed(() => periodLabelFor(this.view(), this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "periodLabel" }] : /* istanbul ignore next */ []);
|
|
34496
|
+
this.periodParts = computed(() => {
|
|
34497
|
+
const label = this.periodLabel();
|
|
34498
|
+
const i = label.lastIndexOf(" ");
|
|
34499
|
+
return this.view() === "month" && i > 0 ? {
|
|
34500
|
+
main: label.slice(0, i),
|
|
34501
|
+
sub: label.slice(i + 1)
|
|
34502
|
+
} : {
|
|
34503
|
+
main: label,
|
|
34504
|
+
sub: ""
|
|
34505
|
+
};
|
|
34506
|
+
}, ...ngDevMode ? [{ debugName: "periodParts" }] : /* istanbul ignore next */ []);
|
|
34496
34507
|
this.viewTabs = computed(() => this.views().map((v) => ({
|
|
34497
34508
|
key: v,
|
|
34498
34509
|
label: v === "week" ? "Week" : v === "month" ? "Month" : "Agenda"
|
|
@@ -34913,18 +34924,24 @@ var CalendarComponent = class CalendarComponent {
|
|
|
34913
34924
|
},
|
|
34914
34925
|
ngImport: i0,
|
|
34915
34926
|
template: `
|
|
34927
|
+
<!-- Previous / Today / Next: right-aligned in the filter row when there is one, else next to the period label -->
|
|
34928
|
+
<ng-template #navControls>
|
|
34929
|
+
<div class="nav-controls">
|
|
34930
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
34931
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
34932
|
+
</button>
|
|
34933
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
34934
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
34935
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
34936
|
+
</button>
|
|
34937
|
+
</div>
|
|
34938
|
+
</ng-template>
|
|
34939
|
+
|
|
34940
|
+
<div class="cal-header">
|
|
34916
34941
|
<div class="cal-toolbar">
|
|
34917
34942
|
<div class="toolbar-left">
|
|
34918
|
-
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{
|
|
34919
|
-
<
|
|
34920
|
-
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
34921
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
34922
|
-
</button>
|
|
34923
|
-
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
34924
|
-
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
34925
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
34926
|
-
</button>
|
|
34927
|
-
</div>
|
|
34943
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true"><span class="pl-main">{{ periodParts().main }}</span>@if (periodParts().sub) {<span class="pl-sub">{{ ' ' + periodParts().sub }}</span>}</h2>
|
|
34944
|
+
@if (!filters().length) { <ng-container *ngTemplateOutlet="navControls" /> }
|
|
34928
34945
|
</div>
|
|
34929
34946
|
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
34930
34947
|
<div class="toolbar-right">
|
|
@@ -34935,12 +34952,9 @@ var CalendarComponent = class CalendarComponent {
|
|
|
34935
34952
|
</div>
|
|
34936
34953
|
</div>
|
|
34937
34954
|
|
|
34938
|
-
@if (!loading()) {
|
|
34939
|
-
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
34940
|
-
}
|
|
34941
|
-
|
|
34942
34955
|
@if (filters().length) {
|
|
34943
34956
|
<div class="filter-bar">
|
|
34957
|
+
<div class="filter-main">
|
|
34944
34958
|
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
34945
34959
|
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
34946
34960
|
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
@@ -34960,8 +34974,15 @@ var CalendarComponent = class CalendarComponent {
|
|
|
34960
34974
|
</button>
|
|
34961
34975
|
}
|
|
34962
34976
|
</div>
|
|
34977
|
+
</div>
|
|
34978
|
+
<div class="filter-nav"><ng-container *ngTemplateOutlet="navControls" /></div>
|
|
34963
34979
|
</div>
|
|
34964
34980
|
}
|
|
34981
|
+
</div>
|
|
34982
|
+
|
|
34983
|
+
@if (!loading()) {
|
|
34984
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
34985
|
+
}
|
|
34965
34986
|
|
|
34966
34987
|
@if (loading()) {
|
|
34967
34988
|
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
@@ -34995,7 +35016,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
34995
35016
|
@for (c of row.cells; track c.day.dateStr) {
|
|
34996
35017
|
<div class="month-cell" role="gridcell"
|
|
34997
35018
|
[attr.data-date]="c.day.dateStr"
|
|
34998
|
-
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday"
|
|
35019
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday"
|
|
34999
35020
|
[class.clickable]="c.clickable"
|
|
35000
35021
|
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
35001
35022
|
[attr.aria-label]="c.label"
|
|
@@ -35120,7 +35141,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
35120
35141
|
<ui-toast />
|
|
35121
35142
|
`,
|
|
35122
35143
|
isInline: true,
|
|
35123
|
-
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding-bottom:16px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:1.125rem;font-weight:700;color:#111827;margin:0}.nav-controls{display:flex;align-items:center;gap:8px}.btn-nav{width:32px;height:32px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569}.btn-nav:hover{background:#f8fafc}.btn-today{padding:6px 14px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;font-size:.875rem;font-weight:500;color:#374151;cursor:pointer}.btn-today:hover{background:#f8fafc}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-top:1px solid #e2e8f0;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;color:#64748b;padding:1px 7px;border-radius:999px}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{grid-template-columns:1fr}.toolbar-center{display:none}.toolbar-left{flex-wrap:wrap}.toolbar-right{justify-content:flex-start}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"],
|
|
35144
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 0 auto}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"],
|
|
35124
35145
|
dependencies: [
|
|
35125
35146
|
{
|
|
35126
35147
|
kind: "component",
|
|
@@ -35138,6 +35159,16 @@ var CalendarComponent = class CalendarComponent {
|
|
|
35138
35159
|
"iconType"
|
|
35139
35160
|
]
|
|
35140
35161
|
},
|
|
35162
|
+
{
|
|
35163
|
+
kind: "directive",
|
|
35164
|
+
type: NgTemplateOutlet,
|
|
35165
|
+
selector: "[ngTemplateOutlet]",
|
|
35166
|
+
inputs: [
|
|
35167
|
+
"ngTemplateOutletContext",
|
|
35168
|
+
"ngTemplateOutlet",
|
|
35169
|
+
"ngTemplateOutletInjector"
|
|
35170
|
+
]
|
|
35171
|
+
},
|
|
35141
35172
|
{
|
|
35142
35173
|
kind: "component",
|
|
35143
35174
|
type: PillTabsComponent,
|
|
@@ -35187,23 +35218,30 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
35187
35218
|
imports: [
|
|
35188
35219
|
BadgeComponent,
|
|
35189
35220
|
EmptyStateComponent,
|
|
35221
|
+
NgTemplateOutlet,
|
|
35190
35222
|
PillTabsComponent,
|
|
35191
35223
|
SkeletonComponent,
|
|
35192
35224
|
ToastComponent
|
|
35193
35225
|
],
|
|
35194
35226
|
template: `
|
|
35227
|
+
<!-- Previous / Today / Next: right-aligned in the filter row when there is one, else next to the period label -->
|
|
35228
|
+
<ng-template #navControls>
|
|
35229
|
+
<div class="nav-controls">
|
|
35230
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
35231
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
35232
|
+
</button>
|
|
35233
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
35234
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
35235
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
35236
|
+
</button>
|
|
35237
|
+
</div>
|
|
35238
|
+
</ng-template>
|
|
35239
|
+
|
|
35240
|
+
<div class="cal-header">
|
|
35195
35241
|
<div class="cal-toolbar">
|
|
35196
35242
|
<div class="toolbar-left">
|
|
35197
|
-
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{
|
|
35198
|
-
<
|
|
35199
|
-
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
35200
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
35201
|
-
</button>
|
|
35202
|
-
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
35203
|
-
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
35204
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
35205
|
-
</button>
|
|
35206
|
-
</div>
|
|
35243
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true"><span class="pl-main">{{ periodParts().main }}</span>@if (periodParts().sub) {<span class="pl-sub">{{ ' ' + periodParts().sub }}</span>}</h2>
|
|
35244
|
+
@if (!filters().length) { <ng-container *ngTemplateOutlet="navControls" /> }
|
|
35207
35245
|
</div>
|
|
35208
35246
|
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
35209
35247
|
<div class="toolbar-right">
|
|
@@ -35214,12 +35252,9 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
35214
35252
|
</div>
|
|
35215
35253
|
</div>
|
|
35216
35254
|
|
|
35217
|
-
@if (!loading()) {
|
|
35218
|
-
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
35219
|
-
}
|
|
35220
|
-
|
|
35221
35255
|
@if (filters().length) {
|
|
35222
35256
|
<div class="filter-bar">
|
|
35257
|
+
<div class="filter-main">
|
|
35223
35258
|
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
35224
35259
|
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
35225
35260
|
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
@@ -35239,8 +35274,15 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
35239
35274
|
</button>
|
|
35240
35275
|
}
|
|
35241
35276
|
</div>
|
|
35277
|
+
</div>
|
|
35278
|
+
<div class="filter-nav"><ng-container *ngTemplateOutlet="navControls" /></div>
|
|
35242
35279
|
</div>
|
|
35243
35280
|
}
|
|
35281
|
+
</div>
|
|
35282
|
+
|
|
35283
|
+
@if (!loading()) {
|
|
35284
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
35285
|
+
}
|
|
35244
35286
|
|
|
35245
35287
|
@if (loading()) {
|
|
35246
35288
|
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
@@ -35274,7 +35316,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
35274
35316
|
@for (c of row.cells; track c.day.dateStr) {
|
|
35275
35317
|
<div class="month-cell" role="gridcell"
|
|
35276
35318
|
[attr.data-date]="c.day.dateStr"
|
|
35277
|
-
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday"
|
|
35319
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday"
|
|
35278
35320
|
[class.clickable]="c.clickable"
|
|
35279
35321
|
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
35280
35322
|
[attr.aria-label]="c.label"
|
|
@@ -35398,7 +35440,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
35398
35440
|
}
|
|
35399
35441
|
<ui-toast />
|
|
35400
35442
|
`,
|
|
35401
|
-
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding-bottom:16px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:1.125rem;font-weight:700;color:#111827;margin:0}.nav-controls{display:flex;align-items:center;gap:8px}.btn-nav{width:32px;height:32px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569}.btn-nav:hover{background:#f8fafc}.btn-today{padding:6px 14px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;font-size:.875rem;font-weight:500;color:#374151;cursor:pointer}.btn-today:hover{background:#f8fafc}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-top:1px solid #e2e8f0;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;color:#64748b;padding:1px 7px;border-radius:999px}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{grid-template-columns:1fr}.toolbar-center{display:none}.toolbar-left{flex-wrap:wrap}.toolbar-right{justify-content:flex-start}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"]
|
|
35443
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 0 auto}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"]
|
|
35402
35444
|
}]
|
|
35403
35445
|
}],
|
|
35404
35446
|
ctorParameters: () => [],
|