Compare commits

..

3 Commits

31 changed files with 224 additions and 321 deletions

View File

@ -14,8 +14,6 @@ jobs:
steps: steps:
- name: Checkout git repo - name: Checkout git repo
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Generate UUID image name - name: Generate UUID image name
id: uuid id: uuid
run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV
@ -33,11 +31,10 @@ jobs:
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
file: ./uffizzi/Dockerfile file: ./uffizzi/Dockerfile
cache-from: type=gha
cache-to: type=gha,mode=max
build-nginx: build-nginx:
needs:
- build-application
name: Build and Push `nginx` name: Build and Push `nginx`
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
@ -65,6 +62,8 @@ jobs:
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
file: ./uffizzi/nginx/Dockerfile file: ./uffizzi/nginx/Dockerfile
build-args: |
BASE_IMAGE=${{ needs.build-application.outputs.tags }}
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max

View File

@ -83,25 +83,25 @@
@click="selectNote(index, close)" @click="selectNote(index, close)"
> >
<div class="flex justify-between px-2"> <div class="flex justify-between px-2">
<BaseLabel <label
class=" class="
!m-0 m-0
!text-base text-base
!font-semibold font-semibold
!leading-tight leading-tight
!text-gray-700 text-gray-700
!cursor-pointer cursor-pointer
" "
> >
{{ note.name }} {{ note.name }}
</BaseLabel> </label>
</div> </div>
</div> </div>
</div> </div>
<div v-else class="flex justify-center p-5 text-gray-400"> <div v-else class="flex justify-center p-5 text-gray-400">
<BaseLabel class="!text-base !text-gray-500"> <label class="text-base text-gray-500">
{{ $t('general.no_note_found') }} {{ $t('general.no_note_found') }}
</BaseLabel> </label>
</div> </div>
</div> </div>
<button <button
@ -122,18 +122,19 @@
@click="openNoteModal" @click="openNoteModal"
> >
<BaseIcon name="CheckCircleIcon" class="text-primary-400" /> <BaseIcon name="CheckCircleIcon" class="text-primary-400" />
<BaseLabel <label
class=" class="
!m-0 m-0
!ml-3 ml-3
!leading-none text-sm
!cursor-pointer leading-none
!font-base cursor-pointer
!text-primary-400 font-base
text-primary-400
" "
> >
{{ $t('settings.customization.notes.add_new_note') }} {{ $t('settings.customization.notes.add_new_note') }}
</BaseLabel> </label>
</button> </button>
</div> </div>
</PopoverPanel> </PopoverPanel>

View File

@ -1,9 +1,9 @@
<template> <template>
<div class="flex items-center justify-between mb-3"> <div class="flex items-center justify-between mb-3">
<div class="flex items-center text-base" style="flex: 4"> <div class="flex items-center text-base" style="flex: 4">
<BaseLabel class="!pr-2 !mb-0" align="right"> <label class="pr-2 mb-0" align="right">
{{ $t('invoices.item.tax') }} {{ $t('invoices.item.tax') }}
</BaseLabel> </label>
<BaseMultiselect <BaseMultiselect
v-model="selectedTax" v-model="selectedTax"
@ -35,9 +35,9 @@
> >
<BaseIcon name="CheckCircleIcon" class="h-5 text-primary-400" /> <BaseIcon name="CheckCircleIcon" class="h-5 text-primary-400" />
<BaseLabel <label
class="!ml-2 !leading-none !cursor-pointer !text-primary-400" class="ml-2 text-sm leading-none cursor-pointer text-primary-400"
>{{ $t('invoices.add_new_tax') }}</BaseLabel >{{ $t('invoices.add_new_tax') }}</label
> >
</button> </button>
</template> </template>

View File

@ -5,9 +5,9 @@
> >
<SelectNotePopup :type="type" @select="onSelectNote" /> <SelectNotePopup :type="type" @select="onSelectNote" />
</div> </div>
<BaseLabel class="!text-gray-800 !mb-4 "> <label class="text-gray-800 font-medium mb-4 text-sm">
{{ $t('invoices.notes') }} {{ $t('invoices.notes') }}
</BaseLabel> </label>
<BaseCustomInput <BaseCustomInput
v-model="store[storeProp].notes" v-model="store[storeProp].notes"
:content-loading="store.isFetchingInitialSettings" :content-loading="store.isFetchingInitialSettings"

View File

