name: List purpose: Render flat, grouped, tree, or virtualized item lists with declarative selection and slots. attributes: mode: [normal, group, tree] fast: "boolean — virtual scrolling" collapsible: "boolean — collapsible tree nodes" auto-select: "boolean — clicked item id -> selectedItem" auto-select-group: "boolean — clicked group id -> selectedGroup" idfield: id labelfield: label summaryfield: summary groupidfield: id grouplabelfield: label groupsummaryfield: summary groupfield: group parentfield: parent state: list: 'Array of item objects. Declarative form: `$.state.list="users"`.' groups: 'Array of group objects when mode=group. Declarative form: `$.state.groups="groups"`.' filter: String or object filter. order: Field name, `-name`, or `name desc`. selectedItem: Selected item id (written by auto-select). selectedGroup: Selected group id (written by auto-select-group). properties: filterFunc: Custom item predicate. orderFunc: Custom sorting comparator. events: change: detail: selectedItem itemclick: detail: "{ item, index }" groupclick: detail: "{ item, index }" slots: item: Replace the complete item row. item-actions: Render at the right side of every item row. group-actions: Render at the right side of every group row. rules: - With fast, a custom item row must retain list-group-item and $onupdate. - Use event.stopPropagation() for action controls that must not select the row. - 'Non-default field mapping is declarative: `idfield="key" labelfield="title" summaryfield="desc"`.' examples: | data_shape: item: "{ id, label, summary }" group: "{ id, label, summary }" tree_item: "{ id, label, summary, parent }" tests: - List.test.html