File tree 10 files changed +156
-3
lines changed
primer-concept-group-card
public/assets/images/heroicons/outline
10 files changed +156
-3
lines changed Original file line number Diff line number Diff line change 31
31
{{ #if @isComplete }}
32
32
{{ svg-jar " check-circle" class =" w-8 h-8 fill-current text-teal-500" }}
33
33
{{ else if (and @logoImageUrl @logoImageAltText)}}
34
- <img src ={{ @logoImageUrl }} alt ={{ @logoImageAltText }} class =" w-8 md:w-12 transform scale-100 group-hover:scale-105 transition-all" />
34
+ <img src ={{ @logoImageUrl }} alt ={{ @logoImageAltText }} class =" w-8 transform scale-100 group-hover:scale-105 transition-all" />
35
35
{{ /if }}
36
36
</div >
37
37
</div >
Original file line number Diff line number Diff line change 14
14
</:afterTitle >
15
15
16
16
<:default >
17
- <div class =" leading-6 prose dark:prose-invert mb-6 " >
17
+ <div class =" leading-6 prose dark:prose-invert mb-4 pr-8 " >
18
18
{{ markdown-to-html this.introductionMarkdown }}
19
19
</div >
20
20
53
53
</div >
54
54
{{ /if }}
55
55
56
- <div class =" leading-6 prose dark:prose-invert mb-6 pr-8 md:pr-12 " >
56
+ <div class =" leading-6 prose dark:prose-invert mb-4 pr-8" >
57
57
{{ markdown-to-html this.introductionMarkdown }}
58
58
</div >
59
59
Original file line number Diff line number Diff line change
1
+ <LinkTo
2
+ @route =" concept"
3
+ @models ={{ array @concept.slug }}
4
+ class =" block hover:bg-gray-50 dark:hover:bg-gray-700/50 py-1.5 -mx-1.5 px-1.5 rounded"
5
+ data-test-concept-list-item
6
+ ...attributes
7
+ >
8
+ <div class =" flex items-center justify-between" >
9
+ <div class =" flex items-center" >
10
+ <div class =" w-2 h-2 {{ if @isComplete ' bg-teal-500' ' bg-gray-200 dark:bg-gray-700' }} rounded-full mr-2" ></div >
11
+
12
+ {{! TODO: Qualify all heroicons with solid/outline }}
13
+ {{ svg-jar " book-open-outline" class =" w-6 mr-2 text-gray-400 dark:text-gray-600" }}
14
+
15
+ <div class =" prose dark:prose-invert prose-sm" >
16
+ {{ @concept.title }}
17
+ </div >
18
+ </div >
19
+
20
+ {{ #if @isComplete }}
21
+ {{ svg-jar " check" class =" ml-1 w-5 text-teal-500" }}
22
+ {{ else }}
23
+ <div class =" items-center gap-1 pl-4 hidden sm:flex flex-shrink-0" >
24
+ {{ svg-jar " clock" class =" w-4 fill-current text-gray-300 dark:text-gray-700" }}
25
+
26
+ <span class =" text-xs text-gray-400 dark:text-gray-600" >
27
+ {{ @concept.estimatedReadingTimeInMinutes }}
28
+ mins
29
+ </span >
30
+ </div >
31
+ {{ /if }}
32
+ </div >
33
+ </LinkTo >
Original file line number Diff line number Diff line change
1
+ import Component from '@glimmer/component' ;
2
+ import type AuthenticatorService from 'codecrafters-frontend/services/authenticator' ;
3
+ import type ConceptModel from 'codecrafters-frontend/models/concept' ;
4
+ import { service } from '@ember/service' ;
5
+
6
+ interface Signature {
7
+ Element : HTMLAnchorElement ;
8
+
9
+ Args : {
10
+ isComplete : boolean ;
11
+ concept : ConceptModel ;
12
+ } ;
13
+ }
14
+
15
+ export default class ConceptListItemComponent extends Component < Signature > {
16
+ @service declare authenticator : AuthenticatorService ;
17
+ }
18
+
19
+ declare module '@glint/environment-ember-loose/registry' {
20
+ export default interface Registry {
21
+ 'TrackPage::PrimerConceptGroupCard::ConceptListItem' : typeof ConceptListItemComponent ;
22
+ }
23
+ }
Original file line number Diff line number Diff line change
1
+ {{ #each this.sortedConcepts as |concept |}}
2
+ <TrackPage::PrimerConceptGroupCard::ConceptListItem @concept ={{ concept }} @isComplete ={{ false }} />
3
+ {{ /each }}
Original file line number Diff line number Diff line change
1
+ import Component from '@glimmer/component' ;
2
+ import ConceptGroupModel from 'codecrafters-frontend/models/concept-group' ;
3
+ import ConceptModel from 'codecrafters-frontend/models/concept' ;
4
+ import Store from '@ember-data/store' ;
5
+ import { inject as service } from '@ember/service' ;
6
+
7
+ interface Signature {
8
+ Element : HTMLDivElement ;
9
+
10
+ Args : {
11
+ conceptGroup : ConceptGroupModel ;
12
+ } ;
13
+ }
14
+
15
+ export default class TrackPagePrimerConceptGroupCardConceptListComponent extends Component < Signature > {
16
+ @service declare store : Store ;
17
+
18
+ get sortedConcepts ( ) {
19
+ return this . args . conceptGroup . conceptSlugs . reduce ( ( acc , slug ) => {
20
+ const concept = this . store . peekAll ( 'concept' ) . find ( ( concept ) => concept . slug === slug ) ;
21
+
22
+ if ( concept ) {
23
+ acc . push ( concept ) ;
24
+ }
25
+
26
+ return acc ;
27
+ } , [ ] as ConceptModel [ ] ) ;
28
+ }
29
+ }
30
+
31
+ declare module '@glint/environment-ember-loose/registry' {
32
+ export default interface Registry {
33
+ 'TrackPage::PrimerConceptGroupCard::ConceptList' : typeof TrackPagePrimerConceptGroupCardConceptListComponent ;
34
+ }
35
+ }
Original file line number Diff line number Diff line change
1
+ <TrackPage::Card
2
+ @isComplete ={{ false }}
3
+ @logoImageAltText ={{ @language.name }}
4
+ @logoImageUrl ={{ @language.colorLogoUrl }}
5
+ @title =" Rust Primer"
6
+ @recentParticipants ={{ array }}
7
+ ...attributes
8
+ >
9
+ <:afterTitle >
10
+ <Pill @color =" green" >
11
+ FREE
12
+ </Pill >
13
+ </:afterTitle >
14
+
15
+ <:default >
16
+ <div class =" leading-6 prose dark:prose-invert mb-4" >
17
+ New to Rust? Start with our interactive concepts that cover the basics.
18
+ </div >
19
+
20
+ <TrackPage::PrimerConceptGroupCard::ConceptList @conceptGroup ={{ @conceptGroup }} />
21
+ </:default >
22
+ </TrackPage::Card >
Original file line number Diff line number Diff line change
1
+ import Component from '@glimmer/component' ;
2
+ import ConceptGroupModel from 'codecrafters-frontend/models/concept-group' ;
3
+ import LanguageModel from 'codecrafters-frontend/models/language' ;
4
+
5
+ interface Signature {
6
+ Element : HTMLDivElement ;
7
+
8
+ Args : {
9
+ language : LanguageModel ;
10
+ conceptGroup : ConceptGroupModel ;
11
+ } ;
12
+ }
13
+
14
+ export default class TrackPagePrimerConceptGroupCardComponent extends Component < Signature > { }
15
+
16
+ declare module '@glint/environment-ember-loose/registry' {
17
+ export default interface Registry {
18
+ 'TrackPage::PrimerConceptGroupCard' : typeof TrackPagePrimerConceptGroupCardComponent ;
19
+ }
20
+ }
Original file line number Diff line number Diff line change 10
10
<div class =" container mx-auto lg:max-w-screen-lg px-3 md:px-6 py-6 md:py-10" >
11
11
<div class =" flex items-start" >
12
12
<div class =" flex-grow" >
13
+ {{ #if this.trackPrimerConceptGroup }}
14
+ <TrackPage::PrimerConceptGroupCard @language ={{ @model.language }} @conceptGroup ={{ this.trackPrimerConceptGroup }} class =" w-full mb-6" />
15
+
16
+ <div class =" border-b pb-1 mb-4 flex" >
17
+ <div class =" text-2xl font-semibold text-gray-800 dark:text-gray-200" >
18
+ {{ @model.language.name }}
19
+ Projects
20
+ </div >
21
+ </div >
22
+
23
+ <div class =" prose dark:prose-invert mb-4" >
24
+ <p >
25
+ Ready to get your hands dirty? Here are some projects you can build.
26
+ </p >
27
+ </div >
28
+ {{ /if }}
29
+
13
30
<TrackPage::CourseCardList @language ={{ @model.language }} @courses ={{ this.sortedCourses }} class =" w-full mb-4" />
14
31
</div >
15
32
File renamed without changes.
You can’t perform that action at this time.
0 commit comments