@morscherlab/mint-sdk 1.0.13 → 1.0.15

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 (46) hide show
  1. package/dist/__tests__/composables/useCommandHistory.test.d.ts +1 -0
  2. package/dist/__tests__/composables/useFileImport.test.d.ts +1 -0
  3. package/dist/__tests__/composables/useOptimisticMutation.test.d.ts +1 -0
  4. package/dist/__tests__/composables/useResourceCrud.test.d.ts +1 -0
  5. package/dist/__tests__/composables/useWellPainting.test.d.ts +1 -0
  6. package/dist/__tests__/composables/useWellPlateAdapter.test.d.ts +1 -0
  7. package/dist/__tests__/composables/useWellPlateValidation.test.d.ts +1 -0
  8. package/dist/components/index.js +1 -1
  9. package/dist/{components-CzFtQExv.js → components-Cyk8QEyL.js} +81 -75
  10. package/dist/components-Cyk8QEyL.js.map +1 -0
  11. package/dist/composables/index.d.ts +7 -0
  12. package/dist/composables/index.js +2 -2
  13. package/dist/composables/useCommandHistory.d.ts +29 -0
  14. package/dist/composables/useFileImport.d.ts +35 -0
  15. package/dist/composables/useOptimisticMutation.d.ts +28 -0
  16. package/dist/composables/useResourceCrud.d.ts +40 -0
  17. package/dist/composables/useWellPainting.d.ts +35 -0
  18. package/dist/composables/useWellPlateAdapter.d.ts +36 -0
  19. package/dist/composables/useWellPlateValidation.d.ts +27 -0
  20. package/dist/{composables-BuG5yAb7.js → composables-D9mexHSW.js} +666 -3
  21. package/dist/composables-D9mexHSW.js.map +1 -0
  22. package/dist/index.js +3 -3
  23. package/dist/install.js +1 -1
  24. package/package.json +1 -1
  25. package/src/__tests__/components/SampleSelector.test.ts +6 -3
  26. package/src/__tests__/components/SampleSelectorSampleRow.test.ts +5 -2
  27. package/src/__tests__/composables/useCommandHistory.test.ts +43 -0
  28. package/src/__tests__/composables/useFileImport.test.ts +44 -0
  29. package/src/__tests__/composables/useOptimisticMutation.test.ts +40 -0
  30. package/src/__tests__/composables/useResourceCrud.test.ts +56 -0
  31. package/src/__tests__/composables/useWellPainting.test.ts +52 -0
  32. package/src/__tests__/composables/useWellPlateAdapter.test.ts +50 -0
  33. package/src/__tests__/composables/useWellPlateValidation.test.ts +42 -0
  34. package/src/components/PluginWorkspaceView.vue +3 -3
  35. package/src/components/SampleSelector.vue +2 -0
  36. package/src/components/SampleSelectorSampleRow.vue +2 -0
  37. package/src/composables/index.ts +67 -0
  38. package/src/composables/useCommandHistory.ts +113 -0
  39. package/src/composables/useFileImport.ts +231 -0
  40. package/src/composables/useOptimisticMutation.ts +107 -0
  41. package/src/composables/useResourceCrud.ts +245 -0
  42. package/src/composables/useWellPainting.ts +187 -0
  43. package/src/composables/useWellPlateAdapter.ts +147 -0
  44. package/src/composables/useWellPlateValidation.ts +85 -0
  45. package/dist/components-CzFtQExv.js.map +0 -1
  46. package/dist/composables-BuG5yAb7.js.map +0 -1
@@ -0,0 +1,85 @@
1
+ import { computed, toValue, type ComputedRef, type Ref } from 'vue'
2
+
3
+ export type WellPlateValidationSeverity = 'error' | 'warning' | 'info'
4
+
5
+ export interface WellPlateValidationWarning<TType extends string = string> {
6
+ type: TType
7
+ severity: WellPlateValidationSeverity
8
+ message: string
9
+ affectedWells?: string[]
10
+ }
11
+
12
+ export interface WellPlateValidationRule<TContext, TType extends string = string> {
13
+ type: TType
14
+ severity: WellPlateValidationSeverity
15
+ validate: (context: TContext) => false | string | Omit<WellPlateValidationWarning<TType>, 'type' | 'severity'>
16
+ }
17
+
18
+ export type WellPlateValidationSource<T> =
19
+ | T
20
+ | Ref<T>
21
+ | ComputedRef<T>
22
+ | (() => T)
23
+
24
+ export interface UseWellPlateValidationOptions<TContext, TType extends string = string> {
25
+ context: WellPlateValidationSource<TContext>
26
+ rules: WellPlateValidationSource<readonly WellPlateValidationRule<TContext, TType>[]>
27
+ }
28
+
29
+ export interface UseWellPlateValidationReturn<TType extends string = string> {
30
+ warnings: ComputedRef<WellPlateValidationWarning<TType>[]>
31
+ hasBlockingIssues: ComputedRef<boolean>
32
+ warningCount: ComputedRef<number>
33
+ errorCount: ComputedRef<number>
34
+ }
35
+
36
+ /** Rule-driven validation state for WellPlate layout/design screens. */
37
+ export function useWellPlateValidation<TContext, TType extends string = string>(
38
+ options: UseWellPlateValidationOptions<TContext, TType>,
39
+ ): UseWellPlateValidationReturn<TType> {
40
+ const warnings = computed(() => runWellPlateValidation(
41
+ toValue(options.context),
42
+ toValue(options.rules),
43
+ ))
44
+ const hasBlockingIssues = computed(() => warnings.value.some(warning => warning.severity === 'error'))
45
+ const warningCount = computed(() => warnings.value.length)
46
+ const errorCount = computed(() => warnings.value.filter(warning => warning.severity === 'error').length)
47
+
48
+ return {
49
+ warnings,
50
+ hasBlockingIssues,
51
+ warningCount,
52
+ errorCount,
53
+ }
54
+ }
55
+
56
+ export function runWellPlateValidation<TContext, TType extends string = string>(
57
+ context: TContext,
58
+ rules: readonly WellPlateValidationRule<TContext, TType>[],
59
+ ): WellPlateValidationWarning<TType>[] {
60
+ const warnings: WellPlateValidationWarning<TType>[] = []
61
+ for (const rule of rules) {
62
+ const result = rule.validate(context)
63
+ if (!result) continue
64
+ warnings.push(normalizeWarning(rule, result))
65
+ }
66
+ return warnings
67
+ }
68
+
69
+ function normalizeWarning<TContext, TType extends string>(
70
+ rule: WellPlateValidationRule<TContext, TType>,
71
+ result: string | Omit<WellPlateValidationWarning<TType>, 'type' | 'severity'>,
72
+ ): WellPlateValidationWarning<TType> {
73
+ if (typeof result === 'string') {
74
+ return {
75
+ type: rule.type,
76
+ severity: rule.severity,
77
+ message: result,
78
+ }
79
+ }
80
+ return {
81
+ type: rule.type,
82
+ severity: rule.severity,
83
+ ...result,
84
+ }
85
+ }