@ -16,12 +16,12 @@
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
</BaseContentPlaceholders> </BaseContentPlaceholders>
<BaseLabel <label
v-else v-else
class="!font-semibold !text-gray-400 !uppercase" class="text-sm font-semibold leading-5 text-gray-400 uppercase"
> >
{{ $t('estimates.sub_total') }} {{ $t('estimates.sub_total') }}
</BaseLabel> </label>
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
@ -29,7 +29,7 @@
<label <label
v-else v-else
class="flex items-center justify-center m-0 text-lg text-black dark:text-white uppercase " class="flex items-center justify-center m-0 text-lg text-black uppercase "
> >
<BaseFormatMoney <BaseFormatMoney
:amount="store.getSubTotal" :amount="store.getSubTotal"
@ -48,7 +48,7 @@
</BaseContentPlaceholders> </BaseContentPlaceholders>
<label <label
v-else-if="store[storeProp].tax_per_item === 'YES'" v-else-if="store[storeProp].tax_per_item === 'YES'"
class="m-0 text-sm font-semibold leading-5 text-gray-500 uppercase dark:text-gray-400" class="m-0 text-sm font-semibold leading-5 text-gray-500 uppercase"
> >
{{ tax.name }} - {{ tax.percent }}% {{ tax.name }} - {{ tax.percent }}%
</label> </label>
@ -59,7 +59,7 @@
<label <label
v-else-if="store[storeProp].tax_per_item === 'YES'" v-else-if="store[storeProp].tax_per_item === 'YES'"
class="flex items-center justify-center m-0 text-lg text-black dark:text-white uppercase " class="flex items-center justify-center m-0 text-lg text-black uppercase "
> >
<BaseFormatMoney :amount="tax.amount" :currency="defaultCurrency" /> <BaseFormatMoney :amount="tax.amount" :currency="defaultCurrency" />
</label> </label>
@ -75,12 +75,12 @@
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
</BaseContentPlaceholders> </BaseContentPlaceholders>
<BaseLabel <label
v-else v-else
class=" !font-semibold !text-gray-400 !uppercase" class="text-sm font-semibold leading-5 text-gray-400 uppercase"
> >
{{ $t('estimates.discount') }} {{ $t('estimates.discount') }}
</BaseLabel> </label>
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText <BaseContentPlaceholdersText
:lines="1" :lines="1"
@ -171,21 +171,21 @@
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
</BaseContentPlaceholders> </BaseContentPlaceholders>
<BaseLabel <label
v-else v-else
class="!m-0 !font-semibold !text-gray-400 !uppercase" class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase"
>{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</BaseLabel >{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label
> >
<BaseContentPlaceholders v-if="isLoading"> <BaseContentPlaceholders v-if="isLoading">
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" /> <BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
</BaseContentPlaceholders> </BaseContentPlaceholders>
<BaseLabel <label
v-else v-else
class="!flex !items-center !justify-center !text-lg !uppercase !text-primary-400" class="flex items-center justify-center text-lg uppercase text-primary-400"
> >
<BaseFormatMoney :amount="store.getTotal" :currency="defaultCurrency" /> <BaseFormatMoney :amount="store.getTotal" :currency="defaultCurrency" />
</BaseLabel> </label>
</div> </div>
</div> </div>
</template> </template>

View File

@ -1,9 +1,9 @@
<template> <template>
<div class="flex items-center justify-between w-full mt-2 text-sm"> <div class="flex items-center justify-between w-full mt-2 text-sm">
<BaseLabel class="!font-semibold !text-gray-500 !uppercase"> <label class="font-semibold leading-5 text-gray-500 uppercase">
{{ tax.name }} ({{ tax.percent }} %) {{ tax.name }} ({{ tax.percent }} %)
</BaseLabel> </label>
<label class="flex items-center justify-center text-lg text-black dark:text-white"> <label class="flex items-center justify-center text-lg text-black">
<BaseFormatMoney :amount="tax.amount" :currency="currency" /> <BaseFormatMoney :amount="tax.amount" :currency="currency" />
<BaseIcon <BaseIcon

View File

@ -88,37 +88,38 @@
@click="selectTaxType(taxType, close)" @click="selectTaxType(taxType, close)"
> >
<div class="flex justify-between px-2"> <div class="flex justify-between px-2">
<BaseLabel <label
class=" class="
!m-0 m-0
!text-base text-base
!font-semibold font-semibold
!leading-tight leading-tight
!cursor-pointer text-gray-700
cursor-pointer
" "
> >
{{ taxType.name }} {{ taxType.name }}
</BaseLabel> </label>
<BaseLabel <label
class=" class="
!m-0 m-0
!text-base text-base
!font-semibold font-semibold
!text-gray-700 text-gray-700
!cursor-pointer cursor-pointer
" "
> >
{{ taxType.percent }} % {{ taxType.percent }} %
</BaseLabel> </label>
</div> </div>
</div> </div>
</div> </div>
<div v-else class="flex justify-center p-5 text-gray-400"> <div v-else class="flex justify-center p-5 text-gray-400">
<BaseLabel class="!text-base !text-gray-500 !cursor-pointer"> <label class="text-base text-gray-500 cursor-pointer">
{{ $t('general.no_tax_found') }} {{ $t('general.no_tax_found') }}
</BaseLabel> </label>
</div> </div>
</div> </div>
@ -141,18 +142,19 @@
@click="openTaxTypeModal" @click="openTaxTypeModal"
> >
<BaseIcon name="CheckCircleIcon" class="text-primary-400" /> <BaseIcon name="CheckCircleIcon" class="text-primary-400" />
<BaseLabel <label
class=" class="
!m-0 m-0
!ml-3 ml-3
!leading-none text-sm
!cursor-pointer leading-none
!font-base cursor-pointer
!text-primary-400 font-base
text-primary-400
" "
> >
{{ $t('estimates.add_new_tax') }} {{ $t('estimates.add_new_tax') }}
</BaseLabel> </label>
</button> </button>
</div> </div>
</PopoverPanel> </PopoverPanel>

View File

@ -1,9 +1,9 @@
<template> <template>
<div> <div>
<BaseLabel class="!flex !text-gray-800 !mb-2"> <label class="flex text-gray-800 font-medium text-sm mb-2">
{{ $t('general.select_template') }} {{ $t('general.select_template') }}
<span class="text-sm text-red-500"> *</span> <span class="text-sm text-red-500"> *</span>
</BaseLabel> </label>
<BaseButton <BaseButton
type="button" type="button"
class="flex justify-center w-full text-sm lg:w-auto hover:bg-gray-200" class="flex justify-center w-full text-sm lg:w-auto hover:bg-gray-200"

View File

@ -12,6 +12,8 @@
class="h-screen h-screen-ios overflow-y-auto md:pl-56 xl:pl-64 min-h-0" class="h-screen h-screen-ios overflow-y-auto md:pl-56 xl:pl-64 min-h-0"
> >
<div class="pt-16 pb-16"> <div class="pt-16 pb-16">
<h1>Testing</h1>
<router-view /> <router-view />
</div> </div>
</main> </main>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="h-screen overflow-y-auto text-base"> <div class="h-screen overflow-y-auto text-base">
<h1>Testing</h1>
<NotificationRoot /> <NotificationRoot />
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">

View File

@ -93,6 +93,9 @@
> >
{{ pageHeading }} {{ pageHeading }}
</h1> </h1>
<h1>Testing</h1>
<p <p
class=" class="
hidden hidden

View File

@ -15,13 +15,6 @@
bg-gradient-to-r bg-gradient-to-r
from-primary-500 from-primary-500
to-primary-400 to-primary-400
dark:from-gray-700/70 dark:to-gray-800/70
bg-primary-500
dark:bg-transparent
dark:backdrop-blur-xl
dark:shadow-glass
dark:border
dark:border-white/10
" "
> >
<router-link <router-link
@ -60,7 +53,6 @@
cursor-pointer cursor-pointer
md:hidden md:ml-0 md:hidden md:ml-0
hover:bg-gray-100 hover:bg-gray-100
dark:bg-gray-800 dark:border-gray-500 dark:border
" "
@click.prevent="onToggle" @click.prevent="onToggle"
> >

View File

@ -15,9 +15,7 @@
leave-from="opacity-100" leave-from="opacity-100"
leave-to="opacity-0" leave-to="opacity-0"
> >
<DialogOverlay <DialogOverlay class="fixed inset-0 bg-gray-600 bg-opacity-75" />
class="fixed inset-0 bg-gray-600 bg-opacity-75 dark:bg-gray-900/90"
/>
</TransitionChild> </TransitionChild>
<TransitionChild <TransitionChild
@ -29,9 +27,7 @@
leave-from="translate-x-0" leave-from="translate-x-0"
leave-to="-translate-x-full" leave-to="-translate-x-full"
> >
<div <div class="relative flex flex-col flex-1 w-full max-w-xs bg-white">
class="relative flex flex-col flex-1 w-full max-w-xs bg-white dark:bg-gray-800"
>
<TransitionChild <TransitionChild
as="template" as="template"
enter="ease-in-out duration-300" enter="ease-in-out duration-300"
@ -44,17 +40,18 @@
<div class="absolute top-0 right-0 pt-2 -mr-12"> <div class="absolute top-0 right-0 pt-2 -mr-12">
<button <button
class=" class="
flex flex
items-center items-center
justify-center justify-center
w-10 w-10
h-10 h-10
ml-1 ml-1
rounded-full rounded-full
focus:outline-none focus:outline-none
focus:ring-2 focus:ring-2
focus:ring-inset focus:ring-inset
focus:ring-white" focus:ring-white
"
@click="globalStore.setSidebarVisibility(false)" @click="globalStore.setSidebarVisibility(false)"
> >
<span class="sr-only">Close sidebar</span> <span class="sr-only">Close sidebar</span>
@ -85,8 +82,8 @@
:to="item.link" :to="item.link"
:class="[ :class="[
hasActiveUrl(item.link) hasActiveUrl(item.link)
? 'text-primary-500 border-primary-500 bg-gray-100 dark:shadow-glass dark:backdrop-blur-xl dark:hover:bg-gray-700 dark:bg-gray-700/50 dark:text-primary-400 dark:font-medium' ? 'text-primary-500 border-primary-500 bg-gray-100 '
: 'text-black dark:text-gray-300', : 'text-black',
'cursor-pointer px-0 pl-4 py-3 border-transparent flex items-center border-l-4 border-solid text-sm not-italic font-medium', 'cursor-pointer px-0 pl-4 py-3 border-transparent flex items-center border-l-4 border-solid text-sm not-italic font-medium',
]" ]"
@click="globalStore.setSidebarVisibility(false)" @click="globalStore.setSidebarVisibility(false)"
@ -103,10 +100,6 @@
/> />
{{ $t(item.title) }} {{ $t(item.title) }}
</router-link> </router-link>
<LightDarkSwitch
:show-label="false"
class="absolute right-6 top-6 !w-auto"
/>
</nav> </nav>
</div> </div>
</div> </div>
@ -120,16 +113,17 @@
<!-- DESKTOP MENU --> <!-- DESKTOP MENU -->
<div <div
class=" class="
hidden hidden
w-56 w-56
h-screen h-screen
bg-white pb-32
border-r border-gray-200 border-solid overflow-y-auto
xl:w-64 bg-white
md:fixed md:flex md:flex-col md:inset-y-0 border-r border-gray-200 border-solid
pt-16 xl:w-64
dark:border-gray-800 md:fixed md:flex md:flex-col md:inset-y-0
dark:bg-gray-800/80" pt-16
"
> >
<div <div
v-for="menu in globalStore.menuGroups" v-for="menu in globalStore.menuGroups"
@ -142,8 +136,8 @@
:to="item.link" :to="item.link"
:class="[ :class="[
hasActiveUrl(item.link) hasActiveUrl(item.link)
? 'text-primary-500 border-primary-500 bg-gray-100 dark:border-primary-400 dark:shadow-glass dark:backdrop-blur-xl dark:hover:bg-gray-700 dark:bg-gray-700/50 dark:text-primary-400 dark:font-medium' ? 'text-primary-500 border-primary-500 bg-gray-100 '
: 'text-black dark:hover:bg-transparent dark:hover:text-white dark:text-gray-300', : 'text-black',
'cursor-pointer px-0 pl-6 hover:bg-gray-50 py-3 group flex items-center border-l-4 border-solid border-transparent text-sm not-italic font-medium', 'cursor-pointer px-0 pl-6 hover:bg-gray-50 py-3 group flex items-center border-l-4 border-solid border-transparent text-sm not-italic font-medium',
]" ]"
> >
@ -151,8 +145,8 @@
:name="item.icon" :name="item.icon"
:class="[ :class="[
hasActiveUrl(item.link) hasActiveUrl(item.link)
? 'text-primary-500 group-hover:text-primary-500 dark:text-primary-400 dark:group-hover:text-primary-500 ' ? 'text-primary-500 group-hover:text-primary-500 '
: 'text-gray-400 group-hover:text-black dark:text-gray-400 dark:group-hover:text-white', : 'text-gray-400 group-hover:text-black',
'mr-4 shrink-0 h-5 w-5 ', 'mr-4 shrink-0 h-5 w-5 ',
]" ]"
/> />
@ -160,9 +154,6 @@
{{ $t(item.title) }} {{ $t(item.title) }}
</router-link> </router-link>
</div> </div>
<LightDarkSwitch
class="absolute bottom-0 py-4 border-t border-gray-200 dark:border-gray-700"
/>
</div> </div>
</template> </template>
@ -178,7 +169,6 @@ import {
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { useGlobalStore } from '@/scripts/admin/stores/global' import { useGlobalStore } from '@/scripts/admin/stores/global'
import LightDarkSwitch from '@/scripts/components/LightDarkSwitcher.vue'
const route = useRoute() const route = useRoute()
const globalStore = useGlobalStore() const globalStore = useGlobalStore()

View File

@ -34,7 +34,6 @@ export const useGlobalStore = (useWindow = false) => {
isAppLoaded: false, isAppLoaded: false,
isSidebarOpen: false, isSidebarOpen: false,
areCurrenciesLoading: false, areCurrenciesLoading: false,
isDarkModeOn: false,
downloadReport: null, downloadReport: null,
}), }),
@ -71,8 +70,8 @@ export const useGlobalStore = (useWindow = false) => {
moduleStore.apiToken = response.data.global_settings.api_token moduleStore.apiToken = response.data.global_settings.api_token
moduleStore.enableModules = response.data.modules moduleStore.enableModules = response.data.modules
// company store // company store
companyStore.companies = response.data.companies companyStore.companies = response.data.companies
companyStore.selectedCompany = response.data.current_company companyStore.selectedCompany = response.data.current_company
companyStore.setSelectedCompany(response.data.current_company) companyStore.setSelectedCompany(response.data.current_company)
companyStore.selectedCompanySettings = companyStore.selectedCompanySettings =

View File

@ -53,7 +53,7 @@
</div> </div>
</div> </div>
<div v-else class="mt-24"> <div v-else class="mt-24">
<label class="flex items-center justify-center text-gray-500 dark:text-gray-300"> <label class="flex items-center justify-center text-gray-500">
{{ $t('modules.no_modules_installed') }} {{ $t('modules.no_modules_installed') }}
</label> </label>
</div> </div>

View File

@ -215,9 +215,9 @@
<SelectNotePopup type="Payment" @select="onSelectNote" /> <SelectNotePopup type="Payment" @select="onSelectNote" />
</div> </div>
<BaseLabel class="!mb-4 !text-gray-800"> <label class="mb-4 text-sm font-medium text-gray-800">
{{ $t('estimates.notes') }} {{ $t('estimates.notes') }}
</BaseLabel> </label>
<BaseCustomInput <BaseCustomInput
v-model="paymentStore.currentPayment.notes" v-model="paymentStore.currentPayment.notes"

View File

@ -4,9 +4,9 @@
:description="$t('settings.update_app.description')" :description="$t('settings.update_app.description')"
> >
<div class="pb-8 ml-0"> <div class="pb-8 ml-0">
<BaseLabel class="!input-label"> <label class="text-sm not-italic font-medium input-label">
{{ $t('settings.update_app.current_version') }} {{ $t('settings.update_app.current_version') }}
</BaseLabel> </label>
<div <div
class=" class="
@ -64,9 +64,9 @@
</div> </div>
</div> </div>
<BaseLabel class="!input-label"> <label class="text-sm not-italic font-medium input-label">
{{ $t('settings.update_app.next_version') }} {{ $t('settings.update_app.next_version') }}
</BaseLabel> </label>
<br /> <br />
<div <div
class=" class="
@ -99,9 +99,9 @@
v-html="description" v-html="description"
></div> ></div>
<BaseLabel class=" !input-label"> <label class="text-sm not-italic font-medium input-label">
{{ $t('settings.update_app.requirements') }} {{ $t('settings.update_app.requirements') }}
</BaseLabel> </label>
<table class="w-1/2 mt-2 border-2 border-gray-200 BaseTable-fixed"> <table class="w-1/2 mt-2 border-2 border-gray-200 BaseTable-fixed">
<tr <tr

View File

@ -97,7 +97,6 @@
whitespace-nowrap whitespace-nowrap
mr-2 mr-2
min-w-[200px] min-w-[200px]
dark:text-primary-400
" "
> >
{{ element.label }} {{ element.label }}

View File

@ -50,20 +50,20 @@
pb-4 pb-4
" "
> >
<BaseLabel <label
class=" class="
!px-3 px-3
!py-2 py-2
!text-xs text-xs
!font-semibold font-semibold
!text-gray-400 text-gray-400
!mb-0.5 mb-0.5
!block block
!uppercase uppercase
" "
> >
{{ $t('company_switcher.label') }} {{ $t('company_switcher.label') }}
</BaseLabel> </label>
<div <div
v-if="companyStore.companies.length < 1" v-if="companyStore.companies.length < 1"

View File

@ -62,9 +62,9 @@
</div> </div>
<div v-else> <div v-else>
<div v-if="usersStore.customerList.length > 0"> <div v-if="usersStore.customerList.length > 0">
<BaseLabel class="!text-gray-400 !mb-0.5 !block !px-2 !uppercase"> <label class="text-sm text-gray-400 mb-0.5 block px-2 uppercase">
{{ $t('global_search.customers') }} {{ $t('global_search.customers') }}
</BaseLabel> </label>
<div <div
v-for="(customer, index) in usersStore.customerList" v-for="(customer, index) in usersStore.customerList"
:key="index" :key="index"
@ -108,11 +108,11 @@
</div> </div>
<div v-if="usersStore.userList.length > 0" class="mt-2"> <div v-if="usersStore.userList.length > 0" class="mt-2">
<BaseLabel <label
class="!text-gray-400 !mb-2 !block !px-2 !uppercase" class="text-sm text-gray-400 mb-2 block px-2 mb-0.5 uppercase"
> >
{{ $t('global_search.users') }} {{ $t('global_search.users') }}
</BaseLabel> </label>
<div <div
v-for="(user, index) in usersStore.userList" v-for="(user, index) in usersStore.userList"
:key="index" :key="index"

View File

@ -1,101 +0,0 @@
<!-- This example requires Tailwind CSS v2.0+ -->
<script lang="ts" setup>
import { Switch, SwitchGroup, SwitchLabel } from '@headlessui/vue'
import { useGlobalStore } from '@/scripts/admin/stores/global'
import { computed, ref } from 'vue'
defineProps({
showLabel: {
type: Boolean,
default: true,
},
vertical: {
type: Boolean,
default: false,
},
})
const globalStore = useGlobalStore()
const enabled = ref(
localStorage.getItem('theme') === 'dark' ||
document.documentElement.classList.contains('dark')
)
globalStore.isDarkModeOn = enabled
function onChange(val) {
if (val) {
localStorage.theme = 'dark'
document.documentElement.classList.add('dark')
document.documentElement.style.setProperty('color-scheme', 'dark')
globalStore.isDarkModeOn = true
} else {
localStorage.theme = 'light'
document.documentElement.classList.remove('dark')
document.documentElement.style.setProperty('color-scheme', 'light')
globalStore.isDarkModeOn = false
}
}
</script>
<template>
<div class="w-full flex justify-center">
<SwitchGroup
as="div"
class="flex items-center"
:class="vertical ? 'flex-col justify-center' : 'flex-row'"
>
<Switch
v-model="enabled"
class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500 dark:ring-offset-gray-700"
:class="[enabled ? 'bg-primary-600' : 'bg-gray-200']"
@update:modelValue="onChange"
>
<span class="sr-only">Use setting</span>
<span
class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white shadow transform ring-0 transition ease-in-out duration-200"
:class="[enabled ? 'translate-x-5' : 'translate-x-0']"
>
<span
class="absolute inset-0 h-full w-full flex items-center justify-center transition-opacity"
:class="[
enabled
? 'opacity-0 ease-out duration-100'
: 'opacity-100 ease-in duration-200',
]"
aria-hidden="true"
>
<BaseIcon class="h-3 w-3 text-yellow-500" name="SunIcon" />
</span>
<span
class="absolute inset-0 h-full w-full flex items-center justify-center transition-opacity"
:class="[
enabled
? 'opacity-100 ease-in duration-200'
: 'opacity-0 ease-out duration-100',
]"
aria-hidden="true"
>
<BaseIcon class="h-3 w-3 text-primary-500" name="MoonIcon" />
</span>
</span>
</Switch>
<SwitchLabel
v-if="showLabel"
as="span"
class="cursor-pointer"
:class="vertical ? 'px-1 text-center mt-2' : 'ml-3'"
>
<span
v-if="enabled"
class="text-sm font-medium text-gray-500 dark:text-gray-400"
>
Dark Mode
</span>
<span v-else class="text-sm font-medium text-gray-500">
Light Mode
</span>
</SwitchLabel>
</SwitchGroup>
</div>
</template>

