pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import Quickshell import qs.modules.common as C import qs.modules.common.widgets as W Repeater { id: root readonly property bool vertical: C.Config.options.bar.vertical readonly property string invisibleItem: "_invisible" required property list componentNames property string context: Quickshell.shellPath("modules/hefty/topLayer/bar/widgets") model: { const m = componentNames.map(item => { if (item instanceof Array) return ({"type": "container", "value": item}); else if (item === root.invisibleItem) return ({"type": "invisible", "value": item}); else return ({"type": "component", "value": item}); }); for (var i = 0;i < m.length; i++) { const item = m[i]; if (item.type === "container" || item.type === "component") { item.startSide = (i === 0) || (m[i - 1].type !== m[i].type); item.endSide = (i + 1 >= m.length) || (m[i + 1].type !== m[i].type); } } // print(JSON.stringify(m, null, 2)); return m; } delegate: DelegateChooser { role: "type" DelegateChoice { roleValue: root.invisibleItem delegate: Item { visible: false } } DelegateChoice { roleValue: "component" delegate: W.UserFallbackLoader { required property var modelData required property int index componentName: modelData.value context: root.context property bool startSide: index === 0 property bool endSide: index === root.model.length - 1 Layout.fillWidth: root.vertical ? true : item.Layout.fillWidth Layout.fillHeight: !root.vertical ? true : item.Layout.fillHeight Layout.maximumWidth: item.Layout.maximumWidth Layout.maximumHeight: item.Layout.maximumHeight } } DelegateChoice { roleValue: "container" delegate: HBarGroupContainer { id: group required property var modelData startSide: modelData.startSide endSide: modelData.endSide Repeater { id: containerRepeater model: group.modelData.value delegate: W.UserFallbackLoader { required property var modelData required property int index componentName: modelData context: root.context property bool startSide: index === 0 property bool endSide: index === group.modelData.value.length - 1 } } } } } }