@morscherlab/mld-sdk 0.7.2 → 0.7.4

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 (56) 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 +311 -30
  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/button.css +4 -4
  46. package/src/styles/components/collapsible-card.css +7 -0
  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/modal.css +1 -1
  50. package/src/styles/components/select.css +1 -1
  51. package/src/styles/components/slider.css +4 -8
  52. package/src/styles/components/textarea.css +5 -1
  53. package/src/styles/index.css +2 -0
  54. package/src/styles/variables.css +7 -2
  55. package/src/types/components.ts +27 -0
  56. package/src/types/index.ts +4 -0
package/dist/styles.css CHANGED
@@ -59,14 +59,19 @@
59
59
 
60
60
  /* Semantic colors */
61
61
  --mld-success: #10B981;
62
+ --mld-success-hover: #059669;
62
63
  --mld-success-bg: rgba(16, 185, 129, 0.1);
63
64
  --mld-error: #EF4444;
65
+ --mld-error-hover: #DC2626;
64
66
  --mld-error-bg: rgba(239, 68, 68, 0.1);
65
67
  --mld-warning: #F59E0B;
66
68
  --mld-warning-bg: rgba(245, 158, 11, 0.1);
67
69
  --mld-info: #3B82F6;
68
70
  --mld-info-bg: rgba(59, 130, 246, 0.1);
69
71
 
72
+ /* Shared component tokens */
73
+ --mld-disabled-opacity: 0.6;
74
+
70
75
  /* Legacy aliases (for backwards compatibility) */
71
76
  --mld-bg-primary: var(--bg-primary);
72
77
  --mld-bg-secondary: var(--bg-secondary);
@@ -556,10 +561,10 @@ code, pre {
556
561
  background-color: var(--mld-success);
557
562
  }
558
563
  .hover\:bg-mld-success-hover:hover {
559
- background-color: #059669;
564
+ background-color: var(--mld-success-hover);
560
565
  }
561
566
  .hover\:bg-mld-danger-hover:hover {
562
- background-color: #DC2626;
567
+ background-color: var(--mld-error-hover);
563
568
  }