View File

@ -15,7 +15,7 @@
v-if="label" v-if="label"
:for="id" :for="id"
:class="`font-medium ${ :class="`font-medium ${
disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600 dark:text-white' disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600'
} cursor-pointer `" } cursor-pointer `"
> >
{{ label }} {{ label }}

View File

@ -69,29 +69,31 @@
</div> </div>
<div class="grid grid-cols-2 gap-8 mt-2"> <div class="grid grid-cols-2 gap-8 mt-2">
<div v-if="selectedCustomer.billing" class="flex flex-col"> <div v-if="selectedCustomer.billing" class="flex flex-col">
<BaseLabel <label
class=" class="
!mb-1 mb-1
!text-left !text-gray-400 text-sm
!uppercase font-medium
!whitespace-nowrap text-left text-gray-400
uppercase
whitespace-nowrap
" "
> >
{{ $t('general.bill_to') }} {{ $t('general.bill_to') }}
</BaseLabel> </label>
<div <div
v-if="selectedCustomer.billing" v-if="selectedCustomer.billing"
class="flex flex-col flex-1 p-0 text-left" class="flex flex-col flex-1 p-0 text-left"
> >
<BaseLabel <label
v-if="selectedCustomer.billing.name" v-if="selectedCustomer.billing.name"
class="!relative !w-11/12 !truncate" class="relative w-11/12 text-sm truncate"
> >
{{ selectedCustomer.billing.name }} {{ selectedCustomer.billing.name }}
</BaseLabel> </label>
<BaseLabel class="!relative !w-11/12 !truncate"> <label class="relative w-11/12 text-sm truncate">
<span v-if="selectedCustomer.billing.city"> <span v-if="selectedCustomer.billing.city">
{{ selectedCustomer.billing.city }} {{ selectedCustomer.billing.city }}
</span> </span>
@ -106,40 +108,42 @@
<span v-if="selectedCustomer.billing.state"> <span v-if="selectedCustomer.billing.state">
{{ selectedCustomer.billing.state }} {{ selectedCustomer.billing.state }}
</span> </span>
</BaseLabel> </label>
<BaseLabel <label
v-if="selectedCustomer.billing.zip" v-if="selectedCustomer.billing.zip"
class="!relative !w-11/12 !truncate" class="relative w-11/12 text-sm truncate"
> >
{{ selectedCustomer.billing.zip }} {{ selectedCustomer.billing.zip }}
</BaseLabel> </label>
</div> </div>
</div> </div>
<div v-if="selectedCustomer.shipping" class="flex flex-col"> <div v-if="selectedCustomer.shipping" class="flex flex-col">
<BaseLabel <label
class=" class="
!mb-1 mb-1
!text-left !text-gray-400 text-sm
!uppercase font-medium
!whitespace-nowrap text-left text-gray-400
uppercase
whitespace-nowrap
" "
> >
{{ $t('general.ship_to') }} {{ $t('general.ship_to') }}
</BaseLabel> </label>
<div <div
v-if="selectedCustomer.shipping" v-if="selectedCustomer.shipping"
class="flex flex-col flex-1 p-0 text-left" class="flex flex-col flex-1 p-0 text-left"
> >
<BaseLabel <label
v-if="selectedCustomer.shipping.name" v-if="selectedCustomer.shipping.name"
class="!relative !w-11/12 !truncate" class="relative w-11/12 text-sm truncate"
> >
{{ selectedCustomer.shipping.name }} {{ selectedCustomer.shipping.name }}
</BaseLabel> </label>
<BaseLabel class="!relative !w-11/12 !truncate"> <label class="relative w-11/12 text-sm truncate">
<span v-if="selectedCustomer.shipping.city"> <span v-if="selectedCustomer.shipping.city">
{{ selectedCustomer.shipping.city }} {{ selectedCustomer.shipping.city }}
</span> </span>
@ -154,13 +158,13 @@
<span v-if="selectedCustomer.shipping.state"> <span v-if="selectedCustomer.shipping.state">
{{ selectedCustomer.shipping.state }} {{ selectedCustomer.shipping.state }}
</span> </span>
</BaseLabel> </label>
<BaseLabel <label
v-if="selectedCustomer.shipping.zip" v-if="selectedCustomer.shipping.zip"
class="!relative !w-11/12 !text-sm !truncate" class="relative w-11/12 text-sm truncate"
> >
{{ selectedCustomer.shipping.zip }} {{ selectedCustomer.shipping.zip }}
</BaseLabel> </label>
</div> </div>
</div> </div>
</div> </div>
@ -207,7 +211,7 @@
/> />
<div class="mt-1"> <div class="mt-1">
<label class="text-lg font-medium text-gray-900 dark:text-white"> <label class="text-lg font-medium text-gray-900">
{{ $t('customers.new_customer') }} {{ $t('customers.new_customer') }}
<span class="text-red-500"> * </span> <span class="text-red-500"> * </span>
</label> </label>
@ -331,9 +335,9 @@
v-if="customerStore.customers.length === 0" v-if="customerStore.customers.length === 0"
class="flex justify-center p-5 text-gray-400" class="flex justify-center p-5 text-gray-400"
> >
<BaseLabel class="!text-base !text-gray-500 !cursor-pointer"> <label class="text-base text-gray-500 cursor-pointer">
{{ $t('customers.no_customers_found') }} {{ $t('customers.no_customers_found') }}
</BaseLabel> </label>
</div> </div>
</ul> </ul>
</div> </div>
@ -358,18 +362,19 @@
> >
<BaseIcon name="UserAddIcon" class="text-primary-400" /> <BaseIcon name="UserAddIcon" class="text-primary-400" />
<BaseLabel <label
class=" class="
!m-0 m-0
!ml-3 ml-3
!leading-none text-sm
!cursor-pointer leading-none
!font-base cursor-pointer
!text-primary-400 font-base
text-primary-400
" "
> >
{{ $t('customers.add_new_customer') }} {{ $t('customers.add_new_customer') }}
</BaseLabel> </label>
</button> </button>
</PopoverPanel> </PopoverPanel>
</div> </div>

