#!/usr/bin/env python # coding: utf-8 # In[ ]: import param import panel as pn from panel.reactive import ReactiveHTML class MaterialBase(ReactiveHTML): __javascript__ = ['https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js'] __css__ = ['https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css'] pn.extension() # ## Components # # In[ ]: class MaterialTextField(MaterialBase): value = param.String(default='') _template = """ """ _dom_events = {'text-input': ['change']} _scripts = { 'render': "mdc.textField.MDCTextField.attachTo(text_field);" } class MaterialSlider(MaterialBase): end = param.Number(default=100) start = param.Number(default=0) value = param.Number(default=50) _template = """
""" _scripts = { 'render': """ slider_input.setAttribute('value', data.value) state.slider = mdc.slider.MDCSlider.attachTo(mdc_slider) """, 'value': """ state.slider.setValue(data.value) """ } # ## Examples # In[ ]: slider = MaterialSlider(value=5, start=0, end=100, width=200) text_field = MaterialTextField() pn.Row( pn.Column( slider.controls(['value']), slider ), pn.Column( text_field.controls(['value']), text_field ), )