@striae-org/striae 3.0.5 → 3.1.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 (78) hide show
  1. package/app/components/actions/case-export/core-export.ts +1 -1
  2. package/app/components/actions/case-export/download-handlers.ts +10 -12
  3. package/app/components/actions/case-export/metadata-helpers.ts +1 -1
  4. package/app/components/actions/case-import/confirmation-import.ts +24 -9
  5. package/app/components/actions/case-import/orchestrator.ts +3 -4
  6. package/app/components/actions/case-import/validation.ts +3 -3
  7. package/app/components/actions/case-import/zip-processing.ts +12 -48
  8. package/app/components/actions/case-manage.ts +0 -1
  9. package/app/components/actions/confirm-export.ts +2 -2
  10. package/app/components/audit/user-audit-viewer.tsx +53 -15
  11. package/app/components/audit/user-audit.module.css +11 -4
  12. package/app/components/canvas/box-annotations/box-annotations.tsx +36 -7
  13. package/app/components/canvas/canvas.tsx +35 -24
  14. package/app/components/canvas/confirmation/confirmation.module.css +5 -2
  15. package/app/components/canvas/confirmation/confirmation.tsx +25 -8
  16. package/app/components/sidebar/case-export/case-export.module.css +194 -5
  17. package/app/components/sidebar/case-export/case-export.tsx +291 -11
  18. package/app/components/sidebar/case-import/case-import.module.css +9 -5
  19. package/app/components/sidebar/case-import/case-import.tsx +30 -7
  20. package/app/components/sidebar/case-import/components/CasePreviewSection.tsx +2 -2
  21. package/app/components/sidebar/case-import/components/ConfirmationDialog.tsx +1 -1
  22. package/app/components/sidebar/case-import/components/ExistingCaseSection.tsx +1 -1
  23. package/app/components/sidebar/case-import/hooks/useFilePreview.ts +34 -9
  24. package/app/components/sidebar/cases/case-sidebar.tsx +13 -13
  25. package/app/components/sidebar/cases/cases-modal.tsx +12 -2
  26. package/app/components/sidebar/files/files-modal.tsx +28 -8
  27. package/app/components/sidebar/sidebar.module.css +2 -3
  28. package/app/components/sidebar/sidebar.tsx +1 -16
  29. package/app/components/sidebar/upload/image-upload-zone.tsx +4 -4
  30. package/app/components/toolbar/toolbar-color-selector.tsx +3 -3
  31. package/app/components/toolbar/toolbar.tsx +19 -9
  32. package/app/components/user/delete-account.module.css +4 -1
  33. package/app/components/user/delete-account.tsx +22 -3
  34. package/app/components/user/manage-profile.tsx +0 -2
  35. package/app/entry.server.tsx +2 -3
  36. package/app/hooks/useInactivityTimeout.ts +5 -1
  37. package/app/routes/_index.tsx +1 -16
  38. package/app/routes/auth/emailVerification.tsx +1 -1
  39. package/app/routes/auth/route.ts +3 -12
  40. package/app/routes/striae/striae.tsx +1 -1
  41. package/app/services/audit.service.ts +29 -9
  42. package/app/tailwind.css +16 -1
  43. package/app/types/audit.ts +3 -3
  44. package/app/types/case.ts +1 -1
  45. package/app/types/import.ts +0 -2
  46. package/app/utils/SHA256.ts +3 -3
  47. package/app/utils/batch-operations.ts +6 -6
  48. package/app/utils/data-operations.ts +14 -7
  49. package/app/utils/permissions.ts +0 -2
  50. package/functions/[[path]].ts +0 -1
  51. package/package.json +1 -2
  52. package/public/assets/striae.jpg +0 -0
  53. package/scripts/run-eslint.cjs +14 -6
  54. package/worker-configuration.d.ts +2 -2
  55. package/workers/audit-worker/src/audit-worker.example.ts +9 -7
  56. package/workers/audit-worker/worker-configuration.d.ts +2 -2
  57. package/workers/audit-worker/wrangler.jsonc.example +1 -1
  58. package/workers/data-worker/src/data-worker.example.ts +1 -1
  59. package/workers/data-worker/worker-configuration.d.ts +2 -2
  60. package/workers/data-worker/wrangler.jsonc.example +1 -1
  61. package/workers/image-worker/worker-configuration.d.ts +2 -2
  62. package/workers/image-worker/wrangler.jsonc.example +1 -1
  63. package/workers/keys-worker/worker-configuration.d.ts +2 -2
  64. package/workers/keys-worker/wrangler.jsonc.example +1 -1
  65. package/workers/pdf-worker/src/pdf-worker.example.ts +3 -3
  66. package/workers/pdf-worker/worker-configuration.d.ts +2 -2
  67. package/workers/pdf-worker/wrangler.jsonc.example +1 -1
  68. package/workers/user-worker/src/user-worker.example.ts +10 -10
  69. package/workers/user-worker/worker-configuration.d.ts +2 -2
  70. package/workers/user-worker/wrangler.jsonc.example +1 -1
  71. package/wrangler.toml.example +1 -1
  72. package/app/components/sidebar/hash/hash-utility.module.css +0 -366
  73. package/app/components/sidebar/hash/hash-utility.tsx +0 -982
  74. package/app/routes/mobile-prevented/mobilePrevented.module.css +0 -47
  75. package/app/routes/mobile-prevented/mobilePrevented.tsx +0 -28
  76. package/app/routes/mobile-prevented/route.ts +0 -14
  77. package/app/utils/device-detection.ts +0 -5
  78. package/app/utils/html-sanitizer.ts +0 -80
