Inventory systems are deceptively more complicated than you may initially imagine. It does require a pretty SOLID understanding of C#. And not just Unity specific C#, but just regular C# knowledge.
You can definitely write an inventory system that doesn’t use any Unity API’s at all, and still be able to use it in Unity, for reference. But it is easier of course to just code it in Unity, specifically for Unity.
And they do take a lot of code. In my current project, the items and inventory system is definitely the largest in terms of code-base size.
I mean some of your requirements are trivial, some aren’t. An inventory system is only as difficult as your requirements. And we know that in game dev, some things that seem simple turn out not to be.
What you do need to do is sort out the layers of responsibility, and the systems (API’s) you need to put in place to make it happen, and where each thing happens.
It does start with the items, though, and the data and objects (as in the O in object oriented programming) they express. Above that you have the actual inventory management system (purely in code), and above that is the actual user interface itself. But in the end it’s still just data (and objects), and presenting the means to interface with it.
An item’s size and whether they’re stackable: just points of data on the items themselves. Yet it’s the inventory management system that acts on this data.
Transferring items/swapping items: this at the end of the day is just compounding the actions of removing and adding items to containers.
Context menus and tooltips are again, simply data and objects that top-level user interface systems use.
Stats are (generally) immutable data on items. Durability is however a mutable data point. Once you have mutable data, you need a way to handle that in your items. Usually I use scriptable objects for immutable items, and pure C# items that allow for mutable data, with a common interface expressed by both so they can intermingle in together within the same inventory management system.
As you can see it goes on and on and adds up with every requirement. Ideally you try and implement systems that can kill multiple birds in one stone.
I mean if Path of Exile is your reference, they have a team of 100+ people. While probably only a few a handling inventory stuff, they are probably experts at this compared to us solo indies putzing about in our free time.
I don’t know any resources for learning this. I’ve learnt the most by just getting into it and starting to code. Then being critical of my results, thinking of solutions, and refactoring as needed. It does require a degree of creativity, too.