mod-arch-kubeflow 1.6.0 → 1.8.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.
@@ -140,6 +140,9 @@
140
140
  --pf-t--global--border--color--status--success--default: var(--mui-palette-success-main);
141
141
  --pf-t--global--border--color--status--info--default: var(--mui-palette-info-main);
142
142
 
143
+ // MUI's warning background is darker than PF's default yellow, requiring white text for contrast
144
+ --pf-t--global--text--color--status--on-warning--default: var(--mui-palette-warning-contrastText);
145
+
143
146
  // ═══════════════════════════════════════════════════════════════════════════
144
147
  // MUI CUSTOM VARIABLES
145
148
  // Custom variables for MUI-specific values used in component overrides below.
@@ -294,6 +297,9 @@
294
297
  --mui-spacing-16px: calc(2 * var(--mui-spacing));
295
298
  --mui-spacing-32px: calc(4 * var(--mui-spacing));
296
299
 
300
+ // Input group control buttons (e.g. password toggle, mount path edit): compact circular button
301
+ --mui-input-group-control-button--size: 28px;
302
+ --mui-input-group-control-button--container-padding-inline-end: 6px;
297
303
 
298
304
  }
299
305
 
@@ -312,6 +318,12 @@
312
318
  ╚════════════════════════════════════════════════════════════════════════════════╝
313
319
  */
314
320
 