View File

@ -4,10 +4,10 @@
<slot></slot> <slot></slot>
</div> </div>
<div class="mt-2"> <div class="mt-2">
<BaseLabel >{{ title }}</BaseLabel> <label class="font-medium">{{ title }}</label>
</div> </div>
<div class="mt-2"> <div class="mt-2">
<label class="text-gray-500 dark:text-gray-400"> <label class="text-gray-500">
{{ description }} {{ description }}
</label> </label>
</div> </div>

View File

@ -20,7 +20,6 @@
hover:text-gray-700 hover:text-gray-700
top-2.5 top-2.5
right-3.5 right-3.5
dark:text-gray-300
" "
@click="$emit('clear')" @click="$emit('clear')"
> >

View File

@ -3,15 +3,18 @@
<BaseContentPlaceholders v-if="contentLoading"> <BaseContentPlaceholders v-if="contentLoading">
<BaseContentPlaceholdersText :lines="1" :class="contentLoadClass" /> <BaseContentPlaceholdersText :lines="1" :class="contentLoadClass" />
</BaseContentPlaceholders> </BaseContentPlaceholders>
<BaseLabel <label
v-else-if="label" v-else-if="label"
:class="labelClasses" :class="labelClasses"
class=" class="
!flex flex
!items-center text-sm
!text-gray-800 not-italic
!whitespace-nowrap items-center
!justify-between font-medium
text-gray-800
whitespace-nowrap
justify-between
" "
> >
<div> <div>
@ -25,10 +28,10 @@
name="InformationCircleIcon" name="InformationCircleIcon"
class="h-4 text-gray-400 cursor-pointer hover:text-gray-600" class="h-4 text-gray-400 cursor-pointer hover:text-gray-600"
/> />
</BaseLabel> </label>
<div :class="inputContainerClasses"> <div :class="inputContainerClasses">
<slot></slot> <slot></slot>
<span v-if="helpText" class="text-gray-500 text-xs mt-1 font-light dark:text-gray-400"> <span v-if="helpText" class="text-gray-500 text-xs mt-1 font-light">
{{ helpText }} {{ helpText }}
</span> </span>
<span v-if="error" class="block mt-0.5 text-sm text-red-500"> <span v-if="error" class="block mt-0.5 text-sm text-red-500">

