Cristiano Magro
2024-12-30 3f437cf5acf4f17e349119a3286156dc3ecc351f
commit | author | age
32b599 1 <template>
CM 2   <div>
3     <active-element
4       :topic-title="activeTopic && activeTopic.title"
5       :text="activeTopic && activeTopic.fullText"
6     ></active-element>
1dc4e4 7     <knowledge-base @select-topic="activateTopic"></knowledge-base>
32b599 8   </div>
CM 9 </template>
10
11 <script>
12 export default {
13   data() {
14     return {
15       topics: [
16         {
17           id: 'basics',
18           title: 'The Basics',
19           description: 'Core Vue basics you have to know',
20           fullText:
21             'Vue is a great framework and it has a couple of key concepts: Data binding, events, components and reactivity - that should tell you something!',
22         },
23         {
24           id: 'components',
25           title: 'Components',
26           description:
27             'Components are a core concept for building Vue UIs and apps',
28           fullText:
29             'With components, you can split logic (and markup) into separate building blocks and then combine those building blocks (and re-use them) to build powerful user interfaces.',
30         },
31       ],
32       activeTopic: null,
33     };
34   },
3f437c 35   provide(){
CM 36     return {
37       topics: this.topics
38     }
1dc4e4 39   },
32b599 40   methods: {
CM 41     activateTopic(topicId) {
42       this.activeTopic = this.topics.find((topic) => topic.id === topicId);
43     },
44   },
45 };
46 </script>
47
48 <style>
49 * {
50   box-sizing: border-box;
51 }
52 html {
53   font-family: sans-serif;
54 }
55 body {
56   margin: 0;
57 }
58 section {
59   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
60   margin: 2rem auto;
61   max-width: 40rem;
62   padding: 1rem;
63   border-radius: 12px;
64 }
65
66 ul {
67   list-style: none;
68   margin: 0;
69   padding: 0;
70   display: flex;
71   justify-content: center;
72 }
73
74 li {
75   border-radius: 12px;
76   border: 1px solid #ccc;
77   padding: 1rem;
78   width: 15rem;
79   margin: 0 1rem;
80   display: flex;
81   flex-direction: column;
82   justify-content: space-between;
83 }
84
85 h2 {
86   margin: 0.75rem 0;
87   text-align: center;
88 }
89
90 button {
91   font: inherit;
92   border: 1px solid #c70053;
93   background-color: #c70053;
94   color: white;
95   padding: 0.75rem 2rem;
96   border-radius: 30px;
97   cursor: pointer;
98 }
99
100 button:hover,
101 button:active {
102   background-color: #e24d8b;
103   border-color: #e24d8b;
104 }
105 </style>