tfrere HF Staff Cursor commited on
Commit
a9721bc
·
1 Parent(s): 620587f

chore(deps): upgrade MUI to v9.0.1

Browse files

- @mui /material: ^7.3.5 -> ^9.0.1
- @mui /icons-material: ^7.3.5 -> ^9.0.1
- Ran `npx @mui /codemod@latest v9.0.0/system-props src/`
(codemod output: 2 files transformed,
src/components/EmotionsView.tsx and
src/components/emotions/NowPlayingStrip.tsx).
Note: the umbrella `v9.0.0` transform does not exist in
@mui /codemod@9.0.1 - only the `v9.0.0/system-props` sub-rule
is shipped.
- Lockfile regenerated from scratch (no --legacy-peer-deps needed;
the SDK's transitive @mui /material@7.3.11 dedupe is harmless).
- Manual fix in src/theme.ts: MUI v9 removed the variant-color
combination slots (`outlinedPrimary`, `containedPrimary`, etc.)
from `MuiButton`'s `styleOverrides`. Migrated `outlinedPrimary`
to the new `variants` API
(`{ props: { variant: 'outlined', color: 'primary' }, style: ... }`).

Build verified locally with `npm run build`. Push goes to the
`chore/upgrade-mui-9` branch so the user can validate the deployed
Space before merging to `main`.

Co-authored-by: Cursor <cursoragent@cursor.com>

package-lock.json CHANGED
@@ -10,8 +10,8 @@
10
  "dependencies": {
11
  "@emotion/react": "^11.14.0",
12
  "@emotion/styled": "^11.14.1",
13
- "@mui/icons-material": "^7.3.5",
14
- "@mui/material": "^7.3.5",
15
  "@pollen-robotics/reachy-mini-sdk": "1.8.0-rc1-main.fd4354c",
16
  "react": "^19.2.5",
17
  "react-dom": "^19.2.5"
@@ -808,6 +808,265 @@
808
  }
809
  },
810
  "node_modules/@mui/core-downloads-tracker": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
811
  "version": "7.3.11",
812
  "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.11.tgz",
813
  "integrity": "sha512-a7I/b/nBTdXYz2cOSlEmkQ9WWE1x8FHpqMhFPp+Y1VPFxcOw91G5ELOHARQAGSPy5V+UCgJua6K/1x70bAtQPw==",
@@ -817,7 +1076,7 @@
817
  "url": "https://opencollective.com/mui-org"
818
  }
819
  },
820
- "node_modules/@mui/icons-material": {
821
  "version": "7.3.11",
822
  "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.11.tgz",
823
  "integrity": "sha512-+hz5ilwHZ3djd5es3sCErLioqe/NhZcYTsV/TNXZAMdJdb23F4xzJjqnnZdnurc3S1+ietcssRNqieOhPQLZ7Q==",
@@ -843,7 +1102,7 @@
843
  }
844
  }
845
  },
846
- "node_modules/@mui/material": {
847
  "version": "7.3.11",
848
  "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.11.tgz",
849
  "integrity": "sha512-yq8bPc3LxOwKRWpcjRgDkYFmpM6aKlARfESTmOQcvLYFeJwtHte2tw6hJDrb8sk8wcvpDprHEHVaoUU0MslIkw==",
@@ -893,7 +1152,7 @@
893
  }
894
  }
895
  },
896
- "node_modules/@mui/private-theming": {
897
  "version": "7.3.11",
898
  "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.11.tgz",
899
  "integrity": "sha512-9B+YKms0fRHbNrqp9tOT/DNbNnU5gyvJ1o3qAGXfq8GmZcbJnE3At9x07Zr/o0pkhzg4aDdwXVqe4+AcgtOCPA==",
@@ -920,7 +1179,7 @@
920
  }
921
  }
922
  },
