You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

144 lines
5.5 KiB

"""
Generic Component Test
Demonstrates the new bg.component() method for creating any Quasar component.
"""
import badgui as bg
with bg.page("/", "GenericComponentTest", "Generic Component Test"):
with bg.column() as main_col:
main_col.classes("q-pa-lg q-gutter-md")
bg.label("Generic Quasar Component Test").classes("text-h3 q-mb-lg")
with bg.card():
bg.label("Form Components").classes("text-h5 q-mb-md")
# Rating component
bg.label("Rating:").classes("q-mb-sm")
rating = bg.component('q-rating', max=5, size='2em', color='amber')
rating.bind_value('userRating')
rating.classes("q-mb-md")
# Select component
bg.label("Select an option:").classes("q-mb-sm")
select = bg.component('q-select',
filled=True,
options=['Option 1', 'Option 2', 'Option 3'],
label='Choose one')
select.bind_value('selectedOption')
select.classes("q-mb-md")
# Slider component
bg.label("Volume:").classes("q-mb-sm")
slider = bg.component('q-slider',
min=0,
max=100,
step=10,
markers=True,
color='primary')
slider.bind_value('volumeLevel')
slider.classes("q-mb-md")
# Toggle component
toggle = bg.component('q-toggle',
label='Enable notifications',
color='green')
toggle.bind_value('notificationsEnabled')
toggle.classes("q-mb-md")
with bg.card():
bg.label("Display Components").classes("text-h5 q-mb-md")
# Progress bar
bg.label("Progress:").classes("q-mb-sm")
progress = bg.component('q-linear-progress',
size='20px',
color='secondary',
value=0.6)
progress.classes("q-mb-md")
# Badge
btn = bg.component('q-btn', label='Messages', container=False)
btn.classes("q-mb-md")
# Note: q-badge with floating=True should be added as a separate component
# since it positions itself relative to the previous component
bg.component('q-badge', color='red', floating=True, label='5')
with bg.card():
bg.label("Container Components").classes("text-h5 q-mb-md")
# Expansion item (container component)
with bg.component('q-expansion-item',
label='Advanced Settings',
icon='settings',
container=True) as expansion:
bg.label("These are advanced settings").classes("q-pa-md")
# Nested components
bg.component('q-separator').classes("q-my-md")
with bg.row():
bg.component('q-checkbox', label='Option A', val='a').bind_value('optionA')
bg.component('q-checkbox', label='Option B', val='b').bind_value('optionB')
# Results display
with bg.card():
bg.label("Current Values").classes("text-h5 q-mb-md")
result_display = bg.label("Values will appear here")
result_display.bind_text('displayResults')
result_display.classes("text-body1")
bg.button("Update Display").on_click('updateDisplay').classes("q-btn-primary q-mt-md")
# JavaScript to handle the generic components
bg.script("""
// Reactive data for all the generic components
const userRating = ref(3);
const selectedOption = ref(null);
const volumeLevel = ref(50);
const notificationsEnabled = ref(false);
const optionA = ref(false);
const optionB = ref(false);
const displayResults = ref('Values will appear here');
// Update display function
const updateDisplay = () => {
const results = [
`Rating: ${userRating.value}/5 stars`,
`Selected: ${selectedOption.value || 'None'}`,
`Volume: ${volumeLevel.value}%`,
`Notifications: ${notificationsEnabled.value ? 'On' : 'Off'}`,
`Options: A=${optionA.value}, B=${optionB.value}`
];
displayResults.value = results.join('');
};
// Watch for changes and auto-update
watch([userRating, selectedOption, volumeLevel, notificationsEnabled, optionA, optionB],
updateDisplay, { immediate: true });
onMounted(() => {
console.log('Generic component test loaded!');
console.log('Available Quasar components can be created with bg.component()');
updateDisplay();
});
""")
if __name__ == "__main__":
print("🧪 Generic Component Test")
print("Testing bg.component() method for creating any Quasar component")
print()
print("Examples of components created:")
print("- q-rating (rating selector)")
print("- q-select (dropdown)")
print("- q-slider (range input)")
print("- q-toggle (switch)")
print("- q-linear-progress (progress bar)")
print("- q-badge (notification badge)")
print("- q-expansion-item (collapsible container)")
print("- q-separator (divider)")
print("- q-checkbox (checkbox)")
# Run dev server
bg.dev(port=3028)