@propriety/court-calendar 1.0.69 → 1.0.72

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.
Files changed (58) hide show
  1. package/.github/workflows/publish.yml +1 -0
  2. package/.husky/pre-push +1 -0
  3. package/dist/__tests__/fixtures.d.ts +6 -0
  4. package/dist/__tests__/helpers/CalEvent.test.d.ts +1 -0
  5. package/dist/__tests__/helpers/api/cases.test.d.ts +1 -0
  6. package/dist/__tests__/helpers/api/courtDates.test.d.ts +1 -0
  7. package/dist/__tests__/helpers/cases.test.d.ts +1 -0
  8. package/dist/__tests__/helpers/courtDates.test.d.ts +1 -0
  9. package/dist/__tests__/helpers/formatter.test.d.ts +1 -0
  10. package/dist/__tests__/hooks/UseModalActions.test.d.ts +1 -0
  11. package/dist/__tests__/hooks/UseModalState.test.d.ts +1 -0
  12. package/dist/__tests__/setup.d.ts +0 -0
  13. package/dist/_components/DebugModal.d.ts +10 -0
  14. package/dist/_components/LoadingBar.d.ts +8 -0
  15. package/dist/_components/Toolbar/CaseFilter.d.ts +1 -2
  16. package/dist/_components/Toolbar/Toolbar.d.ts +4 -1
  17. package/dist/court-calendar.css +1 -1
  18. package/dist/helpers/cache.d.ts +1 -0
  19. package/dist/hooks/UseCalendarEvents.d.ts +1 -1
  20. package/dist/hooks/UseCaseData.d.ts +1 -0
  21. package/dist/hooks/UseCourtDates.d.ts +5 -1
  22. package/dist/humphrey.png +0 -0
  23. package/dist/index.mjs +9409 -7699
  24. package/package.json +63 -53
  25. package/public/humphrey.png +0 -0
  26. package/src/__tests__/fixtures.ts +70 -0
  27. package/src/__tests__/helpers/CalEvent.test.ts +565 -0
  28. package/src/__tests__/helpers/api/cases.test.ts +307 -0
  29. package/src/__tests__/helpers/api/courtDates.test.ts +352 -0
  30. package/src/__tests__/helpers/cases.test.ts +322 -0
  31. package/src/__tests__/helpers/courtDates.test.ts +81 -0
  32. package/src/__tests__/helpers/formatter.test.ts +78 -0
  33. package/src/__tests__/hooks/UseModalActions.test.ts +523 -0
  34. package/src/__tests__/hooks/UseModalState.test.ts +214 -0
  35. package/src/__tests__/setup.ts +6 -0
  36. package/src/_components/CCalendar.css +208 -1
  37. package/src/_components/CCalendar.tsx +63 -7
  38. package/src/_components/DebugModal.tsx +638 -0
  39. package/src/_components/LoadingBar.tsx +195 -0
  40. package/src/_components/Modal/CaseDetails/EvidenceSection.tsx +0 -1
  41. package/src/_components/Modal/DateDetails/StatusTimeline.tsx +35 -13
  42. package/src/_components/Modal/Modal.css +0 -15
  43. package/src/_components/Modal/Modal.tsx +44 -2
  44. package/src/_components/Shared/MuniDropdown.tsx +0 -2
  45. package/src/_components/Toolbar/CaseFilter.tsx +0 -15
  46. package/src/_components/Toolbar/Toolbar.tsx +83 -17
  47. package/src/constants.ts +1 -1
  48. package/src/helpers/CalEvent.ts +6 -2
  49. package/src/helpers/api/cases.ts +20 -10
  50. package/src/helpers/api/courtDates.ts +7 -19
  51. package/src/helpers/api/people.ts +0 -1
  52. package/src/helpers/cache.ts +27 -4
  53. package/src/hooks/UseCalendarEvents.ts +109 -102
  54. package/src/hooks/UseCaseData.ts +27 -10
  55. package/src/hooks/UseCourtDates.ts +65 -26
  56. package/src/hooks/UseModalActions.ts +2 -2
  57. package/src/hooks/UseScrollbarClickDetection.ts +0 -1
  58. package/vitest.config.ts +24 -0
@@ -23,6 +23,7 @@ jobs:
23
23
  registry-url: https://registry.npmjs.org
24
24
 
25
25
  - run: npm ci
26
+ - run: npm test
26
27
  - run: npm run build
27
28
  - run: npm version "1.0.${{ github.run_number }}" --no-git-tag-version
28
29
  - run: npm publish --access public
