fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #925 from hougesen/docs/example/vue-tanstack

docs: @tanstack/vue-query example

authored by

Lubos and committed by
GitHub
fa65218c 3adb1b85

+425 -565
+3
examples/openapi-ts-tanstack-vue-query/package.json
··· 35 35 "@vue/eslint-config-typescript": "13.0.0", 36 36 "@vue/test-utils": "2.4.6", 37 37 "@vue/tsconfig": "0.5.1", 38 + "autoprefixer": "10.4.20", 38 39 "eslint": "9.6.0", 39 40 "eslint-plugin-vue": "9.27.0", 40 41 "jsdom": "24.1.0", 41 42 "npm-run-all2": "6.2.0", 43 + "postcss": "8.4.41", 42 44 "prettier": "3.3.2", 45 + "tailwindcss": "3.4.9", 43 46 "typescript": "5.5.3", 44 47 "vite": "5.3.3", 45 48 "vite-plugin-vue-devtools": "7.3.1",
+6
examples/openapi-ts-tanstack-vue-query/postcss.config.js
··· 1 + export default { 2 + plugins: { 3 + autoprefixer: {}, 4 + tailwindcss: {} 5 + } 6 + }
examples/openapi-ts-tanstack-vue-query/public/favicon.ico

This is a binary file and will not be displayed.

