mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
299 lines
10 KiB
QML
299 lines
10 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Layouts 1.15
|
|
|
|
import "qmllib/Material" as Material
|
|
|
|
ApplicationWindow {
|
|
visible: true
|
|
width: 1400
|
|
height: 900
|
|
title: "MetaBuilder Material Storybook"
|
|
color: Material.MaterialPalette.background
|
|
|
|
property string selectedComponent: "Button"
|
|
property bool outlinedButtons: false
|
|
property bool showSnackbar: true
|
|
|
|
RowLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 24
|
|
spacing: 20
|
|
|
|
// Sidebar navigation
|
|
Rectangle {
|
|
width: 260
|
|
color: Material.MaterialPalette.surface
|
|
radius: 16
|
|
border.color: Material.MaterialPalette.outline
|
|
Layout.fillHeight: true
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 18
|
|
spacing: 16
|
|
|
|
Text {
|
|
text: "Components"
|
|
font.pixelSize: 20
|
|
font.bold: true
|
|
color: Material.MaterialPalette.onSurface
|
|
}
|
|
|
|
ListView {
|
|
id: componentList
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
model: ListModel {
|
|
ListElement { name: "Button"; desc: "Primary/outline actions" }
|
|
ListElement { name: "Card"; desc: "Elevated surfaces" }
|
|
ListElement { name: "Checkbox"; desc: "Binary toggle" }
|
|
ListElement { name: "Accordion"; desc: "Expandable sections" }
|
|
ListElement { name: "Grid"; desc: "Responsive layout" }
|
|
ListElement { name: "Snackbar"; desc: "Transient notices" }
|
|
ListElement { name: "Menu"; desc: "Dropdown actions" }
|
|
ListElement { name: "Avatar"; desc: "Identity badges" }
|
|
ListElement { name: "MOD Player"; desc: "Play tracker tunes" }
|
|
ListElement { name: "Typography"; desc: "Styled text" }
|
|
}
|
|
delegate: Rectangle {
|
|
width: parent.width
|
|
height: 60
|
|
radius: 12
|
|
color: selectedComponent === model.name ? Material.MaterialPalette.primaryContainer : "transparent"
|
|
border.color: Material.MaterialPalette.outline
|
|
border.width: 1
|
|
anchors.margins: 2
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: selectedComponent = model.name
|
|
}
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 10
|
|
spacing: 4
|
|
Text {
|
|
text: model.name
|
|
font.pixelSize: 16
|
|
font.bold: true
|
|
color: Material.MaterialPalette.onSurface
|
|
}
|
|
Text {
|
|
text: model.desc
|
|
font.pixelSize: 12
|
|
color: Material.MaterialPalette.onSurface
|
|
opacity: 0.7
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Material.MaterialDivider { Layout.fillWidth: true }
|
|
|
|
ColumnLayout {
|
|
spacing: 8
|
|
Text { text: "Playground knobs"; font.pixelSize: 14; color: Material.MaterialPalette.onSurface }
|
|
RowLayout {
|
|
spacing: 12
|
|
Material.MaterialSwitch {
|
|
label: "Outlined buttons"
|
|
checked: outlinedButtons
|
|
onCheckedChanged: outlinedButtons = checked
|
|
}
|
|
Material.MaterialSwitch {
|
|
label: "Show snackbar"
|
|
checked: showSnackbar
|
|
onCheckedChanged: showSnackbar = checked
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Preview section
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
spacing: 16
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
spacing: 12
|
|
Text {
|
|
text: selectedComponent + " preview"
|
|
font.pixelSize: 28
|
|
font.bold: true
|
|
color: Material.MaterialPalette.onSurface
|
|
}
|
|
Item { Layout.fillWidth: true }
|
|
Material.MaterialBadge { text: "Live" }
|
|
}
|
|
|
|
Rectangle {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
color: Material.MaterialPalette.surfaceVariant
|
|
radius: 16
|
|
border.color: Material.MaterialPalette.outline
|
|
|
|
Loader {
|
|
id: previewLoader
|
|
anchors.fill: parent
|
|
anchors.margins: 24
|
|
sourceComponent: sampleComponent(selectedComponent)
|
|
}
|
|
}
|
|
|
|
Text {
|
|
text: "Select a component on the left to inspect interactions, props, and styling."
|
|
font.pixelSize: 14
|
|
color: Material.MaterialPalette.onSurface
|
|
opacity: 0.75
|
|
}
|
|
}
|
|
}
|
|
|
|
function sampleComponent(name) {
|
|
switch(name) {
|
|
case "Button": return buttonSample
|
|
case "Card": return cardSample
|
|
case "Checkbox": return checkboxSample
|
|
case "Accordion": return accordionSample
|
|
case "Grid": return gridSample
|
|
case "Snackbar": return snackbarSample
|
|
case "Menu": return menuSample
|
|
case "Avatar": return avatarSample
|
|
case "MOD Player": return modPlayerSample
|
|
case "Typography": return typographySample
|
|
default: return emptySample
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: buttonSample
|
|
RowLayout {
|
|
spacing: 12
|
|
Material.MaterialButton { text: "Primary"; outlined: outlinedButtons }
|
|
Material.MaterialButton { text: "Secondary"; outlined: true }
|
|
Material.MaterialIconButton { iconSource: "qrc:/icons/menu.svg" }
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: cardSample
|
|
Material.MaterialCard {
|
|
width: parent ? parent.width - 96 : 400
|
|
contentItem: ColumnLayout {
|
|
spacing: 12
|
|
Text { text: "Card headline"; font.pixelSize: 20; color: Material.MaterialPalette.onSurface }
|
|
Text { text: "Cards provide a container for grouped content, actions, and media."; wrapMode: Text.Wrap; color: Material.MaterialPalette.onSurface }
|
|
RowLayout { spacing: 10
|
|
Material.MaterialButton { text: "Action" }
|
|
Material.MaterialButton { text: "Dismiss"; outlined: true }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: checkboxSample
|
|
ColumnLayout {
|
|
spacing: 12
|
|
Material.MaterialCheckbox {
|
|
label: "Accept terms"
|
|
checked: true
|
|
}
|
|
Material.MaterialCheckbox { label: "Enable tracking" }
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: accordionSample
|
|
Material.MaterialAccordion {
|
|
headerText: "Expandable details"
|
|
summaryText: "MetaBuilder uses structured seeds to orchestrate the UI."
|
|
expanded: true
|
|
Loader {
|
|
sourceComponent: Component {
|
|
Text {
|
|
text: "Content appears inside the accordion when expanded."
|
|
wrapMode: Text.Wrap
|
|
color: Material.MaterialPalette.onSurface
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: gridSample
|
|
Material.MaterialGrid {
|
|
columns: 3
|
|
Repeater {
|
|
model: 6
|
|
delegate: Material.MaterialCard {
|
|
width: 140
|
|
contentItem: ColumnLayout {
|
|
spacing: 6
|
|
Text { text: "Cell " + (index+1); font.pixelSize: 14; color: Material.MaterialPalette.onSurface }
|
|
Material.MaterialBadge { text: "beta"; accent: true }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: snackbarSample
|
|
Material.MaterialSnackbar {
|
|
message: "Material Storybook ready!"
|
|
actionText: "Undo"
|
|
open: showSnackbar
|
|
onActionTriggered: showSnackbar = false
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: menuSample
|
|
Material.MaterialMenu {
|
|
x: 0
|
|
y: 0
|
|
MenuItem { text: "Command palette" }
|
|
MenuItem { text: "Settings" }
|
|
MenuItem { text: "Sign out" }
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: avatarSample
|
|
RowLayout {
|
|
spacing: 12
|
|
Material.MaterialAvatar { initials: "MB" }
|
|
Material.MaterialAvatar { source: "qrc:/icons/avatar.svg" }
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: typographySample
|
|
ColumnLayout {
|
|
spacing: 8
|
|
Material.MaterialTypography { variant: "h1"; text: "Headline" }
|
|
Material.MaterialTypography { variant: "h3"; text: "Section title" }
|
|
Material.MaterialTypography { variant: "body1"; text: "Body copy demonstrates Material font styling." }
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: modPlayerSample
|
|
ModPlayerPanel {}
|
|
}
|
|
|
|
Component {
|
|
id: emptySample
|
|
Text {
|
|
text: "Select a component from the sidebar."
|
|
color: Material.MaterialPalette.onSurface
|
|
}
|
|
}
|
|
}
|