@@ -381,6 +381,8 @@ const createShowcaseDocument = () => {
381381
382382 const signalControl = documentRef . createElement ( 'button' ) ;
383383 signalControl . setAttribute ( 'data-sm-lab-cascade-signal-control' , '1' ) ;
384+ signalControl . setAttribute ( 'data-sm-lab-cascade-signal-summary' , '1' ) ;
385+ signalControl . setAttribute ( 'data-sm-lab-cascade-signal-step' , '1' ) ;
384386 const signalIcon = documentRef . createElement ( 'span' ) ;
385387 signalIcon . setAttribute ( 'data-sm-lab-cascade-signal-icon' , '1' ) ;
386388 signalControl . appendChild ( signalIcon ) ;
@@ -391,22 +393,24 @@ const createShowcaseDocument = () => {
391393 signalIcon . appendChild ( barNode ) ;
392394 }
393395
396+ const kicker = documentRef . createElement ( 'span' ) ;
397+ kicker . setAttribute ( 'data-sm-lab-cascade-signal-kicker' , '1' ) ;
398+ kicker . textContent = 'LEVEL' ;
399+ signalControl . appendChild ( kicker ) ;
394400 signalControl . appendChild ( createCascadeValue ( documentRef , 'signal' ) ) ;
395401 node . appendChild ( signalControl ) ;
396402
403+ [ '-1' , '1' ] . forEach ( ( step ) => {
404+ const stepControl = documentRef . createElement ( 'button' ) ;
405+ stepControl . setAttribute ( 'data-sm-lab-cascade-signal-control' , '1' ) ;
406+ stepControl . setAttribute ( 'data-sm-lab-cascade-signal-step' , step ) ;
407+ node . appendChild ( stepControl ) ;
408+ } ) ;
409+
397410 [ 'parent' , 'resolved' ] . forEach ( ( key ) => {
398411 node . appendChild ( createCascadeValue ( documentRef , key ) ) ;
399412 } ) ;
400413
401- const captionSignal = documentRef . createElement ( 'small' ) ;
402- captionSignal . setAttribute ( 'data-sm-lab-cascade-caption-signal' , '1' ) ;
403- node . appendChild ( captionSignal ) ;
404-
405- const signalLabelChip = documentRef . createElement ( 'span' ) ;
406- signalLabelChip . setAttribute ( 'data-sm-lab-cascade-chip' , 'signal-label' ) ;
407- signalLabelChip . setAttribute ( 'data-sm-lab-cascade-chip-signal-label' , '1' ) ;
408- node . appendChild ( signalLabelChip ) ;
409-
410414 const savedAttributeChip = documentRef . createElement ( 'span' ) ;
411415 savedAttributeChip . setAttribute ( 'data-sm-lab-cascade-chip' , 'saved-attribute' ) ;
412416 savedAttributeChip . setAttribute ( 'data-sm-lab-cascade-chip-signal-input' , String ( signal ) ) ;
@@ -736,14 +740,19 @@ export const runLabShowcaseRuntimeTests = async ( assert ) => {
736740 'signal cascade should label Low signal nodes'
737741 ) ;
738742 assert . equal (
739- documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-label]' ) ?. textContent ,
740- 'Color Signal: Low' ,
741- 'signal cascade should expose the human Color Signal label separately from the saved value'
743+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-signal-kicker]' ) ?. textContent ,
744+ 'LEVEL' ,
745+ 'signal cascade should use the compact Nova-style level label'
746+ ) ;
747+ assert . equal (
748+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-label]' ) ,
749+ null ,
750+ 'signal cascade should not repeat the human Color Signal as a chip'
742751 ) ;
743752 assert . equal (
744- documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-caption-signal]' ) ?. textContent ,
745- 'Color Signal: Low.' ,
746- 'signal cascade captions should expose the current human Color Signal label '
753+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-caption-signal]' ) ,
754+ null ,
755+ 'signal cascade should not repeat the human Color Signal in the caption '
747756 ) ;
748757 assert . equal (
749758 documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-input-code]' ) ?. textContent ,
@@ -839,7 +848,7 @@ export const runLabShowcaseRuntimeTests = async ( assert ) => {
839848 1 ,
840849 'cascade hover bond should bind pointer listeners once'
841850 ) ;
842- const contentSignalControl = documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-signal-control ]' ) ;
851+ const contentSignalControl = documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-signal-step="1" ]' ) ;
843852 cascade . listeners . get ( 'click' ) ?. [ 0 ] ?. ( {
844853 target : contentSignalControl ,
845854 preventDefault : ( ) => { } ,
@@ -854,16 +863,6 @@ export const runLabShowcaseRuntimeTests = async ( assert ) => {
854863 'Medium' ,
855864 'clicking a cascade signal control should update the visible human signal name'
856865 ) ;
857- assert . equal (
858- documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-label]' ) ?. textContent ,
859- 'Color Signal: Medium' ,
860- 'clicking a cascade signal control should update the human signal chip'
861- ) ;
862- assert . equal (
863- documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-caption-signal]' ) ?. textContent ,
864- 'Color Signal: Medium.' ,
865- 'clicking a cascade signal control should update the human signal caption'
866- ) ;
867866 assert . equal (
868867 documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-input-code]' ) ?. textContent ,
869868 'data-color-signal="2"' ,
@@ -879,6 +878,26 @@ export const runLabShowcaseRuntimeTests = async ( assert ) => {
879878 '1' ,
880879 'clicking a parent cascade signal control should recompute descendants from the new parent grade'
881880 ) ;
881+ const contentSignalDecreaseControl = documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-signal-step="-1"]' ) ;
882+ cascade . listeners . get ( 'click' ) ?. [ 0 ] ?. ( {
883+ target : contentSignalDecreaseControl ,
884+ preventDefault : ( ) => { } ,
885+ } ) ;
886+ assert . equal (
887+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"]' ) ?. getAttribute ( 'data-sm-lab-cascade-signal' ) ,
888+ '1' ,
889+ 'clicking the negative cascade signal control should cycle that node backward'
890+ ) ;
891+ assert . equal (
892+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-value="signal"]' ) ?. textContent ,
893+ 'Low' ,
894+ 'clicking the negative cascade signal control should update the visible human signal name'
895+ ) ;
896+ assert . equal (
897+ documentRef . querySelector ( '[data-sm-lab-cascade-node="content"] [data-sm-lab-cascade-chip-signal-input-code]' ) ?. textContent ,
898+ 'data-color-signal="1"' ,
899+ 'clicking the negative cascade signal control should update the saved attribute chip'
900+ ) ;
882901 assert . equal (
883902 documentRef . querySelector ( '[data-sm-lab-signal-preview]' ) ?. getAttribute ( 'data-palette' ) ,
884903 'contextual-lab' ,
0 commit comments