@morscherlab/mld-sdk 0.8.3 → 0.9.1

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.
@@ -0,0 +1,252 @@
1
+ /* ExperimentPopover - BEM-style naming */
2
+
3
+ /* Trigger button */
4
+ .mld-experiment-popover {
5
+ position: relative;
6
+ }
7
+
8
+ .mld-experiment-popover__trigger {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ gap: 0.375rem;
12
+ padding: 0.3125rem 0.625rem;
13
+ border: 1px solid var(--border-color, var(--mld-border, #e5e7eb));
14
+ background: var(--bg-secondary, var(--mld-bg-card, #ffffff));
15
+ border-radius: var(--mld-radius, 0.5rem);
16
+ color: var(--text-primary, var(--mld-text-primary, #111827));
17
+ font-size: 0.8125rem;
18
+ font-weight: 500;
19
+ cursor: pointer;
20
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
21
+ white-space: nowrap;
22
+ max-width: 220px;
23
+ }
24
+
25
+ .mld-experiment-popover__trigger:hover {
26
+ border-color: var(--color-primary, #6366F1);
27
+ }
28
+
29
+ .mld-experiment-popover__trigger--active {
30
+ border-color: var(--color-primary, #6366F1);
31
+ box-shadow: 0 0 0 1px var(--color-primary, #6366F1);
32
+ }
33
+
34
+ .mld-experiment-popover__trigger--empty {
35
+ border-style: dashed;
36
+ color: var(--text-secondary, var(--mld-text-secondary, #6b7280));
37
+ }
38
+
39
+ .mld-experiment-popover__trigger-icon {
40
+ width: 1rem;
41
+ height: 1rem;
42
+ flex-shrink: 0;
43
+ color: var(--color-primary, #6366F1);
44
+ }
45
+
46
+ .mld-experiment-popover__trigger--empty .mld-experiment-popover__trigger-icon {
47
+ color: var(--text-muted, var(--mld-text-muted, #9ca3af));
48
+ }
49
+
50
+ .mld-experiment-popover__trigger-text {
51
+ overflow: hidden;
52
+ text-overflow: ellipsis;
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .mld-experiment-popover__trigger-chevron {
57
+ width: 0.875rem;
58
+ height: 0.875rem;
59
+ flex-shrink: 0;
60
+ color: var(--text-muted, var(--mld-text-muted, #9ca3af));
61
+ transition: transform 0.15s ease;
62
+ }
63
+
64
+ .mld-experiment-popover__trigger--active .mld-experiment-popover__trigger-chevron {
65
+ transform: rotate(180deg);
66
+ }
67
+
68
+ /* Popover panel */
69
+ .mld-experiment-popover__panel {
70
+ position: absolute;
71
+ top: calc(100% + 0.5rem);
72
+ right: 0;
73
+ width: 280px;
74
+ background: var(--bg-secondary, var(--mld-bg-card, #ffffff));
75
+ border: 1px solid var(--border-color, var(--mld-border, #e5e7eb));
76
+ border-radius: var(--mld-radius, 0.5rem);
77
+ box-shadow: var(--mld-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05));
78
+ z-index: 50;
79
+ overflow: hidden;
80
+ }
81
+
82
+ /* Header */
83
+ .mld-experiment-popover__header {
84
+ padding: 0.75rem 1rem 0.5rem;
85
+ }
86
+
87
+ .mld-experiment-popover__title {
88
+ font-size: 0.75rem;
89
+ font-weight: 600;
90
+ text-transform: uppercase;
91
+ letter-spacing: 0.05em;
92
+ color: var(--text-muted, var(--mld-text-muted, #9ca3af));
93
+ }
94
+
95
+ /* Empty state */
96
+ .mld-experiment-popover__empty {
97
+ padding: 0 1rem 0.75rem;
98
+ }
99
+
100
+ .mld-experiment-popover__select-btn {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ gap: 0.375rem;
105
+ width: 100%;
106
+ padding: 0.5rem;
107
+ border: 1.5px dashed var(--color-primary, #6366F1);
108
+ background: var(--color-primary-soft, rgba(99, 102, 241, 0.06));
109
+ border-radius: var(--mld-radius-sm, 0.375rem);
110
+ color: var(--color-primary, #6366F1);
111
+ font-size: 0.8125rem;
112
+ font-weight: 500;
113
+ cursor: pointer;
114
+ transition: background-color 0.15s ease;
115
+ }
116
+
117
+ .mld-experiment-popover__select-btn:hover {
118
+ background: var(--color-primary-soft, rgba(99, 102, 241, 0.12));
119
+ }
120
+
121
+ /* Experiment card */
122
+ .mld-experiment-popover__card {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 0.625rem;
126
+ padding: 0 1rem 0.75rem;
127
+ }
128
+
129
+ .mld-experiment-popover__card-icon {
130
+ width: 2rem;
131
+ height: 2rem;
132
+ flex-shrink: 0;
133
+ border-radius: var(--mld-radius-sm, 0.375rem);
134
+ background: rgba(139, 92, 246, 0.12);
135
+ display: flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ }
139
+
140
+ .mld-experiment-popover__card-icon svg {
141
+ width: 1.125rem;
142
+ height: 1.125rem;
143
+ color: #8B5CF6;
144
+ }
145
+
146
+ .mld-experiment-popover__card-info {
147
+ flex: 1;
148
+ min-width: 0;
149
+ }
150
+
151
+ .mld-experiment-popover__card-name {
152
+ font-size: 0.8125rem;
153
+ font-weight: 500;
154
+ color: var(--text-primary, var(--mld-text-primary, #111827));
155
+ overflow: hidden;
156
+ text-overflow: ellipsis;
157
+ white-space: nowrap;
158
+ }
159
+
160
+ .mld-experiment-popover__card-status {
161
+ font-size: 0.6875rem;
162
+ color: var(--text-muted, var(--mld-text-muted, #9ca3af));
163
+ }
164
+
165
+ .mld-experiment-popover__change-btn {
166
+ flex-shrink: 0;
167
+ padding: 0.25rem 0.5rem;
168
+ border: none;
169
+ background: transparent;
170
+ border-radius: var(--mld-radius-sm, 0.25rem);
171
+ color: var(--color-primary, #6366F1);
172
+ font-size: 0.75rem;
173
+ font-weight: 500;
174
+ cursor: pointer;
175
+ transition: background-color 0.15s ease;
176
+ }
177
+
178
+ .mld-experiment-popover__change-btn:hover {
179
+ background: var(--color-primary-soft, rgba(99, 102, 241, 0.08));
180
+ }
181
+
182
+ /* Divider */
183
+ .mld-experiment-popover__divider {
184
+ height: 1px;
185
+ background: var(--border-color, var(--mld-border, #e5e7eb));
186
+ margin: 0;
187
+ }
188
+
189
+ /* Footer (save section) */
190
+ .mld-experiment-popover__footer {
191
+ padding: 0.75rem 1rem;
192
+ }
193
+
194
+ .mld-experiment-popover__save-btn {
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: center;
198
+ gap: 0.375rem;
199
+ width: 100%;
200
+ padding: 0.4375rem 0.75rem;
201
+ border: none;
202
+ background: var(--color-primary, #6366F1);
203
+ border-radius: var(--mld-radius-sm, 0.375rem);
204
+ color: white;
205
+ font-size: 0.8125rem;
206
+ font-weight: 500;
207
+ cursor: pointer;
208
+ transition: background-color 0.15s ease, opacity 0.15s ease;
209
+ }
210
+
211
+ .mld-experiment-popover__save-btn:hover:not(:disabled) {
212
+ background: var(--color-primary-hover, #4F46E5);
213
+ }
214
+
215
+ .mld-experiment-popover__save-btn:disabled {
216
+ opacity: 0.5;
217
+ cursor: not-allowed;
218
+ }
219
+
220
+ .mld-experiment-popover__save-btn--loading {
221
+ opacity: 0.8;
222
+ pointer-events: none;
223
+ }
224
+
225
+ /* Save success state */
226
+ .mld-experiment-popover__save-btn--success {
227
+ background: var(--mld-success-bg, #059669);
228
+ }
229
+
230
+ .mld-experiment-popover__save-btn--success:hover {
231
+ background: var(--mld-success-bg, #059669);
232
+ }
233
+
234
+ /* Spinner */
235
+ .mld-experiment-popover__spinner {
236
+ width: 0.875rem;
237
+ height: 0.875rem;
238
+ border: 2px solid rgba(255, 255, 255, 0.3);
239
+ border-top-color: white;
240
+ border-radius: 50%;
241
+ animation: mld-experiment-popover-spin 0.6s linear infinite;
242
+ }
243
+
244
+ @keyframes mld-experiment-popover-spin {
245
+ to { transform: rotate(360deg); }
246
+ }
247
+
248
+ /* Check icon for success */
249
+ .mld-experiment-popover__check-icon {
250
+ width: 0.875rem;
251
+ height: 0.875rem;
252
+ }
@@ -83,4 +83,5 @@
83
83
  @import './components/experiment-data-viewer.css';
84
84
  @import './components/experiment-code-badge.css';
85
85
  @import './components/experiment-selector-modal.css';
86
+ @import './components/experiment-popover.css';
86
87
  @import './components/fit-panel.css';
@@ -64,6 +64,9 @@ export interface PlatformContext {
64
64
  // Theme preference
65
65
  theme: 'light' | 'dark' | 'system'
66
66
 
67
+ // Allowed experiment types for this plugin (from admin config)
68
+ allowedExperimentTypes?: string[] | null
69
+
67
70
  // Features enabled in platform
68
71
  features?: {
69
72
  experiments?: boolean