@@ -1,366 +0,0 @@
1
- /* Modal Overlay */
2
- .overlay {
3
- position: fixed;
4
- inset: 0;
5
- background-color: color-mix(in lab, var(--background) 50%, transparent);
6
- display: flex;
7
- justify-content: center;
8
- align-items: center;
9
- z-index: var(--zIndex5);
10
- transition: background-color var(--durationM) var(--bezierFastoutSlowin);
11
- }
12
-
13
-
14
- /* Modal Container */
15
- .modal {
16
- background: var(--backgroundLight);
17
- border-radius: var(--spaceXS);
18
- width: 90%;
19
- max-width: 600px;
20
- max-height: 90vh;
21
- box-shadow: 0 var(--spaceXS) var(--spaceL) color-mix(in lab, var(--black) 10%, transparent);
22
- transition: background-color var(--durationM) var(--bezierFastoutSlowin);
23
- display: flex;
24
- flex-direction: column;
25
- }
26
-
27
-
28
- /* Header */
29
- .header {
30
- display: flex;
31
- font-size: var(--fontSizeBodyL);
32
- justify-content: space-between;
33
- align-items: center;
34
- padding: var(--spaceL);
35
- border-bottom: 1px solid color-mix(in lab, var(--text) 10%, transparent);
36
- color: var(--textTitle);
37
- flex-shrink: 0;
38
- }
39
-
40
- .title {
41
- margin: 0;
42
- font-size: var(--fontSizeBodyL);
43
- font-weight: 600;
44
- color: var(--textTitle);
45
- }
46
-
47
- .closeButton {
48
- background: none;
49
- border: none;
50
- font-size: var(--fontSizeH5);
51
- cursor: pointer;
52
- padding: var(--spaceS);
53
- color: var(--textLight);
54
- transition: color var(--durationS) var(--bezierFastoutSlowin);
55
- }
56
-
57
- .closeButton:hover:not(:disabled) {
58
- color: var(--text);
59
- }
60
-
61
- .closeButton:disabled {
62
- opacity: 0.5;
63
- cursor: not-allowed;
64
- }
65
-
66
- /* Content */
67
- .content {
68
- padding: var(--spaceL);
69
- overflow-y: auto;
70
- flex: 1;
71
- min-height: 0;
72
- }
73
-
74
- .description {
75
- color: var(--textBody);
76
- line-height: 1.5;
77
- margin: 0 0 var(--spaceL) 0;
78
- font-size: var(--fontSizeBodyM);
79
- }
80
-
81
- /* Upload Area */
82
- .uploadWrapper {
83
- position: relative;
84
- margin-bottom: var(--spaceL);
85
- }
86
-
87
- .uploadArea {
88
- border: 2px dashed color-mix(in lab, var(--primary) 30%, transparent);
89
- border-radius: var(--spaceXS);
90
- background: color-mix(in lab, var(--primary) 5%, transparent);
91
- padding: var(--spaceXL);
92
- text-align: center;
93
- cursor: pointer;
94
- transition: all var(--durationS) var(--bezierFastoutSlowin);
95
- min-height: 120px;
96
- display: flex;
97
- align-items: center;
98
- justify-content: center;
99
- }
100
-
101
- .uploadArea:hover {
102
- border-color: var(--primary);
103
- background: color-mix(in lab, var(--primary) 10%, transparent);
104
- transform: translateY(-1px);
105
- }
106
-
107
- .uploadArea:focus-visible {
108
- outline: none;
109
- border-color: var(--primary);
110
- box-shadow: 0 0 0 2px color-mix(in lab, var(--primary) 20%, transparent);
111
- }
112
-
113
- .uploadArea.dragOver {
114
- border-color: var(--accent);
115
- background: color-mix(in lab, var(--accent) 15%, transparent);
116
- border-style: solid;
117
- transform: scale(1.02);
118
- box-shadow: 0 0 0 2px color-mix(in lab, var(--accent) 30%, transparent);
119
- }
120
-
121
- .uploadArea[aria-disabled="true"] {
122
- opacity: 0.5;
123
- cursor: not-allowed;
124
- border-color: color-mix(in lab, var(--text) 15%, transparent);
125
- background: color-mix(in lab, var(--background) 95%, transparent);
126
- }
127
-
128
- .uploadArea[aria-disabled="true"]:hover {
129
- border-color: color-mix(in lab, var(--text) 15%, transparent);
130
- background: color-mix(in lab, var(--background) 95%, transparent);
131
- transform: none;
132
- }
133
-
134
- .uploadContent {
135
- display: flex;
136
- flex-direction: column;
137
- align-items: center;
138
- gap: var(--spaceS);
139
- }
140
-
141
- .uploadIcon {
142
- font-size: var(--fontSizeBodyL);
143
- opacity: 0.7;
144
- transition: all var(--durationS) var(--bezierFastoutSlowin);
145
- }
146
-
147
- .dragOver .uploadIcon {
148
- opacity: 1;
149
- transform: scale(1.1);
150
- }
151
-
152
- .uploadText {
153
- font-size: var(--fontSizeBodyS);
154
- font-weight: var(--fontWeightMedium);
155
- color: var(--textBody);
156
- transition: all var(--durationS) var(--bezierFastoutSlowin);
157
- flex: 1;
158
- }
159
-
160
- .dragOver .uploadText {
161
- color: var(--accent);
162
- }
163
-
164
- .uploadText strong {
165
- color: var(--primary);
166
- font-weight: var(--fontWeightSemibold);
167
- transition: all var(--durationS) var(--bezierFastoutSlowin);
168
- }
169
-
170
- .dragOver .uploadText strong {
171
- color: var(--accent);
172
- font-weight: var(--fontWeightBold);
173
- }
174
-
175
- .uploadSubtext {
176
- font-size: var(--fontSizeBodyXS);
177
- color: var(--textLight);
178
- }
179
-
180
- .hiddenInput {
181
- position: absolute;
182
- opacity: 0;
183
- width: 0;
184
- height: 0;
185
- pointer-events: none;
186
- }
187
-
188
- /* Verification Status */
189
- .verifyingSection {
190
- margin: var(--spaceM) 0;
191
- padding: var(--spaceM);
192
- background: var(--backgroundLight);
193
- border-radius: var(--spaceXS);
194
- border: 1px solid color-mix(in lab, var(--text) 10%, transparent);
195
- display: flex;
196
- align-items: center;
197
- justify-content: center;
198
- gap: var(--spaceM);
199
- }
200
-
201
- .spinner {
202
- width: 24px;
203
- height: 24px;
204
- border: 3px solid var(--divider);
205
- border-top: 3px solid var(--primary);
206
- border-radius: 50%;
207
- animation: spin 1s linear infinite;
208
- }
209
-
210
- @keyframes spin {
211
- 0% { transform: rotate(0deg); }
212
- 100% { transform: rotate(360deg); }
213
- }
214
-
215
- .verifyingText {
216
- color: var(--textTitle);
217
- font-size: var(--fontSizeBodyS);
218
- font-weight: var(--fontWeightMedium);
219
- }
220
-
221
- /* Results Section */
222
- .resultSection {
223
- margin-top: var(--spaceM);
224
- padding: var(--spaceM);
225
- border-radius: var(--spaceXS);
226
- }
227
-
228
- .resultSection.success {
229
- background: color-mix(in lab, var(--success) 10%, transparent);
230
- border: 1px solid color-mix(in lab, var(--success) 20%, transparent);
231
- }
232
-
233
- .resultSection.failure {
234
- background: color-mix(in lab, var(--error) 10%, transparent);
235
- border: 1px solid color-mix(in lab, var(--error) 20%, transparent);
236
- }
237
-
238
- .resultHeader {
239
- display: flex;
240
- align-items: center;
241
- gap: var(--spaceS);
242
- margin-bottom: var(--spaceM);
243
- }
244
-
245
- .resultIcon {
246
- font-size: var(--fontSizeBodyL);
247
- line-height: 1;
248
- }
249
-
250
- .resultIcon.successIcon {
251
- color: var(--success);
252
- }
253
-
254
- .resultIcon.failureIcon {
255
- color: var(--error);
256
- }
257
-
258
- .resultTitle {
259
- font-size: var(--fontSizeBodyL);
260
- font-weight: var(--fontWeightSemibold);
261
- margin: 0;
262
- }
263
-
264
- .resultSection.success .resultTitle {
265
- color: var(--success);
266
- }
267
-
268
- .resultSection.failure .resultTitle {
269
- color: var(--error);
270
- }
271
-
272
- /* Result Details */
273
- .resultDetails {
274
- display: flex;
275
- flex-direction: column;
276
- gap: var(--spaceXS);
277
- margin-bottom: var(--spaceM);
278
- background: color-mix(in lab, var(--background) 50%, transparent);
279
- padding: var(--spaceS);
280
- border-radius: var(--spaceXS);
281
- border: 1px solid color-mix(in lab, var(--text) 5%, transparent);
282
- }
283
-
284
- .resultRow {
285
- display: flex;
286
- flex-direction: column;
287
- align-items: flex-start;
288
- gap: var(--spaceXS);
289
- }
290
-
291
- .resultLabel {
292
- font-weight: var(--fontWeightMedium);
293
- color: var(--textBody);
294
- font-size: var(--fontSizeBodyXS);
295
- flex-shrink: 0;
296
- }
297
-
298
- .resultValue {
299
- color: var(--text);
300
- font-family: var(--fontFamilyMono);
301
- font-size: var(--fontSizeBodyXS);
302
- word-break: break-word;
303
- word-wrap: break-word;
304
- overflow-wrap: break-word;
305
- white-space: normal;
306
- text-align: left;
307
- width: 100%;
308
- }
309
-
310
- /* Special handling for error messages - use normal text wrapping */
311
- .resultValue.errorMessage {
312
- font-family: var(--fontFamilyBody);
313
- word-break: normal;
314
- word-wrap: break-word;
315
- overflow-wrap: break-word;
316
- hyphens: auto;
317
- text-align: left;
318
- }
319
-
320
- .resultMessage {
321
- font-size: var(--fontSizeBodyS);
322
- font-weight: var(--fontWeightMedium);
323
- line-height: 1.6;
324
- padding: var(--spaceS);
325
- border-radius: var(--spaceXS);
326
- margin-top: var(--spaceXS);
327
- word-wrap: break-word;
328
- overflow-wrap: break-word;
329
- hyphens: auto;
330
- white-space: pre-wrap;
331
- }
332
-
333
- .resultSection.success .resultMessage {
334
- background: color-mix(in lab, var(--success) 8%, transparent);
335
- color: var(--success);
336
- }
337
-
338
- .resultSection.failure .resultMessage {
339
- background: color-mix(in lab, var(--error) 8%, transparent);
340
- color: var(--error);
341
- }
342
-
343
- /* Responsive Design */
344
- @media (max-width: 768px) {
345
- .modal {
346
- width: 95%;
347
- max-height: 90vh;
348
- }
349
-
350
- .content {
351
- padding: var(--spaceM);
352
- }
353
-
354
- .uploadArea {
355
- padding: var(--spaceL);
356
- }
357
-
358
- .resultRow {
359
- flex-direction: column;
360
- gap: var(--spaceXS);
361
- }
362
-
363
- .resultValue {
364
- text-align: left;
365
- }
366
- }