@@ -256,7 +256,7 @@ export interface UseTokenModeResult {
256256
257257/** Tracks the state of a trigger element — its DOM node, dismissal, and cancellation status. */
258258export interface TriggerState {
259- element : HTMLElement ;
259+ element : HTMLElement | null ;
260260 dismissed : boolean ;
261261 dismissedValue : string | null ;
262262 cancelled : boolean ;
@@ -321,7 +321,7 @@ function useTokenProcessor(config: ProcessorConfig) {
321321 } else {
322322 // Pre-populate — element will be filled in when renderTokens runs
323323 state . triggerStates . current . set ( id , {
324- element : null as unknown as HTMLElement ,
324+ element : null ,
325325 dismissed : false ,
326326 dismissedValue : null ,
327327 cancelled : true ,
@@ -625,7 +625,9 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
625625 const triggerElements = new Map < string , HTMLElement > ( ) ;
626626 const cancelledIds = new Set < string > ( ) ;
627627 shortcutsState . triggerStates . current . forEach ( ( state , id ) => {
628- triggerElements . set ( id , state . element ) ;
628+ if ( state . element ) {
629+ triggerElements . set ( id , state . element ) ;
630+ }
629631 if ( state . cancelled ) {
630632 cancelledIds . add ( id ) ;
631633 }
@@ -698,6 +700,9 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
698700 continue ;
699701 }
700702 const trigger = triggerState . element ;
703+ if ( ! trigger ) {
704+ continue ;
705+ }
701706 const filterText = ( trigger . textContent || '' ) . substring ( 1 ) ;
702707 if ( ! filterText ) {
703708 continue ;
@@ -752,7 +757,7 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
752757
753758 const newTriggers = extractedTokens . filter ( isTriggerToken ) ;
754759
755- const existingTriggerElements : HTMLElement [ ] = [ ] ;
760+ const existingTriggerElements : ( HTMLElement | null ) [ ] = [ ] ;
756761 const existingTriggerIds = new Set < string > ( ) ;
757762 shortcutsState . triggerStates . current . forEach ( ( state , id ) => {
758763 existingTriggerElements . push ( state . element ) ;
@@ -762,7 +767,7 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
762767 const isNewTrigger = newTriggers . some ( t => t . id && ! existingTriggerIds . has ( t . id ) ) ;
763768
764769 const hasStylingChange = newTriggers . some ( newT => {
765- const domElement = existingTriggerElements . find ( el => el . id === newT . id ) ;
770+ const domElement = existingTriggerElements . find ( el => el ? .id === newT . id ) ;
766771 if ( ! domElement ) {
767772 return false ;
768773 }
@@ -785,7 +790,7 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
785790 } else if ( hasStylingChange ) {
786791 // Track which trigger had its styling changed for cursor restoration
787792 const changedTriggerId = newTriggers . find ( newT => {
788- const domElement = existingTriggerElements . find ( el => el . id === newT . id ) ;
793+ const domElement = existingTriggerElements . find ( el => el ? .id === newT . id ) ;
789794 if ( ! domElement ) {
790795 return false ;
791796 }
@@ -795,7 +800,7 @@ export function useTokenMode(config: UseTokenModeConfig): UseTokenModeResult {
795800 } ) ?. id ;
796801
797802 newTriggers . forEach ( newT => {
798- const domElement = existingTriggerElements . find ( el => el . id === newT . id ) ;
803+ const domElement = existingTriggerElements . find ( el => el ? .id === newT . id ) ;
799804 if ( domElement ) {
800805 const shouldHaveClass = newT . value . length > 0 ;
801806 domElement . className = `${ styles [ 'trigger-base' ] } ${ shouldHaveClass ? styles [ 'trigger-token' ] : '' } ` ;
0 commit comments