@jjlmoya/utils-forensic-science 1.7.0 → 1.9.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 (35) hide show
  1. package/package.json +2 -2
  2. package/src/category/index.ts +21 -16
  3. package/src/entries.ts +8 -1
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/time-of-death-algor-mortis-calculator/bibliography.astro +14 -0
  7. package/src/tool/time-of-death-algor-mortis-calculator/bibliography.ts +7 -0
  8. package/src/tool/time-of-death-algor-mortis-calculator/component.astro +133 -0
  9. package/src/tool/time-of-death-algor-mortis-calculator/controller.ts +254 -0
  10. package/src/tool/time-of-death-algor-mortis-calculator/dom-views.ts +144 -0
  11. package/src/tool/time-of-death-algor-mortis-calculator/entry.ts +29 -0
  12. package/src/tool/time-of-death-algor-mortis-calculator/evaluator.ts +34 -0
  13. package/src/tool/time-of-death-algor-mortis-calculator/i18n/de.ts +139 -0
  14. package/src/tool/time-of-death-algor-mortis-calculator/i18n/en.ts +136 -0
  15. package/src/tool/time-of-death-algor-mortis-calculator/i18n/es.ts +136 -0
  16. package/src/tool/time-of-death-algor-mortis-calculator/i18n/fr.ts +136 -0
  17. package/src/tool/time-of-death-algor-mortis-calculator/i18n/id.ts +139 -0
  18. package/src/tool/time-of-death-algor-mortis-calculator/i18n/it.ts +136 -0
  19. package/src/tool/time-of-death-algor-mortis-calculator/i18n/ja.ts +136 -0
  20. package/src/tool/time-of-death-algor-mortis-calculator/i18n/ko.ts +136 -0
  21. package/src/tool/time-of-death-algor-mortis-calculator/i18n/nl.ts +139 -0
  22. package/src/tool/time-of-death-algor-mortis-calculator/i18n/pl.ts +139 -0
  23. package/src/tool/time-of-death-algor-mortis-calculator/i18n/pt.ts +136 -0
  24. package/src/tool/time-of-death-algor-mortis-calculator/i18n/ru.ts +139 -0
  25. package/src/tool/time-of-death-algor-mortis-calculator/i18n/sv.ts +139 -0
  26. package/src/tool/time-of-death-algor-mortis-calculator/i18n/tr.ts +139 -0
  27. package/src/tool/time-of-death-algor-mortis-calculator/i18n/zh.ts +136 -0
  28. package/src/tool/time-of-death-algor-mortis-calculator/index.ts +11 -0
  29. package/src/tool/time-of-death-algor-mortis-calculator/logic.test.ts +77 -0
  30. package/src/tool/time-of-death-algor-mortis-calculator/logic.ts +177 -0
  31. package/src/tool/time-of-death-algor-mortis-calculator/seo.astro +15 -0
  32. package/src/tool/time-of-death-algor-mortis-calculator/storage.ts +21 -0
  33. package/src/tool/time-of-death-algor-mortis-calculator/time-of-death-algor-mortis-calculator.css +596 -0
  34. package/src/tool/time-of-death-algor-mortis-calculator/ui.ts +60 -0
  35. package/src/tools.ts +3 -1