View File

@ -1,5 +1,5 @@
<template> <template>
<label class="text-sm not-italic font-medium leading-5 text-primary-800 dark:!text-gray-300"> <label class="text-sm not-italic font-medium leading-5 text-primary-800">
<slot /> <slot />
</label> </label>
</template> </template>

View File

@ -17,7 +17,7 @@
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<!-- Module Styles --> <!-- Module Styles -->
@foreach (\Crater\Services\Module\ModuleFacade::allStyles() as $name => $path) @foreach(\Crater\Services\Module\ModuleFacade::allStyles() as $name => $path)
<link rel="stylesheet" href="/modules/styles/{{ $name }}"> <link rel="stylesheet" href="/modules/styles/{{ $name }}">
@endforeach @endforeach
@ -25,8 +25,8 @@
</head> </head>
<body <body
class="h-full overflow-hidden bg-gray-100 dark:bg-gray-900 dark:text-white font-base class="h-full overflow-hidden bg-gray-100 font-base
@if (isset($current_theme)) theme-{{ $current_theme }} @else theme-{{ get_app_setting('admin_portal_theme') ?? 'crater' }} @endif "> @if(isset($current_theme)) theme-{{ $current_theme }} @else theme-{{get_app_setting('admin_portal_theme') ?? 'crater'}} @endif ">
<!-- Module Scripts --> <!-- Module Scripts -->
@foreach (\Crater\Services\Module\ModuleFacade::allScripts() as $name => $path) @foreach (\Crater\Services\Module\ModuleFacade::allScripts() as $name => $path)
@ -38,14 +38,6 @@
@endforeach @endforeach
<script type="module"> <script type="module">
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
document.documentElement.style.setProperty('color-scheme', 'dark');
} else {
document.documentElement.classList.remove('dark')
document.documentElement.style.setProperty('color-scheme', 'light')
}
@if(isset($customer_logo)) @if(isset($customer_logo))
window.customer_logo = "/storage/{{$customer_logo}}" window.customer_logo = "/storage/{{$customer_logo}}"
@ -65,12 +57,12 @@
window.login_page_description = "{{$login_page_description}}" window.login_page_description = "{{$login_page_description}}"
@endif @endif
@if(isset($copyright_text)) @if(isset($copyright_text))
window.copyright_text = "{{$copyright_text}}" window.copyright_text = "{{$copyright_text}}"
@endif @endif
window.Crater.start() window.Crater.start()
</script> </script>