923
- "node_modules/@mui/styled-engine": {
924
  "version": "7.3.10",
925
  "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.10.tgz",
926
  "integrity": "sha512-WxE9SiF8xskAQqGjsp0poXCkCqsoXFEsSr0HBXfApmGHR+DBnXRp+z46Vsltg4gpPM4Z96DeAQRpeAOnhNg7Ng==",
@@ -954,7 +1213,7 @@
954
  }
955
  }
956
  },
957
- "node_modules/@mui/system": {
958
  "version": "7.3.11",
959
  "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.11.tgz",
960
  "integrity": "sha512-7izwGWdNawAKpBKcRlx7f2gFnAAjmASBWvMcyX4YYEeLOFsbfGRbUYGInvnAcUeql3rPxI7F9Ft4oY2OLRz44g==",
@@ -994,7 +1253,7 @@
994
  }
995
  }
996
  },
997
- "node_modules/@mui/types": {
998
  "version": "7.4.12",
999
  "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.12.tgz",
1000
  "integrity": "sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w==",
@@ -1011,7 +1270,7 @@
1011
  }
1012
  }
1013
  },
1014
- "node_modules/@mui/utils": {
1015
  "version": "7.3.11",
1016
  "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.11.tgz",
1017
  "integrity": "sha512-XTjGnifwteg71/ij+0e7Y7d+hwyntMYP5wPoA/g2drdGH+Flkvjwy0OfrVpKBbaOvofq4zU/LIyUZyKgmWu18g==",
@@ -1041,31 +1300,6 @@
1041
  }
1042
  }
1043
  },
1044
- "node_modules/@pollen-robotics/reachy-mini-sdk": {
1045
- "version": "1.8.0-rc1-main.fd4354c",
1046
- "resolved": "https://registry.npmjs.org/@pollen-robotics/reachy-mini-sdk/-/reachy-mini-sdk-1.8.0-rc1-main.fd4354c.tgz",
1047
- "integrity": "sha512-I/3cVtLbggPyhYEfp1v/jPZh6PgcVrY0eoaMF5qSXsoKNoX7qJVmcCzmsrZVM7Uf5o9FwQh8uFMORtZ0nWV8Ig==",
1048
- "license": "Apache-2.0",
1049
- "dependencies": {
1050
- "@emotion/react": "^11.14.0",
1051
- "@emotion/styled": "^11.14.1",
1052
- "@huggingface/hub": "^0.15.2",
1053
- "@mui/icons-material": "^7.3.5",
1054
- "@mui/material": "^7.3.5"
1055
- },
1056
- "peerDependencies": {
1057
- "react": "^18.0.0 || ^19.0.0",
1058
- "react-dom": "^18.0.0 || ^19.0.0"
1059
- },
1060
- "peerDependenciesMeta": {
1061
- "react": {
1062
- "optional": true
1063
- },
1064
- "react-dom": {
1065
- "optional": true
1066
- }
1067
- }
1068
- },
1069
  "node_modules/@popperjs/core": {
1070
  "version": "2.11.8",
1071
  "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
@@ -2515,6 +2749,24 @@
2515
  "optional": true
2516
  }
2517
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2518
  }
2519
  }
2520
  }
 
10
  "dependencies": {
11
  "@emotion/react": "^11.14.0",
12
  "@emotion/styled": "^11.14.1",
13
+ "@mui/icons-material": "^9.0.1",
14
+ "@mui/material": "^9.0.1",
15
  "@pollen-robotics/reachy-mini-sdk": "1.8.0-rc1-main.fd4354c",
16
  "react": "^19.2.5",
17
  "react-dom": "^19.2.5"
 
808
  }
809
  },