564
569
  .bg-mld-primary\/10 {
565
570
  background-color: rgba(99, 102, 241, 0.1);
@@ -1563,11 +1568,11 @@ html.dark .focus\:ring-offset-2:focus {
1563
1568
  border: none;
1564
1569
  box-sizing: border-box;
1565
1570
  }
1566
- .mld-button:focus {
1571
+ .mld-button:focus-visible {
1567
1572
  outline: none;
1568
1573
  box-shadow: 0 0 0 2px white, 0 0 0 4px var(--color-primary);
1569
1574
  }
1570
- html.dark .mld-button:focus {
1575
+ html.dark .mld-button:focus-visible {
1571
1576
  box-shadow: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--color-primary);
1572
1577
  }
1573
1578
  .mld-button--disabled {
@@ -1605,14 +1610,14 @@ html.dark .mld-button:focus {
1605
1610
  color: white;
1606
1611
  }
1607
1612
  .mld-button--danger:hover:not(.mld-button--disabled) {
1608
- background-color: #DC2626;
1613
+ background-color: var(--mld-error-hover);
1609
1614
  }
1610
1615
  .mld-button--success {
1611
1616
  background-color: var(--mld-success);
1612
1617
  color: white;
1613
1618
  }
1614
1619
  .mld-button--success:hover:not(.mld-button--disabled) {
1615
- background-color: #059669;
1620
+ background-color: var(--mld-success-hover);
1616
1621
  }
1617
1622
  .mld-button--ghost {
1618
1623
  background-color: transparent;
@@ -1751,6 +1756,12 @@ html.dark .mld-checkbox__native:focus-visible + .mld-checkbox__box {
1751
1756
  overflow: hidden;
1752
1757
  background-color: var(--bg-card);
1753
1758
  }
1759
+ /* Allow floating dropdowns (DatePicker, TimePicker, etc.) to escape overflow */
1760
+ .mld-collapsible-card:has(.mld-date-picker__dropdown),
1761
+ .mld-collapsible-card:has(.mld-time-picker__dropdown),
1762
+ .mld-collapsible-card:has(.mld-datetime-picker__dropdown) {
1763
+ overflow: visible;
1764
+ }
1754
1765
  .mld-collapsible-card__header {
1755
1766
  display: flex;
1756
1767
  align-items: center;
@@ -3318,7 +3329,7 @@ html.dark .mld-checkbox__native:focus-visible + .mld-checkbox__box {
3318
3329
  padding: 0 !important;
3319
3330
  }
3320
3331
  .mld-modal__close {
3321
- padding: 0.25rem;
3332
+ padding: 0.5rem;
3322
3333
  border-radius: var(--mld-radius-sm);
3323
3334
  color: var(--text-muted);
3324
3335
  background: none;
@@ -4187,7 +4198,7 @@ html.dark .mld-radio-option__native:focus-visible + .mld-radio-option__circle {
4187
4198
  box-shadow: 0 0 0 2px var(--mld-error);
4188
4199
  }
4189
4200
  .mld-select__control--disabled {
4190
- opacity: 0.5;
4201
+ opacity: var(--mld-disabled-opacity);
4191
4202
  cursor: not-allowed;
4192
4203
  background-color: var(--bg-tertiary);
4193
4204
  }
@@ -4326,7 +4337,7 @@ html.dark .mld-radio-option__native:focus-visible + .mld-radio-option__circle {
4326
4337
  gap: 12px;
4327
4338
  }
4328
4339
  .mld-slider--disabled {
4329
- opacity: 0.5;
4340
+ opacity: var(--mld-disabled-opacity);
4330
4341
  cursor: not-allowed;
4331
4342
  }
4332
4343
  .mld-slider__container {
@@ -4341,16 +4352,13 @@ html.dark .mld-radio-option__native:focus-visible + .mld-radio-option__circle {
4341
4352
  left: 0;
4342
4353
  right: 0;
4343
4354
  border-radius: 9999px;
4344
- background-color: #E2E8F0;
4345
- }
4346
- html.dark .mld-slider__track {
4347
- background-color: #334155;
4355
+ background-color: var(--bg-tertiary);
4348
4356
  }
4349
4357
  .mld-slider__fill {
4350
4358
  position: absolute;
4351
4359
  left: 0;
4352
4360
  border-radius: 9999px;
4353
- background-color: #3B82F6;
4361
+ background-color: var(--color-primary);
4354
4362
  }
4355
4363
  .mld-slider__input {
4356
4364
  position: absolute;
@@ -4371,7 +4379,7 @@ html.dark .mld-slider__track {
4371
4379
  transform: translateX(-50%) translateY(-50%);
4372
4380
  border-radius: 9999px;
4373
4381
  background-color: white;
4374
- border: 2px solid #3B82F6;
4382
+ border: 2px solid var(--color-primary);
4375
4383
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
4376
4384
  pointer-events: none;
4377
4385
  transition: transform 150ms ease;
@@ -4589,6 +4597,9 @@ html.dark .mld-slider__track {
4589
4597
  .mld-textarea::placeholder {
4590
4598
  color: var(--text-muted);
4591
4599
  }
4600
+ .mld-textarea:hover:not(:focus):not(.mld-textarea--disabled):not(.mld-textarea--error) {
4601
+ border-color: var(--text-muted);
4602
+ }
4592
4603
  .mld-textarea:focus {
4593
4604
  outline: none;
4594
4605
  border-color: transparent;
@@ -4601,7 +4612,7 @@ html.dark .mld-slider__track {
4601
4612
  box-shadow: 0 0 0 2px var(--mld-error);
4602
4613
  }
4603
4614
  .mld-textarea--disabled {
4604
- opacity: 0.5;
4615
+ opacity: var(--mld-disabled-opacity);
4605
4616
  cursor: not-allowed;
4606
4617
  background-color: var(--bg-tertiary);
4607
4618
  }
@@ -12048,6 +12059,135 @@ html.dark .mld-settings-modal__option-btn--active {
12048
12059
  padding-top: 1rem;
12049
12060
  border-top: 1px solid var(--color-border, #e5e7eb);
12050
12061
  }
12062
+ .mld-data-viewer {
12063
+ border: 1px solid var(--mld-color-border, #e0e0e0);
12064
+ border-radius: var(--mld-radius-md, 8px);
12065
+ overflow: hidden;
12066
+ }
12067
+ .mld-data-viewer__header {
12068
+ display: flex;
12069
+ align-items: center;
12070
+ justify-content: space-between;
12071
+ padding: 8px 12px;
12072
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
12073
+ background: var(--mld-color-surface-1, #fafafa);
12074
+ gap: 8px;
12075
+ }
12076
+ .mld-data-viewer__controls { display: flex; gap: 8px; }
12077
+ .mld-data-viewer__actions { display: flex; gap: 4px; align-items: center; }
12078
+ .mld-data-viewer__content {
12079
+ padding: 12px;
12080
+ max-height: 600px;
12081
+ overflow-y: auto;
12082
+ }
12083
+ .mld-data-viewer__loading,
12084
+ .mld-data-viewer__empty {
12085
+ text-align: center;
12086
+ padding: 32px;
12087
+ color: var(--mld-color-text-muted, #999);
12088
+ }
12089
+ /* Summary view */
12090
+ .mld-summary {
12091
+ display: flex;
12092
+ flex-direction: column;
12093
+ gap: 16px;
12094
+ }
12095
+ /* Metadata pills row */
12096
+ .mld-summary__metadata {
12097
+ display: flex;
12098
+ flex-wrap: wrap;
12099
+ gap: 6px;
12100
+ }
12101
+ .mld-summary__pill {
12102
+ display: inline-flex;
12103
+ align-items: center;
12104
+ border-radius: 6px;
12105
+ overflow: hidden;
12106
+ font-size: 0.8125rem;
12107
+ line-height: 1;
12108
+ border: 1px solid var(--mld-color-border, #e0e0e0);
12109
+ }
12110
+ .mld-summary__pill--sm {
12111
+ font-size: 0.75rem;
12112
+ }
12113
+ .mld-summary__pill-key {
12114
+ padding: 4px 8px;
12115
+ background: var(--mld-color-surface-1, #f5f5f5);
12116
+ color: var(--mld-color-text-muted, #666);
12117
+ text-transform: capitalize;
12118
+ font-weight: 500;
12119
+ }
12120
+ .mld-summary__pill-value {
12121
+ padding: 4px 8px;
12122
+ color: var(--mld-color-text, #1a1a1a);
12123
+ }
12124
+ /* Section */
12125
+ .mld-summary__section {
12126
+ display: flex;
12127
+ flex-direction: column;
12128
+ gap: 12px;
12129
+ }
12130
+ .mld-summary__section-label {
12131
+ font-weight: 600;
12132
+ font-size: 0.875rem;
12133
+ color: var(--mld-color-text, #1a1a1a);
12134
+ }
12135
+ .mld-summary__section-count {
12136
+ font-size: 0.75rem;
12137
+ color: var(--mld-color-text-muted, #999);
12138
+ margin-left: 8px;
12139
+ }
12140
+ .mld-summary__table-header {
12141
+ display: flex;
12142
+ align-items: baseline;
12143
+ gap: 4px;
12144
+ }
12145
+ /* Group cards */
12146
+ .mld-summary__group-card {
12147
+ border: 1px solid var(--mld-color-border, #e0e0e0);
12148
+ border-radius: var(--mld-radius-md, 8px);
12149
+ overflow: hidden;
12150
+ }
12151
+ .mld-summary__group-header {
12152
+ display: flex;
12153
+ align-items: center;
12154
+ justify-content: space-between;
12155
+ padding: 10px 14px;
12156
+ background: var(--mld-color-surface-1, #fafafa);
12157
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
12158
+ }
12159
+ .mld-summary__group-label {
12160
+ font-weight: 600;
12161
+ font-size: 0.875rem;
12162
+ color: var(--mld-color-text, #1a1a1a);
12163
+ }
12164
+ .mld-summary__group-count {
12165
+ font-size: 0.75rem;
12166
+ color: var(--mld-color-text-muted, #999);
12167
+ background: var(--mld-color-surface-2, #eee);
12168
+ padding: 2px 8px;
12169
+ border-radius: 10px;
12170
+ }
12171
+ .mld-summary__group-meta {
12172
+ display: flex;
12173
+ flex-wrap: wrap;
12174
+ gap: 6px;
12175
+ padding: 8px 14px;
12176
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
12177
+ }
12178
+ .mld-exp-code {
12179
+ display: inline-flex;
12180
+ align-items: center;
12181
+ font-family: var(--mld-font-mono, ui-monospace, monospace);
12182
+ font-weight: 600;
12183
+ background: var(--mld-color-surface-2, #f0f0f0);
12184
+ color: var(--mld-color-text-secondary, #666);
12185
+ border-radius: var(--mld-radius-sm, 4px);
12186
+ letter-spacing: 0.02em;
12187
+ }
12188
+ .mld-exp-code--sm { padding: 1px 6px; font-size: 11px; }
12189
+ .mld-exp-code--md { padding: 2px 8px; font-size: 12px; }
12190
+ .mld-exp-code--lg { padding: 3px 10px; font-size: 14px; }
12051
12191
  /* BaseButton Component Styles */
12052
12192
  .mld-button {
12053
12193
  display: inline-flex;
@@ -12063,11 +12203,11 @@ html.dark .mld-settings-modal__option-btn--active {
12063
12203
  border: none;
12064
12204
  box-sizing: border-box;
12065
12205
  }
12066
- .mld-button:focus {
12206
+ .mld-button:focus-visible {
12067
12207
  outline: none;
12068
12208
  box-shadow: 0 0 0 2px white, 0 0 0 4px var(--color-primary);
12069
12209
  }
12070
- html.dark .mld-button:focus {
12210
+ html.dark .mld-button:focus-visible {
12071
12211
  box-shadow: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--color-primary);
12072
12212
  }
12073
12213
  .mld-button--disabled {
@@ -12106,14 +12246,14 @@ html.dark .mld-button:focus {
12106
12246
  color: white;
12107
12247
  }
12108
12248
  .mld-button--danger:hover:not(.mld-button--disabled) {
12109
- background-color: #DC2626;
12249
+ background-color: var(--mld-error-hover);
12110
12250
  }
12111
12251
  .mld-button--success {
12112
12252
  background-color: var(--mld-success);
12113
12253
  color: white;
12114
12254
  }
12115
12255
  .mld-button--success:hover:not(.mld-button--disabled) {
12116
- background-color: #059669;
12256
+ background-color: var(--mld-success-hover);
12117
12257
  }
12118
12258
  .mld-button--ghost {
12119
12259
  background-color: transparent;
@@ -12214,6 +12354,9 @@ to {
12214
12354
  .mld-textarea::placeholder {
12215
12355
  color: var(--text-muted);
12216
12356
  }
12357
+ .mld-textarea:hover:not(:focus):not(.mld-textarea--disabled):not(.mld-textarea--error) {
12358
+ border-color: var(--text-muted);
12359
+ }
12217
12360
  .mld-textarea:focus {
12218
12361
  outline: none;
12219
12362
  border-color: transparent;
@@ -12226,7 +12369,7 @@ to {
12226
12369
  box-shadow: 0 0 0 2px var(--mld-error);
12227
12370
  }
12228
12371
  .mld-textarea--disabled {
12229
- opacity: 0.5;
12372
+ opacity: var(--mld-disabled-opacity);
12230
12373
  cursor: not-allowed;
12231
12374
  background-color: var(--bg-tertiary);
12232
12375
  }
@@ -12283,7 +12426,7 @@ to {
12283
12426
  box-shadow: 0 0 0 2px var(--mld-error);
12284
12427
  }
12285
12428
  .mld-select__control--disabled {
12286
- opacity: 0.5;
12429
+ opacity: var(--mld-disabled-opacity);
12287
12430
  cursor: not-allowed;
12288
12431
  background-color: var(--bg-tertiary);
12289
12432
  }
@@ -12640,7 +12783,7 @@ html.dark .mld-radio-option__native:focus-visible + .mld-radio-option__circle {
12640
12783
  gap: 12px;
12641
12784
  }
12642
12785
  .mld-slider--disabled {
12643
- opacity: 0.5;
12786
+ opacity: var(--mld-disabled-opacity);
12644
12787
  cursor: not-allowed;
12645
12788
  }
12646
12789
  .mld-slider__container {
@@ -12655,16 +12798,13 @@ html.dark .mld-radio-option__native:focus-visible + .mld-radio-option__circle {
12655
12798
  left: 0;
12656
12799
  right: 0;
12657
12800
  border-radius: 9999px;
12658
- background-color: #E2E8F0;
12659
- }
12660
- html.dark .mld-slider__track {
12661
- background-color: #334155;
12801
+ background-color: var(--bg-tertiary);
12662
12802
  }
12663
12803
  .mld-slider__fill {
12664
12804
  position: absolute;
12665
12805
  left: 0;
12666
12806
  border-radius: 9999px;
12667
- background-color: #3B82F6;
12807
+ background-color: var(--color-primary);
12668
12808
  }
12669
12809
  .mld-slider__input {
12670
12810
  position: absolute;
@@ -12685,7 +12825,7 @@ html.dark .mld-slider__track {
12685
12825
  transform: translateX(-50%) translateY(-50%);
12686
12826
  border-radius: 9999px;
12687
12827
  background-color: white;
12688
- border: 2px solid #3B82F6;
12828
+ border: 2px solid var(--color-primary);
12689
12829
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
12690
12830
  pointer-events: none;
12691
12831
  transition: transform 150ms ease;
@@ -12946,7 +13086,7 @@ html.dark .mld-slider__track {
12946
13086
  padding: 0 !important;
12947
13087
  }
12948
13088
  .mld-modal__close {
12949
- padding: 0.25rem;
13089
+ padding: 0.5rem;
12950
13090
  border-radius: var(--mld-radius-sm);
12951
13091
  color: var(--text-muted);
12952
13092
  background: none;
@@ -15577,6 +15717,13 @@ to {
15577
15717
  overflow: hidden;
15578
15718
  background-color: var(--bg-card);
15579
15719
  }
15720
+
15721
+ /* Allow floating dropdowns (DatePicker, TimePicker, etc.) to escape overflow */
15722
+ .mld-collapsible-card:has(.mld-date-picker__dropdown),
15723
+ .mld-collapsible-card:has(.mld-time-picker__dropdown),
15724
+ .mld-collapsible-card:has(.mld-datetime-picker__dropdown) {
15725
+ overflow: visible;
15726
+ }
15580
15727
  .mld-collapsible-card__header {
15581
15728
  display: flex;
15582
15729
  align-items: center;
@@ -22891,6 +23038,140 @@ to { transform: rotate(360deg);
22891
23038
  padding-top: 1rem;
22892
23039
  border-top: 1px solid var(--color-border, #e5e7eb);
22893
23040
  }
23041
+ .mld-data-viewer {
23042
+ border: 1px solid var(--mld-color-border, #e0e0e0);
23043
+ border-radius: var(--mld-radius-md, 8px);
23044
+ overflow: hidden;
23045
+ }
23046
+ .mld-data-viewer__header {
23047
+ display: flex;
23048
+ align-items: center;
23049
+ justify-content: space-between;
23050
+ padding: 8px 12px;
23051
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
23052
+ background: var(--mld-color-surface-1, #fafafa);
23053
+ gap: 8px;
23054
+ }
23055
+ .mld-data-viewer__controls { display: flex; gap: 8px;
23056
+ }
23057
+ .mld-data-viewer__actions { display: flex; gap: 4px; align-items: center;
23058
+ }
23059
+ .mld-data-viewer__content {
23060
+ padding: 12px;
23061
+ max-height: 600px;
23062
+ overflow-y: auto;
23063
+ }
23064
+ .mld-data-viewer__loading,
23065
+ .mld-data-viewer__empty {
23066
+ text-align: center;
23067
+ padding: 32px;
23068
+ color: var(--mld-color-text-muted, #999);
23069
+ }
23070
+ /* Summary view */
23071
+ .mld-summary {
23072
+ display: flex;
23073
+ flex-direction: column;
23074
+ gap: 16px;
23075
+ }
23076
+ /* Metadata pills row */
23077
+ .mld-summary__metadata {
23078
+ display: flex;
23079
+ flex-wrap: wrap;
23080
+ gap: 6px;
23081
+ }
23082
+ .mld-summary__pill {
23083
+ display: inline-flex;
23084
+ align-items: center;
23085
+ border-radius: 6px;
23086
+ overflow: hidden;
23087
+ font-size: 0.8125rem;
23088
+ line-height: 1;
23089
+ border: 1px solid var(--mld-color-border, #e0e0e0);
23090
+ }
23091
+ .mld-summary__pill--sm {
23092
+ font-size: 0.75rem;
23093
+ }
23094
+ .mld-summary__pill-key {
23095
+ padding: 4px 8px;
23096
+ background: var(--mld-color-surface-1, #f5f5f5);
23097
+ color: var(--mld-color-text-muted, #666);
23098
+ text-transform: capitalize;
23099
+ font-weight: 500;
23100
+ }
23101
+ .mld-summary__pill-value {
23102
+ padding: 4px 8px;
23103
+ color: var(--mld-color-text, #1a1a1a);
23104
+ }
23105
+ /* Section */
23106
+ .mld-summary__section {
23107
+ display: flex;
23108
+ flex-direction: column;
23109
+ gap: 12px;
23110
+ }
23111
+ .mld-summary__section-label {
23112
+ font-weight: 600;
23113
+ font-size: 0.875rem;
23114
+ color: var(--mld-color-text, #1a1a1a);
23115
+ }
23116
+ .mld-summary__section-count {
23117
+ font-size: 0.75rem;
23118
+ color: var(--mld-color-text-muted, #999);
23119
+ margin-left: 8px;
23120
+ }
23121
+ .mld-summary__table-header {
23122
+ display: flex;
23123
+ align-items: baseline;
23124
+ gap: 4px;
23125
+ }
23126
+ /* Group cards */
23127
+ .mld-summary__group-card {
23128
+ border: 1px solid var(--mld-color-border, #e0e0e0);
23129
+ border-radius: var(--mld-radius-md, 8px);
23130
+ overflow: hidden;
23131
+ }
23132
+ .mld-summary__group-header {
23133
+ display: flex;
23134
+ align-items: center;
23135
+ justify-content: space-between;
23136
+ padding: 10px 14px;
23137
+ background: var(--mld-color-surface-1, #fafafa);
23138
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
23139
+ }
23140
+ .mld-summary__group-label {
23141
+ font-weight: 600;
23142
+ font-size: 0.875rem;
23143
+ color: var(--mld-color-text, #1a1a1a);
23144
+ }
23145
+ .mld-summary__group-count {
23146
+ font-size: 0.75rem;
23147
+ color: var(--mld-color-text-muted, #999);
23148
+ background: var(--mld-color-surface-2, #eee);
23149
+ padding: 2px 8px;
23150
+ border-radius: 10px;
23151
+ }
23152
+ .mld-summary__group-meta {
23153
+ display: flex;
23154
+ flex-wrap: wrap;
23155
+ gap: 6px;
23156
+ padding: 8px 14px;
23157
+ border-bottom: 1px solid var(--mld-color-border, #e0e0e0);
23158
+ }
23159
+ .mld-exp-code {
23160
+ display: inline-flex;
23161
+ align-items: center;
23162
+ font-family: var(--mld-font-mono, ui-monospace, monospace);
23163
+ font-weight: 600;
23164
+ background: var(--mld-color-surface-2, #f0f0f0);
23165
+ color: var(--mld-color-text-secondary, #666);
23166
+ border-radius: var(--mld-radius-sm, 4px);
23167
+ letter-spacing: 0.02em;
23168
+ }
23169
+ .mld-exp-code--sm { padding: 1px 6px; font-size: 11px;
23170
+ }
23171
+ .mld-exp-code--md { padding: 2px 8px; font-size: 12px;
23172
+ }
23173
+ .mld-exp-code--lg { padding: 3px 10px; font-size: 14px;
23174
+ }
22894
23175
  /* TimeRangeInput Component Styles */
22895
23176
  .mld-time-range {
22896
23177
  display: flex;
@@ -410,6 +410,29 @@ export interface ScheduleEventUpdateContext {
410
410
  newStart: Date;
411
411
  newEnd: Date;
412
412
  }
413
+ export interface SummarySectionItem {
414
+ label: string;
415
+ metadata?: Record<string, unknown>;
416
+ item_count: number;
417
+ item_key: string;
418
+ columns: string[];
419
+ rows: Record<string, unknown>[];
420
+ }
421
+ export interface SummarySection {
422
+ key: string;
423
+ label: string;
424
+ type: 'table' | 'group';
425
+ /** Group sections: list of group items with embedded tables */
426
+ items?: SummarySectionItem[];
427
+ /** Table sections: flat table columns and rows */
428
+ columns?: string[];
429
+ rows?: Record<string, unknown>[];
430
+ row_count?: number;
431
+ }
432
+ export interface SummaryData {
433
+ metadata: Record<string, unknown>;
434
+ sections: SummarySection[];
435
+ }
413
436
  export type ResourceStatus = 'available' | 'in-use' | 'maintenance' | 'offline';
414
437
  export interface ResourceSpec {
415
438
  label: string;
@@ -1,4 +1,4 @@
1
- export type { ContainerDirection, ButtonVariant, ButtonSize, InputType, ModalSize, AlertType, Toast, TabItem, SelectOption, RadioOption, FormFieldProps, SidebarToolSection, CollapsibleState, TopBarVariant, TopBarPage, TopBarTab, TopBarTabOption, TopBarSettingsConfig, WellPlateFormat, WellState, WellPlateSelectionMode, WellPlateSize, WellShape, Well, HeatmapColorScale, HeatmapConfig, SlotPosition, WellExtendedData, WellEditData, WellEditField, WellLegendItem, PlateCondition, ColumnCondition, RowCondition, Rack, SampleType, PlateMap, PlateMapEditorState, ProtocolStepType, ProtocolStepStatus, ProtocolStep, SampleGroup, GroupItem, FileUploaderMode, SegmentedOption, SegmentedControlVariant, SegmentedControlSize, MultiSelectOption, MultiSelectSize, PillVariant, PillSize, CalendarSelectionMode, CalendarMarker, CalendarDayContext, SortDirection, SortState, DataFrameColumn, PaginationState, SpinnerSize, SpinnerVariant, DividerSpacing, StatusType, ProgressVariant, ProgressSize, AvatarSize, EmptyStateColor, EmptyStateSize, BreadcrumbItem, TooltipPosition, ConfirmVariant, SettingsTab, NumberNotation, UnitOption, WizardStep, WizardStepState, AuditEntryType, AuditEntry, BatchItemStatus, BatchItem, BatchSummary, TimePickerFormat, TimeRange, ScheduleView, ScheduleEventStatus, ScheduleEvent, ScheduleBlockedSlot, ScheduleSlotContext, ScheduleEventCreateContext, ScheduleEventUpdateContext, ResourceStatus, ResourceSpec, MoleculeData, StorageCondition, ReagentColumn, Reagent, TreeNodeType, BadgeVariant, TreeNode, } from './components';
1
+ export type { ContainerDirection, ButtonVariant, ButtonSize, InputType, ModalSize, AlertType, Toast, TabItem, SelectOption, RadioOption, FormFieldProps, SidebarToolSection, CollapsibleState, TopBarVariant, TopBarPage, TopBarTab, TopBarTabOption, TopBarSettingsConfig, WellPlateFormat, WellState, WellPlateSelectionMode, WellPlateSize, WellShape, Well, HeatmapColorScale, HeatmapConfig, SlotPosition, WellExtendedData, WellEditData, WellEditField, WellLegendItem, PlateCondition, ColumnCondition, RowCondition, Rack, SampleType, PlateMap, PlateMapEditorState, ProtocolStepType, ProtocolStepStatus, ProtocolStep, SampleGroup, GroupItem, FileUploaderMode, SegmentedOption, SegmentedControlVariant, SegmentedControlSize, MultiSelectOption, MultiSelectSize, PillVariant, PillSize, CalendarSelectionMode, CalendarMarker, CalendarDayContext, SortDirection, SortState, DataFrameColumn, PaginationState, SpinnerSize, SpinnerVariant, DividerSpacing, StatusType, ProgressVariant, ProgressSize, AvatarSize, EmptyStateColor, EmptyStateSize, BreadcrumbItem, TooltipPosition, ConfirmVariant, SettingsTab, NumberNotation, UnitOption, WizardStep, WizardStepState, AuditEntryType, AuditEntry, BatchItemStatus, BatchItem, BatchSummary, TimePickerFormat, TimeRange, ScheduleView, ScheduleEventStatus, ScheduleEvent, ScheduleBlockedSlot, ScheduleSlotContext, ScheduleEventCreateContext, ScheduleEventUpdateContext, SummarySectionItem, SummarySection, SummaryData, ResourceStatus, ResourceSpec, MoleculeData, StorageCondition, ReagentColumn, Reagent, TreeNodeType, BadgeVariant, TreeNode, } from './components';
2
2
  export type { FormFieldType, FieldCondition, FieldValidation, FormFieldSchema, FormSectionSchema, FormStepSchema, FormSchema, FieldEnhancement, FormEnhancements, UseFormBuilderReturn, } from './form-builder';
3
3
  export type { AuthConfig, UserInfo, LoginResponse, TokenVerifyResponse, RegisterRequest, UpdateProfileRequest, CredentialInfo, } from './auth';
4
4
  export type { PluginInfo, PluginNavItem, PluginSettings, PluginSettingField, PlatformContext, PlatformContextOptions, PlatformEventType, PlatformEvent, ThemeMode, ColorPalette, TableDensity, } from './platform';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morscherlab/mld-sdk",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "MLD Platform SDK - Vue 3 components, composables, and types for plugin development",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -14,6 +14,7 @@ interface Props {
14
14
  min?: number
15
15
  max?: number
16
16
  step?: number
17
+ ariaDescribedby?: string
17
18
  }
18
19
 
19
20
  const props = withDefaults(defineProps<Props>(), {
@@ -52,6 +53,8 @@ function handleInput(event: Event) {
52
53
  :min="min"
53
54
  :max="max"
54
55
  :step="step"
56
+ :aria-invalid="error || undefined"
57
+ :aria-describedby="ariaDescribedby || undefined"
55
58
  :class="[
56
59
  'mld-input',
57
60
  `mld-input--${size}`,