@@ -6,7 +6,6 @@ import Link from 'next/link';
66import { AnimatePresence , motion , useReducedMotion } from 'motion/react' ;
77
88import { LinkCard } from '../../components/ui/Card' ;
9- import { cn } from '../../components/ui/cn' ;
109import { FilterSelect } from '../../components/ui/FilterSelect' ;
1110import { CloseIcon , VibenetIcon } from '../../components/ui/icons' ;
1211import { Text } from '../../components/ui/Text' ;
@@ -266,106 +265,42 @@ export function ChangelogClient() {
266265 </ button >
267266 </ div >
268267 < div className = "space-y-5" >
269- < div >
270- < Text variant = "label.medium" tone = "muted" className = "mb-2.5 text-[13px]" >
271- Upgrade
272- </ Text >
273- < div className = "flex flex-wrap gap-2" >
274- { [
275- { value : 'all' , label : 'All' } ,
276- ...getUpgradesReversed ( ) . map ( ( u ) => ( { value : u . id , label : u . name } ) ) ,
277- ] . map ( ( o ) => (
278- < button
279- key = { o . value }
280- type = "button"
281- onClick = { ( ) => setUpgradeFilter ( o . value ) }
282- className = { cn (
283- 'rounded-full px-3 py-1.5 text-[13px] transition-colors' ,
284- upgradeFilter === o . value
285- ? 'bg-black text-white'
286- : 'bg-bds-gray-5 text-bds-gray-60' ,
287- ) }
288- >
289- { o . label }
290- </ button >
291- ) ) }
292- </ div >
293- </ div >
294- < div >
295- < Text variant = "label.medium" tone = "muted" className = "mb-2.5 text-[13px]" >
296- Type
297- </ Text >
298- < div className = "flex flex-wrap gap-2" >
299- { [
300- { value : 'all' , label : 'All' } ,
301- ...allKinds . map ( ( k ) => ( { value : k , label : kindLabel ( k ) } ) ) ,
302- ] . map ( ( o ) => (
303- < button
304- key = { o . value }
305- type = "button"
306- onClick = { ( ) => handleKindChange ( o . value ) }
307- className = { cn (
308- 'rounded-full px-3 py-1.5 text-[13px] transition-colors' ,
309- kindFilter === o . value
310- ? 'bg-black text-white'
311- : 'bg-bds-gray-5 text-bds-gray-60' ,
312- ) }
313- >
314- { o . label }
315- </ button >
316- ) ) }
317- </ div >
318- </ div >
319- < div >
320- < Text variant = "label.medium" tone = "muted" className = "mb-2.5 text-[13px]" >
321- Category
322- </ Text >
323- < div className = "flex flex-wrap gap-2" >
324- { [
325- { value : 'all' , label : 'All' } ,
326- ...CATEGORY_ORDER . map ( ( c ) => ( { value : c , label : CATEGORY_METADATA [ c ] . label } ) ) ,
327- ] . map ( ( o ) => (
328- < button
329- key = { o . value }
330- type = "button"
331- onClick = { ( ) => handleCategoryChange ( o . value ) }
332- className = { cn (
333- 'rounded-full px-3 py-1.5 text-[13px] transition-colors' ,
334- categoryFilter === o . value
335- ? 'bg-black text-white'
336- : 'bg-bds-gray-5 text-bds-gray-60' ,
337- ) }
338- >
339- { o . label }
340- </ button >
341- ) ) }
342- </ div >
343- </ div >
344- < div >
345- < Text variant = "label.medium" tone = "muted" className = "mb-2.5 text-[13px]" >
346- Lifecycle
347- </ Text >
348- < div className = "flex flex-wrap gap-2" >
349- { [
350- { value : 'all' , label : 'All' } ,
351- ...allLifecycle . map ( ( s ) => ( { value : s , label : LIFECYCLE_LABELS [ s ] } ) ) ,
352- ] . map ( ( o ) => (
353- < button
354- key = { o . value }
355- type = "button"
356- onClick = { ( ) => handleLifecycleChange ( o . value ) }
357- className = { cn (
358- 'rounded-full px-3 py-1.5 text-[13px] transition-colors' ,
359- lifecycleFilter === o . value
360- ? 'bg-black text-white'
361- : 'bg-bds-gray-5 text-bds-gray-60' ,
362- ) }
363- >
364- { o . label }
365- </ button >
366- ) ) }
367- </ div >
368- </ div >
268+ < FilterGroup
269+ label = "Upgrade"
270+ options = { [
271+ { value : 'all' , label : 'All' } ,
272+ ...getUpgradesReversed ( ) . map ( ( u ) => ( { value : u . id , label : u . name } ) ) ,
273+ ] }
274+ value = { upgradeFilter }
275+ onChange = { setUpgradeFilter }
276+ />
277+ < FilterGroup
278+ label = "Type"
279+ options = { [
280+ { value : 'all' , label : 'All' } ,
281+ ...allKinds . map ( ( k ) => ( { value : k , label : kindLabel ( k ) } ) ) ,
282+ ] }
283+ value = { kindFilter }
284+ onChange = { handleKindChange }
285+ />
286+ < FilterGroup
287+ label = "Category"
288+ options = { [
289+ { value : 'all' , label : 'All' } ,
290+ ...CATEGORY_ORDER . map ( ( c ) => ( { value : c , label : CATEGORY_METADATA [ c ] . label } ) ) ,
291+ ] }
292+ value = { categoryFilter }
293+ onChange = { handleCategoryChange }
294+ />
295+ < FilterGroup
296+ label = "Lifecycle"
297+ options = { [
298+ { value : 'all' , label : 'All' } ,
299+ ...allLifecycle . map ( ( s ) => ( { value : s , label : LIFECYCLE_LABELS [ s ] } ) ) ,
300+ ] }
301+ value = { lifecycleFilter }
302+ onChange = { handleLifecycleChange }
303+ />
369304 </ div >
370305 { activeFilterCount > 0 ? (
371306 < div className = "mt-6 border-t border-bds-gray-10 pt-4" >
@@ -445,9 +380,7 @@ export function ChangelogClient() {
445380 < UpgradeIllustration upgradeId = { change . upgrade } />
446381 </ div >
447382 ) : getVibenetChangeById ( change . id ) ? (
448- < svg width = "18" height = "18" viewBox = "5 5 30 30" fill = "none" stroke = "currentColor" strokeWidth = "2.5" strokeLinecap = "round" strokeLinejoin = "round" className = "shrink-0 text-bds-gray-40" aria-hidden = "true" >
449- < path d = "M30.2895 14.8575L20.0038 20.0002M20.0038 20.0002L10.2895 14.2861M20.0038 20.0002L20.0038 30.8571M30.8608 22.8275V17.1724C30.8608 15.3861 29.9078 13.7354 28.3608 12.8423L22.4737 9.44331C20.9267 8.55015 19.0207 8.55015 17.4737 9.44331L11.5865 12.8423C10.0395 13.7354 9.08649 15.3861 9.08649 17.1724V22.8275C9.08649 24.6138 10.0395 26.2644 11.5865 27.1576L17.4737 30.5566C19.0207 31.4497 20.9267 31.4497 22.4737 30.5566L28.3608 27.1576C29.9078 26.2644 30.8608 24.6138 30.8608 22.8275Z" />
450- </ svg >
383+ < VibenetIcon size = { 18 } className = "shrink-0 text-bds-gray-40" />
451384 ) : null }
452385 < Text variant = "label.regular" tone = "muted" >
453386 { scheduleLabel ( change ) }
0 commit comments