810
  "node_modules/@mui/core-downloads-tracker": {
811
+ "version": "9.0.1",
812
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-9.0.1.tgz",
813
+ "integrity": "sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==",
814
+ "license": "MIT",
815
+ "funding": {
816
+ "type": "opencollective",
817
+ "url": "https://opencollective.com/mui-org"
818
+ }
819
+ },
820
+ "node_modules/@mui/icons-material": {
821
+ "version": "9.0.1",
822
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-9.0.1.tgz",
823
+ "integrity": "sha512-5PRpQjVLTNLyV/2J9J53Yz4R0tVbodG0BQDN2zQI1QBG1OPYM25ar+4N20eyFOfJT6zKglLzsnU70+zdVLaTkw==",
824
+ "license": "MIT",
825
+ "dependencies": {
826
+ "@babel/runtime": "^7.29.2"
827
+ },
828
+ "engines": {
829
+ "node": ">=14.0.0"
830
+ },
831
+ "funding": {
832
+ "type": "opencollective",
833
+ "url": "https://opencollective.com/mui-org"
834
+ },
835
+ "peerDependencies": {
836
+ "@mui/material": "^9.0.1",
837
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
838
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
839
+ },
840
+ "peerDependenciesMeta": {
841
+ "@types/react": {
842
+ "optional": true
843
+ }
844
+ }
845
+ },
846
+ "node_modules/@mui/material": {
847
+ "version": "9.0.1",
848
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-9.0.1.tgz",
849
+ "integrity": "sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==",
850
+ "license": "MIT",
851
+ "peer": true,
852
+ "dependencies": {
853
+ "@babel/runtime": "^7.29.2",
854
+ "@mui/core-downloads-tracker": "^9.0.1",
855
+ "@mui/system": "^9.0.1",
856
+ "@mui/types": "^9.0.0",
857
+ "@mui/utils": "^9.0.1",
858
+ "@popperjs/core": "^2.11.8",
859
+ "@types/react-transition-group": "^4.4.12",
860
+ "clsx": "^2.1.1",
861
+ "csstype": "^3.2.3",
862
+ "prop-types": "^15.8.1",
863
+ "react-is": "^19.2.4",
864
+ "react-transition-group": "^4.4.5"
865
+ },
866
+ "engines": {
867
+ "node": ">=14.0.0"
868
+ },
869
+ "funding": {
870
+ "type": "opencollective",
871
+ "url": "https://opencollective.com/mui-org"
872
+ },
873
+ "peerDependencies": {
874
+ "@emotion/react": "^11.5.0",
875
+ "@emotion/styled": "^11.3.0",
876
+ "@mui/material-pigment-css": "^9.0.1",
877
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
878
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
879
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
880
+ },
881
+ "peerDependenciesMeta": {
882
+ "@emotion/react": {
883
+ "optional": true
884
+ },
885
+ "@emotion/styled": {
886
+ "optional": true
887
+ },
888
+ "@mui/material-pigment-css": {
889
+ "optional": true
890
+ },
891
+ "@types/react": {
892
+ "optional": true
893
+ }
894
+ }
895
+ },
896
+ "node_modules/@mui/private-theming": {
897
+ "version": "9.0.1",
898
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-9.0.1.tgz",
899
+ "integrity": "sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==",
900
+ "license": "MIT",
901
+ "dependencies": {
902
+ "@babel/runtime": "^7.29.2",
903
+ "@mui/utils": "^9.0.1",
904
+ "prop-types": "^15.8.1"
905
+ },
906
+ "engines": {
907
+ "node": ">=14.0.0"
908
+ },
909
+ "funding": {
910
+ "type": "opencollective",
911
+ "url": "https://opencollective.com/mui-org"
912
+ },
913
+ "peerDependencies": {
914
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
915
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
916
+ },
917
+ "peerDependenciesMeta": {
918
+ "@types/react": {
919
+ "optional": true
920
+ }
921
+ }
922
+ },
923
+ "node_modules/@mui/styled-engine": {
924
+ "version": "9.0.0",
925
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-9.0.0.tgz",
926
+ "integrity": "sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==",
927
+ "license": "MIT",
928
+ "dependencies": {
929
+ "@babel/runtime": "^7.29.2",
930
+ "@emotion/cache": "^11.14.0",
931
+ "@emotion/serialize": "^1.3.3",
932
+ "@emotion/sheet": "^1.4.0",
933
+ "csstype": "^3.2.3",
934
+ "prop-types": "^15.8.1"
935
+ },
936
+ "engines": {
937
+ "node": ">=14.0.0"
938
+ },
939
+ "funding": {
940
+ "type": "opencollective",
941
+ "url": "https://opencollective.com/mui-org"
942
+ },
943
+ "peerDependencies": {
944
+ "@emotion/react": "^11.4.1",
945
+ "@emotion/styled": "^11.3.0",
946
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
947
+ },
948
+ "peerDependenciesMeta": {
949
+ "@emotion/react": {
950
+ "optional": true
951
+ },
952
+ "@emotion/styled": {
953
+ "optional": true
954
+ }
955
+ }
956
+ },
957
+ "node_modules/@mui/system": {
958
+ "version": "9.0.1",
959
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-9.0.1.tgz",
960
+ "integrity": "sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==",
961
+ "license": "MIT",
962
+ "dependencies": {
963
+ "@babel/runtime": "^7.29.2",
964
+ "@mui/private-theming": "^9.0.1",
965
+ "@mui/styled-engine": "^9.0.0",
966
+ "@mui/types": "^9.0.0",
967
+ "@mui/utils": "^9.0.1",
968
+ "clsx": "^2.1.1",
969
+ "csstype": "^3.2.3",
970
+ "prop-types": "^15.8.1"
971
+ },
972
+ "engines": {
973
+ "node": ">=14.0.0"
974
+ },
975
+ "funding": {
976
+ "type": "opencollective",
977
+ "url": "https://opencollective.com/mui-org"
978
+ },
979
+ "peerDependencies": {
980
+ "@emotion/react": "^11.5.0",
981
+ "@emotion/styled": "^11.3.0",
982
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
983
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
984
+ },
985
+ "peerDependenciesMeta": {
986
+ "@emotion/react": {
987
+ "optional": true
988
+ },
989
+ "@emotion/styled": {
990
+ "optional": true
991
+ },
992
+ "@types/react": {
993
+ "optional": true
994
+ }
995
+ }
996
+ },
997
+ "node_modules/@mui/types": {
998
+ "version": "9.0.0",
999
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.0.0.tgz",
1000
+ "integrity": "sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==",
1001
+ "license": "MIT",
1002
+ "dependencies": {
1003
+ "@babel/runtime": "^7.29.2"
1004
+ },
1005
+ "peerDependencies": {
1006
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1007
+ },
1008
+ "peerDependenciesMeta": {
1009
+ "@types/react": {
1010
+ "optional": true
1011
+ }
1012
+ }
1013
+ },
1014
+ "node_modules/@mui/utils": {
1015
+ "version": "9.0.1",
1016
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.0.1.tgz",
1017
+ "integrity": "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==",
1018
+ "license": "MIT",
1019
+ "dependencies": {
1020
+ "@babel/runtime": "^7.29.2",
1021
+ "@mui/types": "^9.0.0",
1022
+ "@types/prop-types": "^15.7.15",
1023
+ "clsx": "^2.1.1",
1024
+ "prop-types": "^15.8.1",
1025
+ "react-is": "^19.2.4"
1026
+ },
1027
+ "engines": {
1028
+ "node": ">=14.0.0"
1029
+ },
1030
+ "funding": {
1031
+ "type": "opencollective",
1032
+ "url": "https://opencollective.com/mui-org"
1033
+ },
1034
+ "peerDependencies": {
1035
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1036
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1037
+ },
1038
+ "peerDependenciesMeta": {
1039
+ "@types/react": {
1040
+ "optional": true
1041
+ }
1042
+ }
1043
+ },
1044
+ "node_modules/@pollen-robotics/reachy-mini-sdk": {
1045
+ "version": "1.8.0-rc1-main.fd4354c",
1046
+ "resolved": "https://registry.npmjs.org/@pollen-robotics/reachy-mini-sdk/-/reachy-mini-sdk-1.8.0-rc1-main.fd4354c.tgz",
1047
+ "integrity": "sha512-I/3cVtLbggPyhYEfp1v/jPZh6PgcVrY0eoaMF5qSXsoKNoX7qJVmcCzmsrZVM7Uf5o9FwQh8uFMORtZ0nWV8Ig==",
1048
+ "license": "Apache-2.0",
1049
+ "dependencies": {
1050
+ "@emotion/react": "^11.14.0",
1051
+ "@emotion/styled": "^11.14.1",
1052
+ "@huggingface/hub": "^0.15.2",
1053
+ "@mui/icons-material": "^7.3.5",
1054
+ "@mui/material": "^7.3.5"
1055
+ },
1056
+ "peerDependencies": {
1057
+ "react": "^18.0.0 || ^19.0.0",
1058
+ "react-dom": "^18.0.0 || ^19.0.0"
1059
+ },
1060
+ "peerDependenciesMeta": {
1061
+ "react": {
1062
+ "optional": true
1063
+ },
1064
+ "react-dom": {
1065
+ "optional": true
1066
+ }
1067
+ }
1068
+ },
1069
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/core-downloads-tracker": {
1070
  "version": "7.3.11",
