Merge branch 'master' of https://github.com/brkcvn/akaunting into form-elements

This commit is contained in:
Burak Civan 2022-06-28 16:46:57 +03:00
commit 2e6aaa8f10
54 changed files with 12529 additions and 980 deletions

View File

@ -113,11 +113,13 @@ abstract class Model extends Eloquent implements Ownable
return $query->paginate($limit);
}
public function scopeUsingSearchString($query)
public function scopeUsingSearchString(Builder $query, string|null $string = null)
{
event(new SearchStringApplying($query));
$this->getSearchStringManager()->updateBuilder($query, request('search'));
$string = $string ?: request('search');
$this->getSearchStringManager()->updateBuilder($query, $string);
event(new SearchStringApplied($query));
}

View File

@ -444,7 +444,7 @@ class Transaction extends Model
} catch (\Exception $e) {}
try {
if (! $this->reconciled) {
if (! $this->reconciled && ! $this->hasTransferRelation) {
$actions[] = [
'title' => trans('general.edit'),
'icon' => 'edit',
@ -458,7 +458,7 @@ class Transaction extends Model
} catch (\Exception $e) {}
try {
if (empty($this->document_id)) {
if (empty($this->document_id) && ! $this->hasTransferRelation) {
$actions[] = [
'title' => trans('general.duplicate'),
'icon' => 'file_copy',
@ -472,7 +472,7 @@ class Transaction extends Model
} catch (\Exception $e) {}
try {
if ($this->is_splittable && empty($this->document_id) && empty($this->recurring)) {
if ($this->is_splittable && empty($this->document_id) && empty($this->recurring) && ! $this->hasTransferRelation) {
$connect = [
'type' => 'button',
'title' => trans('general.connect'),
@ -519,54 +519,56 @@ class Transaction extends Model
} catch (\Exception $e) {}
if ($prefix != 'recurring-transactions') {
$actions[] = [
'type' => 'divider',
];
try {
if (! $this->hasTransferRelation) {
$actions[] = [
'type' => 'button',
'title' => trans('general.share_link'),
'icon' => 'share',
'url' => route('modals.transactions.share.create', $this->id),
'permission' => 'read-banking-transactions',
'attributes' => [
'id' => 'index-more-actions-share-' . $this->id,
'@click' => 'onShareLink("' . route('modals.transactions.share.create', $this->id) . '")',
],
'type' => 'divider',
];
} catch (\Exception $e) {}
try {
$actions[] = [
'type' => 'button',
'title' => trans('invoices.send_mail'),
'icon' => 'email',
'url' => route('modals.transactions.emails.create', $this->id),
'permission' => 'read-banking-transactions',
'attributes' => [
'id' => 'index-more-actions-send-email-' . $this->id,
'@click' => 'onEmail("' . route('modals.transactions.emails.create', $this->id) . '")',
],
];
} catch (\Exception $e) {}
$actions[] = [
'type' => 'divider',
];
try {
if (! $this->reconciled) {
try {
$actions[] = [
'type' => 'delete',
'icon' => 'delete',
'text' => ! empty($this->recurring) ? 'transactions' : 'recurring_template',
'route' => $prefix. '.destroy',
'permission' => 'delete-banking-transactions',
'model' => $this,
'type' => 'button',
'title' => trans('general.share_link'),
'icon' => 'share',
'url' => route('modals.transactions.share.create', $this->id),
'permission' => 'read-banking-transactions',
'attributes' => [
'id' => 'index-more-actions-share-' . $this->id,
'@click' => 'onShareLink("' . route('modals.transactions.share.create', $this->id) . '")',
],
];
}
} catch (\Exception $e) {}
} catch (\Exception $e) {}
try {
$actions[] = [
'type' => 'button',
'title' => trans('invoices.send_mail'),
'icon' => 'email',
'url' => route('modals.transactions.emails.create', $this->id),
'permission' => 'read-banking-transactions',
'attributes' => [
'id' => 'index-more-actions-send-email-' . $this->id,
'@click' => 'onEmail("' . route('modals.transactions.emails.create', $this->id) . '")',
],
];
} catch (\Exception $e) {}
$actions[] = [
'type' => 'divider',
];
try {
if (! $this->reconciled) {
$actions[] = [
'type' => 'delete',
'icon' => 'delete',
'text' => ! empty($this->recurring) ? 'transactions' : 'recurring_template',
'route' => $prefix. '.destroy',
'permission' => 'delete-banking-transactions',
'model' => $this,
];
}
} catch (\Exception $e) {}
}
} else {
try {
$actions[] = [

View File

@ -34,7 +34,7 @@ class Link extends Component
*/
public function render()
{
return view('components.link');
return view('components.link.index');
}
protected function getOverride($override)

View File

@ -0,0 +1,36 @@
<?php
namespace App\View\Components\Link;
use App\Abstracts\View\Component;
use Illuminate\Support\Str;
class Hover extends Component
{
public $color;
public $groupHover;
/**
* Create a new component instance.
*
* @return void
*/
public function __construct(
string $color = 'to-black',
bool $groupHover = false,
) {
$this->color = $color;
$this->groupHover = $groupHover;
}
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|string
*/
public function render()
{
return view('components.link.hover');
}
}

12
presets.js vendored
View File

@ -224,7 +224,17 @@ module.exports = {
transitionProperty: {
'height': 'height',
'spacing': 'margin, padding',
'visible': 'visible, opacity'
'visible': 'visible, opacity',
'backgroundSize': 'background-size'
},
backgroundSize: {
'0-2': '0 2px',
'full-2': '100% 2px'
},
backgroundPosition: {
'0-full': ' 0 100%'
}
},

View File

@ -295,9 +295,11 @@ function OnInput() {
//Loading scenario for href links
document.querySelectorAll('[data-link-loading]').forEach((href) => {
let target_link_html = href.parentElement;
target_link_html.classList.add('relative');
target_link_html.addEventListener('click', function () {
this.classList.add('disabled-link');
this.querySelector('[data-link-spin]').classList.remove('hidden');
this.querySelector('[data-link-text]').classList.add('opacity-0');
this.querySelector('[data-link-text]').classList.remove('opacity-1');

12925
public/css/app.css vendored

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -98,12 +98,12 @@
<div class="absolute flex flex-col mt-2">
<button type="button" class="p-0 text-xs text-purple ltr:text-left rtl:text-right" @click="onContactEdit">
<span class="border-b border-transparent transition-all hover:border-purple">
<span class="bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-purple transition-backgroundSize">
{{ editContactText.replace(':contact_name', contact.name).replace(':field', contact.name) }}
</span>
</button>
<button type="button" class="p-0 text-xs text-purple ltr:text-left rtl:text-right" @click="onContactList">
<span class="border-b border-transparent transition-all hover:border-purple">
<span class="bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-purple transition-backgroundSize">
{{ chooseDifferentContactText }}
</span>
</button>

View File

@ -69,15 +69,15 @@
</div>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
</span>
</button>
</div>
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
</span>
</button>
</div>
</form>
</div>
</div>
</template>

View File

@ -6,15 +6,13 @@
<el-alert v-for="requirement in requirements" :key="requirement" :title="requirement" :closable="false" type="error" effect="dark"> </el-alert>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="button" @click="onRefresh" :disabled="button_loading" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="button_loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': button_loading}]">
Refresh
</span>
</button>
</div>
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="button" @click="onRefresh" :disabled="button_loading" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="button_loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': button_loading}]">
Refresh
</span>
</button>
</div>
</div>
</template>

View File

@ -11,8 +11,8 @@
<input :class="[{'border-red': form.errors.get('company_name')}, {'border-light-gray': !form.errors.get('company_name')}]" class="w-full text-sm px-3 py-2.5 mt-1 rounded-lg border text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple" data-name="company_name" @keydown="form.errors.clear('company_name')" v-model="form.company_name" required="required" name="company_name" type="text" id="company_name" />
</div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('company_name')" v-html="form.errors.get('company_name')"></div>
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('company_email')}]">
<label for="company_email" class="form-control-label">Company Email</label>
<div class="sm:col-span-6 required">
<label for="company_email" class="text-black text-sm font-medium">Company Email</label>
@ -22,8 +22,8 @@
<input :class="[{'border-red': form.errors.get('company_email')}, {'border-light-gray': !form.errors.get('company_email')}]" class="w-full text-sm px-3 py-2.5 mt-1 rounded-lg border text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple" data-name="company_email" @keydown="form.errors.clear('company_email')" v-model="form.company_email" required="required" name="company_email" type="text" id="company_email" />
</div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('company_email')" v-html="form.errors.get('company_email')"></div>
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('user_email')}]">
<label for="user_email" class="form-control-label">Admin Email</label>
<div class="sm:col-span-6 required">
<label for="user_email" class="text-black text-sm font-medium">Admin Email</label>
@ -33,8 +33,8 @@
<input :class="[{'border-red': form.errors.get('user_email')}, {'border-light-gray': !form.errors.get('user_email')}]" class="w-full text-sm px-3 py-2.5 mt-1 rounded-lg border text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple" data-name="user_email" @keydown="form.errors.clear('user_email')" v-model="form.user_email" required="required" name="user_email" type="text" id="user_email" />
</div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('user_email')" v-html="form.errors.get('user_email')"></div>
</div>
<div class="sm:col-span-6 required" :class="[{'has-error': form.errors.get('user_password')}]">
<label for="user_password" class="form-control-label">Admin Password</label>
<div class="sm:col-span-6 required">
<label for="user_password" class="text-black text-sm font-medium">Admin Password</label>
@ -43,12 +43,8 @@
<div class="input-group input-group-merge">
<input :class="[{'border-red': form.errors.get('user_password')}, {'border-light-gray': !form.errors.get('user_password')}]" class="w-full text-sm px-3 py-2.5 mt-1 rounded-lg borde text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple" data-name="user_password" @keydown="form.errors.clear('user_password')" v-model="form.user_password" required="required" name="user_password" type="password" value="" id="user_password" />
</div>
<div class="text-red text-sm mt-1 block" v-if="form.errors.has('user_password')" v-html="form.errors.get('user_password')"></div>
</div>
</div>
<div class="relative__footer">
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
@ -57,7 +53,7 @@
</span>
</button>
</div>
</div>
</form>
</div>
</template>

View File

@ -119,7 +119,7 @@
<div v-if="currencies.length" class="w-full border-b hover:bg-gray-100" style="height:53px;">
<button type="button" class="w-full h-full flex items-center justify-center text-purple font-medium disabled:bg-gray-200" @click="onAddItem()">
<span class="material-icons-outlined text-base font-bold ltr:mr-1 rtl:ml-1">add</span>
<span class="border-b border-transparent transition-all">{{ translations.currencies.new_currency }}</span>
<span class="bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-purple transition-backgroundSize">{{ translations.currencies.new_currency }}</span>
</button>
</div>

View File

@ -97,7 +97,7 @@
}
table thead a {
@apply border-b border-transparent transition-all;
@apply bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-black transition-backgroundSize;
}
table thead a:hover {
@ -503,6 +503,14 @@ html[dir='rtl'] .el-input__suffix {
@apply cursor-default pointer-events-none opacity-50;
}
[dir="ltr"] .ltr\:-right-57 {
right: -14.5rem;
}
[dir="rtl"] .rtl\:-right-59 {
right: 16.5rem;
}
@media only screen and (max-width: 480px) {
.small-table-width {
width: 450px;

View File

@ -286,7 +286,7 @@ return [
],
'empty' => [
'documentation' => 'Check out the <a href=":url" target="_blank" class="text-green border-b border-transparent transition-all hover:text-green-700 hover:border-green-700">documentation</a> for more details.',
'documentation' => 'Check out the <a href=":url" target="_blank" class="text-green bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-green transition-backgroundSize">documentation</a> for more details.',
'items' => 'Items can be products or services. You can use items when creating invoices and bills to have the price, tax etc fields populated.',
'invoices' => 'Invoices can be one time or recurring. You can send them to customers and start accepting online payments.',
'revenues' => 'Revenue is a paid income transaction. It can be an independent record (i.e. deposit) or attached to an invoice.',

View File

@ -8,8 +8,10 @@
<div class="flex items-center relative cursor-pointer">
<x-dropdown id="dashboard-list">
<x-slot name="trigger" class="flex items-center" override="class">
<span class="text-2xl xl:text-5xl text-black font-light truncate border-b border-transparent transition-all hover:text-black-700 hover:border-black">
{{ $dashboard->name }}
<span class="text-2xl xl:text-5xl text-black font-light truncate">
<x-link.hover color="to-black-700">
{{ $dashboard->name }}
</x-link.hover>
</span>
<svg class="w-5 h-5 mt-1 text-gray-400" x-description="Heroicon name: solid/selector" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">

View File

@ -42,9 +42,9 @@
<div class="ltr:ml-2 rtl:mr-2">
<h2 class="mb-1">
<span class="border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ $report->name }}
</span>
</x-link.hover>
</h2>
<span class="text-black-400 text-sm">{{ $report->description }}</span>

View File

@ -190,18 +190,18 @@
@if (! $hideDiscount && in_array(setting('localisation.discount_location'), ['item', 'both']))
<div class="text-left border-0 p-0 mr-16" v-if="!row.add_discount">
<button type="button" class="text-xs text-purple" @click="onAddLineDiscount(index)">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.add', ['type' => trans('invoices.discount')]) }}
</span>
</x-link.hover>
</button>
</div>
@endif
<div class="text-right border-0 p-0 pr-4">
<button type="button" class="text-xs text-purple" @click="onAddTax(index)">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.add', ['type' => trans_choice('general.taxes', 1)]) }}
</span>
</x-link.hover>
</button>
</div>
</div>

View File

@ -79,10 +79,10 @@
<td class="border-t-0 py-0"></td>
<td class="text-right border-t-0 border-r-0 border-b-0 align-middle py-0 pr-0">
<div v-if="show_discount_text">
<span class="border-b border-transparent transition-all text-sm text-purple cursor-pointer hover:border-purple" v-if="!totals.discount_text" @click="onAddDiscount()">
<div v-if="show_discount_text" v-if="!totals.discount_text" @click="onAddDiscount()">
<x-link.hover color="to-purple">
{{ trans('invoices.add_discount') }}
</span>
</x-link.hover>
</div>
<span v-if="totals.discount_text" v-html="totals.discount_text"></span>

View File

@ -35,9 +35,9 @@
override="class"
class="py-1.5 mb-3 sm:mb-0 text-xs bg-transparent hover:bg-transparent font-medium leading-6"
>
<span class="border-b border-transparent transition-all hover:border-black">
<x-link.hover>
{{ trans('documents.accept_payment_online') }}
</span>
</x-link.hover>
</x-link>
@endif
</div>
@ -62,16 +62,16 @@
@if (! empty($transaction->contact) && $transaction->contact->email)
<x-button id="button-email-send" class="text-purple mt-1" override="class" @click="onEmail('{{ route($transactionEmailRoute, $transaction->id) }}')">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.send', ['type' => trans_choice('general.receipts', 1)]) }}
</span>
</x-link.hover>
</x-button>
@else
<x-tooltip message="{{ trans('invoices.messages.email_required') }}" placement="top">
<x-button class="text-purple mt-1" override="class" disabled="disabled">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.send', ['type' => trans_choice('general.receipts', 1)]) }}
</span>
</x-link.hover>
</x-button>
</x-tooltip>
@endif
@ -84,9 +84,9 @@
class="text-purple mt-1"
override="class"
>
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.edit', ['type' => trans_choice('general.payments', 1)]) }}
</span>
</x-link.hover>
</x-button>
<span> - </span>
@ -105,7 +105,7 @@
:message="$message"
:label="trans('general.title.delete', ['type' => trans_choice('general.payments', 1)])"
class="text-purple mt-1"
text-class="border-b border-transparent transition-all hover:border-purple"
text-class="bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-purple transition-backgroundSize"
override="class"
/>
</div>

View File

@ -46,16 +46,16 @@
@if (! empty($transaction->contact) && $transaction->contact->email)
<x-button id="button-email-send" class="text-purple mt-1" override="class" @click="onEmail('{{ route($transactionEmailRoute, $transaction->id) }}')">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.send', ['type' => trans_choice('general.receipts', 1)]) }}
</span>
</x-link.hover>
</x-button>
@else
<x-tooltip message="{{ trans('invoices.messages.email_required') }}" placement="top">
<x-button class="text-purple mt-1" override="class" disabled="disabled">
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.send', ['type' => trans_choice('general.receipts', 1)]) }}
</span>
</x-link.hover>
</x-button>
</x-tooltip>
@endif
@ -68,9 +68,9 @@
class="text-purple mt-1"
override="class"
>
<span class="border-b border-transparent transition-all hover:border-purple">
<x-link.hover color="to-purple">
{{ trans('general.title.edit', ['type' => trans_choice('general.payments', 1)]) }}
</span>
</x-link.hover>
</x-button>
<span> - </span>
@ -89,7 +89,7 @@
:message="$message"
:label="trans('general.title.delete', ['type' => trans_choice('general.payments', 1)])"
class="text-purple mt-1"
text-class="border-b border-transparent transition-all hover:border-purple"
text-class="bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-purple transition-backgroundSize"
override="class"
/>
</div>

View File

@ -56,8 +56,10 @@
</div>
<div class="ltr:mr-4 rtl:ml-4" v-if="bulk_action.count">
<button type="button" class="text-sm border-b border-transparent transition-all hover:border-black" @click="onClearBulkAction">
<span>{{ trans('general.clear') }}</span>
<button type="button" @click="onClearBulkAction">
<x-link.hover>
{{ trans('general.clear') }}
</x-link.hover>
</button>
</div>
</div>

View File

@ -113,9 +113,9 @@
<div class="flex ltr:ml-2 rtl:mr-2">
<span class="w-28 text-left block text-base truncate">
<span class="border-b border-transparent transition-all hover:border-black">
<x-link.hover>
{{ Str::limit(setting('company.name'), 22) }}
</span>
</x-link.hover>
</span>
@can('read-common-companies')
@ -222,7 +222,7 @@
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90">expand_circle_down</span>
</button>
<span data-menu-close id="menu-cancel" class="material-icons absolute ltr:-right-2 rtl:right-12 top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
<span data-menu-close id="menu-cancel" class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
</div>

View File

@ -58,6 +58,7 @@
function contentTransitionLeft() {
sectionContent.classList.add("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.remove("xl:ltr:ml-64", "xl:rtl:mr-64");
toggleButton.querySelector("span").classList.add("ltr:-rotate-90", "rtl:rotate-90");
}
@ -65,16 +66,19 @@
function contentTransitionRight() {
sectionContent.classList.remove("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.add("xl:ltr:ml-64", "xl:rtl:mr-64");
toggleButton.querySelector("span").classList.remove("ltr:-rotate-90", "rtl:rotate-90");
}
function hiddenSidebar() {
sideBar.classList.add("menu-list-hidden");
toggleButton.classList.add("ltr:left-12", "rtl:right-12");
}
function unHiddenSidebar() {
toggleButton.classList.remove("ltr:left-12", "rtl:right-12");
sideBar.classList.remove("menu-list-hidden");
}
@ -147,14 +151,26 @@
menu.classList.remove("ltr:-left-80", "rtl:-right-80");
menu.classList.add("ltr:left-14", "rtl:right-14");
mainContent.classList.add("hidden");
toggleButton.classList.add("invisible");
menuClose.classList.remove("hidden");
unHiddenSidebar();
contentTransitionRight();
notificationCount("none");
//for hidden menu, show close icon scenario
if (sideBar.classList.contains("menu-list-hidden")) {
menuClose.classList.add("ltr:-right-57", "rtl:right-59");
menuClose.classList.remove("ltr:-right-2", "rtl:right-12");
} else {
menuClose.classList.add("ltr:-right-2", "rtl:right-12");
}
sectionContent.classList.remove("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.add("xl:ltr:ml-64", "xl:rtl:mr-64");
//for hidden menu, show close icon scenario
if (menuRef === "notifications-menu") {
notificationCount("none");
}
//remove active (cancel text) class form target icon
} else if (menu.classList.contains(menuRef) && iconButton.children[0].textContent == "cancel") {
@ -163,6 +179,7 @@
menu.classList.add("ltr:-left-80", "rtl:-right-80");
menu.classList.remove("ltr:left-14", "rtl:right-14");
mainContent.classList.remove("hidden");
toggleButton.classList.remove("invisible");
menuClose.classList.add("hidden");
@ -178,11 +195,21 @@
menuClose.addEventListener("click", function() {
menu.classList.add("ltr:-left-80", "rtl:-right-80");
menu.classList.remove("ltr:left-14", "rtl:right-14");
iconButton.children[0].textContent = icon;
iconButton.children[0].classList.remove("active");
mainContent.classList.remove("hidden");
this.classList.add("hidden");
toggleButton.classList.remove("invisible");
//for hidden menu, show close icon scenario
if (sideBar.classList.contains("menu-list-hidden")) {
sectionContent.classList.add("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.remove("xl:ltr:ml-64", "xl:rtl:mr-64");
}
//for hidden menu, show close icon scenario
});
});
}
@ -201,6 +228,7 @@
profile_icon_html.children[0].classList.remove("hidden");
profile_icon_html.children[1].classList.add("hidden");
toggleButton.classList.add("invisible");
}
@ -214,6 +242,7 @@
settings_icon_html.children[0].textContent = "cancel";
settings_icon_html.children[0].classList.add("active");
toggleButton.classList.add("invisible");
}
}

View File

@ -14,9 +14,9 @@
<div class="grid grid-cols-2 gap-2">
@foreach ($categories as $slug => $category)
<x-link href="{{ $categoryUrl($slug) }}" class="font-semibold text-sm ltr:pr-4 rtl:pl-4 lg:pr-0 truncate bg-transparent" override="class">
<span class="border-b border-transparent transition-all hover:border-black">
<x-link.hover>
{{ $category }}
</span>
</x-link.hover>
</x-link>
@endforeach
</div>
@ -80,27 +80,27 @@
<div class="flex flex-row items-end lg:items-center mb-1 divide-x divide-black-400">
<x-link href="{{ route('apps.home.index') }}" class="text-sm font-semibold px-2 sm:mt-0 sm:mb-0 leading-4" override="class">
<span class="border-b border-transparent transition-all hover:border-black-400">
<x-link.hover color="to-black-400">
{{ trans('modules.home') }}
</span>
</x-link.hover>
</x-link>
<x-link href="{{ route('apps.new') }}" class="text-sm font-semibold px-2 sm:mt-0 sm:mb-0 leading-4" override="class">
<span class="border-b border-transparent transition-all hover:border-black-400">
<x-link.hover color="to-black-400">
{{ trans('modules.new') }}
</span>
</x-link.hover>
</x-link>
<x-link href="{{ route('apps.paid') }}" class="text-sm font-semibold px-2 sm:mt-0 sm:mb-0 leading-4" override="class">
<span class="border-b border-transparent transition-all hover:border-black-400">
<x-link.hover color="to-black-400">
{{ trans('modules.top_paid') }}
</span>
</x-link.hover>
</x-link>
<x-link href="{{ route('apps.free') }}" class="text-sm font-semibold px-2 sm:mt-0 sm:mb-0 leading-4" override="class">
<span class="border-b border-transparent transition-all hover:border-black-400">
<x-link.hover color="to-black-400">
{{ trans('modules.top_free') }}
</span>
</x-link.hover>
</x-link>
</div>
</div>

View File

@ -1,34 +1,49 @@
@props(['module', 'installed', 'enable'])
@if (! empty($module->plan))
<a href="{{ $module->action_url }}" class="relative bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
<x-link.loading>
{{ trans('modules.get_premium_cloud') }}
</x-link.loading>
</a>
<x-link
href="{{ $module->action_url }}"
target="_blank"
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
override="class"
>
{{ trans('modules.get_premium_cloud') }}
</x-link>
@elseif (in_array('onprime', $module->where_to_use))
@if ($installed)
@can('delete-modules-item')
<a href="{{ route('apps.app.uninstall', $module->slug) }}" class="relative bg-red text-white rounded-md text-sm text-center w-1/2 py-2 truncate">
<x-link.loading>
<x-link
href="{{ route('apps.app.uninstall', $module->slug) }}"
class="bg-red rounded-md text-white text-sm text-center w-1/2 py-2 truncate"
override="class"
>
<x-link.loading>
{{ trans('modules.button.uninstall') }}
</x-link.loading>
</a>
</x-link>
@endcan
@can('update-modules-item')
@if ($enable)
<a href="{{ route('apps.app.disable', $module->slug) }}" class="relative bg-orange rounded-md text-white w-1/2 text-center text-sm py-2 truncate">
<x-link.loading>
<x-link
href="{{ route('apps.app.disable', $module->slug) }}"
class="bg-orange rounded-md text-white text-sm text-center w-1/2 py-2 truncate"
override="class"
>
<x-link.loading>
{{ trans('modules.button.disable') }}
</x-link.loading>
</a>
</x-link>
@else
<a href="{{ route('apps.app.enable', $module->slug) }}" class="relative bg-green rounded-md text-white text-sm text-center w-1/2 py-2 truncate">
<x-link.loading>
<x-link
href="{{ route('apps.app.enable', $module->slug) }}"
class="bg-green rounded-md text-white text-sm text-center w-1/2 py-2 truncate"
override="class"
>
<x-link.loading>
{{ trans('modules.button.enable') }}
</x-link.loading>
</a>
</x-link>
@endif
@endcan
@else
@ -53,26 +68,35 @@
</button>
@endif
@else
<a href="{{ $module->action_url }}" class="relative bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
<x-link.loading>
{{ trans('modules.use_app') }}
</x-link.loading>
</a>
<x-link
href="{{ $module->action_url }}"
target="_blank"
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
override="class"
>
{{ trans('modules.use_app') }}
</x-link>
@endif
@endcan
@endif
@else
@if ($module->install)
<a href="{{ $module->action_url }}" class="relative bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
<x-link.loading>
{{ trans('modules.install_cloud') }}
</x-link.loading>
</a>
<x-link
href="{{ $module->action_url }}"
target="_blank"
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
override="class"
>
{{ trans('modules.install_cloud') }}
</x-link>
@else
<a href="{{ $module->action_url }}" class="relative bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
<x-link.loading>
{{ trans('modules.get_cloud') }}
</x-link.loading>
</a>
<x-link
href="{{ $module->action_url }}"
target="_blank"
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
override="class"
>
{{ trans('modules.get_cloud') }}
</x-link>
@endif
@endif

View File

@ -84,9 +84,9 @@
<div class="flex ltr:ml-2 rtl:mr-2">
<span class="w-28 text-left block text-base truncate">
<span class="border-b border-transparent transition-all hover:border-black">
<x-link.hover>
{{ Str::limit(setting('company.name'), 22) }}
</span>
</x-link.hover>
</span>
@can('read-common-companies')
@ -169,7 +169,7 @@
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90">expand_circle_down</span>
</button>
<span data-menu-close class="material-icons absolute ltr:-right-2 rtl:right-12 top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
<span data-menu-close class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
</div>

View File

@ -137,8 +137,18 @@
mainContent.classList.add("hidden");
toggleButton.classList.add("invisible");
menuClose.classList.remove("hidden");
unHiddenSidebar();
contentTransitionRight();
//for hidden menu, show close icon scenario
if (sideBar.classList.contains("menu-list-hidden")) {
menuClose.classList.add("ltr:-right-57", "rtl:right-59");
menuClose.classList.remove("ltr:-right-2", "rtl:right-12");
} else {
menuClose.classList.add("ltr:-right-2", "rtl:right-12");
}
sectionContent.classList.remove("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.add("xl:ltr:ml-64", "xl:rtl:mr-64");
//for hidden menu, show close icon scenario
//remove active (cancel text) class form target icon
} else if (menu.classList.contains(menuRef) && iconButton.children[0].textContent == "cancel") {
@ -164,6 +174,13 @@
mainContent.classList.remove("hidden");
this.classList.add("hidden");
toggleButton.classList.remove("invisible");
//for hidden menu, show close icon scenario
if (sideBar.classList.contains("menu-list-hidden")) {
sectionContent.classList.add("xl:ltr:ml-0", "xl:rtl:mr-0");
sectionContent.classList.remove("xl:ltr:ml-64", "xl:rtl:mr-64");
}
//for hidden menu, show close icon scenario
});
});
}

View File

@ -0,0 +1,10 @@
<span
@class([
$color,
$groupHover ? 'group-hover:bg-full-2' : 'hover:bg-full-2',
'bg-no-repeat bg-0-2 bg-0-full bg-gradient-to-b from-transparent transition-backgroundSize'
])
>
{!! $slot !!}
</span>

View File

@ -1,4 +1,3 @@
<a class="{{ $class }}" {{ $attributes }}>
{{ $slot }}
</a>

View File

@ -8,4 +8,4 @@
<span data-link-text class="opacity-1">
{!! $slot !!}
</span>
</div>
</div>

View File

@ -11,9 +11,9 @@
@if ($attributes->has('route'))
<div class="flex justify-center items-center group">
<a href="{{ route($attributes->get('route')) }}">
<span class="border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ trans('modules.see_all_type', ['type' => $attributes->get('title')]) }}
</span>
</x-link.hover>
</a>
<i class="material-icons text-sm ltr:ml-1 rtl:mr-1 transform transition-all group-hover:translate-x-1">arrow_forward</i>

View File

@ -1,8 +1,8 @@
<div>
<h2 class="lg:text-lg font-medium text-black">
<span class="border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ $title }}
</span>
</x-link.hover>
</h2>
@if (! empty($description))

View File

@ -22,8 +22,10 @@
@if (! empty($button) && $button->isNotEmpty())
{!! $button !!}
@else
<a href="{!! $url !!}" class="border-b border-transparent transition-all hover:border-white">
{{ $textAction }}
<a href="{!! $url !!}">
<x-link.hover color="to-white">
{{ $textAction }}
</x-link.hover>
</a>
@endif
</div>

View File

@ -14,8 +14,10 @@
{!! $item->description !!}
</p>
<a href="{{ $item->action }}" class="font-light text-sm border-b border-transparent transition-all hover:border-black" target="_blank">
{{ $item->learn_more }}
<a href="{{ $item->action }}" class="font-light text-sm" target="_blank">
<x-link.hover>
{{ $item->learn_more }}
</x-link.hover>
</a>
</div>

View File

@ -14,8 +14,10 @@
{!! $item->description !!}
</p>
<a href="{{ $item->action }}" class="font-light text-sm border-b border-transparent transition-all hover:border-black">
{{ $item->learn_more }}
<a href="{{ $item->action }}" class="font-light text-sm">
<x-link.hover>
{{ $item->learn_more }}
</x-link.hover>
</a>
</div>

View File

@ -5,8 +5,10 @@
<div class="relative w-full text-left cursor-pointer group"
x-on:click="attachment !== 1 ? attachment = 1 : attachment = null"
>
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans_choice('general.attachments', 2) }}
<span class="font-medium">
<x-link.hover group-hover>
{{ trans_choice('general.attachments', 2) }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -10,7 +10,7 @@
@stack('edit_button_start')
@if (! $transaction->hasTransferRelation)
@if (! $transaction->reconciled && ! $transaction->hasTransferRelation)
@if (! $hideButtonEdit)
@can($permissionUpdate)
<x-link href="{{ route($routeButtonEdit, [$transaction->id, 'type' => $type]) }}">

View File

@ -2,8 +2,10 @@
<button class="relative w-full text-left cursor-pointer group"
x-on:click="children !== 1 ? children = 1 : children = null"
>
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans_choice('general.transactions', 2) }}
<span class="font-medium">
<x-link.hover group-hover>
{{ trans_choice('general.transactions', 2) }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -4,8 +4,10 @@
<button class="relative w-full text-left group"
x-on:click="create !== 1 ? create = 1 : create = null"
>
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans('general.create') }}
<span class="font-medium">
<x-link.hover>
{{ trans('general.create') }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -8,7 +8,7 @@
@stack('duplicate_button_start')
@if (! $transaction->hasTransferRelation)
@if (empty($transaction->document_id) && ! $transaction->hasTransferRelation)
@if (! $hideButtonDuplicate)
@can($permissionCreate)
<x-dropdown.link href="{{ route($routeButtonDuplicate, [$transaction->id, 'type' => $type]) }}">
@ -22,7 +22,7 @@
@stack('connect_button_start')
@if ($transaction->is_splittable && empty($transaction->document_id) && empty($transaction->recurring))
@if ($transaction->is_splittable && empty($transaction->document_id) && empty($transaction->recurring) && ! $transaction->hasTransferRelation)
@if (! $hideButtonConnect)
@can($permissionCreate)
<button
@ -38,7 +38,7 @@
@stack('connect_button_end')
@if (! $hideDivider1)
@if (! $hideDivider1 && ! $transaction->hasTransferRelation)
<x-dropdown.divider />
@endif
@ -62,7 +62,7 @@
@stack('button_pdf_end')
@if (! $hideDivider2)
@if (! $hideDivider2 && ! $transaction->hasTransferRelation)
<x-dropdown.divider />
@endif
@ -98,7 +98,7 @@
@stack('email_button_end')
@if (! $hideDivider3)
@if (! $hideDivider3 && ! $transaction->hasTransferRelation)
<x-dropdown.divider />
@endif
@ -112,7 +112,7 @@
@stack('button_end_end')
@if (! $hideDivider4)
@if (! $hideDivider4 && ! $transaction->hasTransferRelation)
<x-dropdown.divider />
@endif

View File

@ -7,8 +7,10 @@
<button class="relative w-full text-left cursor-pointer group"
x-on:click="schedule !== 1 ? schedule = 1 : schedule = null"
>
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans_choice('general.schedules', 1) }}
<span class="font-medium">
<x-link.hover group-hover>
{{ trans_choice('general.schedules', 1) }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -1,8 +1,10 @@
@if ($transfer->attachment)
<div class="border-b border-gray-200 pb-4" x-data="{ attachment : null }">
<div class="relative w-full text-left cursor-pointer group" x-on:click="attachment !== 1 ? attachment = 1 : attachment = null">
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans_choice('general.attachments', 2) }}
<span class="font-medium">
<x-link.hover group-hover>
{{ trans_choice('general.attachments', 2) }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -2,8 +2,10 @@
<div class="border-b pb-4" x-data="{ create : null }">
<button class="relative w-full text-left group" x-on:click="create !== 1 ? create = 1 : create = null">
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
{{ trans('general.create') }}
<span class="font-medium">
<x-link.hover group-hover>
{{ trans('general.create') }}
</x-link.hover>
</span>
<div class="text-black-400 text-sm">

View File

@ -7,7 +7,11 @@
<div class="flex items-center">
@if ($report = $class->getReportUrl())
<a href="{{ $report }}" class="text-purple text-sm mr-3 border-b border-transparent transition-all hover:border-purple hover:text-purple-700">{{ trans('widgets.view_report') }}</a>
<a href="{{ $report }}" class="text-purple text-sm mr-3">
<x-link.hover color="to-purple">
{{ trans('widgets.view_report') }}
</x-link.hover>
</a>
@endif
<x-dropdown id="dropdown-widget-{{ $class->model->id }}">

View File

@ -7,10 +7,11 @@
])
>
<span class="material-icons-outlined text-4xl transition-all text-black-400">{{ $icons[$report->id] }}</span>
<div class="h-10 font-medium text-sm mt-2">
<span class="border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ $report->name }}
</span>
</x-link.hover>
</div>
</a>
@endforeach

View File

@ -106,7 +106,7 @@
@foreach ($invoice->transactions as $transaction)
<div class="my-2">
<span>
<x-link href="{{ route('preview.payments.show', $transaction->id) }}" class="text-black border-b border-transparent transition-all hover:border-black" override="class">
<x-link href="{{ route('preview.payments.show', $transaction->id) }}" class="text-black bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-black transition-backgroundSize" override="class">
<x-date :date="$transaction->paid_at" />
</x-link>
- {!! trans('documents.transaction', [

View File

@ -102,7 +102,7 @@
@foreach ($invoice->transactions as $transaction)
<div class="my-2">
<span>
<x-link href="{{ route('portal.payments.show', $transaction->id) }}" class="text-black border-b border-transparent transition-all hover:border-black" override="class">
<x-link href="{{ route('portal.payments.show', $transaction->id) }}" class="text-black bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-black transition-backgroundSize" override="class">
<x-date :date="$transaction->paid_at" />
</x-link>
- {!! trans('documents.transaction', [

View File

@ -105,7 +105,7 @@
@foreach ($invoice->transactions as $transaction)
<div class="my-2">
<span>
<x-link href="{{ \URL::signedRoute('portal.payments.show', [$transaction->id]) }}" class="text-black border-b border-transparent transition-all hover:border-black" override="class">
<x-link href="{{ \URL::signedRoute('portal.payments.show', [$transaction->id]) }}" class="text-black bg-no-repeat bg-0-2 bg-0-full hover:bg-full-2 bg-gradient-to-b from-transparent to-black transition-backgroundSize" override="class">
<x-date :date="$transaction->paid_at" />
</x-link>
- {!! trans('documents.transaction', [

View File

@ -24,9 +24,9 @@
<div class="w-full lg:w-5/12 space-y-8">
<div class="border-b-2 border-gray-200 pb-1">
<div class="relative w-full text-left group">
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ trans('portal.received_date') }}
</span>
</x-link.hover>
</div>
<div class="relative overflow-hidden transition-all duration-700">

View File

@ -22,9 +22,9 @@
<div class="w-full lg:w-5/12 space-y-8">
<div class="border-b-2 border-gray-200 pb-1">
<div class="relative w-full text-left group">
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ trans('portal.received_date') }}
</span>
</x-link.hover>
</div>
<div class="relative overflow-hidden transition-all duration-700">

View File

@ -32,9 +32,9 @@
<div class="w-full lg:w-5/12 space-y-8">
<div class="border-b-2 border-gray-200 pb-1">
<div class="relative w-full text-left group">
<span class="font-medium border-b border-transparent transition-all group-hover:border-black">
<x-link.hover group-hover>
{{ trans('portal.received_date') }}
</span>
</x-link.hover>
</div>
<div class="relative overflow-hidden transition-all duration-700">

View File

@ -14,8 +14,10 @@
<div class="flex flex-col">
<div class="mb-3">
@foreach ($template as $item)
<button class="text-xs truncate text-left border-b border-transparent transition-all hover:border-purple hover:text-purple" @click="onEditEmailTemplate({{ $item->id }}, $event)" >
{{ trans($item->name) }}
<button class="text-xs truncate text-left" @click="onEditEmailTemplate({{ $item->id }}, $event)" >
<x-link.hover color="to-purple">
{{ trans($item->name) }}
</x-link.hover>
</button>
@endforeach
</div>

View File

@ -28,9 +28,9 @@
</span>
<button id="dashboard-widget-{{ strtolower(class_basename($class)) }}-overdue" type="button" class="flex items-center text-black-400 font-medium group" data-dropdown-toggle="widgets-list-{{ $class->model->id }}">
<span class="border-b border-transparent transition-all group-hover:border-black-400">
<x-link.hover color="to-black-400" group-hover>
{{ $totals['overdue'] }}
</span>
</x-link.hover>
<div class="relative flex">
<span class="material-icons-round cursor-pointer">arrow_drop_down</span>