@@ -45,11 +45,51 @@ const moreFeatures = computed(() => sortedFeatures.value.slice(2))
4545
4646<template >
4747 <li class =" rule-item" >
48- <div class =" rule-header " >
48+ <div class =" rule-main " >
4949 <a :href =" meta.link" class =" rule-name" target =" _blank" >
5050 {{ meta.name }}
5151 <img class =" logo" :src =" '/langs/' + meta.language.toLowerCase() + '.svg'" />
5252 </a >
53+ <div class =" rule-details" >
54+ <div class =" rule-badges" >
55+ <template v-if =" meta .type === ' Pattern' " >
56+ <Badge type =" info" text =" Simple Pattern Example" />
57+ </template >
58+ <template v-else >
59+ <span title =" Used Rules" >📏</span >
60+ <span class =" emoji-offset" />
61+ <Option
62+ v-for =" rule in displayedRules"
63+ :key =" rule"
64+ :text =" rule"
65+ :highlight =" filter.selectedRules.includes(rule)"
66+ />
67+ <Option
68+ v-if =" moreRules.length"
69+ :text =" `+${moreRules.length}`"
70+ :data-title =" moreRules.join(', ')"
71+ :highlight =" intersect(moreRules, filter.selectedRules)"
72+ />
73+ </template >
74+ </div >
75+ <div class =" rule-badges" v-if =" displayFeatures.length > 0" >
76+ <span title =" Used Features" >💡</span >
77+ <Option
78+ v-for =" feature in displayFeatures"
79+ :key =" feature"
80+ :text =" feature"
81+ :highlight =" filter.selectedFeatures.includes(feature)"
82+ />
83+ <Option
84+ v-if =" moreFeatures.length"
85+ :text =" `+${moreFeatures.length}`"
86+ :data-title =" moreFeatures.join(', ')"
87+ :highlight =" intersect(moreFeatures, filter.selectedFeatures)"
88+ />
89+ </div >
90+ </div >
91+ </div >
92+ <div class =" rule-aux" >
5393 <div class =" rule-badges" >
5494 <span > <!-- dummy wrapper for better align items -->
5595 <Badge v-if =" meta.hasFix" type =" tip" >
@@ -62,44 +102,6 @@ const moreFeatures = computed(() => sortedFeatures.value.slice(2))
62102 </Badge >
63103 </a >
64104 </div >
65- </div >
66- <div class =" rule-details" >
67- <div class =" rule-badges" >
68- <template v-if =" meta .type === ' Pattern' " >
69- <Badge type =" info" text =" Simple Pattern Example" />
70- </template >
71- <template v-else >
72- <span title =" Used Rules" >📏</span >
73- <span class =" emoji-offset" />
74- <Option
75- v-for =" rule in displayedRules"
76- :key =" rule"
77- :text =" rule"
78- :highlight =" filter.selectedRules.includes(rule)"
79- />
80- <Option
81- v-if =" moreRules.length"
82- :text =" `+${moreRules.length}`"
83- :data-title =" moreRules.join(', ')"
84- :highlight =" intersect(moreRules, filter.selectedRules)"
85- />
86- </template >
87- </div >
88- <div class =" rule-badges" v-if =" displayFeatures.length > 0" >
89- <span title =" Used Features" >💡</span >
90- <Option
91- v-for =" feature in displayFeatures"
92- :key =" feature"
93- :text =" feature"
94- :highlight =" filter.selectedFeatures.includes(feature)"
95- />
96- <Option
97- v-if =" moreFeatures.length"
98- :text =" `+${moreFeatures.length}`"
99- :data-title =" moreFeatures.join(', ')"
100- :highlight =" intersect(moreFeatures, filter.selectedFeatures)"
101- />
102- </div >
103105 <a :href =" meta.playgroundLink" class =" playground link" target =" _blank" >
104106 Try in Playground →
105107 </a >
@@ -108,6 +110,7 @@ const moreFeatures = computed(() => sortedFeatures.value.slice(2))
108110</template >
109111
110112<style scoped>
113+
111114a {
112115 text-decoration : none ;
113116}
@@ -129,38 +132,49 @@ a:hover {
129132 color : var (--vp-button-brand-bg );
130133 filter : brightness (1.5 );
131134}
135+
136+ .rule-item {
137+ border : 1px solid var (--vp-c-divider );
138+ border-radius : 8px ;
139+ padding : 1rem ;
140+ display : flex ;
141+ }
142+
143+ .rule-badges {
144+ display : flex ;
145+ gap : 4px ;
146+ align-items : center ;
147+ }
148+
149+ .rule-main {
150+ flex : 1 1 auto ;
151+ }
152+
132153.rule-name {
133- flex : 0 1 auto ;
134154 font-weight : 600 ;
135155 display : flex ;
136156 align-items : center ;
137157 gap : 5px ;
138158 max-width : 100% ;
159+ margin-bottom : 12px ;
139160}
161+
140162.logo {
141163 height : 18px ;
142164 display : inline ;
143165}
144- .playground {
145- font-size : 0.8em ;
146- white-space : nowrap ;
147- }
148- .rule-item {
149- border : 1px solid var (--vp-c-divider );
150- border-radius : 8px ;
151- padding : 1rem ;
152- }
153166
154- .rule-header {
167+ .rule-aux {
168+ flex : 0 0 auto ;
155169 display : flex ;
156- justify-content : space-between ;
157- margin-bottom : 12px ;
170+ flex-direction : column ;
171+ gap : 12px ;
158172}
159-
160- .rule-badges {
161- display : flex ;
162- gap : 4 px ;
163- align-items : center ;
173+ .playground {
174+ font-size : 0.8 em ;
175+ white-space : nowrap ;
176+ text-align : right ;
177+ flex : 1 0 auto ;
164178}
165179
166180.rule-details {
@@ -170,7 +184,7 @@ a:hover {
170184}
171185
172186.rule-details > div {
173- flex : 1 0 30 % ;
187+ flex : 1 0 50 % ;
174188}
175189
176190@media only screen and (max-width : 640px ) {
@@ -179,17 +193,19 @@ a:hover {
179193 border-radius : 0 ;
180194 border-width : 0 ;
181195 border-bottom-width : 1px ;
196+ flex-direction : column ;
197+ gap : 8px ;
198+ }
199+ .rule-name {
200+ text-wrap : pretty;
201+ justify-content : space-between ;
182202 }
183203 .rule-item :first-child {
184204 border-top-width : 1px ;
185205 }
186- .rule-details {
187- flex-wrap : wrap ;
188- }
189- .playground {
190- align-self : flex-end ;
191- flex : 0 0 100% ;
192- text-align : right ;
206+ .rule-aux {
207+ flex : 1 0 auto ;
208+ flex-direction : row ;
193209 }
194210}
195211
0 commit comments