1071
  "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.11.tgz",
1072
  "integrity": "sha512-a7I/b/nBTdXYz2cOSlEmkQ9WWE1x8FHpqMhFPp+Y1VPFxcOw91G5ELOHARQAGSPy5V+UCgJua6K/1x70bAtQPw==",
 
1076
  "url": "https://opencollective.com/mui-org"
1077
  }
1078
  },
1079
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/icons-material": {
1080
  "version": "7.3.11",
1081
  "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.11.tgz",
1082
  "integrity": "sha512-+hz5ilwHZ3djd5es3sCErLioqe/NhZcYTsV/TNXZAMdJdb23F4xzJjqnnZdnurc3S1+ietcssRNqieOhPQLZ7Q==",
 
1102
  }
1103
  }
1104
  },
1105
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/material": {
1106
  "version": "7.3.11",
1107
  "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.11.tgz",
1108
  "integrity": "sha512-yq8bPc3LxOwKRWpcjRgDkYFmpM6aKlARfESTmOQcvLYFeJwtHte2tw6hJDrb8sk8wcvpDprHEHVaoUU0MslIkw==",
 
1152
  }
1153
  }
1154
  },
1155
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/private-theming": {
1156
  "version": "7.3.11",
1157
  "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.11.tgz",
1158
  "integrity": "sha512-9B+YKms0fRHbNrqp9tOT/DNbNnU5gyvJ1o3qAGXfq8GmZcbJnE3At9x07Zr/o0pkhzg4aDdwXVqe4+AcgtOCPA==",
 