@@ -0,0 +1 @@
1
+ npm test
@@ -0,0 +1,6 @@
1
+ import { Case, CourtDate, CalendarFilterCtx } from '../types';
2
+ export declare const MOCK_API_KEY = "test-api-key-123";
3
+ export declare const MOCK_USER_ID = 42;
4
+ export declare function makeCourtDate(overrides?: Partial<CourtDate>): CourtDate;
5
+ export declare function makeCase(overrides?: Partial<Case>): Case;
6
+ export declare const DEFAULT_FILTER_CTX: CalendarFilterCtx;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
File without changes
@@ -0,0 +1,10 @@
1
+ import { Case, CourtDate } from '../types';
2
+ import { CalEvent } from '../helpers/CalEvent';
3
+ export default function DebugModal({ open, onClose, courtDate, memoryCases, calEvent, allDates, }: {
4
+ open: boolean;
5
+ onClose: () => void;
6
+ courtDate: CourtDate | null;
7
+ memoryCases: Case[];
8
+ calEvent: CalEvent | null;
9
+ allDates: CourtDate[];
10
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ interface LoadingBarProps {
2
+ isFetchingDates: boolean;
3
+ isFetchingCases: boolean;
4
+ loadedCount: number;
5
+ totalCount: number;
6
+ }
7
+ export default function LoadingBar({ isFetchingDates, isFetchingCases, loadedCount, totalCount, }: LoadingBarProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
@@ -1,6 +1,5 @@
1
1
  import { CalendarFilterCtx } from '../../types';
2
- export default function CaseFilter({ filterCtx, setFilterCtx, isFetchingCases, }: {
2
+ export default function CaseFilter({ filterCtx, setFilterCtx, }: {
3
3
  filterCtx: CalendarFilterCtx;
4
4
  setFilterCtx: (ctx: CalendarFilterCtx) => void;
5
- isFetchingCases: boolean;
6
5
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,13 +1,16 @@
1
1
  import { Calendar } from '@fullcalendar/core/index.js';
2
- export default function Toolbar({ calendarApi, handleCreateClick, onPrint, currentView, setCurrentView, currentDate, setCurrentDate, activeUser, isFetchingCases, isAdmin, }: {
2
+ export default function Toolbar({ calendarApi, handleCreateClick, onPrint, onRefresh, currentView, setCurrentView, currentDate, setCurrentDate, activeUser, isFetchingDates, isFetchingCases, lastFetchedAt, isAdmin, }: {
3
3
  calendarApi: Calendar | null;
4
4
  handleCreateClick: () => void;
5
5
  onPrint: () => void;
6
+ onRefresh: () => void;
6
7
  currentView: string;
7
8
  setCurrentView: (view: string) => void;
8
9
  currentDate: Date;
9
10
  setCurrentDate: (date: Date) => void;
10
11
  activeUser: number | null;
12
+ isFetchingDates: boolean;
11
13
  isFetchingCases: boolean;
14
+ lastFetchedAt: Date | null;
12
15
  isAdmin: boolean;
13
16
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- .pop-in-ccalendar-event{opacity:0;transform:scale(.8);transform-origin:center center;animation:popInBounce .4s cubic-bezier(.34,1.56,.64,1) forwards;will-change:opacity,transform}@keyframes popInBounce{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}:root{--bg: #ffffff;--text: #212121;--fc-today-bg-color: #e3eefa;--fc-border-color: #cccccc;--fc-event-inperson-color: #1da39c;--fc-event-virtual-color: #216edf;--fc-event-unknown-color: #9e9e9e;--fc-event-negotiations-color: #33d391}[data-theme=dark]{--bg: #121212;--text: #ffffff;--fc-today-bg-color: #303e4a;--fc-border-color: #353333}.MuiTabs-flexContainer{justify-content:flex-start}.themed,.themed div:not(.MuiAvatar-root,.iconHolder,.evidence-row,.evidence-row *,.timeline-connector,.fab-bar,.info-hover-overlay),.themed .MuiInputBase-root,.themed label,.themed a,.themed .MuiSelect-select,.themed button:not(.MuiFab-root){background-color:var(--bg)!important;color:var(--text)!important;border-color:var(--fc-border-color)!important;scrollbar-color:var(--fc-border-color) var(--bg)}:is(.themed,.themed div:not(.MuiAvatar-root,.iconHolder,.evidence-row,.evidence-row *,.timeline-connector,.fab-bar,.info-hover-overlay),.themed .MuiInputBase-root,.themed label,.themed a,.themed .MuiSelect-select,.themed button:not(.MuiFab-root)):focus{outline-color:var(--fc-border-color)!important}.court-calendar a{color:var(--text)!important;text-decoration:none!important}.themed .MuiMenuItem-root,.themed .MuiMenuItem-root div:not(.MuiAvatar-root){background-color:transparent!important}.themed .MuiMenuItem-root:hover,.themed .MuiMenuItem-root:hover div:not(.MuiAvatar-root){background-color:var(--fc-today-bg-color)!important}.themed button.MuiToggleButton-root.Mui-selected{background-color:var(--fc-today-bg-color)!important}.themed button.MuiToggleButton-root:hover{background-color:var(--fc-border-color)!important}.themed .Mui-disabled *:not(input){color:var(--text)!important;cursor:not-allowed!important;opacity:.8!important}.themed::-webkit-scrollbar,.themed div::-webkit-scrollbar{width:8px;background:var(--bg)}.themed::-webkit-scrollbar-thumb,.themed div::-webkit-scrollbar-thumb{background:var(--fc-border-color);border-radius:4px}.themed::-webkit-scrollbar-track,.themed div::-webkit-scrollbar-track{background:var(--bg)}.themed input::placeholder,.themed .MuiFab-root>svg{color:var(--text)!important}.themed *{border-color:var(--fc-border-color)!important}.themed button:hover,.themed .MuiSelect-select:hover,.themed input:hover{background-color:var(--fc-today-bg-color)!important}.themed .MuiDataGrid-row:hover,.themed .MuiDataGrid-row:hover>*{background-color:var(--fc-today-bg-color)!important}.themed .MuiCheckbox-root{color:var(--text)!important}.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input{background-color:var(--fc-today-bg-color)!important}:is(.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input) button,:is(.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input) input{background-color:var(--fc-today-bg-color)!important}.themed .MuiFormControl-root:hover .MuiFormLabel-root{background-color:var(--fc-today-bg-color)!important}.month-day-cell{background-color:var(--bg);color:var(--text);cursor:pointer;height:120px;padding:3px!important;position:relative}.month-day-cell.fc-day-other{filter:brightness(.9)}.month-day-cell.fc-day-today{background-color:var(--fc-today-bg-color)}.month-day-cell:hover:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--fc-today-bg-color);opacity:.5;pointer-events:none}.day-header{background-color:var(--bg);color:var(--text);border-bottom:1px solid var(--fc-border-color)}.day-header a{padding:6px 4px!important;display:inline-block}.court-calendar th[role=presentation]{background-color:var(--bg)}.day-cell-allday{background-color:var(--bg)!important;color:var(--text)!important}.fc-daygrid-day-events{max-height:100px;min-height:100px;overflow-y:inherit;margin:0!important;overflow-y:auto;scrollbar-color:var(--fc-border-color) transparent}.fc-day-today .fc-daygrid-day-events{scrollbar-color:var(--fc-event-unknown-color) transparent}.court-calendar .fc-timegrid-slot-label{background-color:var(--bg);color:var(--text)}.court-calendar .fc-timegrid-axis{border-color:var(--fc-border-color);background-color:var(--bg);color:var(--text)}.court-calendar .fc-timegrid-divider{border-color:var(--fc-border-color);background-color:var(--bg)}.fc .fc-button,.fc-button{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";padding:.25rem .5rem;cursor:pointer}:is(.fc .fc-button,.fc-button).fc-button-primary{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color)}:is(.fc .fc-button,.fc-button).fc-button-active.fc-button-primary{background-color:var(--fc-today-bg-color);color:var(--text)}:is(.fc .fc-button,.fc-button):hover{background-color:var(--fc-today-bg-color)}.fc.fc-media-screen{background-color:var(--bg);color:var(--text);font-family:Roboto,Helvetica,Arial,"sans-serif"}#event-tooltip{background-color:var(--text);color:var(--bg);border:1px solid var(--fc-border-color);border-radius:4px;padding:8px;box-shadow:0 4px 8px #00000026;z-index:9999;font-size:16px}.court-event{cursor:pointer;padding:4px 2px}.CCButton{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";padding:8px 16px;margin-right:8px;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.CCButton:hover{background-color:var(--fc-today-bg-color)}.CCButton-Icon{min-width:35px;max-width:35px;min-height:35px;max-height:35px;border:none;padding:0;display:flex;align-items:center;justify-content:center}.CCDropdown-Button{width:75px}.CCDropdown-Menu{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";box-shadow:0 2px 8px #00000026}.CCDropdown-Menu div{padding:8px 19px}.CCDropdown-Menu div:hover{background-color:var(--fc-today-bg-color)}.CCButton-Primary{background-color:#1976d2;color:#fff;border:none}.CCButton-Primary:hover{background-color:#1565c0}.CCButton-Error{background-color:#c15a5a;color:#fff;border:none}.CCButton-Error:hover{background-color:#953838}.modal-footer{background-color:var(--bg);color:var(--text);border-top:1px solid var(--fc-border-color)}.MuiInputBase-root.Mui-disabled{opacity:.5!important}.ccdisabled{pointer-events:none;opacity:.6}.switch-track{outline:2px solid var(--fc-border-color)}.fc-list-day-cushion{background-color:var(--bg)!important;color:var(--text)}.fc-list .fc-list-event:hover td{background-color:var(--fc-today-bg-color)!important}.fc-list .deadline-event .fc-list-event-dot{border:none;width:1em;height:1em;vertical-align:middle;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><circle cx="8" cy="8" r="8" fill="%2300c853"/><path d="M4 8l3 3 5-5" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>') no-repeat center center;background-size:contain}.fc-list .deadline-event.inperson{--color: var(--fc-event-inperson-color)}.fc-list .deadline-event.virtual{--color: var(--fc-event-virtual-color)}.fc-list .deadline-event.unknown{--color: var(--fc-event-unknown-color)}.fc-list .deadline-event.negotiations{--color: var(--fc-event-negotiations-color)}.fc-view:not(.fc-list) .deadline-event{background-color:transparent!important;border-color:transparent!important;display:flex;align-items:center;overflow-x:hidden;position:relative}.fc-view:not(.fc-list) .deadline-event .fc-event-title{color:var(--text)!important}.fc-view:not(.fc-list) .deadline-event.inperson{--color: var(--fc-event-inperson-color)}.fc-view:not(.fc-list) .deadline-event.virtual{--color: var(--fc-event-virtual-color)}.fc-view:not(.fc-list) .deadline-event.unknown{--color: var(--fc-event-unknown-color)}.fc-view:not(.fc-list) .deadline-event.negotiations{--color: var(--fc-event-negotiations-color)}.fc-view:not(.fc-list) .deadline-event.adjourned-no-date{--color: rgb(151, 11, 134) !important}.fc-view:not(.fc-list) .deadline-event.status-uploaded:before{content:"";display:inline-block;width:1em;height:1em;vertical-align:middle;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><circle cx="8" cy="8" r="8" fill="%2300c853"/><path d="M4 8l3 3 5-5" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>') no-repeat center center;background-size:contain;margin:0 4px 0 0;top:.35em;border:none;position:absolute}.fc-view:not(.fc-list) .deadline-event.status-uploaded .fc-event-main{margin-left:1.5em!important}.fc-view:not(.fc-list) .deadline-event:not(.status-uploaded):before{content:"";display:inline-block;border-radius:calc(var(--fc-daygrid-event-dot-width) / 2);box-sizing:content-box;height:0px;margin:0 4px;width:0px;border:calc(var(--fc-daygrid-event-dot-width) / 2) solid var(--color)}.courtdate-event,.adjournment-event{border:1px solid var(--fc-border-color)!important}:is(.courtdate-event,.adjournment-event) .fc-event-title,:is(.courtdate-event,.adjournment-event) .fc-event-time{color:#fff!important}:is(.courtdate-event,.adjournment-event).inperson{background-color:var(--fc-event-inperson-color)!important;border-color:var(--fc-event-inperson-color)!important}:is(.courtdate-event,.adjournment-event).virtual{background-color:var(--fc-event-virtual-color)!important;border-color:var(--fc-event-virtual-color)!important}:is(.courtdate-event,.adjournment-event).unknown{background-color:var(--fc-event-unknown-color)!important;border-color:var(--fc-event-unknown-color)!important}:is(.courtdate-event,.adjournment-event).negotiations{background-color:var(--fc-event-negotiations-color)!important;border-color:var(--fc-event-negotiations-color)!important}:is(.courtdate-event,.adjournment-event) .fc-daygrid-event-dot,:is(.courtdate-event,.adjournment-event) .fc-list-event-dot{display:none}:is(.courtdate-event,.adjournment-event).adjourned-no-date{border-color:#970b86!important;background-color:#970b86!important}.village-date.courtdate-event,.village-date.adjournment-event,.village-date.multipledate-event{border:2px solid #f59e0b!important}.deadline-due-today.courtdate-event,.deadline-due-today.multipledate-event{border:2px solid #d32f2f!important;outline:1px solid #d32f2f}.deadline-due-today.courtdate-event .fc-event-main,.deadline-due-today.multipledate-event .fc-event-main{position:relative}.deadline-due-today.courtdate-event .fc-event-main:after,.deadline-due-today.multipledate-event .fc-event-main:after{content:"!";position:absolute;top:0;right:2px;background:#d32f2f;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}.fc-view:not(.fc-list) .deadline-due-today.deadline-event{border:2px solid #d32f2f!important;border-radius:2px;padding-bottom:2px}.fc-view:not(.fc-list) .deadline-due-today.deadline-event .fc-event-title{color:#d32f2f!important;font-weight:700}.fc-view:not(.fc-list) .deadline-due-today.deadline-event:after{content:"!";position:absolute;left:2.5px;background:#d32f2f;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}@keyframes overdueFlash{0%,to{border-color:#b71c1c!important;box-shadow:0 0 #b71c1c00}50%{border-color:#ff1744!important;box-shadow:0 0 8px 3px #ff174499}}.deadline-overdue.courtdate-event,.deadline-overdue.multipledate-event{border:2px solid #b71c1c!important;animation:overdueFlash 1.8s ease-in-out infinite!important}.deadline-overdue.courtdate-event .fc-event-main,.deadline-overdue.multipledate-event .fc-event-main{position:relative}.deadline-overdue.courtdate-event .fc-event-main:after,.deadline-overdue.multipledate-event .fc-event-main:after{content:"⚠";position:absolute;top:0;right:2px;background:#b71c1c;color:#fff;border-radius:50%;width:16px;height:16px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:5}.fc-view:not(.fc-list) .deadline-overdue.deadline-event{border:2px solid #b71c1c!important;border-radius:2px;padding-bottom:2px;animation:overdueFlash 1.8s ease-in-out infinite!important}.fc-view:not(.fc-list) .deadline-overdue.deadline-event .fc-event-title{color:#b71c1c!important;font-weight:700}.fc-view:not(.fc-list) .deadline-overdue.deadline-event:after{content:"⚠";position:absolute;left:2px;top:4.5px;background:#b71c1c;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}.ccalendar-list-row{cursor:pointer}.CCAvatarIcon:hover{cursor:pointer;transform:scale(1.1);box-shadow:0 4px 8px #0003}@page{size:landscape;margin:.5in}@media print{#ccalendar-container>.MuiStack-root:first-child,#event-tooltip,.ReactModal__Overlay,.MuiDataGrid-footerContainer{display:none!important}#ccalendar-container{width:100%!important;overflow:visible!important;padding-top:10px}.fc.fc-media-screen,.fc .fc-scrollgrid,.fc .fc-scrollgrid-section>td,.fc .fc-daygrid-body,.fc table{width:100%!important;max-width:100%!important}.fc .fc-scrollgrid{overflow:visible!important}.fc colgroup col{width:auto!important}.fc-daygrid-day-events{max-height:none!important;min-height:auto!important;overflow:visible!important}.month-day-cell{height:auto!important}#ccalendar-container .MuiDataGrid-root{height:auto!important;max-height:none!important}#ccalendar-container .MuiDataGrid-virtualScroller{overflow:visible!important;height:auto!important}*{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}.modal-appear-animate{animation:modalFadeIn .35s cubic-bezier(.4,0,.2,1)}@keyframes modalFadeIn{0%{opacity:0;transform:scale(.96) translateY(24px)}to{opacity:1;transform:scale(1) translateY(0)}}
1
+ .pop-in-ccalendar-event{opacity:0;transform:scale(.8);transform-origin:center center;animation:popInBounce .4s cubic-bezier(.34,1.56,.64,1) forwards;will-change:opacity,transform}@keyframes popInBounce{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}:root{--bg: #ffffff;--text: #212121;--fc-today-bg-color: #e3eefa;--fc-border-color: #cccccc;--fc-event-inperson-color: #1da39c;--fc-event-virtual-color: #216edf;--fc-event-unknown-color: #9e9e9e;--fc-event-negotiations-color: #33d391;--cc-gradient: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 50%, #06b6d4 100%);--cc-glow-purple: rgba(139, 92, 246, .35)}[data-theme=dark]{--bg: #121212;--text: #ffffff;--fc-today-bg-color: #303e4a;--fc-border-color: #353333}.MuiTabs-flexContainer{justify-content:flex-start}.themed,.themed div:not(.MuiAvatar-root,.iconHolder,.evidence-row,.evidence-row *,.timeline-connector,.fab-bar,.info-hover-overlay),.themed .MuiInputBase-root,.themed label,.themed a,.themed .MuiSelect-select,.themed button:not(.MuiFab-root){background-color:var(--bg)!important;color:var(--text)!important;border-color:var(--fc-border-color)!important;scrollbar-color:var(--fc-border-color) var(--bg)}:is(.themed,.themed div:not(.MuiAvatar-root,.iconHolder,.evidence-row,.evidence-row *,.timeline-connector,.fab-bar,.info-hover-overlay),.themed .MuiInputBase-root,.themed label,.themed a,.themed .MuiSelect-select,.themed button:not(.MuiFab-root)):focus{outline-color:var(--fc-border-color)!important}.court-calendar a{color:var(--text)!important;text-decoration:none!important}.themed .MuiMenuItem-root,.themed .MuiMenuItem-root div:not(.MuiAvatar-root){background-color:transparent!important}.themed .MuiMenuItem-root:hover,.themed .MuiMenuItem-root:hover div:not(.MuiAvatar-root){background-color:var(--fc-today-bg-color)!important}.themed button.MuiToggleButton-root.Mui-selected{background-color:var(--fc-today-bg-color)!important}.themed button.MuiToggleButton-root:hover{background-color:var(--fc-border-color)!important}.themed .Mui-disabled *:not(input){color:var(--text)!important;cursor:not-allowed!important;opacity:.8!important}.themed::-webkit-scrollbar,.themed div::-webkit-scrollbar{width:8px;background:var(--bg)}.themed::-webkit-scrollbar-thumb,.themed div::-webkit-scrollbar-thumb{background:var(--fc-border-color);border-radius:4px}.themed::-webkit-scrollbar-track,.themed div::-webkit-scrollbar-track{background:var(--bg)}.themed input::placeholder,.themed .MuiFab-root>svg{color:var(--text)!important}.themed *{border-color:var(--fc-border-color)!important}.themed button:hover,.themed .MuiSelect-select:hover,.themed input:hover,.themed .MuiDataGrid-row:hover,.themed .MuiDataGrid-row:hover *{background-color:var(--fc-today-bg-color)!important}.themed .MuiDataGrid-row:hover .MuiCheckbox-root,.themed .MuiDataGrid-row:hover .MuiCheckbox-root *{background-color:transparent!important}.themed .MuiCheckbox-root{color:var(--text)!important}.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input{background-color:var(--fc-today-bg-color)!important}:is(.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input) button,:is(.themed .MuiInputBase-root:hover .MuiAutocomplete-endAdornment,.themed .MuiInputBase-root:hover input) input{background-color:var(--fc-today-bg-color)!important}.themed .MuiFormControl-root:hover .MuiFormLabel-root{background-color:var(--fc-today-bg-color)!important}.month-day-cell{background-color:var(--bg);color:var(--text);cursor:pointer;height:120px;padding:3px!important;position:relative}.month-day-cell.fc-day-other{filter:brightness(.9)}.month-day-cell.fc-day-today{background-color:var(--fc-today-bg-color)}.month-day-cell:hover:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--fc-today-bg-color);opacity:.5;pointer-events:none}.day-header{background-color:var(--bg);color:var(--text);border-bottom:1px solid var(--fc-border-color)}.day-header a{padding:6px 4px!important;display:inline-block}.court-calendar th[role=presentation]{background-color:var(--bg)}.day-cell-allday{background-color:var(--bg)!important;color:var(--text)!important}.fc-daygrid-day-events{max-height:100px;min-height:100px;overflow-y:inherit;margin:0!important;overflow-y:auto;scrollbar-color:var(--fc-border-color) transparent}.fc-day-today .fc-daygrid-day-events{scrollbar-color:var(--fc-event-unknown-color) transparent}.court-calendar .fc-timegrid-slot-label{background-color:var(--bg);color:var(--text)}.court-calendar .fc-timegrid-axis{border-color:var(--fc-border-color);background-color:var(--bg);color:var(--text)}.court-calendar .fc-timegrid-divider{border-color:var(--fc-border-color);background-color:var(--bg)}.fc .fc-button,.fc-button{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";padding:.25rem .5rem;cursor:pointer}:is(.fc .fc-button,.fc-button).fc-button-primary{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color)}:is(.fc .fc-button,.fc-button).fc-button-active.fc-button-primary{background-color:var(--fc-today-bg-color);color:var(--text)}:is(.fc .fc-button,.fc-button):hover{background-color:var(--fc-today-bg-color)}.fc.fc-media-screen{background-color:var(--bg);color:var(--text);font-family:Roboto,Helvetica,Arial,"sans-serif"}#event-tooltip{background-color:var(--text);color:var(--bg);border:1px solid var(--fc-border-color);border-radius:4px;padding:8px;box-shadow:0 4px 8px #00000026;z-index:9999;font-size:16px}.court-event{cursor:pointer;padding:4px 2px}.CCButton{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";padding:8px 16px;margin-right:8px;border-radius:4px;cursor:pointer;-webkit-user-select:none;user-select:none}.CCButton:hover{background-color:var(--fc-today-bg-color)}.CCButton-Icon{min-width:35px;max-width:35px;min-height:35px;max-height:35px;border:none;padding:0;display:flex;align-items:center;justify-content:center}.CCDropdown-Button{width:75px}.CCDropdown-Menu{background-color:var(--bg);color:var(--text);border:1px solid var(--fc-border-color);font-family:Roboto,Helvetica,Arial,"sans-serif";box-shadow:0 2px 8px #00000026}.CCDropdown-Menu div{padding:8px 19px}.CCDropdown-Menu div:hover{background-color:var(--fc-today-bg-color)}.CCButton-Primary{background-color:#1976d2;color:#fff;border:none}.CCButton-Primary:hover{background-color:#1565c0}.CCButton-Error{background-color:#c15a5a;color:#fff;border:none}.CCButton-Error:hover{background-color:#953838}.modal-footer{background-color:var(--bg);color:var(--text);border-top:1px solid var(--fc-border-color)}.MuiInputBase-root.Mui-disabled{opacity:.5!important}.ccdisabled{pointer-events:none;opacity:.6}.switch-track{outline:2px solid var(--fc-border-color)}.fc-list-day-cushion{background-color:var(--bg)!important;color:var(--text)}.fc-list .fc-list-event:hover td{background-color:var(--fc-today-bg-color)!important}.fc-list .deadline-event .fc-list-event-dot{border:none;width:1em;height:1em;vertical-align:middle;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><circle cx="8" cy="8" r="8" fill="%2300c853"/><path d="M4 8l3 3 5-5" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>') no-repeat center center;background-size:contain}.fc-list .deadline-event.inperson{--color: var(--fc-event-inperson-color)}.fc-list .deadline-event.virtual{--color: var(--fc-event-virtual-color)}.fc-list .deadline-event.unknown{--color: var(--fc-event-unknown-color)}.fc-list .deadline-event.negotiations{--color: var(--fc-event-negotiations-color)}.fc-view:not(.fc-list) .deadline-event{background-color:transparent!important;border-color:transparent!important;display:flex;align-items:center;overflow-x:hidden;position:relative}.fc-view:not(.fc-list) .deadline-event .fc-event-title{color:var(--text)!important}.fc-view:not(.fc-list) .deadline-event.inperson{--color: var(--fc-event-inperson-color)}.fc-view:not(.fc-list) .deadline-event.virtual{--color: var(--fc-event-virtual-color)}.fc-view:not(.fc-list) .deadline-event.unknown{--color: var(--fc-event-unknown-color)}.fc-view:not(.fc-list) .deadline-event.negotiations{--color: var(--fc-event-negotiations-color)}.fc-view:not(.fc-list) .deadline-event.adjourned-no-date{--color: rgb(151, 11, 134) !important}.fc-view:not(.fc-list) .deadline-event.status-uploaded:before{content:"";display:inline-block;width:1em;height:1em;vertical-align:middle;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><circle cx="8" cy="8" r="8" fill="%2300c853"/><path d="M4 8l3 3 5-5" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>') no-repeat center center;background-size:contain;margin:0 4px 0 0;top:.35em;border:none;position:absolute}.fc-view:not(.fc-list) .deadline-event.status-uploaded .fc-event-main{margin-left:1.5em!important}.fc-view:not(.fc-list) .deadline-event:not(.status-uploaded):before{content:"";display:inline-block;border-radius:calc(var(--fc-daygrid-event-dot-width) / 2);box-sizing:content-box;height:0px;margin:0 4px;width:0px;border:calc(var(--fc-daygrid-event-dot-width) / 2) solid var(--color)}.courtdate-event,.adjournment-event{border:1px solid var(--fc-border-color)!important}:is(.courtdate-event,.adjournment-event) .fc-event-title,:is(.courtdate-event,.adjournment-event) .fc-event-time{color:#fff!important}:is(.courtdate-event,.adjournment-event).inperson{background-color:var(--fc-event-inperson-color)!important;border-color:var(--fc-event-inperson-color)!important}:is(.courtdate-event,.adjournment-event).virtual{background-color:var(--fc-event-virtual-color)!important;border-color:var(--fc-event-virtual-color)!important}:is(.courtdate-event,.adjournment-event).unknown{background-color:var(--fc-event-unknown-color)!important;border-color:var(--fc-event-unknown-color)!important}:is(.courtdate-event,.adjournment-event).negotiations{background-color:var(--fc-event-negotiations-color)!important;border-color:var(--fc-event-negotiations-color)!important}:is(.courtdate-event,.adjournment-event) .fc-daygrid-event-dot,:is(.courtdate-event,.adjournment-event) .fc-list-event-dot{display:none}:is(.courtdate-event,.adjournment-event).adjourned-no-date{border-color:#970b86!important;background-color:#970b86!important}.village-date.courtdate-event,.village-date.adjournment-event,.village-date.multipledate-event{border:2px solid #f59e0b!important}.deadline-due-today.courtdate-event,.deadline-due-today.multipledate-event{border:2px solid #d32f2f!important;outline:1px solid #d32f2f}.deadline-due-today.courtdate-event .fc-event-main,.deadline-due-today.multipledate-event .fc-event-main{position:relative}.deadline-due-today.courtdate-event .fc-event-main:after,.deadline-due-today.multipledate-event .fc-event-main:after{content:"!";position:absolute;top:0;right:2px;background:#d32f2f;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}.fc-view:not(.fc-list) .deadline-due-today.deadline-event{border:2px solid #d32f2f!important;border-radius:2px;padding-bottom:2px}.fc-view:not(.fc-list) .deadline-due-today.deadline-event .fc-event-title{color:#d32f2f!important;font-weight:700}.fc-view:not(.fc-list) .deadline-due-today.deadline-event:after{content:"!";position:absolute;left:2.5px;background:#d32f2f;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}@keyframes overdueFlash{0%,to{border-color:#b71c1c!important;box-shadow:0 0 #b71c1c00}50%{border-color:#ff1744!important;box-shadow:0 0 8px 3px #ff174499}}.deadline-overdue.courtdate-event,.deadline-overdue.multipledate-event{border:2px solid #b71c1c!important;animation:overdueFlash 1.8s ease-in-out infinite!important}.deadline-overdue.courtdate-event .fc-event-main,.deadline-overdue.multipledate-event .fc-event-main{position:relative}.deadline-overdue.courtdate-event .fc-event-main:after,.deadline-overdue.multipledate-event .fc-event-main:after{content:"⚠";position:absolute;top:0;right:2px;background:#b71c1c;color:#fff;border-radius:50%;width:16px;height:16px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:5}.fc-view:not(.fc-list) .deadline-overdue.deadline-event{border:2px solid #b71c1c!important;border-radius:2px;padding-bottom:2px;animation:overdueFlash 1.8s ease-in-out infinite!important}.fc-view:not(.fc-list) .deadline-overdue.deadline-event .fc-event-title{color:#b71c1c!important;font-weight:700}.fc-view:not(.fc-list) .deadline-overdue.deadline-event:after{content:"⚠";position:absolute;left:2px;top:4.5px;background:#b71c1c;color:#fff;border-radius:50%;width:14px;height:14px;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;line-height:1;z-index:99999}.ccalendar-list-row{cursor:pointer}.CCAvatarIcon:hover{cursor:pointer;transform:scale(1.1);box-shadow:0 4px 8px #0003}#ccalendar-toolbar{box-shadow:0 2px 12px #00000012;position:relative}#ccalendar-toolbar:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--cc-gradient);opacity:.55;pointer-events:none}#ccalendar-toolbar .MuiTypography-h6{background:var(--cc-gradient);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-weight:700!important}#ccalendar-toolbar .MuiButton-outlined:not([disabled]){border:1.5px solid transparent!important;background:linear-gradient(var(--bg),var(--bg)) padding-box,var(--cc-gradient) border-box!important;transition:box-shadow .15s ease!important}#ccalendar-toolbar .MuiButton-outlined:not([disabled]):hover{background:linear-gradient(var(--fc-today-bg-color),var(--fc-today-bg-color)) padding-box,var(--cc-gradient) border-box!important;box-shadow:0 0 8px 1px var(--cc-glow-purple)!important}.month-day-cell.fc-day-today{background-image:linear-gradient(135deg,#3b82f612,#8b5cf612,#06b6d40d)}.courtdate-event,.adjournment-event,.multipledate-event{border-radius:4px!important;transition:filter .12s ease,box-shadow .12s ease!important}.courtdate-event:hover,.adjournment-event:hover,.multipledate-event:hover{filter:brightness(1.1)!important;box-shadow:0 2px 10px #0000004d!important;z-index:5}#event-tooltip{border:1.5px solid transparent!important;background:linear-gradient(var(--text),var(--text)) padding-box,var(--cc-gradient) border-box!important;box-shadow:0 0 14px 2px #8b5cf638,0 4px 18px #00000047!important;border-radius:10px!important;padding:0!important;font-size:16px!important;font-family:Roboto,Helvetica,Arial,sans-serif!important;min-width:240px!important;max-width:340px!important}#event-tooltip .tt-card{padding:14px 16px}#event-tooltip .tt-title{font-size:17px;font-weight:700;line-height:1.3;margin-bottom:4px}#event-tooltip .tt-date{font-size:15px;opacity:.7;margin-bottom:8px}#event-tooltip .tt-badge{display:inline-block;padding:3px 9px;border-radius:4px;font-size:13px;font-weight:600;letter-spacing:.03em;margin-bottom:8px}#event-tooltip .tt-badge--blue{background:#3b82f659}#event-tooltip .tt-badge--purple{background:#8b5cf659}#event-tooltip .tt-badge--amber{background:#f59e0b59}#event-tooltip .tt-badge--cyan{background:#06b6d459}#event-tooltip .tt-divider{height:1px;background:#80808047;margin:8px 0}#event-tooltip .tt-grid{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:15px}#event-tooltip .tt-label{opacity:.58;white-space:nowrap;line-height:1.5}#event-tooltip .tt-value{font-weight:500;line-height:1.5}#event-tooltip .tt-footer{font-size:13px;opacity:.42;text-align:center;margin-top:8px;padding-top:6px;border-top:1px solid rgba(128,128,128,.22)}.modal-footer .MuiButton-containedPrimary{background-image:var(--cc-gradient)!important;box-shadow:0 0 10px 1px var(--cc-glow-purple),0 2px 6px #0000002e!important;transition:opacity .15s ease,box-shadow .15s ease!important}.modal-footer .MuiButton-containedPrimary:hover:not([disabled]){background-image:var(--cc-gradient)!important;opacity:.9;box-shadow:0 0 16px 2px var(--cc-glow-purple),0 2px 8px #00000038!important}.themed .MuiTabs-indicator{background:var(--cc-gradient)!important;height:3px!important;border-radius:2px 2px 0 0!important}.themed .MuiTabs-root{min-height:36px!important}.themed .MuiTab-root{min-height:36px!important;padding-top:6px!important;padding-bottom:6px!important}.themed .MuiTab-root.Mui-selected{background:var(--cc-gradient)!important;-webkit-background-clip:text!important;background-clip:text!important;-webkit-text-fill-color:transparent!important;font-weight:700!important}.modal-footer .MuiButton-containedPrimary{text-shadow:0 1px 3px rgba(0,0,0,.35)!important}@page{size:landscape;margin:.5in}@media print{#ccalendar-container>.MuiStack-root:first-child,#event-tooltip,.ReactModal__Overlay,.MuiDataGrid-footerContainer{display:none!important}#ccalendar-container{width:100%!important;overflow:visible!important;padding-top:10px}.fc.fc-media-screen,.fc .fc-scrollgrid,.fc .fc-scrollgrid-section>td,.fc .fc-daygrid-body,.fc table{width:100%!important;max-width:100%!important}.fc .fc-scrollgrid{overflow:visible!important}.fc colgroup col{width:auto!important}.fc-daygrid-day-events{max-height:none!important;min-height:auto!important;overflow:visible!important}.month-day-cell{height:auto!important}#ccalendar-container .MuiDataGrid-root{height:auto!important;max-height:none!important}#ccalendar-container .MuiDataGrid-virtualScroller{overflow:visible!important;height:auto!important}*{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}
@@ -14,6 +14,7 @@ export declare function setCasesCache(cache: {
14
14
  export declare function getCachedCases(courtDateId: string): Promise<Case[] | null>;
15
15
  export declare function updateCasesCache(courtDateId: string, data: Case[]): Promise<void>;
16
16
  export declare function removeCasesCache(courtDateId: string): Promise<void>;
17
+ export declare function clearAllCache(): Promise<void>;
17
18
  export declare function getCourtDatesCache(): Promise<CourtDate[] | null>;
18
19
  export declare function setCourtDatesCache(data: CourtDate[]): Promise<void>;
19
20
  export declare function getNegotiationsCache(): Promise<CourtDate[] | null>;
@@ -35,6 +35,6 @@ export declare function useCalendarEvents({ courtDates, allCases, apiKey, modalI
35
35
  }): {
36
36
  events: EventSourceInput;
37
37
  filteredDates: import('../helpers/CalEvent').CalEvent[];
38
- eventHash: string;
39
38
  handleEventMount: (info: EventMountArg, calendarApi: Calendar | null) => void;
39
+ getEventTooltipHtml: (eventId: string) => string;
40
40
  };
@@ -29,6 +29,7 @@ export declare function useCaseData({ apiKey, courtDates, selectedCourtDate, }:
29
29
  allCases: Record<string, Case[]>;
30
30
  selectedCases: Case[];
31
31
  isFetchingCases: boolean;
32
+ forceRefreshCases: () => void;
32
33
  addPartialCasesToMemoryAndCache: (cases: Record<string, Case[]>, skipCache: boolean) => Promise<void>;
33
34
  deleteCaseMemoryAndCache: (courtDateID: string) => Promise<void>;
34
35
  };
@@ -22,13 +22,17 @@ import { CourtDate } from '../types';
22
22
  * - `handleUpdateChair` – Optimistically updates a first/second chair assignment
23
23
  * and persists it to the API, reverting on failure.
24
24
  */
25
- export declare function useCourtDates({ apiKey, activeUser, setSelectedCourtDate, }: {
25
+ export declare function useCourtDates({ apiKey, activeUser, modalIsOpen, setSelectedCourtDate, }: {
26
26
  apiKey: string;
27
27
  activeUser: number;
28
+ modalIsOpen: boolean;
28
29
  setSelectedCourtDate: Dispatch<SetStateAction<CourtDate | null>>;
29
30
  }): {
30
31
  courtDates: CourtDate[];
31
32
  negotiations: CourtDate[];
33
+ isFetchingDates: boolean;
34
+ lastFetchedAt: Date | null;
35
+ forceRefreshDates: () => Promise<void>;
32
36
  updateCourtDateInMemory: (updatedDate: CourtDate, del?: boolean) => void;
33
37
  handleUpdateChair: (courtDateId: number, position: "first" | "second", userId: number | null) => void;
34
38
  };
Binary file