@@ -0,0 +1,596 @@
1
+ :root {
2
+ --n-bg: #f8fafc;
3
+ --n-surface: #fff;
4
+ --n-surface-subtle: #f1f5f9;
5
+ --n-card-bg: rgba(255, 255, 255, 0.96);
6
+ --n-border: #cbd5e1;
7
+ --n-border-hover: #94a3b8;
8
+ --n-text: #0f172a;
9
+ --n-text-muted: #64748b;
10
+ --n-text-bright: #020617;
11
+ --n-primary: #0284c7;
12
+ --n-primary-hover: #0369a1;
13
+ --n-accent-cyan: #06b6d4;
14
+ --n-success: #10b981;
15
+ --n-warning: #f59e0b;
16
+ --n-danger: #ef4444;
17
+ --n-info: #0284c7;
18
+ --n-chart-bg: #f8fafc;
19
+ --n-chart-plateau: rgba(6, 182, 212, 0.12);
20
+ --n-chart-band: rgba(2, 132, 199, 0.12);
21
+ --n-chart-amb: #94a3b8;
22
+ --n-shadow: 0 16px 40px -8px rgba(0, 0, 0, 0.08);
23
+ }
24
+
25
+ .theme-dark {
26
+ --n-bg: #070b12;
27
+ --n-surface: #0f172a;
28
+ --n-surface-subtle: #1e293b;
29
+ --n-card-bg: rgba(15, 23, 42, 0.94);
30
+ --n-border: #1e293b;
31
+ --n-border-hover: #334155;
32
+ --n-text: #f8fafc;
33
+ --n-text-muted: #94a3b8;
34
+ --n-text-bright: #fff;
35
+ --n-primary: #38bdf8;
36
+ --n-primary-hover: #7dd3fc;
37
+ --n-accent-cyan: #22d3ee;
38
+ --n-success: #34d399;
39
+ --n-warning: #fbbf24;
40
+ --n-danger: #f87171;
41
+ --n-info: #38bdf8;
42
+ --n-chart-bg: #0b1120;
43
+ --n-chart-plateau: rgba(34, 211, 238, 0.14);
44
+ --n-chart-band: rgba(56, 189, 248, 0.14);
45
+ --n-chart-amb: #64748b;
46
+ --n-shadow: 0 20px 48px -10px rgba(0, 0, 0, 0.65);
47
+ }
48
+
49
+ .sc-algor-cockpit {
50
+ display: grid;
51
+ grid-template-columns: 1fr;
52
+ gap: 2.25rem;
53
+ background-color: var(--n-card-bg);
54
+ border: 1px solid var(--n-border);
55
+ border-radius: 20px;
56
+ padding: 2.25rem;
57
+ box-shadow: var(--n-shadow);
58
+ backdrop-filter: blur(14px);
59
+ color: var(--n-text);
60
+ box-sizing: border-box;
61
+ width: 100%;
62
+ }
63
+
64
+ @media (min-width: 1024px) {
65
+ .sc-algor-cockpit {
66
+ grid-template-columns: 420px 1fr;
67
+ gap: 2.5rem;
68
+ }
69
+ }
70
+
71
+ .sc-cockpit-sidebar {
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: 1.5rem;
75
+ }
76
+
77
+ .sc-cockpit-stage {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 1.5rem;
81
+ }
82
+
83
+ .sc-header-row {
84
+ display: flex;
85
+ justify-content: space-between;
86
+ align-items: center;
87
+ margin-bottom: 0.5rem;
88
+ }
89
+
90
+ .sc-panel-title {
91
+ font-size: 1.05rem;
92
+ font-weight: 700;
93
+ color: var(--n-text-bright);
94
+ text-transform: uppercase;
95
+ letter-spacing: 0.04em;
96
+ }
97
+
98
+ .sc-unit-toggle {
99
+ display: flex;
100
+ background-color: var(--n-surface-subtle);
101
+ border: 1px solid var(--n-border);
102
+ border-radius: 10px;
103
+ padding: 3px;
104
+ }
105
+
106
+ .sc-unit-btn {
107
+ background: transparent;
108
+ border: none;
109
+ color: var(--n-text-muted);
110
+ font-size: 0.825rem;
111
+ font-weight: 700;
112
+ padding: 0.4rem 0.85rem;
113
+ border-radius: 7px;
114
+ cursor: pointer;
115
+ transition: all 0.15s ease;
116
+ }
117
+
118
+ .sc-unit-btn:hover {
119
+ color: var(--n-text-bright);
120
+ }
121
+
122
+ .sc-unit-btn.active {
123
+ background-color: var(--n-primary);
124
+ color: #fff;
125
+ }
126
+
127
+ .sc-presets-wrap {
128
+ display: flex;
129
+ flex-wrap: wrap;
130
+ gap: 0.6rem;
131
+ }
132
+
133
+ .sc-preset-chip {
134
+ background-color: var(--n-surface);
135
+ border: 1px solid var(--n-border);
136
+ color: var(--n-text);
137
+ border-radius: 10px;
138
+ padding: 0.55rem 0.95rem;
139
+ font-size: 0.875rem;
140
+ font-weight: 600;
141
+ cursor: pointer;
142
+ transition: all 0.15s ease;
143
+ }
144
+
145
+ .sc-preset-chip:hover {
146
+ border-color: var(--n-primary);
147
+ color: var(--n-primary);
148
+ }
149
+
150
+ .sc-preset-chip.active {
151
+ background-color: var(--n-primary);
152
+ border-color: var(--n-primary);
153
+ color: #fff;
154
+ }
155
+
156
+ .sc-input-group {
157
+ display: flex;
158
+ flex-direction: column;
159
+ gap: 0.5rem;
160
+ }
161
+
162
+ .sc-input-label-row {
163
+ display: flex;
164
+ justify-content: space-between;
165
+ align-items: center;
166
+ }
167
+
168
+ .sc-label {
169
+ font-size: 0.9rem;
170
+ font-weight: 600;
171
+ color: var(--n-text-muted);
172
+ }
173
+
174
+ .sc-tactile-row {
175
+ display: grid;
176
+ grid-template-columns: 1fr 95px;
177
+ gap: 1rem;
178
+ align-items: center;
179
+ }
180
+
181
+ .sc-slider {
182
+ appearance: none;
183
+ width: 100%;
184
+ height: 8px;
185
+ border-radius: 9999px;
186
+ background: var(--n-surface-subtle);
187
+ border: 1px solid var(--n-border);
188
+ outline: none;
189
+ }
190
+
191
+ .sc-slider::-webkit-slider-thumb {
192
+ appearance: none;
193
+ width: 22px;
194
+ height: 22px;
195
+ border-radius: 50%;
196
+ background: var(--n-primary);
197
+ cursor: pointer;
198
+ border: 2px solid #fff;
199
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25);
200
+ }
201
+
202
+ .sc-num-input {
203
+ padding: 0.55rem 0.75rem;
204
+ border-radius: 8px;
205
+ border: 1px solid var(--n-border);
206
+ background-color: var(--n-surface);
207
+ color: var(--n-text-bright);
208
+ font-size: 1rem;
209
+ font-weight: 600;
210
+ text-align: center;
211
+ }
212
+
213
+ .sc-time-wrap {
214
+ position: relative;
215
+ display: inline-flex;
216
+ align-items: center;
217
+ }
218
+
219
+ .sc-time-input {
220
+ padding: 0.55rem 2.5rem 0.55rem 0.85rem;
221
+ border-radius: 8px;
222
+ border: 1px solid var(--n-border);
223
+ background-color: var(--n-surface);
224
+ color: var(--n-text-bright);
225
+ font-size: 1rem;
226
+ font-weight: 600;
227
+ text-align: center;
228
+ position: relative;
229
+ }
230
+
231
+ .sc-time-input::-webkit-calendar-picker-indicator {
232
+ position: absolute;
233
+ top: 0;
234
+ left: 0;
235
+ width: 100%;
236
+ height: 100%;
237
+ opacity: 0;
238
+ cursor: pointer;
239
+ }
240
+
241
+ .sc-time-icon {
242
+ position: absolute;
243
+ right: 0.75rem;
244
+ width: 18px;
245
+ height: 18px;
246
+ stroke: var(--n-primary);
247
+ pointer-events: none;
248
+ }
249
+
250
+ .sc-custom-select {
251
+ position: relative;
252
+ width: 100%;
253
+ }
254
+
255
+ .sc-select-trigger {
256
+ width: 100%;
257
+ display: flex;
258
+ justify-content: space-between;
259
+ align-items: center;
260
+ padding: 0.75rem 1rem;
261
+ border-radius: 10px;
262
+ border: 1px solid var(--n-border);
263
+ background-color: var(--n-surface);
264
+ color: var(--n-text-bright);
265
+ font-size: 0.95rem;
266
+ font-weight: 600;
267
+ cursor: pointer;
268
+ transition: border-color 0.15s ease;
269
+ }
270
+
271
+ .sc-select-trigger:hover {
272
+ border-color: var(--n-border-hover);
273
+ }
274
+
275
+ .sc-select-chevron {
276
+ width: 18px;
277
+ height: 18px;
278
+ stroke: var(--n-text-muted);
279
+ }
280
+
281
+ .sc-select-dropdown {
282
+ display: none;
283
+ position: absolute;
284
+ top: calc(100% + 6px);
285
+ left: 0;
286
+ width: 100%;
287
+ max-height: 240px;
288
+ overflow-y: auto;
289
+ background-color: var(--n-surface);
290
+ border: 1px solid var(--n-border);
291
+ border-radius: 10px;
292
+ box-shadow: var(--n-shadow);
293
+ z-index: 50;
294
+ }
295
+
296
+ .sc-select-dropdown.open {
297
+ display: block;
298
+ }
299
+
300
+ .sc-select-option {
301
+ padding: 0.7rem 1rem;
302
+ font-size: 0.9rem;
303
+ color: var(--n-text);
304
+ cursor: pointer;
305
+ transition: background-color 0.1s ease;
306
+ }
307
+
308
+ .sc-select-option:hover {
309
+ background-color: var(--n-surface-subtle);
310
+ color: var(--n-primary);
311
+ }
312
+
313
+ .sc-actions-row {
314
+ display: flex;
315
+ gap: 0.75rem;
316
+ align-items: center;
317
+ }
318
+
319
+ .sc-btn {
320
+ padding: 0.65rem 1.1rem;
321
+ border-radius: 10px;
322
+ border: 1px solid var(--n-border);
323
+ background-color: var(--n-surface);
324
+ color: var(--n-text-bright);
325
+ font-size: 0.9rem;
326
+ font-weight: 600;
327
+ cursor: pointer;
328
+ transition: all 0.15s ease;
329
+ }
330
+
331
+ .sc-btn:hover {
332
+ border-color: var(--n-primary);
333
+ color: var(--n-primary);
334
+ }
335
+
336
+ .sc-btn-primary {
337
+ background-color: var(--n-primary);
338
+ border-color: var(--n-primary);
339
+ color: #fff;
340
+ }
341
+
342
+ .sc-btn-primary:hover {
343
+ background-color: var(--n-primary-hover);
344
+ color: #fff;
345
+ }
346
+
347
+ .sc-warning-card {
348
+ background-color: var(--n-surface-subtle);
349
+ border: 1px solid var(--n-border);
350
+ border-left: 4px solid var(--n-warning);
351
+ border-radius: 10px;
352
+ padding: 1rem 1.25rem;
353
+ display: flex;
354
+ flex-direction: column;
355
+ gap: 0.35rem;
356
+ }
357
+
358
+ .sc-warning-title {
359
+ font-size: 0.825rem;
360
+ font-weight: 700;
361
+ color: var(--n-warning);
362
+ text-transform: uppercase;
363
+ letter-spacing: 0.05em;
364
+ }
365
+
366
+ .sc-warning-text {
367
+ font-size: 0.825rem;
368
+ line-height: 1.5;
369
+ color: var(--n-text-muted);
370
+ }
371
+
372
+ .sc-hero-card {
373
+ background: linear-gradient(135deg, rgba(2, 132, 199, 0.08), rgba(16, 185, 129, 0.06));
374
+ border: 1px solid var(--n-border);
375
+ border-radius: 14px;
376
+ padding: 1.6rem 1.75rem;
377
+ display: flex;
378
+ flex-direction: column;
379
+ gap: 0.85rem;
380
+ }
381
+
382
+ .sc-hero-header {
383
+ display: flex;
384
+ justify-content: space-between;
385
+ align-items: center;
386
+ }
387
+
388
+ .sc-hero-title {
389
+ font-size: 0.95rem;
390
+ font-weight: 700;
391
+ color: var(--n-text-muted);
392
+ text-transform: uppercase;
393
+ letter-spacing: 0.05em;
394
+ }
395
+
396
+ .sc-hero-val {
397
+ font-size: 2.85rem;
398
+ font-weight: 800;
399
+ color: var(--n-text-bright);
400
+ line-height: 1.1;
401
+ }
402
+
403
+ .sc-hero-sub {
404
+ font-size: 0.95rem;
405
+ color: var(--n-text-muted);
406
+ }
407
+
408
+ .sc-hero-sub strong {
409
+ color: var(--n-text-bright);
410
+ }
411
+
412
+ .sc-gauge-wrap {
413
+ display: flex;
414
+ flex-direction: column;
415
+ gap: 0.4rem;
416
+ margin-top: 0.4rem;
417
+ }
418
+
419
+ .sc-gauge-track {
420
+ width: 100%;
421
+ height: 10px;
422
+ background-color: var(--n-surface-subtle);
423
+ border-radius: 9999px;
424
+ overflow: hidden;
425
+ border: 1px solid var(--n-border);
426
+ }
427
+
428
+ .sc-gauge-bar {
429
+ height: 100%;
430
+ border-radius: 9999px;
431
+ transition: width 0.3s ease;
432
+ }
433
+
434
+ .sc-gauge-labels {
435
+ display: flex;
436
+ justify-content: space-between;
437
+ font-size: 0.8rem;
438
+ font-weight: 600;
439
+ color: var(--n-text-muted);
440
+ }
441
+
442
+ .sc-badge {
443
+ font-size: 0.8rem;
444
+ font-weight: 700;
445
+ padding: 0.3rem 0.8rem;
446
+ border-radius: 9999px;
447
+ text-transform: uppercase;
448
+ letter-spacing: 0.04em;
449
+ }
450
+
451
+ .badge-success {
452
+ background: rgba(16, 185, 129, 0.18);
453
+ color: var(--n-success);
454
+ border: 1px solid rgba(16, 185, 129, 0.3);
455
+ }
456
+
457
+ .badge-info {
458
+ background: rgba(6, 182, 212, 0.18);
459
+ color: var(--n-accent-cyan);
460
+ border: 1px solid rgba(6, 182, 212, 0.3);
461
+ }
462
+
463
+ .badge-warning {
464
+ background: rgba(245, 158, 11, 0.18);
465
+ color: var(--n-warning);
466
+ border: 1px solid rgba(245, 158, 11, 0.3);
467
+ }
468
+
469
+ .badge-danger {
470
+ background: rgba(239, 68, 68, 0.18);
471
+ color: var(--n-danger);
472
+ border: 1px solid rgba(239, 68, 68, 0.3);
473
+ }
474
+
475
+ .sc-stats-grid {
476
+ display: grid;
477
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
478
+ gap: 1rem;
479
+ }
480
+
481
+ .sc-stat-card {
482
+ background-color: var(--n-surface);
483
+ border: 1px solid var(--n-border);
484
+ border-radius: 12px;
485
+ padding: 1.1rem 1.25rem;
486
+ display: flex;
487
+ flex-direction: column;
488
+ gap: 0.3rem;
489
+ }
490
+
491
+ .sc-stat-label {
492
+ font-size: 0.825rem;
493
+ font-weight: 600;
494
+ color: var(--n-text-muted);
495
+ }
496
+
497
+ .sc-stat-val {
498
+ font-size: 1.35rem;
499
+ font-weight: 700;
500
+ color: var(--n-text-bright);
501
+ }
502
+
503
+ .sc-stat-sub {
504
+ font-size: 0.75rem;
505
+ color: var(--n-text-muted);
506
+ }
507
+
508
+ .sc-chart-stage {
509
+ background-color: var(--n-chart-bg);
510
+ border: 1px solid var(--n-border);
511
+ border-radius: 14px;
512
+ padding: 1.5rem;
513
+ display: flex;
514
+ flex-direction: column;
515
+ gap: 0.85rem;
516
+ }
517
+
518
+ .sc-nomogram-svg {
519
+ width: 100%;
520
+ height: auto;
521
+ max-height: 350px;
522
+ display: block;
523
+ }
524
+
525
+ .sc-chart-axis {
526
+ stroke: var(--n-border);
527
+ stroke-width: 1.5;
528
+ }
529
+
530
+ .sc-chart-grid {
531
+ stroke: var(--n-border);
532
+ stroke-width: 1;
533
+ stroke-dasharray: 3 4;
534
+ opacity: 0.65;
535
+ }
536
+
537
+ .sc-chart-axis-label {
538
+ fill: var(--n-text-muted);
539
+ font-size: 12px;
540
+ font-weight: 600;
541
+ }
542
+
543
+ .sc-chart-plateau {
544
+ fill: var(--n-chart-plateau);
545
+ }
546
+
547
+ .sc-chart-band {
548
+ fill: var(--n-chart-band);
549
+ }
550
+
551
+ .sc-chart-amb {
552
+ stroke: var(--n-chart-amb);
553
+ stroke-width: 1.5;
554
+ stroke-dasharray: 4 4;
555
+ }
556
+
557
+ .sc-chart-line {
558
+ fill: none;
559
+ stroke: url("#sc-curve-grad");
560
+ stroke-width: 4;
561
+ stroke-linecap: round;
562
+ }
563
+
564
+ .sc-chart-pulse {
565
+ fill: rgba(56, 189, 248, 0.35);
566
+ animation: sc-pulse-anim 2s infinite ease-out;
567
+ }
568
+
569
+ .sc-chart-core {
570
+ fill: var(--n-danger);
571
+ stroke: #fff;
572
+ stroke-width: 2.5;
573
+ }
574
+
575
+ .sc-chart-tag {
576
+ fill: var(--n-text-muted);
577
+ font-size: 12px;
578
+ font-weight: 600;
579
+ }
580
+
581
+ .sc-chart-pt-label {
582
+ fill: var(--n-text-bright);
583
+ font-size: 13px;
584
+ font-weight: 700;
585
+ }
586
+
587
+ @keyframes sc-pulse-anim {
588
+ 0% {
589
+ r: 5;
590
+ opacity: 0.9;
591
+ }
592
+ 100% {
593
+ r: 16;
594
+ opacity: 0;
595
+ }
596
+ }
@@ -0,0 +1,60 @@
1
+ export interface TimeOfDeathAlgorMortisUI {
2
+ [key: string]: string;
3
+ title: string;
4
+ subtitle: string;
5
+ disclaimer: string;
6
+ unitSystemLabel: string;
7
+ unitMetricLabel: string;
8
+ unitImperialLabel: string;
9
+ presetsHeader: string;
10
+ presetNakedCalm: string;
11
+ presetDressedIndoor: string;
12
+ presetWinterOutdoor: string;
13
+ presetSubmergedWater: string;
14
+ presetHeavyDuvet: string;
15
+ inputsHeader: string;
16
+ rectalTempLabel: string;
17
+ ambientTempLabel: string;
18
+ bodyWeightLabel: string;
19
+ factorLabel: string;
20
+ measurementTimeLabel: string;
21
+ factorNaked: string;
22
+ factorLightClothes: string;
23
+ factorStandardClothes: string;
24
+ factorHeavyWinter: string;
25
+ factorLightBlanket: string;
26
+ factorHeavyDuvet: string;
27
+ factorStillWater: string;
28
+ factorFlowingWater: string;
29
+ factorWetClothing: string;
30
+ factorMovingAir: string;
31
+ resultsHeader: string;
32
+ estimatedPmiLabel: string;
33
+ deathWindowLabel: string;
34
+ confidenceMarginLabel: string;
35
+ coolingPhaseLabel: string;
36
+ coolingRateLabel: string;
37
+ glaisterEstimateLabel: string;
38
+ chartHeader: string;
39
+ chartXAxis: string;
40
+ chartYAxis: string;
41
+ chartNowMarker: string;
42
+ chartPlateauMarker: string;
43
+ phasePlateau: string;
44
+ phaseDescent: string;
45
+ phaseEquilibrium: string;
46
+ phaseHyperthermia: string;
47
+ hoursUnit: string;
48
+ minutesUnit: string;
49
+ celsiusUnit: string;
50
+ fahrenheitUnit: string;
51
+ kgUnit: string;
52
+ lbUnit: string;
53
+ celsiusPerHour: string;
54
+ fahrenheitPerHour: string;
55
+ resetBtn: string;
56
+ nowBtn: string;
57
+ coreThermometerLabel: string;
58
+ baselineAmbientLabel: string;
59
+ referenceBodyTempLabel: string;
60
+ }
package/src/tools.ts CHANGED
@@ -15,6 +15,7 @@ import { BLOODSTAIN_PATTERN_ORIGIN_ANALYZER_TOOL } from './tool/bloodstain-patte
15
15
  import { FORENSIC_FINGERPRINT_MINUTIAE_IDENTIFIER_TOOL } from './tool/forensic-fingerprint-minutiae-identifier/index';