1179
  }
1180
  }
1181
  },
1182
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/styled-engine": {
1183
  "version": "7.3.10",
1184
  "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.10.tgz",
1185
  "integrity": "sha512-WxE9SiF8xskAQqGjsp0poXCkCqsoXFEsSr0HBXfApmGHR+DBnXRp+z46Vsltg4gpPM4Z96DeAQRpeAOnhNg7Ng==",
 
1213
  }
1214
  }
1215
  },
1216
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/system": {
1217
  "version": "7.3.11",
1218
  "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.11.tgz",
1219
  "integrity": "sha512-7izwGWdNawAKpBKcRlx7f2gFnAAjmASBWvMcyX4YYEeLOFsbfGRbUYGInvnAcUeql3rPxI7F9Ft4oY2OLRz44g==",
 
1253
  }
1254
  }
1255
  },
1256
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/types": {
1257
  "version": "7.4.12",
1258
  "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.12.tgz",
1259
  "integrity": "sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w==",
 
1270
  }
1271
  }
1272
  },
1273
+ "node_modules/@pollen-robotics/reachy-mini-sdk/node_modules/@mui/utils": {
1274
  "version": "7.3.11",
1275
  "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.11.tgz",
1276
  "integrity": "sha512-XTjGnifwteg71/ij+0e7Y7d+hwyntMYP5wPoA/g2drdGH+Flkvjwy0OfrVpKBbaOvofq4zU/LIyUZyKgmWu18g==",
 
1300
  }
