@@ -26,6 +26,7 @@ interface FilterState {
2626 hasCode : boolean
2727 sentFilter : 'all' | 'sent' | 'unsent'
2828 searchQuery : string
29+ showArchived : boolean
2930}
3031
3132// CVA configuration for stat badges
@@ -340,6 +341,7 @@ export const ClaudePrototype = () => {
340341 hasLink : false ,
341342 searchQuery : '' ,
342343 sentFilter : 'all' ,
344+ showArchived : false ,
343345 } )
344346
345347 const updateFilter = < K extends keyof FilterState > ( key : K , value : FilterState [ K ] ) => {
@@ -358,6 +360,9 @@ export const ClaudePrototype = () => {
358360 if ( filters . hasLink ) {
359361 filtered = filtered . filter ( ( d ) => d . latestDraft . stats . links . length > 0 )
360362 }
363+ if ( ! filters . showArchived ) {
364+ filtered = filtered . filter ( ( d ) => ! d . isArchived )
365+ }
361366 if ( filters . sentFilter !== 'all' ) {
362367 filtered = filtered . filter ( ( d ) => ( filters . sentFilter === 'sent' ? d . isSent : ! d . isSent ) )
363368 }
@@ -468,6 +473,7 @@ export const ClaudePrototype = () => {
468473 hasLink : false ,
469474 searchQuery : '' ,
470475 sentFilter : 'all' ,
476+ showArchived : true
471477 } )
472478 } }
473479 className = 'text-blue-600 hover:underline'
@@ -561,52 +567,25 @@ export const ClaudePrototype = () => {
561567 )
562568}
563569function filterControls (
564- filters : FilterState ,
570+ _filters : FilterState ,
565571 updateFilter : < K extends keyof FilterState > ( key : K , value : FilterState [ K ] ) => void ,
566572) {
567573 return (
568574 < div className = 'absolute top-full right-0 mt-1 p-3 bg-white border border-gray-300 rounded-md shadow-lg z-10 min-w-48' >
569575 < div className = 'space-y-3' >
570- < div className = 'space-y-2' >
571- < label className = 'flex items-center gap-2 cursor-pointer' >
572- < input
573- type = 'checkbox'
574- checked = { filters . hasLink }
575- onChange = { ( e ) => updateFilter ( 'hasLink' , e . target . checked ) }
576- className = 'rounded'
577- />
578- < Badge type = 'link' />
579- </ label >
580- < label className = 'flex items-center gap-2 cursor-pointer' >
581- < input
582- type = 'checkbox'
583- checked = { filters . hasImage }
584- onChange = { ( e ) => updateFilter ( 'hasImage' , e . target . checked ) }
585- className = 'rounded'
586- />
587- < Badge type = 'image' />
588- </ label >
589- < label className = 'flex items-center gap-2 cursor-pointer' >
590- < input
591- type = 'checkbox'
592- checked = { filters . hasCode }
593- onChange = { ( e ) => updateFilter ( 'hasCode' , e . target . checked ) }
594- className = 'rounded'
595- />
596- < Badge type = 'code' />
597- </ label >
598- </ div >
599- < div className = 'relative flex rounded-md overflow-hidden' >
600- { /* Sliding indicator */ }
601- < div
602- className = 'absolute top-0 h-0.5 bg-current transition-all duration-200'
603- style = { {
604- width : '33.33%' ,
605- left : filters . sentFilter === 'unsent' ? '0%' :
606- filters . sentFilter === 'all' ? '33.33%' : '66.66%'
607- } }
576+ < div className = 'relative flex overflow-hidden' >
577+ < Badge
578+ type = 'archived'
579+ text = 'include'
580+ onClick = { ( ) => updateFilter ( 'showArchived' , true ) }
608581 />
609-
582+ < Badge
583+ type = 'blank'
584+ text = 'hide archived'
585+ onClick = { ( ) => updateFilter ( 'showArchived' , false ) }
586+ />
587+ </ div >
588+ < div className = 'relative flex overflow-hidden' >
610589 < Badge
611590 type = 'unsent'
612591 onClick = { ( ) => updateFilter ( 'sentFilter' , 'unsent' ) }
@@ -621,6 +600,42 @@ function filterControls(
621600 onClick = { ( ) => updateFilter ( 'sentFilter' , 'sent' ) }
622601 />
623602 </ div >
603+ < div className = 'relative flex overflow-hidden' >
604+ < Badge
605+ type = 'link'
606+ text = 'required'
607+ onClick = { ( ) => updateFilter ( 'hasLink' , true ) }
608+ />
609+ < Badge
610+ type = 'blank'
611+ text = 'optional'
612+ onClick = { ( ) => updateFilter ( 'hasLink' , false ) }
613+ />
614+ </ div >
615+ < div className = 'relative flex overflow-hidden' >
616+ < Badge
617+ type = 'image'
618+ text = 'required'
619+ onClick = { ( ) => updateFilter ( 'hasImage' , true ) }
620+ />
621+ < Badge
622+ type = 'blank'
623+ text = 'optional'
624+ onClick = { ( ) => updateFilter ( 'hasImage' , false ) }
625+ />
626+ </ div >
627+ < div className = 'relative flex overflow-hidden' >
628+ < Badge
629+ type = 'code'
630+ text = 'required'
631+ onClick = { ( ) => updateFilter ( 'hasCode' , true ) }
632+ />
633+ < Badge
634+ type = 'blank'
635+ text = 'optional'
636+ onClick = { ( ) => updateFilter ( 'hasCode' , false ) }
637+ />
638+ </ div >
624639 </ div >
625640 </ div >
626641 )
0 commit comments