|
51 | 51 | rounded |
52 | 52 | v-bind="props" |
53 | 53 | > |
54 | | - <v-icon |
55 | | - class="me-1" |
56 | | - color="medium-emphasis" |
57 | | - icon="mdi-chevron-right" |
58 | | - size="16" |
59 | | - /> |
60 | 54 |
|
61 | | - {{ randomPackage }} create |
| 55 | + <v-menu offset="4"> |
| 56 | + <template #activator="{ props: iconProps }"> |
| 57 | + <v-icon-btn |
| 58 | + v-bind="iconProps" |
| 59 | + class="mr-2" |
| 60 | + color="primary" |
| 61 | + cursor="pointer" |
| 62 | + height="20" |
| 63 | + icon="mdi-chevron-down" |
| 64 | + icon-size="16" |
| 65 | + rounded="lg" |
| 66 | + variant="text" |
| 67 | + width="20" |
| 68 | + /> |
| 69 | + </template> |
| 70 | + |
| 71 | + <v-list density="compact" rounded="lg"> |
| 72 | + <v-list-item |
| 73 | + v-for="manager in packageManagers" |
| 74 | + :key="manager" |
| 75 | + :value="manager" |
| 76 | + @click="selectedPackageManager = manager" |
| 77 | + > |
| 78 | + <v-list-item-title> |
| 79 | + {{ manager }} |
| 80 | + </v-list-item-title> |
| 81 | + </v-list-item> |
| 82 | + </v-list> |
| 83 | + </v-menu> |
| 84 | + |
| 85 | + {{ commands[selectedPackageManager] }} |
62 | 86 |
|
63 | 87 | <span class="text-primary font-weight-medium ms-2"> |
64 | 88 | vuetify |
65 | 89 | </span> |
66 | 90 |
|
67 | 91 | <v-icon |
| 92 | + :color="isCopying ? 'success' : 'medium-emphasis'" |
68 | 93 | :icon="isCopying ? 'mdi-check' : 'mdi-clipboard-text-outline'" |
69 | 94 | :style="{ |
70 | 95 | opacity: isHovering || isCopying ? 1 : 0, |
71 | 96 | }" |
72 | 97 | class="ms-auto" |
73 | | - color="medium-emphasis" |
74 | 98 | size="17" |
75 | 99 | @click="copy" |
76 | 100 | /> |
|
128 | 152 | }, |
129 | 153 | ] |
130 | 154 |
|
131 | | - const isCopying = shallowRef(false) |
| 155 | + const packageManagers = ['npm', 'pnpm', 'yarn', 'bun'] |
| 156 | + const randomPackageManager = packageManagers[Math.floor(Math.random() * packageManagers.length)] |
132 | 157 |
|
133 | | - const packages = ['pnpm', 'yarn', 'npm', 'bun'] |
134 | | - const randomPackage = packages[Math.floor(Math.random() * packages.length)] |
| 158 | + const commands: Record<string, string> = { |
| 159 | + pnpm: 'pnpm create', |
| 160 | + yarn: 'yarn create', |
| 161 | + npm: 'npm create', |
| 162 | + bun: 'bun create', |
| 163 | + } |
| 164 | +
|
| 165 | + const isCopying = shallowRef(false) |
| 166 | + const selectedPackageManager = shallowRef(randomPackageManager) |
135 | 167 |
|
136 | 168 | function copy () { |
137 | 169 | isCopying.value = true |
138 | 170 |
|
139 | | - navigator.clipboard.writeText(`${randomPackage} create vuetify`) |
| 171 | + navigator.clipboard.writeText(`${commands[selectedPackageManager.value]} vuetify`) |
140 | 172 |
|
141 | 173 | setTimeout(() => { |
142 | 174 | isCopying.value = false |
|
0 commit comments