1301
  }
1302
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1303
  "node_modules/@popperjs/core": {
1304
  "version": "2.11.8",
1305
  "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
 
2749
  "optional": true
2750
  }
2751
  }
2752
+ },
2753
+ "node_modules/yaml": {
2754
+ "version": "2.9.0",
2755
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
2756
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
2757
+ "dev": true,
2758
+ "license": "ISC",
2759
+ "optional": true,
2760
+ "peer": true,
2761
+ "bin": {
2762
+ "yaml": "bin.mjs"
2763
+ },
2764
+ "engines": {
2765
+ "node": ">= 14.6"
2766
+ },
2767
+ "funding": {
2768
+ "url": "https://github.com/sponsors/eemeli"
2769
+ }
2770
  }
2771
  }
2772
  }
package.json CHANGED
@@ -13,8 +13,8 @@
13
  "dependencies": {
14
  "@emotion/react": "^11.14.0",
15
  "@emotion/styled": "^11.14.1",
16
- "@mui/icons-material": "^7.3.5",
17
- "@mui/material": "^7.3.5",
18
  "@pollen-robotics/reachy-mini-sdk": "1.8.0-rc1-main.fd4354c",
19
  "react": "^19.2.5",
20
  "react-dom": "^19.2.5"
 
13
  "dependencies": {
14
  "@emotion/react": "^11.14.0",
15
  "@emotion/styled": "^11.14.1",
16
+ "@mui/icons-material": "^9.0.1",
17
+ "@mui/material": "^9.0.1",
18
  "@pollen-robotics/reachy-mini-sdk": "1.8.0-rc1-main.fd4354c",
19
  "react": "^19.2.5",
20
  "react-dom": "^19.2.5"
src/components/EmotionsView.tsx CHANGED
@@ -369,10 +369,11 @@ export default function EmotionsView({ robot }: EmotionsViewProps) {
369
  would snap because `auto` isn't an animatable value. */}
370
  <Stack
371
  direction="column"
372
- alignItems="center"
373
- justifyContent="center"
374
  spacing={2}
375
  sx={{
 
 
 
376
  minHeight:
377
  scrollH != null
378
  ? drillOpen
@@ -384,7 +385,9 @@ export default function EmotionsView({ robot }: EmotionsViewProps) {
384
  : drillOpen
385
  ? 'auto'
386
  : '100%',
 
387
  px: 2,
 
388
  // When the panel opens, the section collapses to its
389
  // natural height which would otherwise glue the wheel
390
  // to the very top of the column. We add a chunk of
@@ -392,21 +395,22 @@ export default function EmotionsView({ robot }: EmotionsViewProps) {
392
  // up, just not all the way - keeps it visually anchored
393
  // and leaves room for the strip overlay above.
394
  pt: drillOpen ? '80px' : 2,
 
395
  // Just enough room for visual breathing + iOS safe area.
396
  // The "now playing" UI lives at the top of the view now,
397
  // so no bottom toaster to reserve room for.
398
  pb: drillOpen
399
  ? '12px'
400
  : 'calc(24px + env(safe-area-inset-bottom))',
 
401
  transition: transitionsReady
402
  ? // Clean ease-in-out (Material standard) - no overshoot,
403
  // no snap, no spring punch at the end. Same curve in
404
  // both directions so opening and closing the family
405
  // panel feel symmetrical.
406
  'min-height 400ms cubic-bezier(0.4, 0, 0.2, 1), padding-top 400ms cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 400ms cubic-bezier(0.4, 0, 0.2, 1)'
407
- : 'none',
408
- }}
409
- >
410
  <ResponsiveWheel
411
  onSelect={handleSelect}
412
  onSpin={handleSpinSettled}
@@ -441,20 +445,17 @@ export default function EmotionsView({ robot }: EmotionsViewProps) {
441
  return (
442
  <Typography
443
  variant="body2"
444
- color="text.secondary"
445
  align="center"
446
  aria-hidden={hideHint}
447
  sx={{
 
448
  maxWidth: 320,
449
  opacity: hideHint ? 0 : 0.55,
450
  visibility: hideHint ? 'hidden' : 'visible',
451
- transition: 'opacity 200ms ease',
452
- }}
453
- >
454
- Tap a wedge to browse,
455
- <br />
456
- or hit the dice for a random spin.
457
- </Typography>
458
  );
459
  })()}
460
  </Stack>
@@ -491,7 +492,6 @@ export default function EmotionsView({ robot }: EmotionsViewProps) {
491
  </Box>
492
  )}
493
  </Box>
494
-
495
  <NowPlayingStrip
496
  status={status}
497
  currentId={nowPlayingId}
 
369
  would snap because `auto` isn't an animatable value. */}
370
  <Stack
371
  direction="column"
 
 
372
  spacing={2}
373
  sx={{
374
+ alignItems: "center",
375
+ justifyContent: "center",
376
+
377
  minHeight:
378
  scrollH != null
379
  ? drillOpen
 
385
  : drillOpen
386
  ? 'auto'
387
  : '100%',
388
+
389
  px: 2,
390
+
391
  // When the panel opens, the section collapses to its
392
  // natural height which would otherwise glue the wheel
393
  // to the very top of the column. We add a chunk of
 
395
  // up, just not all the way - keeps it visually anchored
396
  // and leaves room for the strip overlay above.
397
  pt: drillOpen ? '80px' : 2,
398
+
399
  // Just enough room for visual breathing + iOS safe area.
400
  // The "now playing" UI lives at the top of the view now,
401
  // so no bottom toaster to reserve room for.
402
  pb: drillOpen
403
  ? '12px'
404
  : 'calc(24px + env(safe-area-inset-bottom))',
405
+
406
  transition: transitionsReady
407
  ? // Clean ease-in-out (Material standard) - no overshoot,
408
  // no snap, no spring punch at the end. Same curve in
409
  // both directions so opening and closing the family
410
  // panel feel symmetrical.
411
  'min-height 400ms cubic-bezier(0.4, 0, 0.2, 1), padding-top 400ms cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 400ms cubic-bezier(0.4, 0, 0.2, 1)'
412
+ : 'none'
413
+ }}>
 
414
  <ResponsiveWheel
415
  onSelect={handleSelect}
416
  onSpin={handleSpinSettled}
 
445
  return (
446
  <Typography
447
  variant="body2"
 
448
  align="center"
449
  aria-hidden={hideHint}
450
  sx={{
451
+ color: "text.secondary",
452
  maxWidth: 320,
453
  opacity: hideHint ? 0 : 0.55,
454
  visibility: hideHint ? 'hidden' : 'visible',
455
+ transition: 'opacity 200ms ease'
456
+ }}>Tap a wedge to browse,
457
+ <br />or hit the dice for a random spin.
458
+ </Typography>
 
 
 
459
  );
460
  })()}