+2 -149
examples/openapi-ts-tanstack-vue-query/src/App.vue
··· 1 1 <script setup lang="ts"> 2 - // import { useMutation, useQuery } from '@tanstack/vue-query' 3 2 import { VueQueryDevtools } from '@tanstack/vue-query-devtools' 4 - import { RouterLink, RouterView } from 'vue-router' 5 - import { addPetMutation } from './client/@tanstack/vue-query.gen' 6 - 7 - const addPet = useMutation({ 8 - ...addPetMutation, 9 - onError: (error) => { 10 - console.log(error) 11 - // setIsRequiredNameError(false); 12 - }, 13 - onSuccess: (data) => { 14 - console.log(data) 15 - // setPet(data); 16 - // setIsRequiredNameError(false); 17 - } 18 - }) 19 - 20 - const mutate = () => { 21 - addPet.mutate({ 22 - body: { 23 - category: { 24 - id: 0, 25 - // name: formData.get('category') as string, 26 - name: 'Cats' 27 - }, 28 - id: 0, 29 - // name: formData.get('name') as string, 30 - name: 'Kitty', 31 - photoUrls: ['string'], 32 - status: 'available', 33 - tags: [ 34 - { 35 - id: 0, 36 - name: 'string' 37 - } 38 - ] 39 - } 40 - }) 41 - } 3 + import { RouterView } from 'vue-router' 42 4 </script> 43 5 44 6 <template> 45 - <header> 46 - <img 47 - alt="Hey API logo" 48 - class="logo" 49 - src="https://heyapi.vercel.app/logo.png" 50 - width="125" 51 - height="125" 52 - /> 53 - 54 - <div class="wrapper"> 55 - <div class="greetings"> 56 - <h1 class="green">@hey-api/openapi-ts 🤝 TanStack Vue Query</h1> 57 - </div> 58 - 59 - <button @click="mutate" type="button">Mutate</button> 60 - <!-- <nav> 61 - <RouterLink to="/">Home</RouterLink> 62 - <RouterLink to="/about">About</RouterLink> 63 - </nav> --> 64 - </div> 65 - </header> 66 - 67 7 <RouterView /> 8 + 68 9 <VueQueryDevtools /> 69 10 </template> 70 - 71 - <style scoped> 72 - header { 73 - line-height: 1.5; 74 - max-height: 100vh; 75 - } 76 - 77 - .logo { 78 - display: block; 79 - margin: 0 auto 2rem; 80 - } 81 - 82 - nav { 83 - width: 100%; 84 - font-size: 12px; 85 - text-align: center; 86 - margin-top: 2rem; 87 - } 88 - 89 - nav a.router-link-exact-active { 90 - color: var(--color-text); 91 - } 92 - 93 - nav a.router-link-exact-active:hover { 94 - background-color: transparent; 95 - } 96 - 97 - nav a { 98 - display: inline-block; 99 - padding: 0 1rem; 100 - border-left: 1px solid var(--color-border); 101 - } 102 - 103 - nav a:first-of-type { 104 - border: 0; 105 - } 106 - 107 - @media (min-width: 1024px) { 108 - header { 109 - display: flex; 110 - place-items: center; 111 - padding-right: calc(var(--section-gap) / 2); 112 - } 113 - 114 - .logo { 115 - margin: 0 2rem 0 0; 116 - } 117 - 118 - header .wrapper { 119 - display: flex; 120 - place-items: flex-start; 121 - flex-wrap: wrap; 122 - } 123 - 124 - nav { 125 - text-align: left; 126 - margin-left: -1rem; 127 - font-size: 1rem; 128 - 129 - padding: 1rem 0; 130 - margin-top: 1rem; 131 - } 132 - } 133 - 134 - /* from HelloWorld component */ 135 - h1 { 136 - font-size: 2rem; 137 - font-weight: 500; 138 - position: relative; 139 - top: -10px; 140 - } 141 - 142 - h3 { 143 - font-size: 1.2rem; 144 - } 145 - 146 - .greetings h1, 147 - .greetings h3 { 148 - text-align: center; 149 - } 150 - 151 - @media (min-width: 1024px) { 152 - .greetings h1, 153 - .greetings h3 { 154 - text-align: left; 155 - } 156 - } 157 - </style>
-86
examples/openapi-ts-tanstack-vue-query/src/assets/base.css
··· 1 - /* color palette from <https://github.com/vuejs/theme> */ 2 - :root { 3 - --vt-c-white: #ffffff; 4 - --vt-c-white-soft: #f8f8f8; 5 - --vt-c-white-mute: #f2f2f2; 6 - 7 - --vt-c-black: #181818; 8 - --vt-c-black-soft: #222222; 9 - --vt-c-black-mute: #282828; 10 - 11 - --vt-c-indigo: #2c3e50; 12 - 13 - --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 - --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 - --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 - --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 - 18 - --vt-c-text-light-1: var(--vt-c-indigo); 19 - --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 - --vt-c-text-dark-1: var(--vt-c-white); 21 - --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 - } 23 - 24 - /* semantic color variables for this project */ 25 - :root { 26 - --color-background: var(--vt-c-white); 27 - --color-background-soft: var(--vt-c-white-soft); 28 - --color-background-mute: var(--vt-c-white-mute); 29 - 30 - --color-border: var(--vt-c-divider-light-2); 31 - --color-border-hover: var(--vt-c-divider-light-1); 32 - 33 - --color-heading: var(--vt-c-text-light-1); 34 - --color-text: var(--vt-c-text-light-1); 35 - 36 - --section-gap: 160px; 37 - } 38 - 39 - @media (prefers-color-scheme: dark) { 40 - :root { 41 - --color-background: var(--vt-c-black); 42 - --color-background-soft: var(--vt-c-black-soft); 43 - --color-background-mute: var(--vt-c-black-mute); 44 - 45 - --color-border: var(--vt-c-divider-dark-2); 46 - --color-border-hover: var(--vt-c-divider-dark-1); 47 - 48 - --color-heading: var(--vt-c-text-dark-1); 49 - --color-text: var(--vt-c-text-dark-2); 50 - } 51 - } 52 - 53 - *, 54 - *::before, 55 - *::after { 56 - box-sizing: border-box; 57 - margin: 0; 58 - font-weight: normal; 59 - } 60 - 61 - body { 62 - min-height: 100vh; 63 - color: var(--color-text); 64 - background: var(--color-background); 65 - transition: 66 - color 0.5s, 67 - background-color 0.5s; 68 - line-height: 1.6; 69 - font-family: 70 - Inter, 71 - -apple-system, 72 - BlinkMacSystemFont, 73 - 'Segoe UI', 74 - Roboto, 75 - Oxygen, 76 - Ubuntu, 77 - Cantarell, 78 - 'Fira Sans', 79 - 'Droid Sans', 80 - 'Helvetica Neue', 81 - sans-serif; 82 - font-size: 15px; 83 - text-rendering: optimizeLegibility; 84 - -webkit-font-smoothing: antialiased; 85 - -moz-osx-font-smoothing: grayscale; 86 - }
+5 -33
examples/openapi-ts-tanstack-vue-query/src/assets/main.css
··· 1 - @import './base.css'; 2 - 3 - #app { 4 - max-width: 1280px; 5 - margin: 0 auto; 6 - padding: 2rem; 7 - font-weight: normal; 8 - } 9 - 10 - a, 11 - .green { 12 - text-decoration: none; 13 - color: hsla(160, 100%, 37%, 1); 14 - transition: 0.4s; 15 - padding: 3px; 16 - } 17 - 18 - @media (hover: hover) { 19 - a:hover { 20 - background-color: hsla(160, 100%, 37%, 0.2); 21 - } 22 - } 1 + @tailwind base; 2 + @tailwind components; 3 + @tailwind utilities; 23 4 24 - @media (min-width: 1024px) { 25 - body { 26 - display: flex; 27 - place-items: center; 28 - } 29 - 30 - #app { 31 - display: grid; 32 - grid-template-columns: 1fr 1fr; 33 - padding: 0 2rem; 34 - } 5 + body { 6 + @apply bg-[#111113]; 35 7 }
-88
examples/openapi-ts-tanstack-vue-query/src/components/TheWelcome.vue
··· 1 - <script setup lang="ts"> 2 - import WelcomeItem from './WelcomeItem.vue' 3 - import DocumentationIcon from './icons/IconDocumentation.vue' 4 - import ToolingIcon from './icons/IconTooling.vue' 5 - import EcosystemIcon from './icons/IconEcosystem.vue' 6 - import CommunityIcon from './icons/IconCommunity.vue' 7 - import SupportIcon from './icons/IconSupport.vue' 8 - </script> 9 - 10 - <template> 11 - <WelcomeItem> 12 - <template #icon> 13 - <DocumentationIcon /> 14 - </template> 15 - <template #heading>Documentation</template> 16 - 17 - Vue’s 18 - <a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a> 19 - provides you with all information you need to get started. 20 - </WelcomeItem> 21 - 22 - <WelcomeItem> 23 - <template #icon> 24 - <ToolingIcon /> 25 - </template> 26 - <template #heading>Tooling</template> 27 - 28 - This project is served and bundled with 29 - <a href="https://vitejs.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The 30 - recommended IDE setup is 31 - <a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a> + 32 - <a href="https://github.com/johnsoncodehk/volar" target="_blank" rel="noopener">Volar</a>. If 33 - you need to test your components and web pages, check out 34 - <a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a> and 35 - <a href="https://on.cypress.io/component" target="_blank" rel="noopener" 36 - >Cypress Component Testing</a 37 - >. 38 - 39 - <br /> 40 - 41 - More instructions are available in <code>README.md</code>. 42 - </WelcomeItem> 43 - 44 - <WelcomeItem> 45 - <template #icon> 46 - <EcosystemIcon /> 47 - </template> 48 - <template #heading>Ecosystem</template> 49 - 50 - Get official tools and libraries for your project: 51 - <a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>, 52 - <a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>, 53 - <a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and 54 - <a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If 55 - you need more resources, we suggest paying 56 - <a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a> 57 - a visit. 58 - </WelcomeItem> 59 - 60 - <WelcomeItem> 61 - <template #icon> 62 - <CommunityIcon /> 63 - </template> 64 - <template #heading>Community</template> 65 - 66 - Got stuck? Ask your question on 67 - <a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>, our official 68 - Discord server, or 69 - <a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener" 70 - >StackOverflow</a 71 - >. You should also subscribe to 72 - <a href="https://news.vuejs.org" target="_blank" rel="noopener">our mailing list</a> and follow 73 - the official 74 - <a href="https://twitter.com/vuejs" target="_blank" rel="noopener">@vuejs</a> 75 - twitter account for latest news in the Vue world. 76 - </WelcomeItem> 77 - 78 - <WelcomeItem> 79 - <template #icon> 80 - <SupportIcon /> 81 - </template> 82 - <template #heading>Support Vue</template> 83 - 84 - As an independent project, Vue relies on community backing for its sustainability. You can help 85 - us by 86 - <a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>. 87 - </WelcomeItem> 88 - </template>
-87
examples/openapi-ts-tanstack-vue-query/src/components/WelcomeItem.vue
··· 1 - <template> 2 - <div class="item"> 3 - <i> 4 - <slot name="icon"></slot> 5 - </i> 6 - <div class="details"> 7 - <h3> 8 - <slot name="heading"></slot> 9 - </h3> 10 - <slot></slot> 11 - </div> 12 - </div> 13 - </template> 14 - 15 - <style scoped> 16 - .item { 17 - margin-top: 2rem; 18 - display: flex; 19 - position: relative; 20 - } 21 - 22 - .details { 23 - flex: 1; 24 - margin-left: 1rem; 25 - } 26 - 27 - i { 28 - display: flex; 29 - place-items: center; 30 - place-content: center; 31 - width: 32px; 32 - height: 32px; 33 - 34 - color: var(--color-text); 35 - } 36 - 37 - h3 { 38 - font-size: 1.2rem; 39 - font-weight: 500; 40 - margin-bottom: 0.4rem; 41 - color: var(--color-heading); 42 - } 43 - 44 - @media (min-width: 1024px) { 45 - .item { 46 - margin-top: 0; 47 - padding: 0.4rem 0 1rem calc(var(--section-gap) / 2); 48 - } 49 - 50 - i { 51 - top: calc(50% - 25px); 52 - left: -26px; 53 - position: absolute; 54 - border: 1px solid var(--color-border); 55 - background: var(--color-background); 56 - border-radius: 8px; 57 - width: 50px; 58 - height: 50px; 59 - } 60 - 61 - .item:before { 62 - content: ' '; 63 - border-left: 1px solid var(--color-border); 64 - position: absolute; 65 - left: 0; 66 - bottom: calc(50% + 25px); 67 - height: calc(50% - 25px); 68 - } 69 - 70 - .item:after { 71 - content: ' '; 72 - border-left: 1px solid var(--color-border); 73 - position: absolute; 74 - left: 0; 75 - top: calc(50% + 25px); 76 - height: calc(50% - 25px); 77 - } 78 - 79 - .item:first-of-type:before { 80 - display: none; 81 - } 82 - 83 - .item:last-of-type:after { 84 - display: none; 85 - } 86 - } 87 - </style>
-11
examples/openapi-ts-tanstack-vue-query/src/components/__tests__/HelloWorld.spec.ts
··· 1 - import { mount } from '@vue/test-utils' 2 - import { describe, expect, it } from 'vitest' 3 - 4 - import HelloWorld from '../HelloWorld.vue' 5 - 6 - describe('HelloWorld', () => { 7 - it('renders properly', () => { 8 - const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) 9 - expect(wrapper.text()).toContain('Hello Vitest') 10 - }) 11 - })
-7
examples/openapi-ts-tanstack-vue-query/src/components/icons/IconCommunity.vue
··· 1 - <template> 2 - <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"> 3 - <path 4 - d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z" 5 - /> 6 - </svg> 7 - </template>
-7
examples/openapi-ts-tanstack-vue-query/src/components/icons/IconDocumentation.vue
··· 1 - <template> 2 - <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor"> 3 - <path 4 - d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z" 5 - /> 6 - </svg> 7 - </template>
-7
examples/openapi-ts-tanstack-vue-query/src/components/icons/IconEcosystem.vue
··· 1 - <template> 2 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor"> 3 - <path 4 - d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z" 5 - /> 6 - </svg> 7 - </template>
-7
examples/openapi-ts-tanstack-vue-query/src/components/icons/IconSupport.vue
··· 1 - <template> 2 - <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"> 3 - <path 4 - d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z" 5 - /> 6 - </svg> 7 - </template>
-19
examples/openapi-ts-tanstack-vue-query/src/components/icons/IconTooling.vue
··· 1 - <!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license--> 2 - <template> 3 - <svg 4 - xmlns="http://www.w3.org/2000/svg" 5 - xmlns:xlink="http://www.w3.org/1999/xlink" 6 - aria-hidden="true" 7 - role="img" 8 - class="iconify iconify--mdi" 9 - width="24" 10 - height="24" 11 - preserveAspectRatio="xMidYMid meet" 12 - viewBox="0 0 24 24" 13 - > 14 - <path 15 - d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z" 16 - fill="currentColor" 17 - ></path> 18 - </svg> 19 - </template>
+2 -10
examples/openapi-ts-tanstack-vue-query/src/router/index.ts
··· 1 1 import { createRouter, createWebHistory } from 'vue-router' 2 2 3 - import HomeView from '../views/HomeView.vue' 3 + import TanstackExample from '@/views/TanstackExample.vue' 4 4 5 5 const router = createRouter({ 6 6 history: createWebHistory(import.meta.env.BASE_URL), 7 7 routes: [ 8 8 { 9 - component: HomeView, 9 + component: TanstackExample, 10 10 name: 'home', 11 11 path: '/' 12 - }, 13 - { 14 - // route level code-splitting 15 - // this generates a separate chunk (About.[hash].js) for this route 16 - // which is lazy-loaded when the route is visited. 17 - component: () => import('../views/AboutView.vue'), 18 - name: 'about', 19 - path: '/about' 20 12 } 21 13 ] 22 14 })
-12
examples/openapi-ts-tanstack-vue-query/src/stores/counter.ts
··· 1 - import { defineStore } from 'pinia' 2 - import { computed, ref } from 'vue' 3 - 4 - export const useCounterStore = defineStore('counter', () => { 5 - const count = ref(0) 6 - const doubleCount = computed(() => count.value * 2) 7 - function increment() { 8 - count.value++ 9 - } 10 - 11 - return { count, doubleCount, increment } 12 - })
-15
examples/openapi-ts-tanstack-vue-query/src/views/AboutView.vue
··· 1 - <template> 2 - <div class="about"> 3 - <h1>This is an about page</h1> 4 - </div> 5 - </template> 6 - 7 - <style> 8 - @media (min-width: 1024px) { 9 - .about { 10 - min-height: 100vh; 11 - display: flex; 12 - align-items: center; 13 - } 14 - } 15 - </style>
-9
examples/openapi-ts-tanstack-vue-query/src/views/HomeView.vue
··· 1 - <script setup lang="ts"> 2 - import TheWelcome from '../components/TheWelcome.vue' 3 - </script> 4 - 5 - <template> 6 - <main> 7 - <TheWelcome /> 8 - </main> 9 - </template>
+237
examples/openapi-ts-tanstack-vue-query/src/views/TanstackExample.vue
··· 1 + <script lang="ts" setup> 2 + import { $Pet, type Pet } from '@/client' 3 + import { 4 + addPetMutation, 5 + getPetByIdOptions, 6 + updatePetMutation 7 + } from '@/client/@tanstack/vue-query.gen' 8 + import { createClient } from '@hey-api/client-fetch' 9 + import { useMutation, useQuery, useQueryClient } from '@tanstack/vue-query' 10 + import { computed, ref, watch } from 'vue' 11 + 12 + const queryClient = useQueryClient() 13 + 14 + const localClient = createClient({ 15 + // set default base url for requests made by this client 16 + baseUrl: 'https://petstore3.swagger.io/api/v3', 17 + /** 18 + * Set default headers only for requests made by this client. This is to 19 + * demonstrate local clients and their configuration taking precedence over 20 + * internal service client. 21 + */ 22 + headers: { 23 + Authorization: 'Bearer <token_from_local_client>' 24 + } 25 + }) 26 + 27 + localClient.interceptors.request.use((request, options) => { 28 + // Middleware is great for adding authorization tokens to requests made to 29 + // protected paths. Headers are set randomly here to allow surfacing the 30 + // default headers, too. 31 + if (options.url === '/pet/{petId}' && options.method === 'GET' && Math.random() < 0.5) { 32 + request.headers.set('Authorization', 'Bearer <token_from_interceptor>') 33 + } 34 + return request 35 + }) 36 + 37 + const pet = ref<Pet>() 38 + const petId = ref<number>() 39 + 40 + const petInput = ref({ name: '', category: '' }) 41 + 42 + const addPet = useMutation({ 43 + ...addPetMutation, 44 + onError: (error) => { 45 + console.log(error) 46 + }, 47 + onSuccess: (data) => { 48 + pet.value = data 49 + petId.value = data.id ?? petId.value 50 + 51 + if (typeof data?.id === 'number') { 52 + queryClient.invalidateQueries({ 53 + queryKey: getPetByIdOptions({ path: { petId: data.id } }).queryKey 54 + }) 55 + } 56 + } 57 + }) 58 + 59 + const updatePet = useMutation({ 60 + ...updatePetMutation, 61 + onError: (error) => { 62 + console.log(error) 63 + }, 64 + onSuccess: (data) => { 65 + pet.value = data 66 + petId.value = data.id ?? petId.value 67 + 68 + if (typeof data?.id === 'number') { 69 + queryClient.invalidateQueries({ 70 + queryKey: getPetByIdOptions({ path: { petId: data.id } }).queryKey 71 + }) 72 + } 73 + } 74 + }) 75 + 76 + const { data, error } = useQuery( 77 + computed(() => ({ 78 + ...getPetByIdOptions({ 79 + client: localClient, 80 + path: { 81 + petId: petId.value! 82 + } 83 + }), 84 + enabled: Boolean(petId.value) 85 + })) 86 + ) 87 + 88 + const handleAddPet = async () => { 89 + if ($Pet.required.includes('name') && !petInput.value?.name?.length) { 90 + return 91 + } 92 + 93 + addPet.mutate({ 94 + body: { 95 + category: { 96 + id: 0, 97 + name: petInput.value.category 98 + }, 99 + id: 0, 100 + name: petInput.value?.name, 101 + photoUrls: ['string'], 102 + status: 'available', 103 + tags: [ 104 + { 105 + id: 0, 106 + name: 'string' 107 + } 108 + ] 109 + } 110 + }) 111 + } 112 + 113 + function setRandomPetId() { 114 + // random id 1-10 115 + petId.value = Math.floor(Math.random() * (10 - 1 + 1) + 1) 116 + } 117 + 118 + const handleUpdatePet = async () => { 119 + updatePet.mutate({ 120 + body: { 121 + category: { 122 + id: pet.value?.category?.id ?? 0, 123 + name: petInput.value.category 124 + }, 125 + id: pet.value?.id ?? 0, 126 + name: petInput.value.name, 127 + photoUrls: ['string'], 128 + status: 'available', 129 + tags: [ 130 + { 131 + id: 0, 132 + name: 'string' 133 + } 134 + ] 135 + }, 136 + // setting headers per request 137 + headers: { 138 + Authorization: 'Bearer <token_from_method>' 139 + } 140 + }) 141 + } 142 + 143 + watch(data, () => { 144 + pet.value = data.value 145 + }) 146 + 147 + watch(error, (error) => { 148 + console.log(error) 149 + }) 150 + </script> 151 + 152 + <template> 153 + <div class="bg-[#18191b] py-12"> 154 + <div class="mx-auto flex max-w-md flex-col gap-12"> 155 + <div class="flex items-center"> 156 + <a class="shrink-0" href="https://heyapi.vercel.app/" target="_blank"> 157 + <img 158 + alt="Hey API logo" 159 + class="size-16 transition duration-300 will-change-auto" 160 + src="https://heyapi.vercel.app/logo.png" 161 + /> 162 + </a> 163 + 164 + <h1 class="text-2xl font-bold text-white">@hey-api/openapi-ts 🤝 TanStack Vue Query</h1> 165 + </div> 166 + 167 + <div class="flex flex-col gap-2"> 168 + <div 169 + class="flex max-w-60 items-center gap-3 rounded border border-[#575e64] bg-[#1f2123] p-4" 170 + > 171 + <div 172 + class="flex size-10 place-content-center place-items-center rounded-full bg-[#233057] text-lg font-medium text-[#9eb1ff]" 173 + > 174 + <span> 175 + {{ pet?.name?.slice(0, 1) || 'N' }} 176 + </span> 177 + </div> 178 + 179 + <div> 180 + <p class="text-sm font-bold text-white">Name: {{ pet?.name || 'N/A' }}</p> 181 + 182 + <p class="text-sm text-[#f1f7feb5]">Category: {{ pet?.category?.name || 'N/A' }}</p> 183 + </div> 184 + </div> 185 + 186 + <button 187 + class="rounded bg-[#3e63dd] p-1 text-sm font-medium text-white" 188 + type="button" 189 + @click="setRandomPetId" 190 + > 191 + Get Random Pet 192 + </button> 193 + </div> 194 + 195 + <form class="flex flex-col gap-3" @submit.prevent="handleAddPet"> 196 + <div class="flex w-64 flex-col gap-1"> 197 + <label class="font-medium text-white" for="name">Name</label> 198 + 199 + <input 200 + v-model="petInput.name" 201 + class="rounded border border-[#575e64] bg-[#121314] p-1 text-sm text-white placeholder:text-[#575e64]" 202 + name="name" 203 + placeholder="Kitty" 204 + required 205 + /> 206 + </div> 207 + 208 + <div class="flex w-64 flex-col gap-1"> 209 + <label class="font-medium text-white" for="category">Category</label> 210 + 211 + <input 212 + v-model="petInput.category" 213 + class="rounded border border-[#575e64] bg-[#121314] p-1 text-sm text-white placeholder:text-[#575e64]" 214 + name="category" 215 + placeholder="Cats" 216 + required 217 + /> 218 + </div> 219 + 220 + <div class="flex gap-2"> 221 + <button class="rounded bg-[#3e63dd] p-2 text-sm font-medium text-white" type="submit"> 222 + Add Pet 223 + </button> 224 + 225 + <button 226 + class="rounded bg-[#3e63dd] p-2 text-sm font-medium text-white disabled:cursor-not-allowed" 227 + :disabled="!pet" 228 + type="button" 229 + @click="handleUpdatePet" 230 + > 231 + Update Pet 232 + </button> 233 + </div> 234 + </form> 235 + </div> 236 + </div> 237 + </template>
+9
examples/openapi-ts-tanstack-vue-query/tailwind.config.ts
··· 1 + import type { Config } from 'tailwindcss' 2 + 3 + export default { 4 + content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], 5 + plugins: [], 6 + theme: { 7 + extend: {} 8 + } 9 + } satisfies Config
+161 -18
pnpm-lock.yaml
··· 422 422 '@vue/tsconfig': 423 423 specifier: 0.5.1 424 424 version: 0.5.1 425 + autoprefixer: 426 + specifier: 10.4.20 427 + version: 10.4.20(postcss@8.4.41) 425 428 eslint: 426 429 specifier: 9.6.0 427 430 version: 9.6.0 ··· 434 437 npm-run-all2: 435 438 specifier: 6.2.0 436 439 version: 6.2.0 440 + postcss: 441 + specifier: 8.4.41 442 + version: 8.4.41 437 443 prettier: 438 444 specifier: 3.3.2 439 445 version: 3.3.2 446 + tailwindcss: 447 + specifier: 3.4.9 448 + version: 3.4.9(ts-node@10.9.2(@types/node@20.14.5)(typescript@5.5.3)) 440 449 typescript: 441 450 specifier: 5.5.3 442 451 version: 5.5.3 ··· 480 489 devDependencies: 481 490 '@angular-devkit/build-angular': 482 491 specifier: 17.3.7 483 - version: 17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3))(@types/express@4.17.21)(@types/node@20.14.10)(chokidar@3.6.0)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3) 492 + version: 17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3))(@types/express@4.17.21)(@types/node@20.14.10)(chokidar@3.6.0)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3) 484 493 '@angular/animations': 485 494 specifier: 17.3.9 486 495 version: 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)) ··· 3809 3818 peerDependencies: 3810 3819 postcss: ^8.1.0 3811 3820 3821 + autoprefixer@10.4.20: 3822 + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 3823 + engines: {node: ^10 || ^12 || >=14} 3824 + hasBin: true 3825 + peerDependencies: 3826 + postcss: ^8.1.0 3827 + 3812 3828 axios@1.7.3: 3813 3829 resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} 3814 3830 ··· 3912 3928 3913 3929 browserslist@4.23.1: 3914 3930 resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} 3931 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 3932 + hasBin: true 3933 + 3934 + browserslist@4.23.3: 3935 + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} 3915 3936 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 3916 3937 hasBin: true 3917 3938 ··· 3983 4004 caniuse-lite@1.0.30001636: 3984 4005 resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} 3985 4006 4007 + caniuse-lite@1.0.30001651: 4008 + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} 4009 + 3986 4010 chai@4.4.1: 3987 4011 resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 3988 4012 engines: {node: '>=4'} ··· 4436 4460 4437 4461 electron-to-chromium@1.4.810: 4438 4462 resolution: {integrity: sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==} 4463 + 4464 + electron-to-chromium@1.5.6: 4465 + resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} 4439 4466 4440 4467 emoji-regex@10.3.0: 4441 4468 resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} ··· 5877 5904 node-releases@2.0.14: 5878 5905 resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 5879 5906 5907 + node-releases@2.0.18: 5908 + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 5909 + 5880 5910 nopt@7.2.1: 5881 5911 resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} 5882 5912 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} ··· 7106 7136 engines: {node: '>=14.0.0'} 7107 7137 hasBin: true 7108 7138 7139 + tailwindcss@3.4.9: 7140 + resolution: {integrity: sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==} 7141 + engines: {node: '>=14.0.0'} 7142 + hasBin: true 7143 + 7109 7144 tapable@2.2.1: 7110 7145 resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 7111 7146 engines: {node: '>=6'} ··· 7379 7414 7380 7415 update-browserslist-db@1.0.16: 7381 7416 resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} 7417 + hasBin: true 7418 + peerDependencies: 7419 + browserslist: '>= 4.21.0' 7420 + 7421 + update-browserslist-db@1.1.0: 7422 + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} 7382 7423 hasBin: true 7383 7424 peerDependencies: 7384 7425 browserslist: '>= 4.21.0' ··· 8024 8065 transitivePeerDependencies: 8025 8066 - chokidar 8026 8067 8027 - '@angular-devkit/build-angular@17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3))(@types/express@4.17.21)(@types/node@20.14.10)(chokidar@3.6.0)(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3)': 8068 + '@angular-devkit/build-angular@17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.7)))(typescript@5.5.3))(@types/express@4.17.21)(@types/node@20.14.10)(chokidar@3.6.0)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3)': 8028 8069 dependencies: 8029 8070 '@ampproject/remapping': 2.3.0 8030 8071 '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) ··· 8093 8134 webpack-subresource-integrity: 5.1.0(webpack@5.90.3(esbuild@0.20.1)) 8094 8135 optionalDependencies: 8095 8136 esbuild: 0.20.1 8096 - tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)) 8137 + tailwindcss: 3.4.9(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)) 8097 8138 transitivePeerDependencies: 8098 8139 - '@rspack/core' 8099 8140 - '@swc/core' ··· 11789 11830 postcss: 8.4.39 11790 11831 postcss-value-parser: 4.2.0 11791 11832 11833 + autoprefixer@10.4.20(postcss@8.4.41): 11834 + dependencies: 11835 + browserslist: 4.23.3 11836 + caniuse-lite: 1.0.30001651 11837 + fraction.js: 4.3.7 11838 + normalize-range: 0.1.2 11839 + picocolors: 1.0.1 11840 + postcss: 8.4.41 11841 + postcss-value-parser: 4.2.0 11842 + 11792 11843 axios@1.7.3: 11793 11844 dependencies: 11794 11845 follow-redirects: 1.15.6 ··· 11933 11984 node-releases: 2.0.14 11934 11985 update-browserslist-db: 1.0.16(browserslist@4.23.1) 11935 11986 11987 + browserslist@4.23.3: 11988 + dependencies: 11989 + caniuse-lite: 1.0.30001651 11990 + electron-to-chromium: 1.5.6 11991 + node-releases: 2.0.18 11992 + update-browserslist-db: 1.1.0(browserslist@4.23.3) 11993 + 11936 11994 buffer-crc32@0.2.13: {} 11937 11995 11938 11996 buffer-crc32@1.0.0: {} ··· 12005 12063 camelcase@6.3.0: {} 12006 12064 12007 12065 caniuse-lite@1.0.30001636: {} 12066 + 12067 + caniuse-lite@1.0.30001651: {} 12008 12068 12009 12069 chai@4.4.1: 12010 12070 dependencies: ··· 12427 12487 ee-first@1.1.1: {} 12428 12488 12429 12489 electron-to-chromium@1.4.810: {} 12490 + 12491 + electron-to-chromium@1.5.6: {} 12430 12492 12431 12493 emoji-regex@10.3.0: {} 12432 12494 ··· 14038 14100 14039 14101 node-releases@2.0.14: {} 14040 14102 14103 + node-releases@2.0.18: {} 14104 + 14041 14105 nopt@7.2.1: 14042 14106 dependencies: 14043 14107 abbrev: 2.0.0 ··· 14389 14453 mlly: 1.7.1 14390 14454 pathe: 1.1.2 14391 14455 14392 - postcss-import@15.1.0(postcss@8.4.41): 14456 + postcss-import@15.1.0(postcss@8.4.39): 14393 14457 dependencies: 14394 - postcss: 8.4.41 14458 + postcss: 8.4.39 14395 14459 postcss-value-parser: 4.2.0 14396 14460 read-cache: 1.0.0 14397 14461 resolve: 1.22.8 14398 14462 14399 - postcss-js@4.0.1(postcss@8.4.41): 14463 + postcss-js@4.0.1(postcss@8.4.39): 14400 14464 dependencies: 14401 14465 camelcase-css: 2.0.1 14402 - postcss: 8.4.41 14466 + postcss: 8.4.39 14403 14467 14404 14468 postcss-load-config@3.1.4(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)): 14405 14469 dependencies: ··· 14416 14480 optionalDependencies: 14417 14481 postcss: 8.4.39 14418 14482 ts-node: 10.9.2(@types/node@20.14.10)(typescript@5.5.3) 14419 - optional: true 14420 14483 14421 - postcss-load-config@4.0.2(postcss@8.4.41)(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)): 14484 + postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.14.5)(typescript@5.5.3)): 14422 14485 dependencies: 14423 14486 lilconfig: 3.1.2 14424 14487 yaml: 2.4.5 14425 14488 optionalDependencies: 14426 - postcss: 8.4.41 14427 - ts-node: 10.9.2(@types/node@20.14.10)(typescript@5.5.3) 14489 + postcss: 8.4.39 14490 + ts-node: 10.9.2(@types/node@20.14.5)(typescript@5.5.3) 14428 14491 14429 14492 postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.5.3)(webpack@5.90.3(esbuild@0.20.1)): 14430 14493 dependencies: ··· 14460 14523 icss-utils: 5.1.0(postcss@8.4.39) 14461 14524 postcss: 8.4.39 14462 14525 14463 - postcss-nested@6.0.1(postcss@8.4.41): 14526 + postcss-nested@6.0.1(postcss@8.4.39): 14464 14527 dependencies: 14465 - postcss: 8.4.41 14528 + postcss: 8.4.39 14466 14529 postcss-selector-parser: 6.1.0 14467 14530 14468 14531 postcss-safe-parser@6.0.0(postcss@8.4.39): ··· 15352 15415 normalize-path: 3.0.0 15353 15416 object-hash: 3.0.0 15354 15417 picocolors: 1.0.1 15355 - postcss: 8.4.41 15356 - postcss-import: 15.1.0(postcss@8.4.41) 15357 - postcss-js: 4.0.1(postcss@8.4.41) 15358 - postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)) 15359 - postcss-nested: 6.0.1(postcss@8.4.41) 15418 + postcss: 8.4.39 15419 + postcss-import: 15.1.0(postcss@8.4.39) 15420 + postcss-js: 4.0.1(postcss@8.4.39) 15421 + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)) 15422 + postcss-nested: 6.0.1(postcss@8.4.39) 15423 + postcss-selector-parser: 6.1.0 15424 + resolve: 1.22.8 15425 + sucrase: 3.35.0 15426 + transitivePeerDependencies: 15427 + - ts-node 15428 + 15429 + tailwindcss@3.4.9(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)): 15430 + dependencies: 15431 + '@alloc/quick-lru': 5.2.0 15432 + arg: 5.0.2 15433 + chokidar: 3.6.0 15434 + didyoumean: 1.2.2 15435 + dlv: 1.1.3 15436 + fast-glob: 3.3.2 15437 + glob-parent: 6.0.2 15438 + is-glob: 4.0.3 15439 + jiti: 1.21.6 15440 + lilconfig: 2.1.0 15441 + micromatch: 4.0.7 15442 + normalize-path: 3.0.0 15443 + object-hash: 3.0.0 15444 + picocolors: 1.0.1 15445 + postcss: 8.4.39 15446 + postcss-import: 15.1.0(postcss@8.4.39) 15447 + postcss-js: 4.0.1(postcss@8.4.39) 15448 + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.14.10)(typescript@5.5.3)) 15449 + postcss-nested: 6.0.1(postcss@8.4.39) 15450 + postcss-selector-parser: 6.1.0 15451 + resolve: 1.22.8 15452 + sucrase: 3.35.0 15453 + transitivePeerDependencies: 15454 + - ts-node 15455 + optional: true 15456 + 15457 + tailwindcss@3.4.9(ts-node@10.9.2(@types/node@20.14.5)(typescript@5.5.3)): 15458 + dependencies: 15459 + '@alloc/quick-lru': 5.2.0 15460 + arg: 5.0.2 15461 + chokidar: 3.6.0 15462 + didyoumean: 1.2.2 15463 + dlv: 1.1.3 15464 + fast-glob: 3.3.2 15465 + glob-parent: 6.0.2 15466 + is-glob: 4.0.3 15467 + jiti: 1.21.6 15468 + lilconfig: 2.1.0 15469 + micromatch: 4.0.7 15470 + normalize-path: 3.0.0 15471 + object-hash: 3.0.0 15472 + picocolors: 1.0.1 15473 + postcss: 8.4.39 15474 + postcss-import: 15.1.0(postcss@8.4.39) 15475 + postcss-js: 4.0.1(postcss@8.4.39) 15476 + postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.14.5)(typescript@5.5.3)) 15477 + postcss-nested: 6.0.1(postcss@8.4.39) 15360 15478 postcss-selector-parser: 6.1.0 15361 15479 resolve: 1.22.8 15362 15480 sucrase: 3.35.0 ··· 15507 15625 v8-compile-cache-lib: 3.0.1 15508 15626 yn: 3.1.1 15509 15627 15628 + ts-node@10.9.2(@types/node@20.14.5)(typescript@5.5.3): 15629 + dependencies: 15630 + '@cspotcode/source-map-support': 0.8.1 15631 + '@tsconfig/node10': 1.0.11 15632 + '@tsconfig/node12': 1.0.11 15633 + '@tsconfig/node14': 1.0.3 15634 + '@tsconfig/node16': 1.0.4 15635 + '@types/node': 20.14.5 15636 + acorn: 8.12.0 15637 + acorn-walk: 8.3.3 15638 + arg: 4.1.3 15639 + create-require: 1.1.1 15640 + diff: 4.0.2 15641 + make-error: 1.3.6 15642 + typescript: 5.5.3 15643 + v8-compile-cache-lib: 3.0.1 15644 + yn: 3.1.1 15645 + optional: true 15646 + 15510 15647 tslib@1.14.1: {} 15511 15648 15512 15649 tslib@2.6.2: {} ··· 15611 15748 update-browserslist-db@1.0.16(browserslist@4.23.1): 15612 15749 dependencies: 15613 15750 browserslist: 4.23.1 15751 + escalade: 3.1.2 15752 + picocolors: 1.0.1 15753 + 15754 + update-browserslist-db@1.1.0(browserslist@4.23.3): 15755 + dependencies: 15756 + browserslist: 4.23.3 15614 15757 escalade: 3.1.2 15615 15758 picocolors: 1.0.1 15616 15759