@propriety/court-calendar 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.editorconfig +26 -0
  2. package/README.md +0 -0
  3. package/biome.json +302 -0
  4. package/dev/App.tsx +51 -0
  5. package/dev/main.tsx +10 -0
  6. package/index.html +12 -0
  7. package/package.json +54 -0
  8. package/public/vite.svg +1 -0
  9. package/src/_components/CCalendar.css +463 -0
  10. package/src/_components/CCalendar.tsx +726 -0
  11. package/src/_components/List/CalendarList.tsx +288 -0
  12. package/src/_components/Modal/CaseDetails/CaseDetails.tsx +414 -0
  13. package/src/_components/Modal/CaseDetails/EvidenceRow.tsx +83 -0
  14. package/src/_components/Modal/CaseDetails/EvidenceSection.tsx +94 -0
  15. package/src/_components/Modal/CreateEdit/CreateEditCase.tsx +241 -0
  16. package/src/_components/Modal/CreateEdit/DateSelector.tsx +42 -0
  17. package/src/_components/Modal/CreateEdit/EditUserFieldDropdown.tsx +54 -0
  18. package/src/_components/Modal/CreateEdit/EnumDropdown.tsx +54 -0
  19. package/src/_components/Modal/CreateEdit/HearingOfficerDropdown.tsx +48 -0
  20. package/src/_components/Modal/CreateEdit/TextFieldList.tsx +186 -0
  21. package/src/_components/Modal/CreateEdit/ToggleableTextField.tsx +91 -0
  22. package/src/_components/Modal/Modal.css +15 -0
  23. package/src/_components/Modal/Modal.tsx +325 -0
  24. package/src/_components/Modal/ModalActions.tsx +99 -0
  25. package/src/_components/Modal/View/CaseToolbar.tsx +81 -0
  26. package/src/_components/Modal/View/CaseViewer.tsx +237 -0
  27. package/src/_components/Modal/View/DateDetails.tsx +138 -0
  28. package/src/_components/Modal/View/InfoBox.tsx +22 -0
  29. package/src/_components/Modal/View/InfoBoxBtn.css +39 -0
  30. package/src/_components/Modal/View/InfoBoxBtn.tsx +29 -0
  31. package/src/_components/Modal/View/NoticeFileLink.tsx +44 -0
  32. package/src/_components/Shared/FirstSecondChairIcons.tsx +247 -0
  33. package/src/_components/Shared/FormRow.tsx +37 -0
  34. package/src/_components/Shared/MuniDropdown.tsx +94 -0
  35. package/src/_components/Shared/SearchBar.tsx +87 -0
  36. package/src/_components/Toolbar/CaseFilter.tsx +77 -0
  37. package/src/_components/Toolbar/DateTypeFilter.tsx +63 -0
  38. package/src/_components/Toolbar/HearingTypeFilter.tsx +63 -0
  39. package/src/_components/Toolbar/Toolbar.tsx +159 -0
  40. package/src/_components/Toolbar/UserFilter.tsx +105 -0
  41. package/src/_components/Toolbar/ViewFilter.tsx +48 -0
  42. package/src/helpers/cache.ts +89 -0
  43. package/src/helpers/cases.ts +79 -0
  44. package/src/helpers/courtDates.ts +139 -0
  45. package/src/helpers/formatter.ts +16 -0
  46. package/src/helpers/munis.ts +44 -0
  47. package/src/helpers/people.ts +46 -0
  48. package/src/index.ts +2 -0
  49. package/src/types.ts +129 -0
  50. package/tsconfig.app.json +32 -0
  51. package/tsconfig.json +4 -0
  52. package/tsconfig.node.json +30 -0
  53. package/vite.config.ts +27 -0
