Compare commits

...

38 Commits

Author SHA1 Message Date
0a1d124633 fix base select input 2023-03-30 11:50:54 +05:30
e9abb197b7 fix placeholder 2023-03-29 16:47:01 +05:30
6402771cb8 add dark mode in customer view file 2023-03-29 16:46:20 +05:30
3bb53d2a24 add dark mode in customer side header 2023-03-29 12:51:01 +05:30
feda20431c add dark mode in DashboardStatsItem 2023-03-29 10:04:10 +05:30
238cdb3c25 Add dark mode in BaseEmptyPlaceholder (#1193) 2023-03-28 18:25:45 +05:30
55bf70c868 Add dark mode in NotificationItem (#1196) 2023-03-28 17:49:52 +05:30
0c5adff9b4 Dark customer address popup custominput (#1195)
* add dark mode in BaseCustomInput

* add dark mode in BaseCustomerSelectPopup

* Add dark mode in BaseCustomerAddressDisplay
2023-03-28 17:49:00 +05:30
3d5732ee26 Add dark mode in BaseDivider & BaseDescriptionList (#1194)
* add dark mode in BaseDivider

* add dark mode in BaseDescriptionListItem
2023-03-28 17:34:54 +05:30
5aa7decdbe add dark-mode in BaseRadio component (#1182) 2023-03-28 17:34:18 +05:30
5c67780870 add dark-mode in checkbox (#1162) 2023-03-28 17:26:20 +05:30
ba7f619c67 add dark mode in BaseMoney and BaseTextArea (#1170) 2023-03-28 17:20:29 +05:30
82efad71c0 Add dark mode in BaseErrorAlert (#1192) 2023-03-28 17:16:22 +05:30
826ef72faa add dark mode in BaseItemSelect component. (#1191) 2023-03-28 16:58:30 +05:30
2adaa7a84a add dark mode in base select action (#1188) 2023-03-28 16:35:45 +05:30
13557ea075 add dark mode in BaseSelectInput (#1186) 2023-03-28 16:29:58 +05:30
ce88c772d1 add dark mode in table pagination (#1185) 2023-03-28 16:17:46 +05:30
a32d36363d Dark mode add in BaseSettingsCard & BaseHeading (#1183)
* add dark mode in BaseSettingCard

* add dark mode in base heading
2023-03-28 16:14:30 +05:30
f874b3507d add dark mode in baseEditor (#1180) 2023-03-28 15:58:36 +05:30
c36d25931f add dark mode in dashboard stats & chart (#1161)
* add dark mode in dashboard stats & chart

* fix indentation on dashboard chart

---------

Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
2023-03-28 15:32:51 +05:30
1e6c3b287f add dark mode in base table (#1160)
* add dark mode in base table

* fix filter pagination issue

* fix indentation

---------

Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
2023-03-28 14:53:03 +05:30
0462ff60a0 add dark mode in baseListItem (#1177) 2023-03-28 13:12:09 +05:30
29a135adaf add dark mode in base modal (#1171)
* add dark mode in base modal

* add BaseModalFooter

* fix dark mode in roles modal and send modal
2023-03-28 13:10:42 +05:30
1aceb2c672 add dark-mode in BaseInput (#1169) 2023-03-28 12:58:11 +05:30
fb9fab641d add dark mode in baseFileUploader (#1176) 2023-03-28 12:45:45 +05:30
8f2edc220b add dark mode in base tabGroup and tab (#1175)
* add dark mode in base tabGroup and tab

* fix tab-list border in dark-mode

---------

Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
2023-03-28 12:29:14 +05:30
d14ab013ad add dark mode in GlobalSearchBar (#1197) 2023-03-28 11:35:20 +05:30
f6639f5863 add dark dropdown & company switch (#1167)
* add dark mode in basedropdown

* dark mod add in global search, header

* add dark mode in company switch

* indentation issue fix company switch

* fix dropdown issues

---------

Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
2023-03-28 11:30:00 +05:30
c5acf1343e add dark mode in BaseFilterWrapper (#1189) 2023-03-25 18:44:29 +05:30
0321ca5515 add dark mode in base dialog component (#1174) 2023-03-25 17:44:00 +05:30
bd345949e5 add dark mode in BaseContentPlaceholders (#1184) 2023-03-25 17:22:28 +05:30
b4b00ebdd6 add dark base switch & base switcher (#1173)
* add dark mode base switch & switcher

* fix indentation
2023-03-25 17:02:36 +05:30
43316dae28 add dark mode in BreadCrumb and PageHeader. (#1172) 2023-03-25 16:50:44 +05:30
80e2548b38 add base multiselect (#1163)
* add base multiselect

* fix invalid state class in dark mode

---------

Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
2023-03-25 16:47:40 +05:30
e8d92cd641 Merge pull request #1158 from crater-invoice/dark-button
add dark mode in button
2023-03-25 12:47:52 +05:30
2c8bb38531 add disabled button class and loading right prop 2023-03-25 12:38:37 +05:30
af2482a69c fix white variant dark mode in base button 2023-03-23 15:04:53 +05:30
cac35826c2 add dark mode in button 2023-03-20 18:22:30 +05:30
117 changed files with 936 additions and 637 deletions

View File

@ -6,8 +6,17 @@
<script setup>
import Chart from 'chart.js'
import { ref, reactive, computed, onMounted, watchEffect, inject } from 'vue'
import {
ref,
reactive,
computed,
onMounted,
watchEffect,
inject,
watch,
} from 'vue'
import { useCompanyStore } from '@/scripts/admin/stores/company'
import { useGlobalStore } from '@/scripts/admin/stores/global'
const utils = inject('utils')
@ -44,9 +53,11 @@ const props = defineProps({
},
})
const isDarkModeOn = document.documentElement.classList.contains('dark')
let myLineChart = null
const graph = ref(null)
const companyStore = useCompanyStore()
const globalStore = useGlobalStore()
const defaultCurrency = computed(() => {
return companyStore.selectedCompanyCurrency
})
@ -60,6 +71,14 @@ watchEffect(() => {
}
})
watch(
() => globalStore.isDarkModeOn,
() => {
myLineChart.reset()
updateColors()
}
)
onMounted(() => {
let context = graph.value.getContext('2d')
let options = reactive({
@ -81,6 +100,8 @@ onMounted(() => {
},
})
const salesColor = globalStore.isDarkModeOn ? '#ffffff' : '#040405'
let data = reactive({
labels: props.labels,
datasets: [
@ -89,16 +110,16 @@ onMounted(() => {
fill: false,
lineTension: 0.3,
backgroundColor: 'rgba(230, 254, 249)',
borderColor: '#040405',
borderColor: salesColor,
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: '#040405',
pointBorderColor: salesColor,
pointBackgroundColor: '#fff',
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: '#040405',
pointHoverBackgroundColor: salesColor,
pointHoverBorderColor: 'rgba(220,220,220,1)',
pointHoverBorderWidth: 2,
pointRadius: 4,
@ -194,4 +215,12 @@ function update() {
lazy: true,
})
}
function updateColors() {
const newColor = globalStore.isDarkModeOn ? '#ffffff' : '#040405'
myLineChart.data.datasets[0].borderColor = newColor
myLineChart.data.datasets[0].pointBorderColor = newColor
myLineChart.data.datasets[0].pointHoverBackgroundColor = newColor
}
</script>

View File

@ -50,21 +50,11 @@
</BaseInputGroup>
</template>
</ValidateEach>
<div
slot="footer"
class="
z-0
flex
justify-end
mt-4
pt-4
border-t border-gray-200 border-solid border-modal-bg
"
>
<BaseModalFooter>
<BaseButton :loading="isSaving" variant="primary" type="submit">
{{ $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseCard>
</template>

View File

@ -7,11 +7,12 @@
<!-- edit customField -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.EDIT_CUSTOM_FIELDS)"
v-slot="slotProps"
@click="editCustomField(row.id)"
>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -19,11 +20,12 @@
<!-- delete customField -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_CUSTOM_FIELDS)"
v-slot="slotProps"
@click="removeCustomField(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -12,10 +12,10 @@
v-if="userStore.hasAbilities(abilities.EDIT_CUSTOMER)"
:to="`/admin/customers/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -29,10 +29,10 @@
"
:to="`customers/${row.id}/view`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="EyeIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.view') }}
</BaseDropdownItem>
@ -41,11 +41,12 @@
<!-- Delete Customer -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_CUSTOMER)"
v-slot="slotProps"
@click="removeCustomer(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -10,11 +10,12 @@
<!-- Copy PDF url -->
<BaseDropdownItem
v-if="route.name === 'estimates.view'"
v-slot="slotProps"
@click="copyPdfUrl"
>
<BaseIcon
name="LinkIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.copy_pdf_url') }}
</BaseDropdownItem>
@ -24,10 +25,10 @@
v-if="userStore.hasAbilities(abilities.EDIT_ESTIMATE)"
:to="`/admin/estimates/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -36,11 +37,12 @@
<!-- Delete Estimate -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_ESTIMATE)"
v-slot="slotProps"
@click="removeEstimate(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>
@ -53,10 +55,10 @@
"
:to="`estimates/${row.id}/view`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="EyeIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.view') }}
</BaseDropdownItem>
@ -65,11 +67,12 @@
<!-- Convert into Invoice -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.CREATE_INVOICE)"
v-slot="slotProps"
@click="convertInToinvoice(row.id)"
>
<BaseIcon
name="DocumentTextIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.convert_to_invoice') }}
</BaseDropdownItem>
@ -81,11 +84,12 @@
route.name !== 'estimates.view' &&
userStore.hasAbilities(abilities.SEND_ESTIMATE)
"
v-slot="slotProps"
@click="onMarkAsSent(row.id)"
>
<BaseIcon
name="CheckCircleIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.mark_as_sent') }}
</BaseDropdownItem>
@ -97,20 +101,21 @@
route.name !== 'estimates.view' &&
userStore.hasAbilities(abilities.SEND_ESTIMATE)
"
v-slot="slotProps"
@click="sendEstimate(row)"
>
<BaseIcon
name="PaperAirplaneIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.send_estimate') }}
</BaseDropdownItem>
<!-- Resend Estimate -->
<BaseDropdownItem v-if="canResendEstimate(row)" @click="sendEstimate(row)">
<BaseDropdownItem v-if="canResendEstimate(row)" v-slot="slotProps" @click="sendEstimate(row)">
<BaseIcon
name="PaperAirplaneIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.resend_estimate') }}
</BaseDropdownItem>
@ -121,11 +126,12 @@
row.status !== 'ACCEPTED' &&
userStore.hasAbilities(abilities.EDIT_ESTIMATE)
"
v-slot="slotProps"
@click="onMarkAsAccepted(row.id)"
>
<BaseIcon
name="CheckCircleIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.mark_as_accepted') }}
</BaseDropdownItem>
@ -136,11 +142,12 @@
row.status !== 'REJECTED' &&
userStore.hasAbilities(abilities.EDIT_ESTIMATE)
"
v-slot="slotProps"
@click="onMarkAsRejected(row.id)"
>
<BaseIcon
name="XCircleIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('estimates.mark_as_rejected') }}
</BaseDropdownItem>

View File

@ -13,11 +13,12 @@
<!-- edit expenseCategory -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.EDIT_EXPENSE)"
v-slot="slotProps"
@click="editExpenseCategory(row.id)"
>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -25,11 +26,12 @@
<!-- delete expenseCategory -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_EXPENSE)"
v-slot="slotProps"
@click="removeExpenseCategory(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -12,10 +12,10 @@
v-if="userStore.hasAbilities(abilities.EDIT_EXPENSE)"
:to="`/admin/expenses/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -24,11 +24,12 @@
<!-- delete expense -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_EXPENSE)"
v-slot="slotProps"
@click="removeExpense(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -12,20 +12,20 @@
v-if="userStore.hasAbilities(abilities.EDIT_INVOICE)"
:to="`/admin/invoices/${row.id}/edit`"
>
<BaseDropdownItem v-show="row.allow_edit">
<BaseDropdownItem v-show="row.allow_edit" v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
</router-link>
<!-- Copy PDF url -->
<BaseDropdownItem v-if="route.name === 'invoices.view'" @click="copyPdfUrl">
<BaseDropdownItem v-if="route.name === 'invoices.view'" v-slot="slotProps" @click="copyPdfUrl">
<BaseIcon
name="LinkIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.copy_pdf_url') }}
</BaseDropdownItem>
@ -38,29 +38,29 @@
"
:to="`/admin/invoices/${row.id}/view`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="EyeIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.view') }}
</BaseDropdownItem>
</router-link>
<!-- Send Invoice Mail -->
<BaseDropdownItem v-if="canSendInvoice(row)" @click="sendInvoice(row)">
<BaseDropdownItem v-if="canSendInvoice(row)" v-slot="slotProps" @click="sendInvoice(row)">
<BaseIcon
name="PaperAirplaneIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('invoices.send_invoice') }}
</BaseDropdownItem>
<!-- Resend Invoice -->
<BaseDropdownItem v-if="canReSendInvoice(row)" @click="sendInvoice(row)">
<BaseDropdownItem v-if="canReSendInvoice(row)" v-slot="slotProps" @click="sendInvoice(row)">
<BaseIcon
name="PaperAirplaneIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('invoices.resend_invoice') }}
</BaseDropdownItem>
@ -69,20 +69,21 @@
<router-link :to="`/admin/payments/${row.id}/create`">
<BaseDropdownItem
v-if="row.status == 'SENT' && route.name !== 'invoices.view'"
v-slot="slotProps"
>
<BaseIcon
name="CreditCardIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('invoices.record_payment') }}
</BaseDropdownItem>
</router-link>
<!-- Mark as sent Invoice -->
<BaseDropdownItem v-if="canSendInvoice(row)" @click="onMarkAsSent(row.id)">
<BaseDropdownItem v-if="canSendInvoice(row)" v-slot="slotProps" @click="onMarkAsSent(row.id)">
<BaseIcon
name="CheckCircleIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('invoices.mark_as_sent') }}
</BaseDropdownItem>
@ -90,11 +91,12 @@
<!-- Clone Invoice into new invoice -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.CREATE_INVOICE)"
v-slot="slotProps"
@click="cloneInvoiceData(row)"
>
<BaseIcon
name="DocumentTextIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('invoices.clone_invoice') }}
</BaseDropdownItem>
@ -102,11 +104,12 @@
<!-- Delete Invoice -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_INVOICE)"
v-slot="slotProps"
@click="removeInvoice(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -12,11 +12,8 @@
v-if="userStore.hasAbilities(abilities.EDIT_ITEM)"
:to="`/admin/items/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
/>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon name="PencilIcon" :class="slotProps.class" />
{{ $t('general.edit') }}
</BaseDropdownItem>
</router-link>
@ -24,12 +21,10 @@
<!-- delete item -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_ITEM)"
v-slot="slotProps"
@click="removeItem(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
/>
<BaseIcon name="TrashIcon" :class="slotProps.class" />
{{ $t('general.delete') }}
</BaseDropdownItem>
</BaseDropdown>

View File

@ -10,11 +10,12 @@
<!-- edit note -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.MANAGE_NOTE)"
v-slot="slotProps"
@click="editNote(row.id)"
>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -22,11 +23,12 @@
<!-- delete note -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.MANAGE_NOTE)"
v-slot="slotProps"
@click="removeNote(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -8,30 +8,31 @@
</template>
<!-- Copy pdf url -->
<BaseDropdown-item
<BaseDropdownItem
v-if="
route.name === 'payments.view' &&
userStore.hasAbilities(abilities.VIEW_PAYMENT)
"
v-slot="slotProps"
class="rounded-md"
@click="copyPdfUrl"
>
<BaseIcon
name="LinkIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.copy_pdf_url') }}
</BaseDropdown-item>
</BaseDropdownItem>
<!-- edit payment -->
<router-link
v-if="userStore.hasAbilities(abilities.EDIT_PAYMENT)"
:to="`/admin/payments/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -45,10 +46,10 @@
"
:to="`/admin/payments/${row.id}/view`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="EyeIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.view') }}
</BaseDropdownItem>
@ -61,11 +62,12 @@
route.name !== 'payments.view' &&
userStore.hasAbilities(abilities.SEND_PAYMENT)
"
v-slot="slotProps"
@click="sendPayment(row)"
>
<BaseIcon
name="PaperAirplaneIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('payments.send_payment') }}
</BaseDropdownItem>
@ -73,11 +75,12 @@
<!-- delete payment -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_PAYMENT)"
v-slot="slotProps"
@click="removePayment(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -8,19 +8,19 @@
</template>
<!-- edit paymentMode -->
<BaseDropdownItem @click="editPaymentMode(row.id)">
<BaseDropdownItem v-slot="slotProps" @click="editPaymentMode(row.id)">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
<!-- delete paymentMode -->
<BaseDropdownItem @click="removePaymentMode(row.id)">
<BaseDropdownItem v-slot="slotProps" @click="removePaymentMode(row.id)">
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -15,10 +15,10 @@
v-if="userStore.hasAbilities(abilities.EDIT_RECURRING_INVOICE)"
:to="`/admin/recurring-invoices/${row.id}/edit`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -32,10 +32,10 @@
"
:to="`recurring-invoices/${row.id}/view`"
>
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="EyeIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.view') }}
</BaseDropdownItem>
@ -44,11 +44,12 @@
<!-- Delete Recurring Invoice -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_RECURRING_INVOICE)"
v-slot="slotProps"
@click="removeMultipleRecurringInvoices(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -10,11 +10,12 @@
<!-- edit role -->
<BaseDropdownItem
v-if="userStore.currentUser.is_owner"
v-slot="slotProps"
@click="editRole(row.id)"
>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -22,11 +23,12 @@
<!-- delete role -->
<BaseDropdownItem
v-if="userStore.currentUser.is_owner"
v-slot="slotProps"
@click="removeRole(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -10,11 +10,12 @@
<!-- edit tax-type -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.EDIT_TAX_TYPE)"
v-slot="slotProps"
@click="editTaxType(row.id)"
>
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
@ -22,11 +23,12 @@
<!-- delete tax-type -->
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.DELETE_TAX_TYPE)"
v-slot="slotProps"
@click="removeTaxType(row.id)"
>
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -9,20 +9,20 @@
<!-- edit user -->
<router-link :to="`/admin/users/${row.id}/edit`">
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="PencilIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.edit') }}
</BaseDropdownItem>
</router-link>
<!-- delete user -->
<BaseDropdownItem @click="removeUser(row.id)">
<BaseDropdownItem v-slot="slotProps" @click="removeUser(row.id)">
<BaseIcon
name="TrashIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
/>
{{ $t('general.delete') }}
</BaseDropdownItem>

View File

@ -57,9 +57,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -84,7 +82,7 @@
</template>
{{ $t('general.create') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -47,15 +47,7 @@
</BaseInputGrid>
</div>
<div
class="
z-0
flex
justify-end
p-4
border-t border-gray-200 border-solid border-modal-bg
"
>
<BaseModalFooter>
<BaseButton
type="button"
variant="primary-outline"
@ -80,7 +72,7 @@
</template>
{{ categoryStore.isEdit ? $t('general.update') : $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -116,7 +116,7 @@
</BaseInputGrid>
</div>
<div class="z-0 flex justify-end p-4 bg-gray-50 border-modal-bg">
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
variant="primary-outline"
@ -141,7 +141,7 @@
</template>
{{ $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -425,9 +425,7 @@
</BaseTabGroup>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
type="button"
@ -447,7 +445,7 @@
</template>
{{ $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -38,7 +38,7 @@
</BaseInputGroup>
</div>
<div class="z-0 flex justify-end p-4 bg-gray-50 border-modal-bg">
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
variant="primary-outline"
@ -63,7 +63,7 @@
</template>
{{ $t('general.delete') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -150,9 +150,7 @@
@Remove="removeUsedSelectedCurrencies"
/>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -179,7 +177,7 @@
exchangeRateStore.isEdit ? $t('general.update') : $t('general.save')
}}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -20,15 +20,7 @@
@submit="createNewDisk"
>
<template #default="slotProps">
<div
class="
z-0
flex
justify-end
p-4
border-t border-solid border-gray-light
"
>
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
variant="primary-outline"
@ -52,7 +44,7 @@
{{ $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</template>
</component>
</div>

View File

@ -89,9 +89,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -111,7 +109,7 @@
</template>
{{ itemStore.isEdit ? $t('general.update') : $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</div>
</BaseModal>

View File

@ -31,15 +31,7 @@
</BaseInputGroup>
</div>
<div
class="
z-0
flex
justify-end
p-4
border-t border-gray-200 border-solid border-modal-bg
"
>
<BaseModalFooter>
<BaseButton
type="button"
variant="primary-outline"
@ -66,7 +58,7 @@
itemStore.isItemUnitEdit ? $t('general.update') : $t('general.save')
}}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -62,9 +62,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
variant="primary-outline"
type="button"
@ -84,7 +82,7 @@
</template>
{{ $t('general.send') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -63,16 +63,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="
z-0
flex
justify-end
px-4
py-4
border-t border-solid border-gray-light
"
>
<BaseModalFooter>
<BaseButton
class="mr-2"
variant="primary-outline"
@ -93,7 +84,7 @@
</template>
{{ noteStore.isEdit ? $t('general.update') : $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -29,9 +29,7 @@
</BaseInputGroup>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
variant="primary-outline"
class="mr-3"
@ -56,7 +54,7 @@
: $t('general.save')
}}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -72,7 +72,7 @@
</div>
</div>
<div class="border-t border-gray-200 py-3">
<div class="border-t border-gray-200 dark:border-gray-600 py-3">
<div
class="
grid grid-cols-1
@ -89,7 +89,7 @@
:key="gIndex"
class="flex flex-col space-y-1"
>
<p class="text-sm text-gray-500 border-b border-gray-200 pb-1 mb-2">
<p class="text-sm text-gray-500 dark:text-gray-200 border-b dark:border-gray-600 pb-1 mb-2">
{{ gIndex }}
</p>
<div
@ -116,15 +116,7 @@
</span>
</div>
</div>
<div
class="
z-0
flex
justify-end
p-4
border-t border-solid border--200 border-modal-bg
"
>
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
variant="primary-outline"
@ -144,7 +136,7 @@
</template>
{{ !roleStore.isEdit ? $t('general.save') : $t('general.update') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -70,7 +70,7 @@
</div>
</div>
<div class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid">
<BaseModalFooter>
<BaseButton class="mr-3" variant="primary-outline" @click="closeModal">
{{ $t('general.cancel') }}
</BaseButton>
@ -80,7 +80,7 @@
</template>
{{ $t('general.choose') }}
</BaseButton>
</div>
</BaseModalFooter>
</BaseModal>
</template>

View File

@ -62,9 +62,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -85,7 +83,7 @@
<BaseIcon v-if="!isLoading" name="PhotographIcon" class="h-5 mr-2" />
{{ $t('general.preview') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
<div v-else>
<div class="my-6 mx-4 border border-gray-200 relative">
@ -106,9 +104,7 @@
></iframe>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -127,7 +123,7 @@
<BaseIcon v-if="!isLoading" name="PaperAirplaneIcon" class="mr-2" />
{{ $t('general.send') }}
</BaseButton>
</div>
</BaseModalFooter>
</div>
</BaseModal>
</template>

View File

@ -65,9 +65,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -93,7 +91,7 @@
</template>
{{ $t('general.preview') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
<div v-else>
<div class="my-6 mx-4 border border-gray-200 relative">
@ -114,9 +112,7 @@
style="min-height: 500px"
></iframe>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -140,7 +136,7 @@
/>
{{ $t('general.send') }}
</BaseButton>
</div>
</BaseModalFooter>
</div>
</BaseModal>
</template>

View File

@ -65,9 +65,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -93,7 +91,7 @@
</template>
{{ $t('general.preview') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
<div v-else>
<div class="my-6 mx-4 border border-gray-200 relative">
@ -114,9 +112,7 @@
style="min-height: 500px"
></iframe>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
variant="primary-outline"
@ -140,7 +136,7 @@
/>
{{ $t('general.send') }}
</BaseButton>
</div>
</BaseModalFooter>
</div>
</BaseModal>
</template>

View File

@ -90,15 +90,7 @@
</BaseInputGroup>
</BaseInputGrid>
</div>
<div
class="
z-0
flex
justify-end
p-4
border-t border-solid border--200 border-modal-bg
"
>
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
variant="primary-outline"
@ -122,7 +114,7 @@
</template>
{{ taxTypeStore.isEdit ? $t('general.update') : $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -87,9 +87,7 @@
</BaseInputGrid>
</div>
<div
class="z-0 flex justify-end p-4 border-t border-gray-200 border-solid"
>
<BaseModalFooter>
<BaseButton
class="mr-3 text-sm"
type="button"
@ -109,7 +107,7 @@
</template>
{{ $t('general.save') }}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -172,15 +172,7 @@
</div>
</div>
<div
class="
z-0
flex
justify-end
p-4
border-t border-solid border-gray-light border-modal-bg
"
>
<BaseModalFooter>
<BaseButton
class="mr-3"
type="button"
@ -207,7 +199,7 @@
!customFieldStore.isEdit ? $t('general.save') : $t('general.update')
}}
</BaseButton>
</div>
</BaseModalFooter>
</form>
</BaseModal>
</template>

View File

@ -153,7 +153,7 @@
<BaseSwitch v-model="set_as_default" class="flex" />
</div>
<div class="ml-4 right">
<p class="p-0 mb-1 text-base leading-snug text-black box-title">
<p class="p-0 mb-1 text-base leading-snug text-black dark:text-white box-title">
{{ $t('settings.disk.is_default') }}
</p>
</div>

View File

@ -132,7 +132,7 @@
<BaseSwitch v-model="set_as_default" class="flex" />
</div>
<div class="ml-4 right">
<p class="p-0 mb-1 text-base leading-snug text-black box-title">
<p class="p-0 mb-1 text-base leading-snug text-black dark:text-white box-title">
{{ $t('settings.disk.is_default') }}
</p>
</div>

View File

@ -63,7 +63,7 @@
</div>
<div class="ml-4 right">
<p class="p-0 mb-1 text-base leading-snug text-black box-title">
<p class="p-0 mb-1 text-base leading-snug text-black dark:text-white box-title">
{{ $t('settings.disk.is_default') }}
</p>
</div>

View File

@ -134,7 +134,7 @@
<BaseSwitch v-model="set_as_default" class="flex" />
</div>
<div class="ml-4 right">
<p class="p-0 mb-1 text-base leading-snug text-black box-title">
<p class="p-0 mb-1 text-base leading-snug text-black dark:text-white box-title">
{{ $t('settings.disk.is_default') }}
</p>
</div>

View File

@ -24,6 +24,8 @@
dark:border-white/10
"
>
<BaseDarkHighlight />
<router-link
to="/admin/dashboard"
class="
@ -72,7 +74,7 @@
v-if="hasCreateAbilities"
class="relative hidden float-left m-0 md:block"
>
<BaseDropdown width-class="w-48">
<BaseDropdown width-class="w-48" >
<template #activator>
<div
class="
@ -86,19 +88,21 @@
bg-white
rounded
md:h-9 md:w-9
dark:bg-gray-700 dark:border-gray-500 dark:border
"
>
<BaseIcon name="PlusIcon" class="w-5 h-5 text-gray-600" />
<BaseIcon name="PlusIcon" class="w-5 h-5 text-gray-600 dark:text-white" />
</div>
</template>
<router-link to="/admin/invoices/create">
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.CREATE_INVOICE)"
v-slot="slotProps"
>
<BaseIcon
name="DocumentTextIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
aria-hidden="true"
/>
{{ $t('invoices.new_invoice') }}
@ -107,10 +111,11 @@
<router-link to="/admin/estimates/create">
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.CREATE_ESTIMATE)"
v-slot="slotProps"
>
<BaseIcon
name="DocumentIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
aria-hidden="true"
/>
{{ $t('estimates.new_estimate') }}
@ -120,10 +125,11 @@
<router-link to="/admin/customers/create">
<BaseDropdownItem
v-if="userStore.hasAbilities(abilities.CREATE_CUSTOMER)"
v-slot="slotProps"
>
<BaseIcon
name="UserIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
aria-hidden="true"
/>
{{ $t('customers.new_customer') }}
@ -156,20 +162,20 @@
</template>
<router-link to="/admin/settings/account-settings">
<BaseDropdownItem>
<BaseDropdownItem v-slot="slotProps">
<BaseIcon
name="CogIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
aria-hidden="true"
/>
{{ $t('navigation.settings') }}
</BaseDropdownItem>
</router-link>
<BaseDropdownItem @click="logout">
<BaseDropdownItem v-slot="slotProps" @click="logout">
<BaseIcon
name="LogoutIcon"
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
:class="slotProps.class"
aria-hidden="true"
/>
{{ $t('navigation.logout') }}

View File

@ -2,8 +2,23 @@
<div>
<div
v-if="dashboardStore.isDashboardDataLoaded"
class="grid grid-cols-10 mt-8 bg-white rounded shadow"
class="
grid
grid-cols-10
mt-8
bg-white
rounded shadow
dark:text-white
dark:backdrop-blur-xl
dark:shadow-glass
dark:border
dark:bg-opacity-70
dark:border-white/10
dark:bg-gray-800
relative
"
>
<BaseDarkHighlight />
<!-- Chart -->
<div
class="
@ -54,6 +69,7 @@
lg:border-t-0 lg:text-right lg:col-span-3
xl:col-span-2
lg:grid-cols-1
dark:border-white/10
"
>
<div class="p-6">
@ -96,15 +112,7 @@
</span>
<br />
<span
class="
block
mt-1
text-xl
font-semibold
leading-8
lg:text-2xl
text-red-400
"
class="block mt-1 text-xl font-semibold leading-8 lg:text-2xl text-red-400"
>
<BaseFormatMoney
:amount="dashboardStore.totalExpenses"
@ -116,8 +124,10 @@
class="
col-span-3
p-6
border-t border-gray-200 border-solid
border-t
border-gray-200 border-solid
lg:col-span-1
dark:border-white/10
"
>
<span class="text-xs leading-5 lg:text-sm">
@ -132,7 +142,7 @@
font-semibold
leading-8
lg:text-2xl
text-primary-500
text-primary-500 dark:text-primary-400
"
>
<BaseFormatMoney

View File

@ -1,6 +1,6 @@
<template>
<BaseContentPlaceholders
class="grid grid-cols-10 mt-8 bg-white rounded shadow"
class="grid grid-cols-10 mt-8 bg-white rounded shadow dark:bg-gray-800"
>
<!-- Chart -->
<div
@ -29,6 +29,7 @@
text-center
border-t border-l border-gray-200 border-solid
lg:border-t-0 lg:text-right lg:col-span-3
dark:border-gray-600
xl:col-span-2
lg:grid-cols-1
"
@ -77,6 +78,7 @@
col-span-3
p-6
border-t border-gray-200 border-solid
dark:border-gray-600
lg:justify-end lg:items-end lg:col-span-1
"
>

View File

@ -12,18 +12,24 @@
hover:bg-gray-50
xl:p-4
lg:col-span-2
dark:backdrop-blur-xl
dark:shadow-glass
dark:border
dark:border-white/10
dark:bg-gray-800/70
"
:class="{ 'lg:!col-span-3': large }"
:to="route"
>
<div>
<span class="text-xl font-semibold leading-tight text-black xl:text-3xl">
<span class="text-xl font-semibold leading-tight text-black xl:text-3xl dark:text-white">
<slot />
</span>
<span class="block mt-1 text-sm leading-tight text-gray-500 xl:text-lg">
<span class="block mt-1 text-sm leading-tight text-gray-500 xl:text-lg dark:text-gray-300">
{{ label }}
</span>
</div>
<BaseDarkHighlight class="!bg-highlight/[.17] !top-5" />
<div class="flex items-center">
<component :is="iconComponent" class="w-10 h-10 xl:w-12 xl:h-12" />
</div>

View File

@ -1,7 +1,7 @@
<template>
<BaseContentPlaceholders
:rounded="true"
class="relative flex justify-between w-full p-3 bg-white rounded shadow lg:col-span-3 xl:p-4"
class="relative flex justify-between w-full p-3 bg-white rounded shadow lg:col-span-3 xl:p-4 dark:bg-gray-800"
>
<div>
<BaseContentPlaceholdersText

View File

@ -12,6 +12,7 @@
shadow
lg:col-span-2
xl:p-4
dark:bg-gray-800
"
>
<div>

View File

@ -130,6 +130,7 @@
mt-5
list-none
border-b-2 border-gray-200 border-solid
dark:border-gray-600
"
>
<!-- Tabs -->

View File

@ -127,6 +127,7 @@
mt-5
list-none
border-b-2 border-gray-200 border-solid
dark:border-gray-600
"
>
<!-- Tabs -->

View File

@ -121,6 +121,7 @@
mt-5
list-none
border-b-2 border-gray-200 border-solid
dark:border-gray-600
"
>
<!-- Tabs -->

View File

@ -51,14 +51,14 @@
</div>
</template>
<BaseDropdownItem @click="onDownloadBckup(row.data)">
<BaseIcon name="CloudDownloadIcon" class="mr-3 text-gray-600" />
<BaseDropdownItem v-slot="slotProps" @click="onDownloadBckup(row.data)">
<BaseIcon name="CloudDownloadIcon" :class="slotProps.class" />
{{ $t('general.download') }}
</BaseDropdownItem>
<BaseDropdownItem @click="onRemoveBackup(row.data)">
<BaseIcon name="TrashIcon" class="mr-3 text-gray-600" />
<BaseDropdownItem v-slot="slotProps" @click="onRemoveBackup(row.data)">
<BaseIcon name="TrashIcon" :class="slotProps.class" />
{{ $t('general.delete') }}
</BaseDropdownItem>
</BaseDropdown>

View File

@ -113,10 +113,10 @@
<div v-if="companyStore.companies.length !== 1" class="py-5">
<BaseDivider class="my-4" />
<h3 class="text-lg leading-6 font-medium text-gray-900">
<h3 class="text-lg leading-6 font-medium text-gray-900 dark:text-white">
{{ $tc('settings.company_info.delete_company') }}
</h3>
<div class="mt-2 max-w-xl text-sm text-gray-500">
<div class="mt-2 max-w-xl text-sm text-gray-500 dark:text-gray-400">
<p>
{{ $tc('settings.company_info.delete_company_description') }}
</p>

View File

@ -7,7 +7,7 @@
{{ $t('settings.menu_title.exchange_rate') }}
</h6>
<p
class="mt-2 text-sm leading-snug text-left text-gray-500"
class="mt-2 text-sm leading-snug text-left text-gray-500 dark:text-gray-400"
style="max-width: 680px"
>
{{ $t('settings.exchange_rate.providers_description') }}

View File

@ -45,27 +45,30 @@
<BaseDropdownItem
v-if="!row.data.set_as_default"
v-slot="slotProps"
@click="setDefaultDiskData(row.data.id)"
>
<BaseIcon class="mr-3 tetx-gray-600" name="CheckCircleIcon" />
<BaseIcon :class="slotProps.class" name="CheckCircleIcon" />
{{ $t('settings.disk.set_default_disk') }}
</BaseDropdownItem>
<BaseDropdownItem
v-if="row.data.type !== 'SYSTEM'"
v-slot="slotProps"
@click="openEditDiskModal(row.data)"
>
<BaseIcon name="PencilIcon" class="mr-3 text-gray-600" />
<BaseIcon name="PencilIcon" :class="slotProps.class" />
{{ $t('general.edit') }}
</BaseDropdownItem>
<BaseDropdownItem
v-if="row.data.type !== 'SYSTEM' && !row.data.set_as_default"
v-slot="slotProps"
@click="removeDisk(row.data.id)"
>
<BaseIcon name="TrashIcon" class="mr-3 text-gray-600" />
<BaseIcon name="TrashIcon" :class="slotProps.class" />
{{ $t('general.delete') }}
</BaseDropdownItem>
</BaseDropdown>

View File

@ -1,12 +1,12 @@
<template>
<h6 class="text-gray-900 text-lg font-medium">
{{ $t(`settings.customization.${type}s.${type}_number_format`) }}
</h6>
<p class="mt-1 text-sm text-gray-500">
{{
<BaseHeading
type="heading-title"
:subtitle="
$t(`settings.customization.${type}s.${type}_number_format_description`)
}}
</p>
"
>
{{ $t(`settings.customization.${type}s.${type}_number_format`) }}
</BaseHeading>
<div class="overflow-x-auto">
<table class="w-full mt-6 table-fixed">
@ -29,6 +29,7 @@
leading-5
text-left text-gray-700
border-t border-b border-gray-200 border-solid
dark:border-gray-600
"
></th>
<th
@ -41,6 +42,7 @@
leading-5
text-left text-gray-700
border-t border-b border-gray-200 border-solid
dark:text-gray-300 dark:border-gray-600
"
>
Component
@ -55,6 +57,7 @@
leading-5
text-left text-gray-700
border-t border-b border-gray-200 border-solid
dark:text-gray-300 dark:border-gray-600
"
>
Parameter
@ -69,13 +72,14 @@
leading-5
text-left text-gray-700
border-t border-b border-gray-200 border-solid
dark:border-gray-600
"
></th>
</tr>
</thead>
<draggable
v-model="selectedFields"
class="divide-y divide-gray-200"
class="divide-y divide-gray-200 dark:divide-gray-600"
item-key="id"
tag="tbody"
handle=".handle"
@ -97,12 +101,13 @@
whitespace-nowrap
mr-2
min-w-[200px]
dark:text-primary-400
"
>
{{ element.label }}
</label>
<p class="text-xs text-gray-500 mt-1">
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1">
{{ element.description }}
</p>
</td>

View File

@ -1,10 +1,12 @@
<template>
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.estimates.convert_estimate_description')
"
>
{{ $tc('settings.customization.estimates.convert_estimate_options') }}
</h6>
<p class="mt-1 text-sm text-gray-500">
{{ $t('settings.customization.estimates.convert_estimate_description') }}
</p>
</BaseHeading>
<BaseInputGroup required>
<BaseRadio

View File

@ -1,11 +1,13 @@
<template>
<form @submit.prevent="submitForm">
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.estimates.default_formats_description')
"
>
{{ $t('settings.customization.estimates.default_formats') }}
</h6>
<p class="mt-1 text-sm text-gray-500 mb-2">
{{ $t('settings.customization.estimates.default_formats_description') }}
</p>
</BaseHeading>
<BaseInputGroup
:label="

View File

@ -1,11 +1,13 @@
<template>
<form @submit.prevent="submitForm">
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.estimates.expiry_date_description')
"
>
{{ $t('settings.customization.estimates.expiry_date') }}
</h6>
<p class="mt-1 text-sm text-gray-500 mb-2">
{{ $t('settings.customization.estimates.expiry_date_description') }}
</p>
</BaseHeading>
<BaseSwitchSection
v-model="expiryDateAutoField"

View File

@ -1,11 +1,13 @@
<template>
<form @submit.prevent="submitForm">
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.invoices.default_formats_description')
"
>
{{ $t('settings.customization.invoices.default_formats') }}
</h6>
<p class="mt-1 text-sm text-gray-500 mb-2">
{{ $t('settings.customization.invoices.default_formats_description') }}
</p>
</BaseHeading>
<BaseInputGroup
:label="$t('settings.customization.invoices.default_invoice_email_body')"

View File

@ -1,11 +1,13 @@
<template>
<form @submit.prevent="submitForm">
<h6 class="text-gray-900 text-lg font-medium">
{{ $t('settings.customization.invoices.due_date') }}
</h6>
<p class="mt-1 text-sm text-gray-500 mb-2">
{{ $t('settings.customization.invoices.due_date_description') }}
</p>
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.invoices.due_date_description')
"
>
{{ $t('settings.customization.invoices.due_date') }}
</BaseHeading>
<BaseSwitchSection
v-model="dueDateAutoField"

View File

@ -1,10 +1,12 @@
<template>
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.invoices.retrospective_edits_description')
"
>
{{ $tc('settings.customization.invoices.retrospective_edits') }}
</h6>
<p class="mt-1 text-sm text-gray-500">
{{ $t('settings.customization.invoices.retrospective_edits_description') }}
</p>
</BaseHeading>
<BaseInputGroup required>
<BaseRadio

View File

@ -1,11 +1,13 @@
<template>
<form @submit.prevent="submitForm">
<h6 class="text-gray-900 text-lg font-medium">
<BaseHeading
type="heading-title"
:subtitle="
$t('settings.customization.payments.default_formats_description')
"
>
{{ $t('settings.customization.payments.default_formats') }}
</h6>
<p class="mt-1 text-sm text-gray-500 mb-2">
{{ $t('settings.customization.payments.default_formats_description') }}
</p>
</BaseHeading>
<BaseInputGroup
:label="$t('settings.customization.payments.default_payment_email_body')"

View File

@ -1,21 +1,23 @@
<template>
<div ref="companySwitchBar" class="relative rounded">
<div ref="companySwitchBar" class="relative rounded dark:text-white">
<CompanyModal />
<div
class="
flex
items-center
justify-center
px-3
h-8
md:h-9
ml-2
text-sm text-white
bg-white
rounded
cursor-pointer
bg-opacity-20
flex
items-center
justify-center
px-3
h-8
md:h-9
ml-2
text-sm
text-white
bg-white
rounded
cursor-pointer
bg-opacity-20
dark:bg-gray-700
"
@click="isShow = !isShow"
>
@ -38,28 +40,42 @@
>
<div
v-if="isShow"
class="absolute right-0 mt-2 bg-white rounded-md shadow-lg"
class="
absolute
right-0
mt-2
bg-white
rounded-md
shadow-lg
dark:border
dark:border-white/10
dark:text-white
dark:bg-gray-800/[.95]
dark:shadow-glass
dark:backdrop-blur-xl
"
>
<BaseDarkHighlight class="z-[-1] top-0 left-0" />
<div
class="
overflow-y-auto
scrollbar-thin scrollbar-thumb-rounded-full
w-[250px]
max-h-[350px]
scrollbar-thumb-gray-300 scrollbar-track-gray-10
pb-4
overflow-y-auto
scrollbar-thin
scrollbar-thumb-rounded-full
w-[250px] max-h-[350px]
scrollbar-thumb-gray-300
scrollbar-track-gray-10
pb-4
"
>
<label
class="
px-3
py-2
text-xs
font-semibold
text-gray-400
mb-0.5
block
uppercase
px-3
py-2
text-xs
font-semibold
text-gray-400
mb-0.5
block uppercase
"
>
{{ $t('company_switcher.label') }}
@ -68,13 +84,13 @@
<div
v-if="companyStore.companies.length < 1"
class="
flex flex-col
items-center
justify-center
p-2
px-3
mt-4
text-base text-gray-400
flex flex-col
items-center
justify-center
p-2
px-3
mt-4
text-base text-gray-400
"
>
<BaseIcon name="ExclamationCircleIcon" class="h-5 text-gray-400" />
@ -86,14 +102,17 @@
v-for="(company, index) in companyStore.companies"
:key="index"
class="
p-2
px-3
rounded-md
cursor-pointer
hover:bg-gray-100 hover:text-primary-500
p-2
px-3
rounded-md
cursor-pointer
hover:bg-gray-100 hover:text-primary-500
dark:hover:bg-gray-700
text-gray-900
dark:text-white
"
:class="{
'bg-gray-100 text-primary-500':
'bg-gray-100 text-primary-500 dark:bg-gray-700':
companyStore.selectedCompany.id === company.id,
}"
@click="changeCompany(company)"
@ -101,18 +120,19 @@
<div class="flex items-center">
<span
class="
flex
items-center
justify-center
mr-3
overflow-hidden
text-base
font-semibold
bg-gray-200
rounded-md
w-9
h-9
text-primary-500
flex
items-center
justify-center
mr-3
overflow-hidden
text-sm
font-semibold
bg-gray-200
rounded-md
w-9
h-9
text-primary-500
dark:bg-gray-900
"
>
<span v-if="!company.logo">
@ -136,15 +156,17 @@
<div
v-if="userStore.currentUser.is_owner"
class="
flex
items-center
justify-center
p-4
pl-3
border-t-2 border-gray-100
cursor-pointer
text-primary-400
hover:text-primary-500
flex
items-center
justify-center
p-4
pl-3
border-t-2
border-gray-100
cursor-pointer
text-primary-400
hover:text-primary-500
dark:border-gray-600
"
@click="addNewCompany"
>

View File

@ -1,5 +1,5 @@
<template>
<div ref="searchBar" class="hidden rounded md:block relative">
<div ref="searchBar" class="hidden rounded md:block relative dark:text-white">
<div>
<BaseInput
v-model="name"
@ -41,6 +41,11 @@
w-[300px]
h-[200px]
right-0
dark:border-white/10
dark:text-white
dark:bg-gray-800/[.95]
dark:shadow-glass
dark:backdrop-blur-xl
"
>
<div
@ -68,7 +73,7 @@
<div
v-for="(customer, index) in usersStore.customerList"
:key="index"
class="p-2 hover:bg-gray-100 cursor-pointer rounded-md"
class="p-2 hover:bg-gray-100 cursor-pointer rounded-md dark:hover:bg-gray-700/40"
>
<router-link
:to="{ path: `/admin/customers/${customer.id}/view` }"
@ -87,6 +92,7 @@
bg-gray-200
rounded-full
text-primary-500
dark:bg-gray-600
"
>
{{ initGenerator(customer.name) }}
@ -116,7 +122,7 @@
<div
v-for="(user, index) in usersStore.userList"
:key="index"
class="p-2 hover:bg-gray-100 cursor-pointer rounded-md"
class="p-2 hover:bg-gray-100 cursor-pointer rounded-md dark:hover:bg-gray-700/40"
>
<router-link
:to="{ path: `/admin/users/${user.id}/edit` }"
@ -135,6 +141,7 @@
bg-gray-200
rounded-full
text-primary-500
dark:bg-gray-600
"
>
{{ initGenerator(user.name) }}

View File

@ -437,21 +437,22 @@ export default {
required: false,
default: () => ({
container:
'p-0 relative mx-auto w-full flex items-center justify-end box-border cursor-pointer border border-gray-200 rounded-md bg-white text-sm leading-snug outline-none max-h-10',
'p-0 relative mx-auto w-full flex items-center justify-end box-border cursor-pointer border border-gray-200 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-sm leading-snug outline-none max-h-10',
containerDisabled:
'cursor-default bg-gray-200 bg-opacity-50 !text-gray-400',
'bg-gray-200 bg-opacity-50 !text-gray-400 dark:!text-gray-800 !dark:text-gray-500 !cursor-default dark:opacity-25',
containerOpen: '',
containerOpenTop: '',
containerActive: 'ring-1 ring-primary-400 border-primary-400',
containerInvalid:
'border-red-400 ring-red-400 focus:ring-red-400 focus:border-red-400',
containerInvalidActive: 'ring-1 border-red-400 ring-red-400',
'border-red-500 ring-red-500 focus:ring-red-500 focus:border-red-500 dark:border-red-500 dark:ring-red-500 dark:focus:ring-red-500 dark:focus:border-red-500',
containerInvalidActive:
'ring-1 border-red-500 ring-red-500 dark:ring-1 dark:border-red-500 dark:ring-red-500',
singleLabel:
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5',
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5 dark:text-white',
multipleLabel:
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5',
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5 dark:text-white',
search:
'w-full absolute inset-0 outline-none appearance-none box-border border-0 text-sm font-sans bg-white rounded-md pl-3.5',
'w-full absolute inset-0 outline-none appearance-none box-border border-0 text-sm font-sans bg-white rounded-md pl-3.5 border-transparent focus:border-transparent focus:ring-0 dark:bg-gray-700 dark:text-white',
tags: 'grow shrink flex flex-wrap mt-1 pl-2',
tag: 'bg-primary-500 text-white text-sm font-semibold py-0.5 pl-2 rounded mr-1 mb-1 flex items-center whitespace-nowrap',
tagDisabled: 'pr-2 !bg-gray-400 text-white',
@ -461,12 +462,12 @@ export default {
'bg-multiselect-remove text-white bg-center bg-no-repeat opacity-30 inline-block w-3 h-3 group-hover:opacity-60',
tagsSearchWrapper: 'inline-block relative mx-1 mb-1 grow shrink h-full',
tagsSearch:
'absolute inset-0 border-0 focus:outline-none !shadow-none !focus:shadow-none appearance-none p-0 text-sm font-sans box-border w-full',
'absolute inset-0 border-0 focus:outline-none !shadow-none !focus:shadow-none appearance-none p-0 sm:text-sm font-sans box-border w-full dark:bg-gray-700',
tagsSearchCopy: 'invisible whitespace-pre-wrap inline-block h-px',
placeholder:
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5 text-gray-400 text-sm',
'flex items-center h-full absolute left-0 top-0 pointer-events-none bg-transparent leading-snug pl-3.5 text-gray-400 sm:text-sm dark:text-gray-500',
caret:
'bg-multiselect-caret bg-center bg-no-repeat w-5 h-5 py-px box-content z-5 relative mr-1 opacity-40 shrink-0 grow-0 transition-transform',
'bg-multiselect-caret-black dark:bg-multiselect-caret-white bg-center bg-no-repeat w-5 h-5 py-px box-content z-5 relative mr-1 opacity-40 shrink-0 grow-0 transition-transform dark:text-white',
caretOpen: 'rotate-180 pointer-events-auto',
clear:
'pr-3.5 relative z-10 opacity-40 transition duration-300 shrink-0 grow-0 flex hover:opacity-80',
@ -475,7 +476,7 @@ export default {
spinner:
'bg-multiselect-spinner bg-center bg-no-repeat w-4 h-4 z-10 mr-3.5 animate-spin shrink-0 grow-0',
dropdown:
'max-h-60 shadow-lg absolute -left-px -right-px -bottom-1 translate-y-full border border-gray-300 mt-1 overflow-y-auto z-50 bg-white flex flex-col rounded-md',
'max-h-60 shadow-lg absolute -left-px -right-px -bottom-1 translate-y-full border border-gray-300 mt-1 overflow-y-auto z-50 bg-white dark:border-gray-600 flex flex-col rounded-md dark:bg-gray-800 dark:shadow-glass',
dropdownTop:
'-translate-y-full -top-2 bottom-auto flex-col-reverse rounded-md',
dropdownHidden: 'hidden',
@ -483,7 +484,7 @@ export default {
optionsTop: 'flex-col-reverse',
group: 'p-0 m-0',
groupLabel:
'flex text-sm box-border items-center justify-start text-left py-1 px-3 font-semibold bg-gray-200 cursor-default leading-normal',
'flex text-sm box-border items-center justify-start text-left py-1 px-3 font-semibold bg-gray-200 dark:bg-gray-700 dark:text-gray-400 cursor-default leading-normal',
groupLabelPointable: 'cursor-pointer',
groupLabelPointed: 'bg-gray-300 text-gray-700',
groupLabelSelected: 'bg-primary-600 text-white',
@ -493,15 +494,18 @@ export default {
'text-primary-100 bg-primary-600 bg-opacity-50 cursor-not-allowed',
groupOptions: 'p-0 m-0',
option:
'flex items-center justify-start box-border text-left cursor-pointer text-sm leading-snug py-2 px-3',
optionPointed: 'text-gray-800 bg-gray-100',
'flex items-center justify-start box-border text-left cursor-pointer text-sm leading-snug py-2 px-3 dark:text-gray-200',
optionPointed:
'text-gray-800 bg-gray-100 dark:text-white dark:bg-gray-700/30',
optionSelected: 'text-white bg-primary-500',
optionDisabled: 'text-gray-300 cursor-not-allowed',
optionDisabled: 'text-gray-300 cursor-not-allowed dark:text-gray-400',
optionSelectedPointed: 'text-white bg-primary-500 opacity-90',
optionSelectedDisabled:
'text-primary-100 bg-primary-500 bg-opacity-50 cursor-not-allowed',
noOptions: 'py-2 px-3 text-gray-600 bg-white',
noResults: 'py-2 px-3 text-gray-600 bg-white',
noOptions:
'py-2 px-3 text-gray-600 bg-white dark:bg-gray-700 dark:text-gray-200',
noResults:
'py-2 px-3 text-gray-600 bg-white dark:bg-gray-700 dark:text-gray-200',
fakeInput:
'bg-transparent absolute left-0 right-0 -bottom-px w-full h-px border-0 p-0 appearance-none outline-none text-transparent',
spacer: 'h-9 py-px box-content',

View File

@ -1,6 +1,6 @@
<template>
<nav>
<ol class="flex flex-wrap py-4 text-gray-900 rounded list-reset">
<ol class="flex flex-wrap py-4 text-gray-900 rounded list-reset dark:text-gray-400">
<slot />
</ol>
</nav>

View File

@ -8,7 +8,9 @@
font-medium
leading-5
text-gray-900
dark:text-gray-400
outline-none
dark:focus:ring-offset-gray-900
focus:ring-2 focus:ring-offset-2 focus:ring-primary-400
"
:to="to"

View File

@ -1,6 +1,7 @@
<script setup>
import { computed, ref } from 'vue'
import SpinnerIcon from '@/scripts/components/icons/SpinnerIcon.vue'
const props = defineProps({
contentLoading: {
type: Boolean,
@ -9,7 +10,7 @@ const props = defineProps({
defaultClass: {
type: String,
default:
'inline-flex whitespace-nowrap items-center border font-medium focus:outline-none focus:ring-2 focus:ring-offset-2',
'inline-flex whitespace-nowrap items-center border font-medium focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-800',
},
tag: {
type: String,
@ -27,6 +28,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
loadingRight: {
type: Boolean,
default: false,
},
size: {
type: String,
default: 'md',
@ -81,17 +86,17 @@ const placeHolderSize = computed(() => {
const variantClass = computed(() => {
return {
'border-transparent shadow-sm text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-500':
'border-transparent shadow-sm text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-600':
props.variant === 'primary',
'border-transparent text-primary-700 bg-primary-100 hover:bg-primary-200 focus:ring-primary-500':
props.variant === 'secondary',
'border-transparent border-solid border-primary-500 font-normal transition ease-in-out duration-150 text-primary-500 hover:bg-primary-200 shadow-inner focus:ring-primary-500':
'border-transparent border-solid border-primary-500 font-normal transition ease-in-out duration-150 text-primary-500 hover:bg-primary-100 shadow-inner focus:ring-primary-500 dark:text-primary-400 dark:border-primary-400 dark:hover:bg-transparent dark:hover:text-primary-500 dark:hover:border-primary-500':
props.variant == 'primary-outline',
'border-gray-200 text-gray-700 bg-white hover:bg-gray-50 focus:ring-primary-500 focus:ring-offset-0':
'border-gray-200 text-gray-700 bg-white hover:bg-gray-50 focus:ring-primary-500 focus:ring-offset-0 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-900':
props.variant == 'white',
'border-transparent shadow-sm text-white bg-red-600 hover:bg-red-700 focus:ring-red-500':
props.variant === 'danger',
'border-transparent bg-gray-200 border hover:bg-opacity-60 focus:ring-gray-500 focus:ring-offset-0':
'border-transparent bg-gray-200 border hover:bg-opacity-60 focus:ring-gray-500 focus:ring-offset-0 dark:bg-gray-600 dark:text-white dark:hover:bg-opacity-60':
props.variant === 'gray',
}
})
@ -124,6 +129,13 @@ const iconRightClass = computed(() => {
'ml-3 -mr-1 h-5 w-5': props.size === 'lg' || props.size === 'xl',
}
})
const buttonDisabledClass = computed(() => {
if (props.disabled || props.loading)
return 'cursor-not-allowed bg-opacity-70 dark:!bg-opacity-40 hover:!bg-opacity-70 pointer-event-none'
return ''
})
</script>
<template>
@ -141,15 +153,17 @@ const iconRightClass = computed(() => {
<BaseCustomTag
v-else
:tag="tag"
:disabled="disabled"
:class="[defaultClass, sizeClass, variantClass, roundedClass]"
:disabled="disabled || loading"
:class="[defaultClass, sizeClass, variantClass, roundedClass, buttonDisabledClass]"
>
<SpinnerIcon v-if="loading" :class="[iconLeftClass, iconVariantClass]" />
<SpinnerIcon v-if="loading && !loadingRight" :class="[iconLeftClass, iconVariantClass]" />
<slot v-else name="left" :class="iconLeftClass"></slot>
<slot v-else name="left" :class="iconLeftClass" />
<slot />
<slot name="right" :class="[iconRightClass, iconVariantClass]"></slot>
<SpinnerIcon v-if="loading && loadingRight" :class="[iconRightClass, iconVariantClass]" />
<slot v-else name="right" :class="[iconRightClass, iconVariantClass]" />
</BaseCustomTag>
</template>

View File

@ -15,12 +15,12 @@
v-if="label"
:for="id"
:class="`font-medium ${
disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600'
disabled ? 'text-gray-400 cursor-not-allowed' : 'text-gray-600 dark:text-white'
} cursor-pointer `"
>
{{ label }}
</label>
<p v-if="description" class="text-gray-500">{{ description }}</p>
<p v-if="description" class="text-gray-500 dark:text-gray-400">{{ description }}</p>
</div>
</div>
</template>
@ -51,7 +51,7 @@ const props = defineProps({
},
checkboxClass: {
type: String,
default: 'w-4 h-4 border-gray-300 rounded cursor-pointer',
default: 'w-4 h-4 border-gray-300 rounded cursor-pointer dark:bg-gray-600 dark:border-gray-500',
},
setInitialValue: {
type: Boolean,

View File

@ -39,6 +39,8 @@ $base-content-placeholders-border-radius: 6px !default;
$base-content-placeholders-line-height: 15px !default;
$base-content-placeholders-spacing: 10px !default;
$base-content-placeholders-primary-color-dark: rgb(71, 85, 105) !default;
$base-content-placeholders-secondary-color-dark: rgb(71, 85, 105) !default;
// Animations
@keyframes vueContentPlaceholdersAnimation {
0% {
@ -57,6 +59,10 @@ $base-content-placeholders-spacing: 10px !default;
min-height: $base-content-placeholders-line-height;
background: $base-content-placeholders-secondary-color;
.dark & {
background: $base-content-placeholders-secondary-color-dark;
}
.base-content-placeholders-is-rounded & {
border-radius: $base-content-placeholders-border-radius;
}
@ -86,6 +92,15 @@ $base-content-placeholders-spacing: 10px !default;
animation-name: vueContentPlaceholdersAnimation;
animation-timing-function: linear;
}
.dark .base-content-placeholders-is-animated &::before {
background: linear-gradient(
to right,
transparent 0%,
darken($base-content-placeholders-secondary-color-dark, 5%) 15%,
transparent 30%
);
}
}
@mixin base-content-placeholders-spacing {
@ -156,6 +171,10 @@ $base-content-placeholders-spacing: 10px !default;
min-height: $base-content-placeholders-line-height;
background: $base-content-placeholders-secondary-color;
.dark & {
background: $base-content-placeholders-secondary-color-dark;
}
.base-content-placeholders-is-animated &::before {
content: '';
position: absolute;
@ -177,6 +196,14 @@ $base-content-placeholders-spacing: 10px !default;
animation-timing-function: linear;
}
.dark .base-content-placeholders-is-animated &::before {
background: linear-gradient(
to right,
transparent 0%,
darken($base-content-placeholders-secondary-color-dark, 5%) 15%,
transparent 30%
);
}
// @include base-content-placeholders-spacing;
}

View File

@ -40,6 +40,7 @@
font-normal
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-700/60
rounded
ml-1
py-0.5

View File

@ -1,7 +1,7 @@
<template>
<div
v-if="address"
class="text-sm font-bold leading-5 text-black non-italic space-y-1"
class="text-sm font-bold leading-5 text-black non-italic space-y-1 dark:text-white"
>
<p v-if="address?.address_street_1">{{ address?.address_street_1 }},</p>

View File

@ -20,6 +20,7 @@
border border-gray-200 border-solid
min-h-[170px]
rounded-md
dark:border-white/10 dark:bg-gray-800/50
"
@click.stop
>
@ -27,7 +28,7 @@
<BaseText
:text="selectedCustomer.name"
:length="30"
class="flex-1 text-base font-medium text-left text-gray-900"
class="flex-1 text-base font-medium text-left text-gray-900 dark:text-white"
/>
<div class="flex">
<a
@ -192,6 +193,7 @@
border border-gray-200 border-solid
rounded-md
min-h-[170px]
dark:border-white/10 dark:bg-gray-700/60 dark:text-white
"
>
<BaseIcon
@ -207,11 +209,12 @@
bg-gray-200
rounded-full
font-base
dark:bg-gray-700
"
/>
<div class="mt-1">
<label class="text-lg font-medium text-gray-900">
<label class="text-lg font-medium text-gray-900 dark:text-white">
{{ $t('customers.new_customer') }}
<span class="text-red-500"> * </span>
</label>
@ -246,6 +249,11 @@
shadow-lg
ring-1 ring-black ring-opacity-5
bg-white
dark:border
dark:border-white/10
dark:bg-gray-800
dark:text-white
dark:shadow-glass
"
>
<div class="relative">
@ -265,6 +273,7 @@
overflow-auto
list
border-t border-gray-200
dark:border-white/10
"
>
<li
@ -280,6 +289,7 @@
hover:cursor-pointer hover:bg-gray-100
focus:outline-none focus:bg-gray-100
last:border-b-0
dark:border-white/10 dark:hover:bg-gray-700/30
"
@click="selectNewCustomer(customer.id, close)"
>
@ -299,6 +309,7 @@
bg-gray-300
rounded-full
avatar
dark:bg-gray-600
"
>
{{ initGenerator(customer.name) }}
@ -333,9 +344,9 @@
</li>
<div
v-if="customerStore.customers.length === 0"
class="flex justify-center p-5 text-gray-400"
class="flex justify-center p-5 text-gray-400 dark:text-gray-300"
>
<label class="text-base text-gray-500 cursor-pointer">
<label class="text-base text-gray-500 cursor-pointer dark:text-gray-300">
{{ $t('customers.no_customers_found') }}
</label>
</div>
@ -357,6 +368,10 @@
border-none
outline-none
focus:bg-gray-300
dark:bg-gray-600/70
dark:shadow-glass
dark:backdrop-blur-xl
dark:hover:bg-gray-600/80
"
@click="openCustomerModal"
>

View File

@ -10,7 +10,7 @@
{{ label }}
</BaseLabel>
<p class="text-sm font-bold leading-5 text-black non-italic">
<p class="text-sm font-bold leading-5 text-black non-italic dark:text-white">
{{ value }}
<slot />

View File

@ -30,8 +30,13 @@
leave-to="opacity-0"
>
<DialogOverlay
class="fixed inset-0 transition-opacity bg-gray-500 bg-opacity-75"
class="fixed inset-0 transition-opacity bg-gray-500 bg-opacity-75 dark:backdrop-blur-xl dark:bg-gray-900/80"
>
<BaseDarkHighlight
class="!bg-highlight/[.17] !top-1/2 h-60 -translate-y-1/2 mt-5"
:class="dialogSizeClasses"
/>
</DialogOverlay>
</TransitionChild>
<!-- This element is to trick the browser into centering the modal contents. -->
@ -64,6 +69,11 @@
shadow-xl
sm:my-8 sm:align-middle sm:w-full sm:p-6
relative
dark:backdrop-blur-xl
dark:shadow-glass
dark:border
dark:border-white/10
dark:bg-gray-800
"
:class="dialogSizeClasses"
>
@ -80,31 +90,31 @@
rounded-full
"
:class="{
'bg-green-100': dialogStore.variant === 'primary',
'bg-red-100': dialogStore.variant === 'danger',
'bg-green-100 dark:bg-primary-500': dialogStore.variant === 'primary',
'bg-red-100 dark:bg-red-500': dialogStore.variant === 'danger',
}"
>
<BaseIcon
v-if="dialogStore.variant === 'primary'"
name="CheckIcon"
class="w-6 h-6 text-green-600"
class="w-6 h-6 text-green-600 dark:text-white"
/>
<BaseIcon
v-else
name="ExclamationIcon"
class="w-6 h-6 text-red-600"
class="w-6 h-6 text-red-600 dark:text-white"
aria-hidden="true"
/>
</div>
<div class="mt-3 text-center sm:mt-5">
<DialogTitle
as="h3"
class="text-lg font-medium leading-6 text-gray-900"
class="text-lg font-medium leading-6 text-gray-900 dark:text-white"
>
{{ dialogStore.title }}
</DialogTitle>
<div class="mt-2">
<p class="text-sm text-gray-500">
<p class="text-sm text-gray-500 dark:text-gray-400">
{{ dialogStore.message }}
</p>
</div>

View File

@ -1,3 +1,3 @@
<template>
<hr class="w-full text-gray-300" />
<hr class="w-full text-gray-300 dark:bg-gray-600" />
</template>

View File

@ -69,7 +69,8 @@ const props = defineProps({
})
const containerClasses = computed(() => {
const baseClass = `origin-top-right rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 divide-y divide-gray-100 focus:outline-none`
const baseClass = `dark:border dark:border-white/10 dark:text-white dark:bg-gray-800 dark:shadow-glass
origin-top-right rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 divide-y divide-gray-100 focus:outline-none`
return `${baseClass} ${props.containerClass}`
})

View File

@ -2,16 +2,20 @@
<MenuItem v-slot="{ active }" v-bind="$attrs">
<a
href="#"
class="group flex items-center px-4 py-2 text-sm font-normal"
:class="[
active ? 'bg-gray-100 text-gray-900' : 'text-gray-700',
'group flex items-center px-4 py-2 text-sm font-normal',
active
? 'bg-gray-100 text-gray-900 dark:text-white dark:bg-gray-700'
: 'text-gray-700 dark:text-gray-200',
]"
>
<slot :active="active" />
<slot :active="active" :class="defaultIconClass" />
</a>
</MenuItem>
</template>
<script setup>
import { MenuItem } from '@headlessui/vue'
const defaultIconClass =
'w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500 dark:text-gray-400 dark:group-hover:text-white'
</script>

View File

@ -1,18 +1,24 @@
<template>
<div class="flex flex-col items-center justify-center mt-16">
<div class="flex flex-col items-center justify-center">
<slot></slot>
</div>
<div class="mt-2">
<label class="font-medium">{{ title }}</label>
</div>
<div class="mt-2">
<label class="text-gray-500">
{{ description }}
</label>
</div>
<div class="mt-6">
<slot name="actions" />
<div class="relative">
<BaseDarkHighlight class="bg-highlight/[.07] top-2" />
<div class="relative z-5 flex flex-col items-center">
<div class="flex flex-col items-center justify-center">
<slot />
</div>
<div class="mt-2">
<label class="font-medium">{{ title }}</label>
</div>
<div class="mt-2 text-center md:text-left">
<label class="text-gray-500 dark:text-gray-400">
{{ description }}
</label>
</div>
<div class="mt-6">
<slot name="actions" />
</div>
</div>
</div>
</div>
</template>

View File

@ -1,11 +1,18 @@
<template>
<div class="rounded-md bg-red-50 p-4">
<div
class="
rounded-md
bg-red-50
p-4
dark:border dark:border-red-400 dark:bg-transparent
"
>
<div class="flex">
<div class="shrink-0">
<XCircleIcon class="h-5 w-5 text-red-400" aria-hidden="true" />
<XCircleIcon class="h-5 w-5 text-red-400 dark:text-red-500" aria-hidden="true" />
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-red-800">
<h3 class="text-sm font-medium text-red-800 dark:text-red-500">
{{ errorTitle }}
</h3>
<div class="mt-2 text-sm text-red-700">

View File

@ -21,6 +21,7 @@
group
min-h-[100px]
bg-gray-50
dark:bg-gray-700 dark:border-gray-600
"
:class="avatar ? 'w-32 h-32' : 'w-full'"
>
@ -49,7 +50,7 @@
<a
href="#"
class="absolute z-30 bg-white rounded-full -bottom-3 -right-3 group"
class="absolute z-30 bg-white rounded-full -bottom-3 -right-3 group dark:bg-gray-900"
@click.prevent.stop="onBrowse"
>
<BaseIcon
@ -95,7 +96,7 @@
<div
v-else-if="localFiles.length && avatar && !multiple"
class="flex w-full h-full border border-gray-200 rounded"
class="flex w-full h-full border border-gray-200 rounded dark:border-gray-600"
>
<img
v-if="localFiles[0].image"
@ -169,10 +170,11 @@
-right-3
group
hover:border-gray-300
dark:border-gray-600 dark:bg-gray-900 dark:hover:border-gray-700
"
@click.prevent.stop="onAvatarRemove(localFiles[0])"
>
<BaseIcon name="XIcon" class="h-4 text-xl leading-6 text-black" />
<BaseIcon name="XIcon" class="h-4 text-xl leading-6 text-black dark:text-white" />
</a>
</div>
@ -195,6 +197,7 @@
hover:border-gray-500
relative
max-w-md
dark:border-gray-600 dark:bg-transparent dark:hover:border-gray-700
"
@click.prevent
>
@ -270,6 +273,7 @@
-right-3
group
hover:border-gray-300
dark:border-gray-600 dark:bg-gray-900 dark:hover:border-gray-700
"
@click.prevent.stop="onFileRemove(index)"
>
@ -293,6 +297,7 @@
hover:border-gray-500
relative
max-w-md
dark:border-gray-600 dark:bg-gray-800 dark:hover:border-gray-700
"
@click.prevent
>
@ -368,10 +373,11 @@
-right-3
group
hover:border-gray-300
dark:border-gray-600 dark:bg-gray-900 dark:hover:border-gray-700
"
@click.prevent.stop="onFileRemove(index)"
>
<BaseIcon name="XIcon" class="h-4 text-xl leading-6 text-black" />
<BaseIcon name="XIcon" class="h-4 text-xl leading-6 text-black dark:text-white" />
</a>
</a>
</div>

View File

@ -7,7 +7,7 @@
leave-from-class="opacity-100"
leave-to-class="opacity-0"
>
<div v-show="show" class="relative z-10 p-4 md:p-8 bg-gray-200 rounded">
<div v-show="show" class="relative z-10 p-4 md:p-8 bg-gray-200 rounded dark:bg-gray-800">
<slot name="filter-header" />
<label
@ -20,6 +20,7 @@
hover:text-gray-700
top-2.5
right-3.5
dark:text-gray-300
"
@click="$emit('clear')"
>

View File

@ -2,6 +2,21 @@
<h6 :class="typeClass">
<slot />
</h6>
<p
v-if="subtitle"
class="
mt-2
text-sm
leading-snug
text-gray-500
dark:text-gray-400
max-w-[680px]
"
>
{{ subtitle }}
</p>
</template>
<script setup>
@ -14,12 +29,16 @@ const props = defineProps({
return ['section-title', 'heading-title'].indexOf(value) !== -1
},
},
subtitle: {
type: String,
default: '',
},
})
const typeClass = computed(() => {
return {
'text-gray-900 text-lg font-medium': props.type === 'heading-title',
'text-gray-500 uppercase text-base': props.type === 'section-title',
'text-gray-900 text-lg font-medium dark:text-white': props.type === 'heading-title',
'text-gray-500 uppercase text-base dark:text-gray-300': props.type === 'section-title',
}
})
</script>

View File

@ -65,6 +65,7 @@
rounded-l-md
bg-gray-50
sm:text-sm
dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300
"
>
{{ addon }}
@ -82,7 +83,7 @@
pointer-events-none
"
>
<span class="text-gray-500 sm:text-sm">
<span class="text-gray-500 dark:text-white sm:text-sm ">
{{ inlineAddon }}
</span>
</div>
@ -199,7 +200,7 @@ const props = defineProps({
defaultInputClass: {
type: String,
default:
'font-base block w-full sm:text-sm border-gray-200 rounded-md text-black',
'font-base block w-full sm:text-sm border-gray-200 rounded-md text-black dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:placeholder-gray-500',
},
iconLeftClass: {
type: String,
@ -250,7 +251,8 @@ const inputAddonClass = computed(() => {
const inputInvalidClass = computed(() => {
if (props.invalid) {
return 'border-red-500 ring-red-500 focus:ring-red-500 focus:border-red-500'
return 'border-red-500 dark:border-red-500 ring-red-500 dark:ring-red-500 focus:ring-red-500 dark:focus:ring-red-500 focus:border-red-500 dark:focus:border-red-500 '
}
return 'focus:ring-primary-400 focus:border-primary-400'
@ -258,7 +260,7 @@ const inputInvalidClass = computed(() => {
const inputDisabledClass = computed(() => {
if (props.disabled) {
return `border-gray-100 bg-gray-100 !text-gray-400 ring-gray-200 focus:ring-gray-200 focus:border-gray-100`
return `border-gray-100 bg-gray-100 !text-gray-400 dark:!text-gray-200 ring-gray-200 focus:ring-gray-200 focus:border-gray-100 dark:opacity-25 `
}
return ''

View File

@ -12,6 +12,7 @@
bg-gray-200
border border-gray-200 border-solid
rounded
dark:bg-gray-900/70 dark:border-gray-700
"
>
{{ item.name }}

View File

@ -29,8 +29,21 @@
leave-to="opacity-0"
>
<DialogOverlay
class="fixed inset-0 transition-opacity bg-gray-700 bg-opacity-25"
/>
class="
fixed
inset-0
transition-opacity
bg-gray-700
bg-opacity-25
dark:backdrop-blur-sm
dark:bg-gray-900/80
"
>
<BaseDarkHighlight
class="!bg-highlight/[.17] !top-1/2 -translate-y-1/2 mt-5 h-96"
:class="modalSize"
/>
</DialogOverlay>
</TransitionChild>
<!-- This element is to trick the browser into centering the modal contents. -->
@ -61,7 +74,11 @@
my-4
${modalSize}
sm:w-full
border-t-8 border-solid rounded shadow-xl border-primary-500`"
dark:shadow-glass
dark:border
dark:border-white/10
dark:bg-gray-800/90
border-t-8 border-solid rounded shadow-xl border-primary-500`"
>
<div
v-if="hasHeaderSlot"
@ -74,6 +91,8 @@
text-lg
font-medium
text-black
dark:text-white
dark:border-gray-600
border-b border-gray-200 border-solid
"
>

View File

@ -0,0 +1,14 @@
<template>
<div
class="
z-0
flex
justify-end
p-4
border-t border-gray-200 border-solid
dark:border-gray-600
"
>
<slot />
</div>
</template>

View File

@ -39,7 +39,7 @@ const props = defineProps({
inputClass: {
type: String,
default:
'font-base block w-full sm:text-sm border-gray-200 rounded-md text-black',
'font-base block w-full sm:text-sm border-gray-200 rounded-md text-black dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:placeholder-gray-500',
},
disabled: {
type: Boolean,
@ -86,7 +86,7 @@ const currencyBindings = computed(() => {
const invalidClass = computed(() => {
if (props.invalid) {
return 'border-red-500 ring-red-500 focus:ring-red-500 focus:border-red-500'
return 'border-red-500 dark:border-red-500 ring-red-500 dark:ring-red-500 focus:ring-red-500 dark:focus:ring-red-500 focus:border-red-500 dark:focus:border-red-500'
}
return 'focus:ring-primary-400 focus:border-primary-400'
})

View File

@ -1,7 +1,7 @@
<template>
<div class="flex flex-wrap justify-between">
<div>
<h3 class="text-2xl font-bold text-left text-black">
<h3 class="text-2xl font-bold text-left text-black dark:text-white">
{{ title }}
</h3>
<slot />

View File

@ -19,7 +19,7 @@
]"
aria-hidden="true"
>
<span class="rounded-full bg-white w-1.5 h-1.5" />
<span class="rounded-full bg-white w-1.5 h-1.5" :class="{ 'bg-white': checked }"/>
</span>
<div class="flex flex-col ml-3">
<RadioGroupLabel
@ -66,11 +66,11 @@ const props = defineProps({
},
checkedStateClass: {
type: String,
default: 'bg-primary-600',
default: 'bg-primary-600 ',
},
unCheckedStateClass: {
type: String,
default: 'bg-white ',
default: 'bg-white dark:bg-transparent',
},
optionGroupActiveStateClass: {
type: String,
@ -78,16 +78,16 @@ const props = defineProps({
},
checkedStateLabelClass: {
type: String,
default: 'text-primary-900 ',
default: 'text-primary-900 dark:text-primary-400',
},
unCheckedStateLabelClass: {
type: String,
default: 'text-gray-900',
default: 'text-gray-900 dark:text-white',
},
optionGroupClass: {
type: String,
default:
'h-4 w-4 mt-0.5 cursor-pointer rounded-full border flex items-center justify-center',
'h-4 w-4 mt-0.5 cursor-pointer rounded-full border flex items-center justify-center dark:border-gray-600',
},
optionGroupLabelClass: {
type: String,

View File

@ -11,6 +11,10 @@
bg-gray-200
cursor-pointer
text-primary-400
dark:bg-gray-600/70
dark:backdrop-blur-xl
dark:shadow-glass
dark:hover:bg-gray-600/80
"
>
<slot />

View File

@ -12,7 +12,7 @@
>
<ListboxLabel
v-if="label"
class="block text-sm not-italic font-medium text-gray-800 mb-0.5"
class="block text-sm not-italic font-medium text-gray-800 mb-0.5 dark:text-white"
>
{{ label }}
</ListboxLabel>
@ -28,14 +28,13 @@
pr-10
text-left
bg-white
border border-gray-200
dark:bg-gray-700
rounded-md
shadow-sm
cursor-default
focus:outline-none
focus:ring-1
focus:ring-primary-500
focus:border-primary-500
focus:ring-primary-400 focus:border-primary-400
sm:text-sm
"
>
@ -89,6 +88,7 @@
ring-1 ring-black ring-opacity-5
focus:outline-none
sm:text-sm
dark:bg-gray-700
"
>
<ListboxOption
@ -100,7 +100,7 @@
>
<li
:class="[
active ? 'text-white bg-primary-600' : 'text-gray-900',
active ? 'text-white bg-primary-600' : 'text-gray-900 dark:text-white',
'cursor-default select-none relative py-2 pl-3 pr-9',
]"
>

View File

@ -11,7 +11,7 @@
mt-2
text-sm
leading-snug
text-left text-gray-500
text-left text-gray-500 dark:text-gray-400
max-w-[680px]
"
>

View File

@ -7,7 +7,7 @@
<Switch
v-model="enabled"
:class="enabled ? 'bg-primary-500' : 'bg-gray-300'"
:class="enabled ? 'bg-primary-500' : 'bg-gray-300 dark:bg-gray-900'"
class="
relative
inline-flex
@ -21,7 +21,11 @@
v-bind="$attrs"
>
<span
:class="enabled ? 'translate-x-6' : 'translate-x-1'"
:class="
enabled
? 'translate-x-6 dark:bg-white'
: 'translate-x-1 dark:bg-gray-500'
"
class="
inline-block
w-4

View File

@ -5,12 +5,12 @@
<div class="flex flex-col">
<SwitchLabel
as="p"
class="p-0 mb-1 text-sm leading-snug text-black font-medium"
class="p-0 mb-1 text-sm leading-snug text-black font-medium dark:text-white"
passive
>
{{ title }}
</SwitchLabel>
<SwitchDescription class="text-sm text-gray-500">
<SwitchDescription class="text-sm text-gray-500 dark:text-gray-400">
{{ description }}
</SwitchDescription>
</div>
@ -18,7 +18,7 @@
:disabled="disabled"
:model-value="modelValue"
:class="[
modelValue ? 'bg-primary-500' : 'bg-gray-200',
modelValue ? 'bg-primary-500' : 'bg-gray-200 dark:bg-gray-900',
'ml-4 relative inline-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',
]"
@update:modelValue="onUpdate"
@ -26,7 +26,7 @@
<span
aria-hidden="true"
:class="[
modelValue ? 'translate-x-5' : 'translate-x-0',
modelValue ? 'translate-x-5 dark:bg-white' : 'translate-x-0 dark:bg-gray-500',
'inline-block h-5 w-5 rounded-full bg-white shadow ring-0 transition ease-in-out duration-200',
]"
/>

View File

@ -7,7 +7,7 @@
>
<TabList
:class="[
'flex border-b border-grey-light',
'flex border-b border-grey-light dark:border-gray-600',
'relative overflow-x-auto overflow-y-hidden',
'lg:pb-0 lg:ml-0',
]"
@ -22,8 +22,8 @@
:class="[
'px-8 py-2 text-sm leading-5 font-medium flex items-center relative border-b-2 mt-4 focus:outline-none whitespace-nowrap',
selected
? ' border-primary-400 text-black font-medium'
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300',
? 'border-primary-400 text-black font-medium dark:text-white'
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:border-gray-500',
]"
>
{{ tab.title }}

View File

@ -45,7 +45,7 @@ const props = defineProps({
defaultInputClass: {
type: String,
default:
'box-border w-full px-3 py-2 text-sm not-italic font-normal leading-snug text-left text-black placeholder-gray-400 bg-white border border-gray-200 border-solid rounded outline-none',
'box-border w-full px-3 py-2 text-sm not-italic font-normal leading-snug text-left text-black placeholder-gray-400 bg-white border border-gray-200 dark:border-gray-600 border-solid rounded outline-none dark:bg-gray-700 dark:text-white',
},
autosize: {
type: Boolean,

View File

@ -16,13 +16,15 @@
text-left
bg-white
border border-gray-200
dark:border-gray-600
rounded-md
min-h-[200px]
overflow-hidden
dark:bg-gray-700 dark:text-white
"
>
<div v-if="editor" class="editor-content">
<div class="flex justify-end p-2 border-b border-gray-200 md:hidden">
<div class="flex justify-end p-2 border-b border-gray-200 dark:border-gray-600 md:hidden">
<BaseDropdown width-class="w-48">
<template #activator>
<div
@ -42,7 +44,7 @@
<dots-vertical-icon class="w-6 h-6 text-gray-600" />
</div>
</template>
<div class="flex flex-wrap space-x-1">
<div class="flex flex-wrap space-x-1 dark:text-white">
<span
class="
flex
@ -53,8 +55,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('bold') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('bold') }"
@click="editor.chain().focus().toggleBold().run()"
>
<bold-icon class="h-3 cursor-pointer fill-current" />
@ -69,8 +72,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('italic') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('italic') }"
@click="editor.chain().focus().toggleItalic().run()"
>
<italic-icon class="h-3 cursor-pointer fill-current" />
@ -85,8 +89,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('strike') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('strike') }"
@click="editor.chain().focus().toggleStrike().run()"
>
<strikethrough-icon class="h-3 cursor-pointer fill-current" />
@ -101,8 +106,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('code') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('code') }"
@click="editor.chain().focus().toggleCode().run()"
>
<coding-icon class="h-3 cursor-pointer fill-current" />
@ -117,8 +123,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('paragraph') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('paragraph') }"
@click="editor.chain().focus().setParagraph().run()"
>
<paragraph-icon class="h-3 cursor-pointer fill-current" />
@ -133,9 +140,10 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{
'bg-gray-200': editor.isActive('heading', { level: 1 }),
'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 1 }),
}"
@click="editor.chain().focus().toggleHeading({ level: 1 }).run()"
>
@ -151,9 +159,10 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{
'bg-gray-200': editor.isActive('heading', { level: 2 }),
'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 2 }),
}"
@click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
>
@ -169,9 +178,10 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{
'bg-gray-200': editor.isActive('heading', { level: 3 }),
'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 3 }),
}"
@click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
>
@ -188,8 +198,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('bulletList') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('bulletList') }"
@click="editor.chain().focus().toggleBulletList().run()"
>
<list-ul-icon class="h-3 cursor-pointer fill-current" />
@ -204,8 +215,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('orderedList') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('orderedList') }"
@click="editor.chain().focus().toggleOrderedList().run()"
>
<list-icon class="h-3 cursor-pointer fill-current" />
@ -220,8 +232,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('blockquote') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('blockquote') }"
@click="editor.chain().focus().toggleBlockquote().run()"
>
<quote-icon class="h-3 cursor-pointer fill-current" />
@ -236,8 +249,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('codeBlock') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('codeBlock') }"
@click="editor.chain().focus().toggleCodeBlock().run()"
>
<code-block-icon class="h-3 cursor-pointer fill-current" />
@ -252,8 +266,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('undo') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('undo') }"
@click="editor.chain().focus().undo().run()"
>
<undo-icon class="h-3 cursor-pointer fill-current" />
@ -268,8 +283,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('redo') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('redo') }"
@click="editor.chain().focus().redo().run()"
>
<redo-icon class="h-3 cursor-pointer fill-current" />
@ -277,7 +293,7 @@
</div>
</BaseDropdown>
</div>
<div class="hidden p-2 border-b border-gray-200 md:flex">
<div class="hidden p-2 border-b border-gray-200 dark:border-gray-600 md:flex">
<div class="flex flex-wrap space-x-1">
<span
class="
@ -289,8 +305,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('bold') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('bold') }"
@click="editor.chain().focus().toggleBold().run()"
>
<bold-icon class="h-3 cursor-pointer fill-current" />
@ -305,8 +322,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('italic') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('italic') }"
@click="editor.chain().focus().toggleItalic().run()"
>
<italic-icon class="h-3 cursor-pointer fill-current" />
@ -321,8 +339,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('strike') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('strike') }"
@click="editor.chain().focus().toggleStrike().run()"
>
<strikethrough-icon class="h-3 cursor-pointer fill-current" />
@ -337,8 +356,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('code') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('code') }"
@click="editor.chain().focus().toggleCode().run()"
>
<coding-icon class="h-3 cursor-pointer fill-current" />
@ -353,8 +373,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('paragraph') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('paragraph') }"
@click="editor.chain().focus().setParagraph().run()"
>
<paragraph-icon class="h-3 cursor-pointer fill-current" />
@ -369,8 +390,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('heading', { level: 1 }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 1 }) }"
@click="editor.chain().focus().toggleHeading({ level: 1 }).run()"
>
H1
@ -385,8 +407,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('heading', { level: 2 }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 2 }) }"
@click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
>
H2
@ -401,8 +424,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('heading', { level: 3 }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('heading', { level: 3 }) }"
@click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
>
H3
@ -418,8 +442,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('bulletList') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('bulletList') }"
@click="editor.chain().focus().toggleBulletList().run()"
>
<list-ul-icon class="h-3 cursor-pointer fill-current" />
@ -434,8 +459,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('orderedList') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('orderedList') }"
@click="editor.chain().focus().toggleOrderedList().run()"
>
<list-icon class="h-3 cursor-pointer fill-current" />
@ -450,8 +476,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('blockquote') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('blockquote') }"
@click="editor.chain().focus().toggleBlockquote().run()"
>
<quote-icon class="h-3 cursor-pointer fill-current" />
@ -466,8 +493,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('codeBlock') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('codeBlock') }"
@click="editor.chain().focus().toggleCodeBlock().run()"
>
<code-block-icon class="h-3 cursor-pointer fill-current" />
@ -482,8 +510,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('undo') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('undo') }"
@click="editor.chain().focus().undo().run()"
>
<undo-icon class="h-3 cursor-pointer fill-current" />
@ -498,8 +527,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive('redo') }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive('redo') }"
@click="editor.chain().focus().redo().run()"
>
<redo-icon class="h-3 cursor-pointer fill-current" />
@ -514,8 +544,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive({ textAlign: 'left' }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive({ textAlign: 'left' }) }"
@click="editor.chain().focus().setTextAlign('left').run()"
>
<menu-alt2-icon class="h-5 cursor-pointer fill-current" />
@ -530,8 +561,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive({ textAlign: 'right' }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive({ textAlign: 'right' }) }"
@click="editor.chain().focus().setTextAlign('right').run()"
>
<menu-alt3-icon class="h-5 cursor-pointer fill-current" />
@ -546,9 +578,10 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{
'bg-gray-200': editor.isActive({ textAlign: 'justify' }),
'bg-gray-200 dark:bg-gray-900': editor.isActive({ textAlign: 'justify' }),
}"
@click="editor.chain().focus().setTextAlign('justify').run()"
>
@ -564,8 +597,9 @@
rounded-sm
cursor-pointer
hover:bg-gray-100
dark:hover:bg-gray-800
"
:class="{ 'bg-gray-200': editor.isActive({ textAlign: 'center' }) }"
:class="{ 'bg-gray-200 dark:bg-gray-900': editor.isActive({ textAlign: 'center' }) }"
@click="editor.chain().focus().setTextAlign('center').run()"
>
<menu-center-icon class="h-5 cursor-pointer fill-current" />

View File

@ -7,11 +7,18 @@
relative
overflow-hidden
bg-white
border-b border-gray-200
border-b
border-gray-200
shadow
sm:rounded-lg
"
dark:shadow-glass
dark:border
dark:border-white/10
dark:bg-gray-800/70
"
>
<BaseDarkHighlight v-if="darkHighlight" class="z-[-1]" />
<slot name="header" />
<table :class="tableClass">
<thead :class="theadClass">
@ -51,7 +58,11 @@
<tr
v-for="placeRow in placeholderCount"
:key="placeRow"
:class="placeRow % 2 === 0 ? 'bg-white' : 'bg-gray-50'"
:class="
placeRow % 2 === 0
? 'bg-white dark:bg-gray-800'
: 'bg-gray-50 dark:bg-gray-800'
"
>
<td
v-for="column in columns"
@ -75,7 +86,11 @@
<tr
v-for="(row, index) in sortedRows"
:key="index"
:class="index % 2 === 0 ? 'bg-white' : 'bg-gray-50'"
:class="
index % 2 === 0
? 'bg-white dark:bg-transparent'
: 'bg-gray-50 dark:bg-gray-700/20 dark:border-y dark:border-gray-600'
"
>
<td
v-for="column in columns"
@ -103,7 +118,10 @@
justify-center
w-full
h-full
bg-white bg-opacity-60
bg-white
bg-opacity-60
dark:bg-gray-700
dark:bg-opacity-60
"
>
<SpinnerIcon class="w-10 h-10 text-primary-500" />
@ -163,9 +181,12 @@ const props = defineProps({
sortOrder: { type: String, default: '' },
tableClass: {
type: String,
default: 'min-w-full divide-y divide-gray-200',
default: 'min-w-full divide-y divide-gray-200 dark:divide-gray-600',
},
theadClass: {
type: String,
default: 'bg-gray-50 dark:bg-gray-800 dark:text-white',
},
theadClass: { type: String, default: 'bg-gray-50' },
tbodyClass: { type: String, default: '' },
noResultsMessage: {
type: String,
@ -186,6 +207,10 @@ const props = defineProps({
type: Number,
default: 3,
},
darkHighlight: {
type: Boolean,
default: false,
},
})
let rows = reactive([])
@ -236,7 +261,7 @@ function getColumn(columnName) {
function getThClass(column) {
let classes =
'whitespace-nowrap px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider'
'whitespace-nowrap px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:text-white'
if (column.defaultThClass) {
classes = column.defaultThClass
@ -256,7 +281,8 @@ function getThClass(column) {
}
function getTdClass(column) {
let classes = 'px-6 py-4 text-sm text-gray-500 whitespace-nowrap'
let classes =
'px-6 py-4 text-sm text-gray-500 whitespace-nowrap dark:text-gray-300'
if (column.defaultTdClass) {
classes = column.defaultTdClass
@ -309,6 +335,7 @@ function changeSorting(column) {
}
if (!usesLocalData.value) {
if (pagination.value) pagination.value.currentPage = 1
mapDataToRows()
}
}
@ -326,7 +353,9 @@ async function pageChange(page) {
await mapDataToRows()
}
async function refresh() {
async function refresh(isPreservePage = false) {
if (pagination.value && !isPreservePage) pagination.value.currentPage = 1
await mapDataToRows()
}

View File

@ -10,13 +10,14 @@
bg-white
border-t border-gray-200
sm:px-6
dark:bg-transparent dark:border-white/10
"
>
<div class="flex justify-between flex-1 sm:hidden">
<a
href="#"
:class="{
'disabled cursor-normal pointer-events-none !bg-gray-100 !text-gray-400':
'disabled cursor-normal pointer-events-none !bg-gray-100 !text-gray-400 dark:!bg-gray-800 dark:!text-gray-500':
pagination.currentPage === 1,
}"
class="
@ -32,6 +33,7 @@
border border-gray-300
rounded-md
hover:bg-gray-50
dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300
"
@click="pageClicked(pagination.currentPage - 1)"
>
@ -40,7 +42,7 @@
<a
href="#"
:class="{
'disabled cursor-default pointer-events-none !bg-gray-100 !text-gray-400':
'disabled cursor-default pointer-events-none !bg-gray-100 !text-gray-400 dark:!bg-gray-800 dark:!text-gray-500':
pagination.currentPage === pagination.totalPages,
}"
class="
@ -57,6 +59,7 @@
border border-gray-300
rounded-md
hover:bg-gray-50
dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300
"
@click="pageClicked(pagination.currentPage + 1)"
>
@ -65,12 +68,12 @@
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-700">
<p class="text-sm text-gray-700 dark:text-gray-400">
Showing
{{ ' ' }}
<span
v-if="pagination.limit && pagination.currentPage"
class="font-medium"
class="font-medium dark:text-gray-200"
>
{{
pagination.currentPage * pagination.limit - (pagination.limit - 1)
@ -81,7 +84,7 @@
{{ ' ' }}
<span
v-if="pagination.limit && pagination.currentPage"
class="font-medium"
class="font-medium dark:text-gray-200"
>
<span
v-if="
@ -98,7 +101,7 @@
{{ ' ' }}
of
{{ ' ' }}
<span v-if="pagination.totalCount" class="font-medium">
<span v-if="pagination.totalCount" class="font-medium dark:text-gray-200">
{{ pagination.totalCount }}
</span>
{{ ' ' }}
@ -113,7 +116,7 @@
<a
href="#"
:class="{
'disabled cursor-normal pointer-events-none !bg-gray-100 !text-gray-400':
'disabled cursor-normal pointer-events-none !bg-gray-100 !text-gray-400 dark:!bg-gray-800 dark:!text-gray-500':
pagination.currentPage === 1,
}"
class="
@ -129,6 +132,7 @@
border border-gray-300
rounded-l-md
hover:bg-gray-50
dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300
"
@click="pageClicked(pagination.currentPage - 1)"
>
@ -140,9 +144,9 @@
href="#"
aria-current="page"
:class="{
'z-10 bg-primary-50 border-primary-500 text-primary-600':
'z-10 bg-primary-50 border-primary-500 text-primary-600 dark:bg-primary-500 dark:text-white':
isActive(1),
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50':
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300':
!isActive(1),
}"
class="
@ -173,6 +177,7 @@
text-gray-700
bg-white
border border-gray-300
dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300
"
>
...
@ -182,9 +187,9 @@
:key="page"
href="#"
:class="{
'z-10 bg-primary-50 border-primary-500 text-primary-600':
'z-10 bg-primary-50 border-primary-500 text-primary-600 dark:bg-primary-500 dark:text-white':
isActive(page),
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50':
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300':
!isActive(page),
disabled: page === '...',
}"
@ -220,6 +225,7 @@
text-gray-700
bg-white
border border-gray-300
dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300
"
>
...
@ -229,9 +235,9 @@
href="#"
aria-current="page"
:class="{
'z-10 bg-primary-50 border-primary-500 text-primary-600':
'z-10 bg-primary-50 border-primary-500 text-primary-600 dark:bg-primary-500 dark:text-white':
isActive(pagination.totalPages),
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50':
'bg-white border-gray-300 text-gray-500 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300':
!isActive(pagination.totalPages),
}"
class="
@ -263,9 +269,10 @@
border border-gray-300
rounded-r-md
hover:bg-gray-50
dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300
"
:class="{
'disabled cursor-default pointer-events-none !bg-gray-100 !text-gray-400':
'disabled cursor-default pointer-events-none !bg-gray-100 !text-gray-400 dark:!bg-gray-800 dark:!text-gray-500':
pagination.currentPage === pagination.totalPages,
}"
@click="pageClicked(pagination.currentPage + 1)"

View File

@ -3,23 +3,26 @@
width="50"
height="50"
viewBox="0 0 50 50"
:class="colorClass"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="25" cy="25" r="25" fill="#EAF1FB" />
<circle cx="25" cy="25" r="25" :class="bgColor" />
<path
d="M28.2656 23.0547C27.3021 24.0182 26.1302 24.5 24.75 24.5C23.3698 24.5 22.1849 24.0182 21.1953 23.0547C20.2318 22.0651 19.75 20.8802 19.75 19.5C19.75 18.1198 20.2318 16.9479 21.1953 15.9844C22.1849 14.9948 23.3698 14.5 24.75 14.5C26.1302 14.5 27.3021 14.9948 28.2656 15.9844C29.2552 16.9479 29.75 18.1198 29.75 19.5C29.75 20.8802 29.2552 22.0651 28.2656 23.0547ZM28.2656 25.75C29.6979 25.75 30.9219 26.2708 31.9375 27.3125C32.9792 28.3281 33.5 29.5521 33.5 30.9844V32.625C33.5 33.1458 33.3177 33.5885 32.9531 33.9531C32.5885 34.3177 32.1458 34.5 31.625 34.5H17.875C17.3542 34.5 16.9115 34.3177 16.5469 33.9531C16.1823 33.5885 16 33.1458 16 32.625V30.9844C16 29.5521 16.5078 28.3281 17.5234 27.3125C18.5651 26.2708 19.8021 25.75 21.2344 25.75H21.8984C22.8099 26.1667 23.7604 26.375 24.75 26.375C25.7396 26.375 26.6901 26.1667 27.6016 25.75H28.2656Z"
fill="currentColor"
:class="color"
/>
</svg>
</template>
<script setup>
const props = defineProps({
colorClass: {
color: {
type: String,
default: 'text-primary-500',
default: 'fill-primary-500 dark:fill-white',
},
bgColor: {
type: String,
default: 'fill-gray-100 dark:fill-primary-400',
},
})
</script>

Some files were not shown because too many files have changed in this diff Show More