321
+ // PF table: opt-in vertical-align middle for tables with mixed content (text + controls).
322
+ // Add class mui-table-cells-middle to the Table when rows have inputs/buttons; keeps text-only tables on PF default.
323
+ .mui-theme .pf-v6-c-table.mui-table-cells-middle .pf-v6-c-table__td {
324
+ vertical-align: middle;
325
+ }
326
+
315
327
  .mui-theme .pf-v6-c-action-list__item .pf-v6-c-button {
316
328
  --pf-v6-c-button--PaddingInlineStart: 0;
317
329
  --pf-v6-c-button--PaddingInlineEnd: 0;
@@ -359,6 +371,8 @@
359
371
 
360
372
  .mui-theme .pf-v6-c-backdrop {
361
373
  --pf-v6-c-backdrop--BackgroundColor: var(--mui-backdrop-BackgroundColor);
374
+ // Sidebar uses MUI drawer z-index (1200); modal must render above it
375
+ --pf-v6-c-backdrop--ZIndex: var(--mui-zIndex-modal);
362
376
  }
363
377
 
364
378
  .mui-theme .pf-v6-c-brand.kubeflow_brand {
@@ -728,20 +742,71 @@
728
742
  border-color: var(--mui-palette-error-main);
729
743
  }
730
744
 
731
- .mui-theme .form-fieldset-wrapper .pf-v6-c-input-group__item button {
732
- // Aligns EyeIcon in password input
733
- --pf-v6-c-button--PaddingBlockStart: var(--mui-spacing-16px);
734
- --pf-v6-c-button--PaddingBlockEnd: var(--mui-spacing-16px);
735
- --pf-v6-c-button--BorderColor: var(--mui-palette-common-white);
736
- --pf-v6-c-button--BorderRadius: 50%;
745
+ // Input group control buttons: use PF structure only (Button variant="control" in InputGroup).
746
+ // No app class names required; any consumer using variant="control" gets this styling.
747
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item:has(.pf-v6-c-button.pf-m-control) {
748
+ display: flex;
749
+ align-items: center;
750
+ }
751
+
752
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item:has(.pf-v6-c-button.pf-m-control):last-child {
753
+ padding-inline-end: var(--mui-input-group-control-button--container-padding-inline-end);
754
+ }
755
+
756
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item .pf-v6-c-button.pf-m-control {
757
+ --pf-v6-c-button--BorderColor: transparent;
758
+ --pf-v6-c-button--hover--BorderColor: transparent;
759
+ --pf-v6-c-button--m-control--BorderColor: transparent;
760
+ --pf-v6-c-button--m-control--hover--BorderColor: transparent;
761
+ --pf-v6-c-button--m-control--m-clicked--BorderColor: transparent;
762
+ --pf-v6-c-button--PaddingBlockStart: 0;
763
+ --pf-v6-c-button--PaddingBlockEnd: 0;
764
+ --pf-v6-c-button--PaddingInlineStart: 0;
765
+ --pf-v6-c-button--PaddingInlineEnd: 0;
766
+ --pf-v6-c-button--m-control--BorderRadius: 50%;
767
+
768
+ width: var(--mui-input-group-control-button--size);
769
+ height: var(--mui-input-group-control-button--size);
770
+ min-width: var(--mui-input-group-control-button--size);
771
+ min-height: var(--mui-input-group-control-button--size);
772
+ border-radius: 50%;
773
+ display: inline-flex;
774
+ align-items: center;
775
+ justify-content: center;
776
+ line-height: 0;
777
+ align-self: center;
778
+ }
779
+
780
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item .pf-v6-c-button.pf-m-control .pf-v6-c-button__icon,
781
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item .pf-v6-c-button.pf-m-control svg {
782
+ display: block;
783
+ margin: 0;
784
+ }
785
+
786
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item .pf-v6-c-button.pf-m-control:hover {
787
+ border-radius: 50%;
788
+ outline: none;
789
+ background-color: var(--pf-t--global--background--color--action--plain--hover, rgba(0, 0, 0, 0.04));
790
+ }
791
+
792
+ .mui-theme .pf-v6-c-input-group .pf-v6-c-input-group__item .pf-v6-c-button.pf-m-control:focus-visible {
793
+ border-radius: 50%;
794
+ outline: none;
795
+ box-shadow: 0 0 0 2px var(--mui-palette-primary-main);
737
796
  }
738
797
 
739
- .mui-theme .form-fieldset-wrapper:focus-within .form-fieldset {
798
+ .mui-theme .form-fieldset-wrapper:focus-within:not(:has(.pf-m-error)) .form-fieldset {
740
799
  border-color: var(--mui-palette-primary-main);
741
800
  border-width: var(--mui-form--focus--BorderWidth);
742
801
  padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
743
802
  }
744
803
 
804
+ .mui-theme .form-fieldset-wrapper:focus-within:has(.pf-m-error) .form-fieldset {
805
+ border-color: var(--mui-palette-error-main);
806
+ border-width: var(--mui-form--focus--BorderWidth);
807
+ padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
808
+ }
809
+
745
810
  // Apply form-fieldset-wrapper styling to ANY descendant of .pf-v6-c-form (Form component)
746
811
  // This ensures styling works regardless of nesting depth or wrapper divs
747
812
  .mui-theme .pf-v6-c-form .form-fieldset {
@@ -803,16 +868,14 @@
803
868
  border-color: var(--mui-palette-error-main);
804
869
  }
805
870
 
806
- .mui-theme .pf-v6-c-form .form-fieldset-wrapper .pf-v6-c-input-group__item button {
807
- // Aligns EyeIcon in password input
808
- --pf-v6-c-button--PaddingBlockStart: var(--mui-spacing-16px);
809
- --pf-v6-c-button--PaddingBlockEnd: var(--mui-spacing-16px);
810
- --pf-v6-c-button--BorderColor: var(--mui-palette-common-white);
811
- --pf-v6-c-button--BorderRadius: 50%;
871
+ .mui-theme .pf-v6-c-form .form-fieldset-wrapper:focus-within:not(:has(.pf-m-error)) .form-fieldset {
872
+ border-color: var(--mui-palette-primary-main);
873
+ border-width: var(--mui-form--focus--BorderWidth);
874
+ padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
812
875
  }
813
876
 
814
- .mui-theme .pf-v6-c-form .form-fieldset-wrapper:focus-within .form-fieldset {
815
- border-color: var(--mui-palette-primary-main);
877
+ .mui-theme .pf-v6-c-form .form-fieldset-wrapper:focus-within:has(.pf-m-error) .form-fieldset {
878
+ border-color: var(--mui-palette-error-main);
816
879
  border-width: var(--mui-form--focus--BorderWidth);
817
880
  padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
818
881
  }
@@ -890,20 +953,19 @@
890
953
  border-color: var(--mui-palette-error-main);
891
954
  }
892
955
 
893
- .mui-theme [class*="pf-v6-l-"] .form-fieldset-wrapper .pf-v6-c-input-group__item button {
894
- // Aligns EyeIcon in password input
895
- --pf-v6-c-button--PaddingBlockStart: var(--pf-t--global--spacer--md);
896
- --pf-v6-c-button--PaddingBlockEnd: var(--pf-t--global--spacer--md);
897
- --pf-v6-c-button--BorderColor: var(--mui-palette-common-white);
898
- --pf-v6-c-button--BorderRadius: 50%;
899
- }
900
956
 
901
- .mui-theme [class*="pf-v6-l-"] .form-fieldset-wrapper:focus-within .form-fieldset {
957
+ .mui-theme [class*="pf-v6-l-"] .form-fieldset-wrapper:focus-within:not(:has(.pf-m-error)) .form-fieldset {
902
958
  border-color: var(--mui-palette-primary-main);
903
959
  border-width: var(--mui-form--focus--BorderWidth);
904
960
  padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
905
961
  }
906
962
 
963
+ .mui-theme [class*="pf-v6-l-"] .form-fieldset-wrapper:focus-within:has(.pf-m-error) .form-fieldset {
964
+ border-color: var(--mui-palette-error-main);
965
+ border-width: var(--mui-form--focus--BorderWidth);
966
+ padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
967
+ }
968
+
907
969
  .mui-theme [class*="pf-v6-l-"] .form-fieldset-wrapper:focus-within {
908
970
  color: var(--mui-palette-primary-main);
909
971
  }
@@ -1006,12 +1068,18 @@
1006
1068
  border-color: var(--mui-palette-common-black);
1007
1069
  }
1008
1070
 
1009
- .mui-theme .pf-v6-c-expandable-section .form-fieldset-wrapper:focus-within .form-fieldset {
1071
+ .mui-theme .pf-v6-c-expandable-section .form-fieldset-wrapper:focus-within:not(:has(.pf-m-error)) .form-fieldset {
1010
1072
  border-color: var(--mui-palette-primary-main);
1011
1073
  border-width: var(--mui-form--focus--BorderWidth);
1012
1074
  padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
1013
1075
  }
1014
1076
 
1077
+ .mui-theme .pf-v6-c-expandable-section .form-fieldset-wrapper:focus-within:has(.pf-m-error) .form-fieldset {
1078
+ border-color: var(--mui-palette-error-main);
1079
+ border-width: var(--mui-form--focus--BorderWidth);
1080
+ padding: var(--mui-form--focus--Padding) var(--mui-form--focus--Padding);
1081
+ }
1082
+
1015
1083
  .mui-theme .pf-v6-c-expandable-section .form-fieldset-wrapper:focus-within {
1016
1084
  color: var(--mui-palette-primary-main);
1017
1085
  }
@@ -1103,6 +1171,12 @@
1103
1171
  --pf-v6-c-menu__item--FontSize: var(--mui-menu__item--FontSize);
1104
1172
  }
1105
1173
 
1174
+ // Remove negative margins on scrollable menu content that clip the scrollbar
1175
+ .mui-theme .pf-v6-c-menu.pf-m-scrollable .pf-v6-c-menu__content {
1176
+ margin-block-start: 0;
1177
+ margin-block-end: 0;
1178
+ }
1179
+
1106
1180
 
1107
1181
  .mui-theme .pf-v6-c-menu__item {
1108
1182
  &.pf-m-selected {
@@ -1521,13 +1595,18 @@ left: 0;
1521
1595
  /* CSS workaround for spacing in labels in Workspace Kind */
1522
1596
  /* Special handling for form fields in table cells - remove extra top spacing */
1523
1597
  /* Layout properties (vertical-align, display, overflow) - no PF variables exist */
1524
- .mui-theme .form-label-field-group .pf-v6-c-table tr:where(.pf-v6-c-table__tr) > :where(th, td) {
1598
+ .mui-theme .form-label-field-group .pf-v6-c-table tr:where(.pf-v6-c-table__tr):not(.pf-v6-c-inline-edit) > :where(th, td) {
1525
1599
  /* Layout property - no PF variable exists */
1526
1600
  vertical-align: middle;
1527
1601
  /* Balance padding - use PF component variable for consistency */
1528
1602
  --pf-v6-c-table--cell--PaddingBlockStart: 0px;
1529
1603
  }
1530
1604
 
1605
+ /* Vertically center action cells (e.g. delete button) in inline edit rows to align with taller MUI form fields */
1606
+ .mui-theme .form-label-field-group .pf-v6-c-table tr.pf-v6-c-inline-edit.pf-m-inline-editable > td:last-child {
1607
+ vertical-align: middle;
1608
+ }
1609
+
1531
1610
  /* Remove spacing to align form elements at top of table cells */
1532
1611
  /* Margin/padding: No PF variables exist for zero values - using direct CSS */
1533
1612
  .mui-theme .form-label-field-group .pf-v6-c-table tr:where(.pf-v6-c-table__tr) > :where(th, td) .pf-v6-c-form__group {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mod-arch-kubeflow",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "Kubeflow-specific theme and UI components for modular architecture micro-frontend projects",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -10,7 +10,7 @@
10
10
  "*.scss"
11
11
  ],
12
12
  "engines": {
13
- "node": ">=20.0.0"
13
+ "node": ">=22.0.0"
14
14
  },
15
15
  "files": [
16
16
  "dist",