@@ -0,0 +1,463 @@
1
+ /* Pop-in animation for all calendar events - uses scale instead of translate to avoid overflow */
2
+ .pop-in-ccalendar-event {
3
+ opacity: 0;
4
+ transform: scale(0.8);
5
+ transform-origin: center center;
6
+ animation: popInBounce 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
7
+ will-change: opacity, transform;
8
+ }
9
+
10
+ @keyframes popInBounce {
11
+ 0% {
12
+ opacity: 0;
13
+ transform: scale(0.8);
14
+ }
15
+ 100% {
16
+ opacity: 1;
17
+ transform: scale(1);
18
+ }
19
+ }
20
+ :root {
21
+ --bg: #ffffff;
22
+ --text: #212121;
23
+ --fc-today-bg-color: #e3eefa;
24
+ --fc-border-color: #cccccc;
25
+
26
+ --fc-event-inperson-color: #1da39c;
27
+ --fc-event-virtual-color: #216edf;
28
+ --fc-event-unknown-color: #9e9e9e;
29
+ }
30
+
31
+ [data-theme="dark"] {
32
+ --bg: #121212;
33
+ --text: #ffffff;
34
+ --fc-today-bg-color: #303e4a;
35
+ --fc-border-color: #353333;
36
+ }
37
+
38
+ .themed,
39
+ .themed div:not(.MuiAvatar-root, .iconHolder, .evidence-row),
40
+ .themed .MuiInputBase-root,
41
+ .themed label,
42
+ .themed .MuiSelect-select,
43
+ .themed button:not(.MuiFab-root) {
44
+ background-color: var(--bg) !important;
45
+ color: var(--text) !important;
46
+ border-color: var(--fc-border-color) !important;
47
+ scrollbar-color: var(--fc-border-color) var(--bg);
48
+
49
+ &:focus {
50
+ outline-color: var(--fc-border-color) !important;
51
+ }
52
+ }
53
+
54
+ .themed .MuiMenuItem-root,
55
+ .themed .MuiMenuItem-root div:not(.MuiAvatar-root) {
56
+ background-color: transparent !important;
57
+ }
58
+
59
+ .themed .MuiMenuItem-root:hover,
60
+ .themed .MuiMenuItem-root:hover div:not(.MuiAvatar-root) {
61
+ background-color: var(--fc-today-bg-color) !important;
62
+ }
63
+ .themed button.MuiToggleButton-root {
64
+ &.Mui-selected {
65
+ background-color: var(--fc-today-bg-color) !important;
66
+ }
67
+ &:hover {
68
+ background-color: var(--fc-border-color) !important;
69
+ }
70
+ }
71
+
72
+ .themed .Mui-disabled *:not(input) {
73
+ color: var(--text) !important;
74
+ cursor: not-allowed !important;
75
+ opacity: 0.8 !important;
76
+ }
77
+
78
+ .themed::-webkit-scrollbar,
79
+ .themed div::-webkit-scrollbar {
80
+ width: 8px;
81
+ background: var(--bg);
82
+ }
83
+ .themed::-webkit-scrollbar-thumb,
84
+ .themed div::-webkit-scrollbar-thumb {
85
+ background: var(--fc-border-color);
86
+ border-radius: 4px;
87
+ }
88
+ .themed::-webkit-scrollbar-track,
89
+ .themed div::-webkit-scrollbar-track {
90
+ background: var(--bg);
91
+ }
92
+ .themed input::placeholder,
93
+ .themed .MuiFab-root > svg {
94
+ color: var(--text) !important;
95
+ }
96
+ .themed * {
97
+ border-color: var(--fc-border-color) !important;
98
+ }
99
+
100
+ .themed button:hover,
101
+ .themed .MuiSelect-select:hover,
102
+ .themed input:hover {
103
+ background-color: var(--fc-today-bg-color) !important;
104
+ }
105
+
106
+ /* DataGrid row hover override */
107
+ .themed .MuiDataGrid-row:hover,
108
+ .themed .MuiDataGrid-row:hover > * {
109
+ background-color: var(--fc-today-bg-color) !important;
110
+ }
111
+ .themed .MuiInputBase-root:hover {
112
+ & input,
113
+ .MuiAutocomplete-endAdornment {
114
+ & button,
115
+ input {
116
+ background-color: var(--fc-today-bg-color) !important;
117
+ }
118
+ background-color: var(--fc-today-bg-color) !important;
119
+ }
120
+ }
121
+ .themed .MuiFormControl-root:hover {
122
+ & .MuiFormLabel-root {
123
+ background-color: var(--fc-today-bg-color) !important;
124
+ }
125
+ }
126
+
127
+ .month-day-cell {
128
+ background-color: var(--bg);
129
+ color: var(--text);
130
+ cursor: pointer;
131
+ height: 120px;
132
+ padding: 3px !important;
133
+ position: relative;
134
+
135
+ &.fc-day-other {
136
+ filter: brightness(0.9);
137
+ }
138
+
139
+ &.fc-day-today {
140
+ background-color: var(--fc-today-bg-color);
141
+ }
142
+ }
143
+
144
+ .month-day-cell:hover::after {
145
+ content: "";
146
+ position: absolute;
147
+ top: 0;
148
+ left: 0;
149
+ width: 100%;
150
+ height: 100%;
151
+ background-color: var(--fc-today-bg-color);
152
+ opacity: 0.5;
153
+ pointer-events: none;
154
+
155
+ /* background-image: url('data:image/svg+xml;utf8,<svg width="48" height="48" xmlns="http://www.w3.org/2000/svg"><circle cx="24" cy="24" r="22" fill="white" fill-opacity="0.5"/><line x1="24" y1="12" x2="24" y2="36" stroke="black" stroke-width="4" stroke-opacity="0.5"/><line x1="12" y1="24" x2="36" y2="24" stroke="black" stroke-width="4" stroke-opacity="0.5"/></svg>');
156
+ background-repeat: no-repeat;
157
+ background-position: top left;
158
+ background-size: 25px 25px; */
159
+ }
160
+
161
+ .day-header {
162
+ background-color: var(--bg);
163
+ color: var(--text);
164
+ border-bottom: 1px solid var(--fc-border-color);
165
+ & a {
166
+ padding: 6px 4px !important;
167
+ display: inline-block;
168
+ }
169
+ }
170
+
171
+ .court-calendar th[role="presentation"] {
172
+ background-color: var(--bg);
173
+ }
174
+
175
+ .day-cell-allday {
176
+ background-color: var(--bg) !important;
177
+ color: var(--text) !important;
178
+ }
179
+
180
+ .fc-daygrid-day-events {
181
+ max-height: 100px;
182
+ min-height: 100px;
183
+ overflow-y: inherit;
184
+ margin: 0 !important;
185
+ overflow-y: auto;
186
+ scrollbar-color: var(--fc-border-color) transparent;
187
+ }
188
+ .fc-day-today .fc-daygrid-day-events {
189
+ scrollbar-color: var(--fc-event-unknown-color) transparent;
190
+ }
191
+
192
+ .court-calendar .fc-timegrid-slot-label {
193
+ background-color: var(--bg);
194
+ color: var(--text);
195
+ }
196
+
197
+ .court-calendar .fc-timegrid-axis {
198
+ border-color: var(--fc-border-color);
199
+ background-color: var(--bg);
200
+ color: var(--text);
201
+ }
202
+
203
+ .court-calendar .fc-timegrid-divider {
204
+ border-color: var(--fc-border-color);
205
+ background-color: var(--bg);
206
+ }
207
+
208
+ .fc .fc-button,
209
+ .fc-button {
210
+ background-color: var(--bg);
211
+ color: var(--text);
212
+ border: 1px solid var(--fc-border-color);
213
+ font-family: "Roboto", "Helvetica", "Arial", "sans-serif";
214
+ padding: 0.25rem 0.5rem;
215
+ cursor: pointer;
216
+
217
+ &.fc-button-primary {
218
+ background-color: var(--bg);
219
+ color: var(--text);
220
+ border: 1px solid var(--fc-border-color);
221
+ }
222
+
223
+ &.fc-button-active.fc-button-primary {
224
+ background-color: var(--fc-today-bg-color);
225
+ color: var(--text);
226
+ }
227
+
228
+ &:hover {
229
+ background-color: var(--fc-today-bg-color);
230
+ }
231
+ }
232
+
233
+ .fc.fc-media-screen {
234
+ background-color: var(--bg);
235
+ color: var(--text);
236
+ font-family: "Roboto", "Helvetica", "Arial", "sans-serif";
237
+ }
238
+
239
+ #event-tooltip {
240
+ background-color: var(--text);
241
+ color: var(--bg);
242
+ border: 1px solid var(--fc-border-color);
243
+ border-radius: 4px;
244
+ padding: 8px;
245
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
246
+ z-index: 9999;
247
+ font-size: 16px;
248
+ }
249
+
250
+ .court-event {
251
+ cursor: pointer;
252
+ padding: 4px 2px;
253
+ }
254
+
255
+ .CCButton {
256
+ background-color: var(--bg);
257
+ color: var(--text);
258
+ border: 1px solid var(--fc-border-color);
259
+ font-family: "Roboto", "Helvetica", "Arial", "sans-serif";
260
+ padding: 8px 16px;
261
+ margin-right: 8px;
262
+ border-radius: 4px;
263
+ cursor: pointer;
264
+ user-select: none;
265
+ &:hover {
266
+ background-color: var(--fc-today-bg-color);
267
+ }
268
+ }
269
+
270
+ .CCButton-Icon {
271
+ min-width: 35px;
272
+ max-width: 35px;
273
+ min-height: 35px;
274
+ max-height: 35px;
275
+ border: none;
276
+ padding: 0;
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ }
281
+
282
+ .CCDropdown-Button {
283
+ width: 75px;
284
+ }
285
+
286
+ .CCDropdown-Menu {
287
+ background-color: var(--bg);
288
+ color: var(--text);
289
+ border: 1px solid var(--fc-border-color);
290
+ font-family: "Roboto", "Helvetica", "Arial", "sans-serif";
291
+
292
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
293
+
294
+ & div {
295
+ padding: 8px 19px;
296
+ &:hover {
297
+ background-color: var(--fc-today-bg-color);
298
+ }
299
+ }
300
+ }
301
+
302
+ .CCButton-Primary {
303
+ background-color: #1976d2ff;
304
+ color: white;
305
+ border: none;
306
+
307
+ &:hover {
308
+ background-color: #1565c0ff;
309
+ }
310
+ }
311
+
312
+ .CCButton-Error {
313
+ background-color: rgb(193, 90, 90);
314
+ color: white;
315
+ border: none;
316
+
317
+ &:hover {
318
+ background-color: rgb(149, 56, 56);
319
+ }
320
+ }
321
+
322
+ .modal-footer {
323
+ background-color: var(--bg);
324
+ color: var(--text);
325
+ border-top: 1px solid var(--fc-border-color);
326
+ }
327
+
328
+ .MuiInputBase-root.Mui-disabled {
329
+ opacity: 0.5 !important;
330
+ }
331
+
332
+ .ccdisabled {
333
+ pointer-events: none;
334
+ opacity: 0.6;
335
+ }
336
+
337
+ .switch-track {
338
+ outline: 2px solid var(--fc-border-color);
339
+ }
340
+
341
+ .fc-list-day-cushion {
342
+ background-color: var(--bg) !important;
343
+ color: var(--text);
344
+ }
345
+
346
+ .fc-list .fc-list-event:hover td {
347
+ background-color: var(--fc-today-bg-color) !important;
348
+ }
349
+
350
+ .fc-list .deadline-event {
351
+ & .fc-list-event-dot {
352
+ border: none;
353
+ width: 1em;
354
+ height: 1em;
355
+ vertical-align: middle;
356
+ 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>')
357
+ no-repeat center center;
358
+ background-size: contain;
359
+ }
360
+ &.inperson {
361
+ --color: var(--fc-event-inperson-color);
362
+ }
363
+ &.virtual {
364
+ --color: var(--fc-event-virtual-color);
365
+ }
366
+ &.unknown {
367
+ --color: var(--fc-event-unknown-color);
368
+ }
369
+ }
370
+
371
+ .fc-view:not(.fc-list) .deadline-event {
372
+ background-color: transparent !important;
373
+ border-color: transparent !important;
374
+ display: flex;
375
+ align-items: center;
376
+ overflow-x: hidden;
377
+ position: relative;
378
+
379
+ & .fc-event-title {
380
+ color: var(--text) !important;
381
+ }
382
+
383
+ &.inperson {
384
+ --color: var(--fc-event-inperson-color);
385
+ }
386
+ &.virtual {
387
+ --color: var(--fc-event-virtual-color);
388
+ }
389
+ &.unknown {
390
+ --color: var(--fc-event-unknown-color);
391
+ }
392
+ &.adjourned-no-date {
393
+ --color: rgb(151, 11, 134) !important;
394
+ }
395
+
396
+ &.status-uploaded::before {
397
+ content: "";
398
+ display: inline-block;
399
+ width: 1em;
400
+ height: 1em;
401
+ vertical-align: middle;
402
+ 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>')
403
+ no-repeat center center;
404
+ background-size: contain;
405
+ margin: 0px 4px 0px 0px;
406
+ top: 0.35em;
407
+ border: none;
408
+ position: absolute;
409
+ }
410
+ &.status-uploaded .fc-event-main {
411
+ margin-left: 1.5em !important;
412
+ }
413
+ &:not(.status-uploaded)::before {
414
+ content: "";
415
+ display: inline-block;
416
+ border-radius: calc(var(--fc-daygrid-event-dot-width) / 2);
417
+ box-sizing: content-box;
418
+ height: 0px;
419
+ margin: 0px 4px;
420
+ width: 0px;
421
+ border: calc(var(--fc-daygrid-event-dot-width) / 2) solid var(--color);
422
+ }
423
+ }
424
+
425
+ .courtdate-event,
426
+ .adjournment-event {
427
+ border: 1px solid var(--fc-border-color) !important;
428
+ & .fc-event-title,
429
+ .fc-event-time {
430
+ color: white !important;
431
+ }
432
+ &.inperson {
433
+ background-color: var(--fc-event-inperson-color) !important;
434
+ border-color: var(--fc-event-inperson-color) !important;
435
+ }
436
+ &.virtual {
437
+ background-color: var(--fc-event-virtual-color) !important;
438
+ border-color: var(--fc-event-virtual-color) !important;
439
+ }
440
+ &.unknown {
441
+ background-color: var(--fc-event-unknown-color) !important;
442
+ border-color: var(--fc-event-unknown-color) !important;
443
+ }
444
+ & .fc-daygrid-event-dot,
445
+ .fc-list-event-dot {
446
+ display: none;
447
+ }
448
+
449
+ &.adjourned-no-date {
450
+ border-color: rgb(151, 11, 134) !important;
451
+ background-color: rgb(151, 11, 134) !important;
452
+ }
453
+ }
454
+
455
+ .ccalendar-list-row {
456
+ cursor: pointer;
457
+ }
458
+
459
+ .CCAvatarIcon:hover {
460
+ cursor: pointer;
461
+ transform: scale(1.1);
462
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
463
+ }