@morscherlab/mld-sdk 0.7.1 → 0.7.3

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/dist/components/BaseInput.vue.d.ts +1 -0
  2. package/dist/components/BaseInput.vue.js +5 -2
  3. package/dist/components/BaseInput.vue.js.map +1 -1
  4. package/dist/components/BaseModal.vue.d.ts +6 -2
  5. package/dist/components/BaseModal.vue.js +54 -10
  6. package/dist/components/BaseModal.vue.js.map +1 -1
  7. package/dist/components/BaseSelect.vue.d.ts +1 -0
  8. package/dist/components/BaseSelect.vue.js +5 -2
  9. package/dist/components/BaseSelect.vue.js.map +1 -1
  10. package/dist/components/BaseTextarea.vue.d.ts +1 -0
  11. package/dist/components/BaseTextarea.vue.js +5 -2
  12. package/dist/components/BaseTextarea.vue.js.map +1 -1
  13. package/dist/components/ExperimentCodeBadge.vue.d.ts +8 -0
  14. package/dist/components/ExperimentCodeBadge.vue.js +19 -0
  15. package/dist/components/ExperimentCodeBadge.vue.js.map +1 -0
  16. package/dist/components/ExperimentCodeBadge.vue3.js +6 -0
  17. package/dist/components/ExperimentCodeBadge.vue3.js.map +1 -0
  18. package/dist/components/ExperimentDataViewer.vue.d.ts +29 -0
  19. package/dist/components/ExperimentDataViewer.vue.js +258 -0
  20. package/dist/components/ExperimentDataViewer.vue.js.map +1 -0
  21. package/dist/components/ExperimentDataViewer.vue3.js +6 -0
  22. package/dist/components/ExperimentDataViewer.vue3.js.map +1 -0
  23. package/dist/components/FormField.vue.d.ts +4 -1
  24. package/dist/components/FormField.vue.js +24 -12
  25. package/dist/components/FormField.vue.js.map +1 -1
  26. package/dist/components/index.d.ts +2 -0
  27. package/dist/components/index.js +14 -8
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +14 -8
  31. package/dist/index.js.map +1 -1
  32. package/dist/styles.css +340 -67
  33. package/dist/types/components.d.ts +23 -0
  34. package/dist/types/index.d.ts +1 -1
  35. package/package.json +1 -1
  36. package/src/components/BaseInput.vue +3 -0
  37. package/src/components/BaseModal.vue +59 -10
  38. package/src/components/BaseSelect.vue +3 -0
  39. package/src/components/BaseTextarea.vue +3 -0
  40. package/src/components/ExperimentCodeBadge.vue +20 -0
  41. package/src/components/ExperimentDataViewer.vue +250 -0
  42. package/src/components/FormField.vue +17 -4
  43. package/src/components/index.ts +4 -0
  44. package/src/index.ts +10 -0
  45. package/src/styles/components/app-top-bar.css +9 -9
  46. package/src/styles/components/button.css +4 -4
  47. package/src/styles/components/experiment-code-badge.css +13 -0
  48. package/src/styles/components/experiment-data-viewer.css +131 -0
  49. package/src/styles/components/form-field.css +5 -3
  50. package/src/styles/components/modal.css +1 -1
  51. package/src/styles/components/select.css +1 -1
  52. package/src/styles/components/slider.css +4 -8
  53. package/src/styles/components/tabs.css +1 -1
  54. package/src/styles/components/textarea.css +5 -1
  55. package/src/styles/index.css +2 -0
  56. package/src/styles/variables.css +19 -13
  57. package/src/types/components.ts +27 -0
  58. package/src/types/index.ts +4 -0