16
16
  import { FIRE_PATTERN_ORIGIN_ANALYZER_TOOL } from './tool/fire-pattern-origin-analyzer/index';
17
17
  import { FORENSIC_TOOLMARK_STRIATION_MATCHER_TOOL } from './tool/forensic-toolmark-striation-matcher/index';
18
+ import { TIME_OF_DEATH_ALGOR_MORTIS_CALCULATOR_TOOL } from './tool/time-of-death-algor-mortis-calculator/index';
18
19
 
19
20
  export const ALL_TOOLS: ToolDefinition[] = [
20
21
  FORENSIC_AGE_ESTIMATOR_TOOL,
@@ -31,5 +32,6 @@ export const ALL_TOOLS: ToolDefinition[] = [
31
32
  BLOODSTAIN_PATTERN_ORIGIN_ANALYZER_TOOL,
32
33
  FORENSIC_FINGERPRINT_MINUTIAE_IDENTIFIER_TOOL,
33
34
  FIRE_PATTERN_ORIGIN_ANALYZER_TOOL,
34
- FORENSIC_TOOLMARK_STRIATION_MATCHER_TOOL
35
+ FORENSIC_TOOLMARK_STRIATION_MATCHER_TOOL,
36
+ TIME_OF_DEATH_ALGOR_MORTIS_CALCULATOR_TOOL
35
37
  ];