--- sidebar_label: 'Items' sidebar_position: 5 --- # Items An item is either a **Product** or a **Container**. - A **Product** is a sellable item in a menu — for example, a snack bar, a burger, or a coffee. It appears at the root of the menu or as a selectable option inside a Container. - A **Container** is a configurable slot inside a Product. It holds a list of Products that the customer can select or deselect. ## Alternation rule Products and Containers alternate strictly in the hierarchy: - A Product's `configItems` collection can only contain Containers. - A Container's `configItems` collection can only contain Products. This guarantees a clean, predictable nesting structure. ## Container selection options A Container's behaviour is controlled by several properties: | Property | Description | |----------|-------------| | `min` | Minimum number of products the customer must select (0 = optional) | | `max` | Maximum number of products the customer can select (unbounded = no limit) | | `isNegated` | When `true`, selected products represent _removals_ (e.g. a "Remove" container) | | `isSelectedByDefault` | On a product inside a container: whether it is pre-selected for the customer | ### Example: hamburger with Add, Remove, and Select Bread ``` Hamburger — id: 1, type: product, price: 47 Add — id: 2, type: container, min: 0, max: unbounded Bacon — id: 3, type: product, price: 5, isSelectedByDefault: false Tomato — id: 4, type: product, price: 3, isSelectedByDefault: false Cheese — id: 5, type: product, price: 3, isSelectedByDefault: false Remove — id: 6, type: container, min: 0, max: unbounded, isNegated: true Tomato — id: 4, type: product, price: 0, isSelectedByDefault: false Cheese — id: 5, type: product, price: 0, isSelectedByDefault: false Select Bread — id: 7, type: container, min: 1, max: 1 Normal Bread — id: 8, type: product, price: 0, isSelectedByDefault: true Gluten Free Bread — id: 9, type: product, price: 0, isSelectedByDefault: false Luxury Bread — id: 10, type: product, price: 5, isSelectedByDefault: false ``` If a customer adds Bacon, removes Cheese, and changes to Luxury Bread, the total is: ``` 47 (burger) + 5 (bacon) + 0 (remove cheese) + 5 (luxury bread) = 57 ``` ## Item visibility For an item to be visible to a customer it must either be presented by one of the categories or subcategories in the Menu Instance, or be surfaced by an upselling rule.