@@ -0,0 +1,131 @@
1
+ .mld-data-viewer {
2
+ border: 1px solid var(--mld-color-border, #e0e0e0);
3
+ border-radius: var(--mld-radius-md, 8px);
4
+ overflow: hidden;
5
+ }
6
+ .mld-data-viewer__header {
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: space-between;
10
+ padding: 8px 12px;
11
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
12
+ background: var(--mld-color-surface-1, #fafafa);
13
+ gap: 8px;
14
+ }
15
+ .mld-data-viewer__controls { display: flex; gap: 8px; }
16
+ .mld-data-viewer__actions { display: flex; gap: 4px; align-items: center; }
17
+ .mld-data-viewer__content {
18
+ padding: 12px;
19
+ max-height: 600px;
20
+ overflow-y: auto;
21
+ }
22
+ .mld-data-viewer__loading,
23
+ .mld-data-viewer__empty {
24
+ text-align: center;
25
+ padding: 32px;
26
+ color: var(--mld-color-text-muted, #999);
27
+ }
28
+
29
+ /* Summary view */
30
+ .mld-summary {
31
+ display: flex;
32
+ flex-direction: column;
33
+ gap: 16px;
34
+ }
35
+
36
+ /* Metadata pills row */
37
+ .mld-summary__metadata {
38
+ display: flex;
39
+ flex-wrap: wrap;
40
+ gap: 6px;
41
+ }
42
+
43
+ .mld-summary__pill {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ border-radius: 6px;
47
+ overflow: hidden;
48
+ font-size: 0.8125rem;
49
+ line-height: 1;
50
+ border: 1px solid var(--mld-color-border, #e0e0e0);
51
+ }
52
+
53
+ .mld-summary__pill--sm {
54
+ font-size: 0.75rem;
55
+ }
56
+
57
+ .mld-summary__pill-key {
58
+ padding: 4px 8px;
59
+ background: var(--mld-color-surface-1, #f5f5f5);
60
+ color: var(--mld-color-text-muted, #666);
61
+ text-transform: capitalize;
62
+ font-weight: 500;
63
+ }
64
+
65
+ .mld-summary__pill-value {
66
+ padding: 4px 8px;
67
+ color: var(--mld-color-text, #1a1a1a);
68
+ }
69
+
70
+ /* Section */
71
+ .mld-summary__section {
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: 12px;
75
+ }
76
+
77
+ .mld-summary__section-label {
78
+ font-weight: 600;
79
+ font-size: 0.875rem;
80
+ color: var(--mld-color-text, #1a1a1a);
81
+ }
82
+
83
+ .mld-summary__section-count {
84
+ font-size: 0.75rem;
85
+ color: var(--mld-color-text-muted, #999);
86
+ margin-left: 8px;
87
+ }
88
+
89
+ .mld-summary__table-header {
90
+ display: flex;
91
+ align-items: baseline;
92
+ gap: 4px;
93
+ }
94
+
95
+ /* Group cards */
96
+ .mld-summary__group-card {
97
+ border: 1px solid var(--mld-color-border, #e0e0e0);
98
+ border-radius: var(--mld-radius-md, 8px);
99
+ overflow: hidden;
100
+ }
101
+
102
+ .mld-summary__group-header {
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: space-between;
106
+ padding: 10px 14px;
107
+ background: var(--mld-color-surface-1, #fafafa);
108
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
109
+ }
110
+
111
+ .mld-summary__group-label {
112
+ font-weight: 600;
113
+ font-size: 0.875rem;
114
+ color: var(--mld-color-text, #1a1a1a);
115
+ }
116
+
117
+ .mld-summary__group-count {
118
+ font-size: 0.75rem;
119
+ color: var(--mld-color-text-muted, #999);
120
+ background: var(--mld-color-surface-2, #eee);
121
+ padding: 2px 8px;
122
+ border-radius: 10px;
123
+ }
124
+
125
+ .mld-summary__group-meta {
126
+ display: flex;
127
+ flex-wrap: wrap;
128
+ gap: 6px;
129
+ padding: 8px 14px;
130
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
131
+ }
@@ -8,9 +8,11 @@
8
8
 
9
9
  .mld-form-field__label {
10
10
  display: block;
11
- font-size: 0.875rem;
12
- font-weight: 500;
13
- color: var(--text-primary);
11
+ font-size: 0.6875rem;
12
+ font-weight: 600;
13
+ text-transform: uppercase;
14
+ letter-spacing: 0.05em;
15
+ color: var(--text-secondary);
14
16
  }
15
17
 
16
18
  .mld-form-field__required {
@@ -67,7 +67,7 @@
67
67
  }
68
68
 
69
69
  .mld-modal__close {
70
- padding: 0.25rem;
70
+ padding: 0.5rem;
71
71
  border-radius: var(--mld-radius-sm);
72
72
  color: var(--text-muted);
73
73
  background: none;
@@ -33,7 +33,7 @@
33
33
  }
34
34
 
35
35
  .mld-select__control--disabled {
36
- opacity: 0.5;
36
+ opacity: var(--mld-disabled-opacity);
37
37
  cursor: not-allowed;
38
38
  background-color: var(--bg-tertiary);
39
39
  }
@@ -7,7 +7,7 @@
7
7
  }
8
8
 
9
9
  .mld-slider--disabled {
10
- opacity: 0.5;
10
+ opacity: var(--mld-disabled-opacity);
11
11
  cursor: not-allowed;
12
12
  }
13
13
 
@@ -24,18 +24,14 @@
24
24
  left: 0;
25
25
  right: 0;
26
26
  border-radius: 9999px;
27
- background-color: #E2E8F0;
28
- }
29
-
30
- html.dark .mld-slider__track {
31
- background-color: #334155;
27
+ background-color: var(--bg-tertiary);
32
28
  }
33
29
 
34
30
  .mld-slider__fill {
35
31
  position: absolute;
36
32
  left: 0;
37
33
  border-radius: 9999px;
38
- background-color: #3B82F6;
34
+ background-color: var(--color-primary);
39
35
  }
40
36
 
41
37
  .mld-slider__input {
@@ -59,7 +55,7 @@ html.dark .mld-slider__track {
59
55
  transform: translateX(-50%) translateY(-50%);
60
56
  border-radius: 9999px;
61
57
  background-color: white;
62
- border: 2px solid #3B82F6;
58
+ border: 2px solid var(--color-primary);
63
59
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
64
60
  pointer-events: none;
65
61
  transition: transform 150ms ease;
@@ -103,6 +103,6 @@
103
103
  padding: 0.125rem 0.375rem;
104
104
  font-size: 0.75rem;
105
105
  border-radius: 9999px;
106
- background-color: rgba(59, 130, 246, 0.1);
106
+ background-color: var(--color-primary-soft, rgba(99, 102, 241, 0.12));
107
107
  color: var(--color-primary);
108
108
  }
@@ -13,6 +13,10 @@
13
13
  color: var(--text-muted);
14
14
  }
15
15
 
16
+ .mld-textarea:hover:not(:focus):not(.mld-textarea--disabled):not(.mld-textarea--error) {
17
+ border-color: var(--text-muted);
18
+ }
19
+
16
20
  .mld-textarea:focus {
17
21
  outline: none;
18
22
  border-color: transparent;
@@ -28,7 +32,7 @@
28
32
  }
29
33
 
30
34
  .mld-textarea--disabled {
31
- opacity: 0.5;
35
+ opacity: var(--mld-disabled-opacity);
32
36
  cursor: not-allowed;
33
37
  background-color: var(--bg-tertiary);
34
38
  }
@@ -79,3 +79,5 @@
79
79
  @import './components/schedule-calendar.css';
80
80
  @import './components/resource-card.css';
81
81
  @import './components/form-builder.css';
82
+ @import './components/experiment-data-viewer.css';
83
+ @import './components/experiment-code-badge.css';
@@ -24,8 +24,9 @@
24
24
  --text-muted: #94A3B8;
25
25
 
26
26
  /* Brand colors */
27
- --color-primary: #3B82F6;
28
- --color-primary-hover: #2563EB;
27
+ --color-primary: #6366F1;
28
+ --color-primary-hover: #4F46E5;
29
+ --color-primary-soft: rgba(99, 102, 241, 0.12);
29
30
  --color-cta: #F97316;
30
31
  --color-cta-hover: #EA580C;
31
32
  --color-purple: #8B5CF6;
@@ -54,14 +55,19 @@
54
55
 
55
56
  /* Semantic colors */
56
57
  --mld-success: #10B981;
58
+ --mld-success-hover: #059669;
57
59
  --mld-success-bg: rgba(16, 185, 129, 0.1);
58
60
  --mld-error: #EF4444;
61
+ --mld-error-hover: #DC2626;
59
62
  --mld-error-bg: rgba(239, 68, 68, 0.1);
60
63
  --mld-warning: #F59E0B;
61
64
  --mld-warning-bg: rgba(245, 158, 11, 0.1);
62
65
  --mld-info: #3B82F6;
63
66
  --mld-info-bg: rgba(59, 130, 246, 0.1);
64
67
 
68
+ /* Shared component tokens */
69
+ --mld-disabled-opacity: 0.6;
70
+
65
71
  /* Legacy aliases (for backwards compatibility) */
66
72
  --mld-bg-primary: var(--bg-primary);
67
73
  --mld-bg-secondary: var(--bg-secondary);
@@ -308,7 +314,7 @@ code, pre {
308
314
 
309
315
  .input-modern:focus {
310
316
  border-color: var(--color-primary);
311
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
317
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
312
318
  }
313
319
 
314
320
  .input-modern::placeholder {
@@ -341,7 +347,7 @@ code, pre {
341
347
 
342
348
  .select-modern:focus {
343
349
  border-color: var(--color-primary);
344
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
350
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
345
351
  }
346
352
 
347
353
  /* Label styles */
@@ -549,7 +555,7 @@ code, pre {
549
555
  }
550
556
 
551
557
  .bg-mld-primary {
552
- background-color: #3B82F6;
558
+ background-color: var(--color-primary);
553
559
  }
554
560
 
555
561
  .text-mld-primary {
@@ -561,11 +567,11 @@ code, pre {
561
567
  }
562
568
 
563
569
  .bg-mld-primary\/5 {
564
- background-color: rgba(59, 130, 246, 0.05);
570
+ background-color: rgba(99, 102, 241, 0.05);
565
571
  }
566
572
 
567
573
  .hover\:border-mld-primary\/50:hover {
568
- border-color: rgba(59, 130, 246, 0.5);
574
+ border-color: rgba(99, 102, 241, 0.5);
569
575
  }
570
576
 
571
577
  /* Danger/error color utilities */
@@ -630,19 +636,19 @@ code, pre {
630
636
  }
631
637
 
632
638
  .hover\:bg-mld-success-hover:hover {
633
- background-color: #059669;
639
+ background-color: var(--mld-success-hover);
634
640
  }
635
641
 
636
642
  .hover\:bg-mld-danger-hover:hover {
637
- background-color: #DC2626;
643
+ background-color: var(--mld-error-hover);
638
644
  }
639
645
 
640
646
  .bg-mld-primary\/10 {
641
- background-color: rgba(59, 130, 246, 0.1);
647
+ background-color: rgba(99, 102, 241, 0.1);
642
648
  }
643
649
 
644
650
  .hover\:bg-mld-primary\/20:hover {
645
- background-color: rgba(59, 130, 246, 0.2);
651
+ background-color: rgba(99, 102, 241, 0.2);
646
652
  }
647
653
 
648
654
  .bg-mld-info {
@@ -681,11 +687,11 @@ code, pre {
681
687
  }
682
688
 
683
689
  .text-mld-primary\/80 {
684
- color: rgba(59, 130, 246, 0.8);
690
+ color: rgba(99, 102, 241, 0.8);
685
691
  }
686
692
 
687
693
  .hover\:text-mld-primary\/70:hover {
688
- color: rgba(59, 130, 246, 0.7);
694
+ color: rgba(99, 102, 241, 0.7);
689
695
  }
690
696
 
691
697
  /* ==========================================================================
@@ -567,6 +567,33 @@ export interface ScheduleEventUpdateContext {
567
567
  newEnd: Date
568
568
  }
569
569
 
570
+ // Summary data types (for ExperimentDataViewer compact mode)
571
+ export interface SummarySectionItem {
572
+ label: string
573
+ metadata?: Record<string, unknown>
574
+ item_count: number
575
+ item_key: string
576
+ columns: string[]
577
+ rows: Record<string, unknown>[]
578
+ }
579
+
580
+ export interface SummarySection {
581
+ key: string
582
+ label: string
583
+ type: 'table' | 'group'
584
+ /** Group sections: list of group items with embedded tables */
585
+ items?: SummarySectionItem[]
586
+ /** Table sections: flat table columns and rows */
587
+ columns?: string[]
588
+ rows?: Record<string, unknown>[]
589
+ row_count?: number
590
+ }
591
+
592
+ export interface SummaryData {
593
+ metadata: Record<string, unknown>
594
+ sections: SummarySection[]
595
+ }
596
+
570
597
  // Resource types
571
598
  export type ResourceStatus = 'available' | 'in-use' | 'maintenance' | 'offline'
572
599
 
@@ -117,6 +117,10 @@ export type {
117
117
  ScheduleSlotContext,
118
118
  ScheduleEventCreateContext,
119
119
  ScheduleEventUpdateContext,
120
+ // Summary data types
121
+ SummarySectionItem,
122
+ SummarySection,
123
+ SummaryData,
120
124
  // Resource types
121
125
  ResourceStatus,
122
126
  ResourceSpec,