Private
Public Access
1
0

Fix .gitignore excluding frontend plugins and test files

The broad plugins/ and imports/ patterns were matching directories
at all levels, excluding frontend/src/plugins/vuetify.ts,
frontend/src/views/imports/, frontend/src/views/plugins/, and
src/Purrse.Tests/Plugins/. Changed to /plugins/ and /imports/
to only match root-level directories.

This was the root cause of the Docker build failure - vuetify.ts
was missing from the repo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Catherine Renelle
2026-02-08 10:04:19 -05:00
parent 79821e3e04
commit 524176faec
7 changed files with 258 additions and 3 deletions
+40
View File
@@ -0,0 +1,40 @@
import 'vuetify/styles'
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
export default createVuetify({
components,
directives,
theme: {
defaultTheme: 'dark',
themes: {
dark: {
dark: true,
colors: {
primary: '#7C4DFF',
secondary: '#FF6D00',
accent: '#00BFA5',
error: '#FF5252',
warning: '#FFC107',
info: '#2196F3',
success: '#4CAF50',
background: '#121212',
surface: '#1E1E1E',
}
},
light: {
dark: false,
colors: {
primary: '#6200EA',
secondary: '#FF6D00',
accent: '#00BFA5',
error: '#FF5252',
warning: '#FFC107',
info: '#2196F3',
success: '#4CAF50',
}
}
}
}
})
@@ -0,0 +1,42 @@
<template>
<div>
<h1 class="text-h4 mb-4">Import Transactions</h1>
<v-card>
<v-card-text>
<v-file-input v-model="file" label="Select file to import" accept=".ofx,.qfx,.csv,.qif" prepend-icon="mdi-upload" />
<v-select v-model="selectedAccount" label="Target Account" :items="accounts" item-title="name" item-value="id" />
<v-btn color="primary" :disabled="!file || !selectedAccount" @click="uploadFile" :loading="uploading">Import</v-btn>
</v-card-text>
</v-card>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { useAccountsStore } from '@/stores/accounts'
import api from '@/services/api'
const accountsStore = useAccountsStore()
const accounts = ref(accountsStore.accounts)
const file = ref<File | null>(null)
const selectedAccount = ref('')
const uploading = ref(false)
onMounted(async () => {
await accountsStore.fetchAccounts()
accounts.value = accountsStore.accounts
})
async function uploadFile() {
if (!file.value || !selectedAccount.value) return
uploading.value = true
try {
const formData = new FormData()
formData.append('file', file.value)
await api.post(`/imports/upload?accountId=${selectedAccount.value}`, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
file.value = null
} finally {
uploading.value = false
}
}
</script>
@@ -0,0 +1,6 @@
<template>
<div>
<h1 class="text-h4 mb-4">Plugins</h1>
<v-card><v-card-text><p class="text-medium-emphasis">Plugin marketplace coming in Phase 5. Extend Purrse with community-built integrations and features.</p></v-card-text></v-card>
</div>
</template>