View File

@ -19,7 +19,6 @@ module.exports = {
'./resources/scripts/**/*.js', './resources/scripts/**/*.js',
'./resources/scripts/**/*.vue', './resources/scripts/**/*.vue',
], ],
darkMode: 'class',
theme: { theme: {
extend: { extend: {
colors: { colors: {

View File

@ -11,7 +11,8 @@ RUN apt-get update && apt-get install -y \
unzip \ unzip \
libzip-dev \ libzip-dev \
libmagickwand-dev \ libmagickwand-dev \
mariadb-client mariadb-client \
npm
# Clear cache # Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/* RUN apt-get clean && rm -rf /var/lib/apt/lists/*
@ -45,4 +46,19 @@ RUN chmod -R 775 composer.json composer.lock \
RUN chown -R $(whoami):$(whoami) /var/log/ RUN chown -R $(whoami):$(whoami) /var/log/
RUN chmod -R 775 /var/log RUN chmod -R 775 /var/log
# Cleanup manually generated build files
RUN rm -rf /var/www/public/build
RUN npm config set user 0
RUN npm config set unsafe-perm true
# Frontend bulding
RUN sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=sqlite/g' /var/www/.env
RUN sed -i 's/DB_DATABASE=crater/DB_DATABASE=\/tmp\/crater.sqlite/g' /var/www/.env
RUN touch /tmp/crater.sqlite
RUN composer install --no-interaction --prefer-dist
RUN npm i -f
RUN npm install --save-dev sass
RUN export NODE_OPTIONS="--max-old-space-size=4096" && /usr/bin/npx vite build --target=es2020
RUN sed -i 's/DB_CONNECTION=sqlite/DB_CONNECTION=mysql/g' /var/www/.env
RUN sed -i 's/DB_DATABASE=\/tmp\/crater.sqlite/DB_DATABASE=crater/g' /var/www/.env
USER crater-user USER crater-user

View File

@ -1,7 +1,9 @@
ARG BASE_IMAGE
FROM $BASE_IMAGE as build
FROM nginx:1.17-alpine FROM nginx:1.17-alpine
RUN rm /etc/nginx/conf.d/default.conf RUN rm /etc/nginx/conf.d/default.conf
COPY ./ /var/www COPY --from=build /var/www /var/www
COPY ./uffizzi/nginx/nginx /etc/nginx/conf.d/ COPY ./uffizzi/nginx/nginx /etc/nginx/conf.d/