1+ import '@awesome.me/webawesome/dist/components/button/button.js' ;
12import { LitElement , css , html } from 'lit' ;
23import { customElement , property } from 'lit/decorators.js' ;
34
4- interface CardLink {
5- text : string ;
6- url : string ;
7- primary ?: boolean ;
8- }
9-
105@customElement ( 'tool-card' )
116export class ToolCard extends LitElement {
127 @property ( { type : String } ) title = '' ;
138 @property ( { type : String } ) description = '' ;
149 @property ( { type : String } ) image = '' ;
1510 @property ( { type : String } ) url = '' ;
11+ @property ( { type : String } ) text = '' ;
1612 @property ( { type : String } ) category = '' ;
17- @property ( { type : Array } ) links : CardLink [ ] = [ ] ;
1813
1914 static styles = css `
2015 :host {
@@ -77,7 +72,7 @@ export class ToolCard extends LitElement {
7772 .card-description {
7873 color: #666;
7974 line-height: 1.5;
80- margin: 0 0 20px 0;
75+ margin: 0 0 40px 0;
8176 flex: 1;
8277 }
8378
@@ -88,38 +83,6 @@ export class ToolCard extends LitElement {
8883 margin-top: auto;
8984 }
9085
91- .card-link {
92- display: inline-flex;
93- align-items: center;
94- justify-content: center;
95- padding: 10px 16px;
96- text-decoration: none;
97- border-radius: 8px;
98- font-weight: 500;
99- transition: all 0.2s ease;
100- border: 1px solid transparent;
101- font-size: 0.9rem;
102- }
103-
104- .card-link.primary {
105- background: #03a9f4;
106- color: white;
107- }
108-
109- .card-link.primary:hover {
110- background: #0288d1;
111- }
112-
113- .card-link.secondary {
114- background: transparent;
115- color: #03a9f4;
116- border-color: #03a9f4;
117- }
118-
119- .card-link.secondary:hover {
120- background: #e3f2fd;
121- }
122-
12386 .external-icon {
12487 width: 14px;
12588 height: 14px;
@@ -147,34 +110,18 @@ export class ToolCard extends LitElement {
147110 return url . startsWith ( 'http' ) && ! url . includes ( '#' ) ;
148111 }
149112
150- private _handleCardClick ( ) {
113+ private _handleButtonClick ( event : Event ) {
114+ event . stopPropagation ( ) ;
115+
151116 if ( this . url && this . url !== '#' ) {
152117 const isExternal = this . _isExternalLink ( this . url ) ;
153118 if ( isExternal ) {
154119 window . open ( this . url , '_blank' , 'noopener,noreferrer' ) ;
155- } else {
156- this . dispatchEvent (
157- new CustomEvent ( 'card-action' , {
158- detail : { url : this . url } ,
159- bubbles : true ,
160- composed : true ,
161- } )
162- ) ;
163- }
164- }
165- }
166-
167- private _handleLinkClick ( link : CardLink , event : Event ) {
168- event . stopPropagation ( ) ;
169-
170- if ( link . url && link . url !== '#' ) {
171- const isExternal = this . _isExternalLink ( link . url ) ;
172- if ( isExternal ) {
173- window . open ( link . url , '_blank' , 'noopener,noreferrer' ) ;
120+ return ;
174121 } else {
175122 this . dispatchEvent (
176123 new CustomEvent ( 'tool-action' , {
177- detail : { url : link . url , text : link . text } ,
124+ detail : { url : this . url , text : this . text } ,
178125 bubbles : true ,
179126 composed : true ,
180127 } )
@@ -185,7 +132,7 @@ export class ToolCard extends LitElement {
185132
186133 render ( ) {
187134 return html `
188- < div class ="card " @click =" ${ this . _handleCardClick } " >
135+ < div class ="card ">
189136 < img src ="${ this . image } " alt ="${ this . title } " class ="card-image " />
190137
191138 < div class ="card-content ">
@@ -197,26 +144,12 @@ export class ToolCard extends LitElement {
197144 </ div >
198145
199146 < p class ="card-description "> ${ this . description } </ p >
200-
201- < div class ="card-actions ">
202- ${ this . links . map (
203- link => html `
204- < a
205- href ="${ link . url || '#' } "
206- class ="card-link ${ link . primary ? 'primary' : 'secondary' } "
207- target ="${ this . _isExternalLink ( link . url )
208- ? '_blank'
209- : '_self' } "
210- rel ="${ this . _isExternalLink ( link . url )
211- ? 'noopener noreferrer'
212- : '' } "
213- @click ="${ ( e : Event ) => this . _handleLinkClick ( link , e ) } "
214- >
215- ${ link . text }
216- </ a >
217- `
218- ) }
219- </ div >
147+ < wa-button
148+ href ="${ ! this . _isExternalLink ( this . url ) ? this . url : '#' } "
149+ variant ="brand "
150+ @click ="${ ( e : Event ) => this . _handleButtonClick ( e ) } "
151+ > ${ this . text } </ wa-button
152+ >
220153 </ div >
221154 </ div >
222155 ` ;
0 commit comments