@@ -90,8 +90,15 @@ export class ConfigClass {
9090 element . default === "disabled"
9191 ) ;
9292 } else if ( type === "slider" || type === "number" || type === "value" ) {
93+ const widgetValue = clone . querySelector ( ".widget-value-text" ) as HTMLElement | null ;
9394 if ( element . value . default !== undefined ) {
9495 inputElement ! . valueAsNumber = element . value . default ;
96+
97+ const suffix = getElementSuffix ( element ) ;
98+ if ( widgetValue ) {
99+ widgetValue . innerText = element . value . default . toString ( ) + suffix ;
100+ widgetValue . dataset . suffix = suffix ;
101+ }
95102 }
96103 if ( element . value . range ) {
97104 inputElement ! . min = element . value . range [ 0 ] . toString ( ) ;
@@ -101,15 +108,7 @@ export class ConfigClass {
101108 inputElement ! . step = element . value . step . toString ( ) ;
102109 }
103110
104- let suffix = "" ;
105-
106- if ( "suffix" in element . value && element . value . suffix ) {
107- suffix = element . value . suffix ;
108- } else if ( element . value . type === "percent" ) {
109- suffix = " (%)" ;
110- }
111-
112- if ( suffix && widgetText ) widgetText . innerText += suffix ;
111+ inputElement ! . addEventListener ( "input" , updateDisplayedValue ) ;
113112 } else if ( type === "image" ) {
114113 const imageFile = await zip . file ( element . file ) ?. async ( "blob" ) ;
115114 if ( imageFile ) {
@@ -129,3 +128,32 @@ export class ConfigClass {
129128 return htmlWidgets . filter ( ( element ) => element !== undefined ) ;
130129 }
131130}
131+
132+ function getElementSuffix ( element : NumberWidget | SliderWidget ) {
133+ let suffix = "" ;
134+
135+ if ( "suffix" in element . value && element . value . suffix ) {
136+ suffix = element . value . suffix ;
137+ } else if ( element . value . type === "percent" ) {
138+ suffix = "%" ;
139+ }
140+ return suffix ;
141+ }
142+
143+ function updateDisplayedValue ( event : Event ) {
144+ const target = event . target as HTMLInputElement ;
145+ const valueElement = target . parentElement ?. querySelector (
146+ ".widget-value-text"
147+ ) as HTMLElement | null ;
148+
149+ let valueToDisplay : string | number = target . valueAsNumber ;
150+
151+ if ( Number . parseFloat ( target . min ) < 0 && valueToDisplay > 0 ) {
152+ valueToDisplay = `+${ valueToDisplay } ` ;
153+ }
154+
155+ if ( valueElement ) {
156+ const suffix = valueElement . dataset . suffix ?? "" ;
157+ valueElement . innerText = valueToDisplay . toString ( ) + suffix ;
158+ }
159+ }
0 commit comments