{"body":"use Selkie::UI;\n\n$*ERR = $*OUT = open \"log.log\", :w;\n\ngrammar Mod {\n    token TOP { <name> <par>* }\n    token name { [<-[<:>]>+]+ % \"::\" }\n    token par { \":\" <name=.name> \"<\" ~ \">\" $<value>=[.+?] }\n\n}\n\nmy $proc = run <zef list>, :out;\n\nmy @lines = $proc.out.lines;\n\nmy @distros = @lines.map: {\n    given Mod.parse: $_ {\n        quietly ~.<name> => %(\n            .<par>.map: {\n                ~.<name> => ~.<value>\n            }\n        )\n    }\n}\n\nmy %list = @distros.classify: *.key, :as{ .value<> }\n\nmy @items = %list.keys.sort.grep: *.so;\n\nApp {\n    my @names    := new-array-state @items;\n    my @selected := new-array-state %list{@items.head};\n    my @auth-sel := new-array-state @selected.grep({ .<auth> eq @selected.head<auth> }).unique;\n    HBox {\n        VBox {\n            Border :title<Filter>, :3size, {\n                TextInput(:1size).on-change: -> $, Str $text {\n                    @names = |@items.grep: *.contains: $text\n                }\n            }\n            Border :title<List>, {\n                ListView(:select-first, { @names }).focus.on-select: -> $, $text {\n                    @selected = %list{ $text }\n                }\n            }\n        }\n        Border :title<Authors>, {\n            ListView(:select-first, { @selected.map(*<auth>).unique }).on-select: -> $, $text {\n                @auth-sel = @selected.grep: { .<auth> eq $text }\n            }\n        }\n        Border :title<Version>, {\n            ListView :select-first, {\n                @auth-sel.map({\n                    \"{ \":ver<{ .Str }>\" with .<ver> }{ \":api<{ .Str }>\" with .<api>}\"\n                }).sort.unique.reverse\n            }\n        }\n    }\n}\n","name":"zelfie.raku","extension":"raku","url":"https://www.irccloud.com/pastebin/Dsx4swqV/zelfie.raku","modified":1778061618,"id":"Dsx4swqV","size":1660,"lines":60,"own_paste":false,"theme":"","date":1778061618}