461
  </Stack>
 
492
  </Box>
493
  )}
494
  </Box>
 
495
  <NowPlayingStrip
496
  status={status}
497
  currentId={nowPlayingId}
src/components/emotions/NowPlayingStrip.tsx CHANGED
@@ -203,7 +203,6 @@ export default function NowPlayingStrip({
203
  }}
204
  />
205
  </Box>
206
-
207
  {/* Title block floating in the top-left. Two lines:
208
  * - emotion name (primary, prominent)
209
  * - duration · family (secondary, small caption)
@@ -213,19 +212,20 @@ export default function NowPlayingStrip({
213
  */}
214
  <Stack
215
  direction="row"
216
- alignItems="center"
217
  spacing={1.5}
218
  sx={{
 
219
  position: 'absolute',
220
  top: '12px',
221
  left: '16px',
 
222
  // No more Stop pill on the right: the title can breathe
223
  // all the way to the edge (minus a comfortable gutter so
224
  // long emotion names don't kiss the viewport border).
225
  right: '16px',
226
- pointerEvents: 'none',
227
- }}
228
- >
229
  <Box
230
  aria-hidden
231
  sx={{
@@ -277,10 +277,11 @@ export default function NowPlayingStrip({
277
 
278
  <Stack
279
  direction="row"
280
- alignItems="center"
281
  spacing={0.75}
282
- sx={{ minWidth: 0 }}
283
- >
 
 
284
  <Typography
285
  sx={{
286
  fontSize: 13,
@@ -322,7 +323,6 @@ export default function NowPlayingStrip({
322
  </Stack>
323
  </Stack>
324
  </Stack>
325
-
326
  </Box>
327
  );
328
  }
 
203
  }}
204
  />
205
  </Box>
 
206
  {/* Title block floating in the top-left. Two lines:
207
  * - emotion name (primary, prominent)
208
  * - duration · family (secondary, small caption)
 
212
  */}
213
  <Stack
214
  direction="row"
 
215
  spacing={1.5}
216
  sx={{
217
+ alignItems: "center",
218
  position: 'absolute',
219
  top: '12px',
220
  left: '16px',
221
+
222
  // No more Stop pill on the right: the title can breathe
223
  // all the way to the edge (minus a comfortable gutter so
224
  // long emotion names don't kiss the viewport border).
225
  right: '16px',
226
+
227
+ pointerEvents: 'none'
228
+ }}>
229
  <Box
230
  aria-hidden
231
  sx={{
 
277
 
278
  <Stack
279
  direction="row"
 
280
  spacing={0.75}
281
+ sx={{
282
+ alignItems: "center",
283
+ minWidth: 0
284
+ }}>
285
  <Typography
286
  sx={{
287
  fontSize: 13,
 
323
  </Stack>
324
  </Stack>
325
  </Stack>
 
326
  </Box>
327
  );
328
  }
src/theme.ts CHANGED
@@ -92,16 +92,25 @@ function buildTheme(mode: 'light' | 'dark'): Theme {
92
  // a touch and inherit the text colour so the outline
93
  // matches the label hue (primary CTA reads as primary).
94
  outlined: { borderWidth: 1.5 },
95
- outlinedPrimary: ({ theme }) => ({
96
- borderColor: theme.palette.primary.main,
97
- '&:hover': {
98
- borderWidth: 1.5,
99
- backgroundColor: `rgba(255, 149, 0, ${
100
- theme.palette.mode === 'dark' ? 0.1 : 0.08
101
- })`,
102
- },
103
- }),
104
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  },
106
  MuiPaper: {
107
  styleOverrides: {
 
92
  // a touch and inherit the text colour so the outline
93
  // matches the label hue (primary CTA reads as primary).
94
  outlined: { borderWidth: 1.5 },
 
 
 
 
 
 
 
 
 
95
  },
96
+ // MUI v9 removed variant-color combination slots like
97
+ // `outlinedPrimary` from `styleOverrides`. The migration
98
+ // path is the new `variants` API which matches on prop
99
+ // combinations and works the same way at runtime.
100
+ variants: [
101
+ {
102
+ props: { variant: 'outlined', color: 'primary' },
103
+ style: ({ theme }) => ({
104
+ borderColor: theme.palette.primary.main,
105
+ '&:hover': {
106
+ borderWidth: 1.5,
107
+ backgroundColor: `rgba(255, 149, 0, ${
108
+ theme.palette.mode === 'dark' ? 0.1 : 0.08
109
+ })`,
110
+ },
111
+ }),
112
+ },
113
+ ],
114
  },
115
  MuiPaper: {
116
  styleOverrides: {