import logging.config import yaml from fasthtml import serve from myfasthtml.controls.CommandsDebugger import CommandsDebugger from myfasthtml.controls.Dropdown import Dropdown from myfasthtml.controls.FileUpload import FileUpload from myfasthtml.controls.InstancesDebugger import InstancesDebugger from myfasthtml.controls.Keyboard import Keyboard from myfasthtml.controls.Layout import Layout from myfasthtml.controls.TabsManager import TabsManager from myfasthtml.controls.TreeView import TreeView, TreeNode from myfasthtml.controls.helpers import Ids, mk from myfasthtml.core.instances import UniqueInstance from myfasthtml.icons.carbon import volume_object_storage from myfasthtml.icons.fluent_p2 import key_command16_regular from myfasthtml.icons.fluent_p3 import folder_open20_regular from myfasthtml.myfastapp import create_app with open('logging.yaml', 'r') as f: config = yaml.safe_load(f) # At the top of your script or module logging.config.dictConfig(config) app, rt = create_app(protect_routes=True, mount_auth_app=True, pico=False, vis=True, title="MyFastHtml", live=True, base_url="http://localhost:5003") def create_sample_treeview(parent): """ Create a sample TreeView with a file structure for testing. Args: parent: Parent instance for the TreeView Returns: TreeView: Configured TreeView instance with sample data """ tree_view = TreeView(parent, _id="-treeview") # Create sample file structure projects = TreeNode(label="Projects", type="folder") tree_view.add_node(projects) myfasthtml = TreeNode(label="MyFastHtml", type="folder") tree_view.add_node(myfasthtml, parent_id=projects.id) app_py = TreeNode(label="app.py", type="file") tree_view.add_node(app_py, parent_id=myfasthtml.id) readme = TreeNode(label="README.md", type="file") tree_view.add_node(readme, parent_id=myfasthtml.id) src_folder = TreeNode(label="src", type="folder") tree_view.add_node(src_folder, parent_id=myfasthtml.id) controls_py = TreeNode(label="controls.py", type="file") tree_view.add_node(controls_py, parent_id=src_folder.id) documents = TreeNode(label="Documents", type="folder") tree_view.add_node(documents, parent_id=projects.id) notes = TreeNode(label="notes.txt", type="file") tree_view.add_node(notes, parent_id=documents.id) todo = TreeNode(label="todo.md", type="file") tree_view.add_node(todo, parent_id=documents.id) # Expand all nodes to show the full structure #tree_view.expand_all() return tree_view @rt("/") def index(session): session_instance = UniqueInstance(session=session, _id=Ids.UserSession) layout = Layout(session_instance, "Testing Layout") layout.footer_left.add("Goodbye World") tabs_manager = TabsManager(layout, _id=f"-tabs_manager") add_tab = tabs_manager.commands.add_tab btn_show_right_drawer = mk.button("show", command=layout.commands.toggle_drawer("right"), id="btn_show_right_drawer_id") instances_debugger = InstancesDebugger(layout) btn_show_instances_debugger = mk.label("Instances", icon=volume_object_storage, command=add_tab("Instances", instances_debugger), id=instances_debugger.get_id()) commands_debugger = CommandsDebugger(layout) btn_show_commands_debugger = mk.label("Commands", icon=key_command16_regular, command=add_tab("Commands", commands_debugger), id=commands_debugger.get_id()) btn_file_upload = mk.label("Upload", icon=folder_open20_regular, command=add_tab("File Open", FileUpload(layout, _id="-file_upload")), id="file_upload_id") btn_popup = mk.label("Popup", command=add_tab("Popup", Dropdown(layout, "Content", button="button", _id="-dropdown"))) # Create TreeView with sample data tree_view = create_sample_treeview(layout) layout.header_left.add(tabs_manager.add_tab_btn()) layout.header_right.add(btn_show_right_drawer) layout.left_drawer.add(btn_show_instances_debugger, "Debugger") layout.left_drawer.add(btn_show_commands_debugger, "Debugger") layout.left_drawer.add(btn_file_upload, "Test") layout.left_drawer.add(btn_popup, "Test") layout.left_drawer.add(tree_view, "TreeView") layout.set_main(tabs_manager) keyboard = Keyboard(layout, _id="-keyboard").add("ctrl+o", add_tab("File Open", FileUpload(layout, _id="-file_upload"))) keyboard.add("ctrl+n", add_tab("File Open", FileUpload(layout, _id="-file_upload"))) return layout, keyboard if __name__ == "__main__": # debug_routes(app) serve(port=5003)