from nicegui import ui from ..documentation_tools import text_demo def main_demo() -> None: ui.tree([ {'id': 'numbers', 'children': [{'id': '1'}, {'id': '2'}]}, {'id': 'letters', 'children': [{'id': 'A'}, {'id': 'B'}]}, ], label_key='id', on_select=lambda e: ui.notify(e.value)) def more() -> None: @text_demo('Tree with custom header and body', ''' Scoped slots can be used to insert custom content into the header and body of a tree node. See the [Quasar documentation](https://quasar.dev/vue-components/tree#customize-content) for more information. ''') def tree_with_custom_header_and_body(): tree = ui.tree([ {'id': 'numbers', 'description': 'Just some numbers', 'children': [ {'id': '1', 'description': 'The first number'}, {'id': '2', 'description': 'The second number'}, ]}, {'id': 'letters', 'description': 'Some latin letters', 'children': [ {'id': 'A', 'description': 'The first letter'}, {'id': 'B', 'description': 'The second letter'}, ]}, ], label_key='id', on_select=lambda e: ui.notify(e.value)) tree.add_slot('default-header', ''' Node {{ props.node.id }} ''') tree.add_slot('default-body', ''' Description: "{{ props.node.description }}" ''') @text_demo('Expand programmatically', ''' The tree can be expanded programmatically by modifying the "expanded" prop. ''') def expand_programmatically(): from typing import List def expand(node_ids: List[str]) -> None: t._props['expanded'] = node_ids t.update() with ui.row(): ui.button('all', on_click=lambda: expand(['A', 'B'])) ui.button('A', on_click=lambda: expand(['A'])) ui.button('B', on_click=lambda: expand(['B'])) ui.button('none', on_click=lambda: expand([])) t = ui.tree([ {'id': 'A', 'children': [{'id': 'A1'}, {'id': 'A2'}]}, {'id': 'B', 'children': [{'id': 'B1'}, {'id': 'B2'}]}, ], label_key='id') @text_demo('Tree with checkboxes', ''' The tree can be used with checkboxes by setting the "tick-strategy" prop. ''') def tree_with_checkboxes(): ui.tree([ {'id': 'A', 'children': [{'id': 'A1'}, {'id': 'A2'}]}, {'id': 'B', 'children': [{'id': 'B1'}, {'id': 'B2'}]}, ], label_key='id', tick_strategy='leaf', on_tick=lambda e: ui.notify(e.value))