Make all spinner icons local

This commit is contained in:
marzban-dev
2026-04-28 20:59:51 +03:30
parent 7b6b775354
commit 90a305234d
30 changed files with 34 additions and 30 deletions
@@ -50,7 +50,7 @@ const visible = computed({
<div class="-translate-y-28 flex-center gap-3"> <div class="-translate-y-28 flex-center gap-3">
<Icon <Icon
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
size="20" size="20"
/> />
<span class="text-lg"> در حال انتقال به درگاه پرداخت </span> <span class="text-lg"> در حال انتقال به درگاه پرداخت </span>
@@ -113,7 +113,7 @@ const handleDeleteAddress = (id: number) => {
> >
<span v-if="setOrderAddressIsPending"> <span v-if="setOrderAddressIsPending">
<Icon <Icon
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
class="**:fill-white" class="**:fill-white"
/> />
</span> </span>
@@ -302,7 +302,7 @@ watch(
> >
<Icon <Icon
v-if="createAddressIsPending" v-if="createAddressIsPending"
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
/> />
<span v-else>ثبت</span> <span v-else>ثبت</span>
</Button> </Button>
@@ -272,7 +272,7 @@ watch(
> >
<Icon <Icon
v-if="submitSpecialDiscountCodeIsPending || deleteSpecialDiscountCodeIsPending" v-if="submitSpecialDiscountCodeIsPending || deleteSpecialDiscountCodeIsPending"
name="svg-spinners:180-ring-with-bg" name="ci:svg-spinners-180-ring-with-bg"
size="20" size="20"
class="**:fill-white" class="**:fill-white"
/> />
@@ -296,7 +296,7 @@ watch(
> >
<Icon <Icon
v-if="submitSpecialDiscountCodeIsPending || deleteSpecialDiscountCodeIsPending" v-if="submitSpecialDiscountCodeIsPending || deleteSpecialDiscountCodeIsPending"
name="svg-spinners:180-ring-with-bg" name="ci:svg-spinners-180-ring-with-bg"
size="20" size="20"
class="**:fill-white" class="**:fill-white"
/> />
+4 -4
View File
@@ -206,7 +206,7 @@ watch(
class="size-10 flex-center" class="size-10 flex-center"
> >
<Icon <Icon
:name="'svg-spinners:180-ring-with-bg'" :name="'ci:svg-spinners-180-ring-with-bg'"
class="size-[18px]" class="size-[18px]"
/> />
</div> </div>
@@ -225,7 +225,7 @@ watch(
> >
<Icon <Icon
v-if="counter == 1" v-if="counter == 1"
:name="deleteCartItemIsPending ? 'svg-spinners:3-dots-bounce' : 'ci:bi-trash'" :name="deleteCartItemIsPending ? 'ci:svg-spinners-3-dots-bounce' : 'ci:bi-trash'"
class="**:fill-red-700" class="**:fill-red-700"
/> />
<Icon <Icon
@@ -272,7 +272,7 @@ watch(
class="size-10 text-sm flex-center" class="size-10 text-sm flex-center"
> >
<Icon <Icon
:name="'svg-spinners:180-ring-with-bg'" :name="'ci:svg-spinners-180-ring-with-bg'"
class="size-[25px]" class="size-[25px]"
/> />
</div> </div>
@@ -291,7 +291,7 @@ watch(
> >
<Icon <Icon
v-if="counter == 1" v-if="counter == 1"
:name="deleteCartItemIsPending ? 'svg-spinners:3-dots-bounce' : 'ci:bi-trash'" :name="deleteCartItemIsPending ? 'ci:svg-spinners-3-dots-bounce' : 'ci:bi-trash'"
class="**:fill-red-700" class="**:fill-red-700"
/> />
<Icon <Icon
@@ -76,7 +76,7 @@ const handleSubmit = () => {
> >
<Icon <Icon
v-if="deleteCartAllIsPending" v-if="deleteCartAllIsPending"
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
/> />
<span v-else>بله</span> <span v-else>بله</span>
</Button> </Button>
+1 -1
View File
@@ -43,6 +43,6 @@ const classes = computed(() => {
<Icon v-if="!loading && startIcon" :name="startIcon" /> <Icon v-if="!loading && startIcon" :name="startIcon" />
<slot v-if="!loading" /> <slot v-if="!loading" />
<Icon v-if="!loading && endIcon" :name="endIcon" /> <Icon v-if="!loading && endIcon" :name="endIcon" />
<Icon v-if="loading" name="svg-spinners:3-dots-fade" class="my-0.5" /> <Icon v-if="loading" name="ci:svg-spinners-3-dots-fade" class="my-0.5" />
</button> </button>
</template> </template>
+1 -1
View File
@@ -121,7 +121,7 @@ const removeAttachment = (id: number) => {
<Icon <Icon
:name=" :name="
loading loading
? 'svg-spinners:ring-resize' ? 'ci:svg-spinners-ring-resize'
: 'ci:bi-file-earmark-arrow-down' : 'ci:bi-file-earmark-arrow-down'
" "
size="32" size="32"
+1 -1
View File
@@ -72,7 +72,7 @@ const classes = computed(() => {
class="font-iran-yekan-x text-xs lg:text-sm text-start placeholder-slate-400 placeholder:text-xs lg:placeholder:text-sm" class="font-iran-yekan-x text-xs lg:text-sm text-start placeholder-slate-400 placeholder:text-xs lg:placeholder:text-sm"
/> />
<Icon <Icon
:name="loading ? 'svg-spinners:3-dots-fade' : 'ci:bi-chevron-down'" :name="loading ? 'ci:svg-spinners-3-dots-fade' : 'ci:bi-chevron-down'"
size="16" size="16"
/> />
</SelectTrigger> </SelectTrigger>
@@ -73,7 +73,7 @@ onMounted(() => {
class="w-[40px] h-[25px] flex-center transition-all absolute bg-white" class="w-[40px] h-[25px] flex-center transition-all absolute bg-white"
> >
<Icon <Icon
:name="'svg-spinners:180-ring-with-bg'" :name="'ci:svg-spinners-180-ring-with-bg'"
class="size-[25px]" class="size-[25px]"
/> />
</div> </div>
@@ -154,7 +154,7 @@ whenever(
class="py-2 flex items-center justify-center" class="py-2 flex items-center justify-center"
> >
<Icon <Icon
name="svg-spinners:3-dots-fade" name="ci:svg-spinners-3-dots-fade"
size="24" size="24"
/> />
</div> </div>
@@ -96,7 +96,7 @@ const sendMessage = async () => {
<TransitionGroup name="fade-down"> <TransitionGroup name="fade-down">
<Icon <Icon
v-if="isCreatingMessage" v-if="isCreatingMessage"
name="svg-spinners:wind-toy" name="ci:svg-spinners-wind-toy"
size="24" size="24"
class="text-black" class="text-black"
/> />
@@ -110,7 +110,7 @@ onMounted(() => {
<Icon <Icon
v-else v-else
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
size="20" size="20"
/> />
</div> </div>
@@ -93,7 +93,7 @@ watch(
> >
<Icon <Icon
v-if="isSaveProductPending || isFetchingPending" v-if="isSaveProductPending || isFetchingPending"
name="svg-spinners:180-ring-with-bg" name="ci:svg-spinners-180-ring-with-bg"
/> />
<Icon <Icon
@@ -159,7 +159,7 @@ watch(
> >
<Icon <Icon
v-if="isSaveProductPending || isFetchingPending" v-if="isSaveProductPending || isFetchingPending"
name="svg-spinners:180-ring-with-bg" name="ci:svg-spinners-180-ring-with-bg"
/> />
<Icon <Icon
@@ -211,7 +211,7 @@ watch(
> >
در حال دریافت اطلاعات در حال دریافت اطلاعات
<Icon <Icon
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
size="20" size="20"
/> />
</span> </span>
@@ -71,7 +71,7 @@ const handleSubmit = () => {
> >
<Icon <Icon
v-if="signoutIsPending" v-if="signoutIsPending"
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
/> />
<span v-else>آره دارم میرم</span> <span v-else>آره دارم میرم</span>
</Button> </Button>
@@ -171,7 +171,7 @@ const resetAvatarFile = async () => {
> >
<Icon <Icon
v-if="updateAccountIsPending" v-if="updateAccountIsPending"
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
/> />
<span v-else>آپلود عکس شما</span> <span v-else>آپلود عکس شما</span>
</Button> </Button>
@@ -60,7 +60,7 @@ const { downloadFn, downloadIsLoading } = useDownloadInvoice(String(data.value.i
> >
<Icon <Icon
v-if="downloadIsLoading" v-if="downloadIsLoading"
name="svg-spinners:3-dots-fade" name="ci:svg-spinners-3-dots-fade"
class="**:stroke-black" class="**:stroke-black"
size="20" size="20"
/> />
@@ -55,7 +55,7 @@ const handleDeleteAttachment = (id: number) => {
<Icon <Icon
:name=" :name="
deleteAttachmentPending deleteAttachmentPending
? 'svg-spinners:ring-resize' ? 'ci:svg-spinners-ring-resize'
: 'ci:close' : 'ci:close'
" "
:class=" :class="
@@ -202,7 +202,7 @@ watch(
> >
در حال دریافت اطلاعات در حال دریافت اطلاعات
<Icon <Icon
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
size="20" size="20"
/> />
</span> </span>
-1
View File
@@ -16,7 +16,6 @@
}, },
"dependencies": { "dependencies": {
"@formkit/auto-animate": "^0.8.2", "@formkit/auto-animate": "^0.8.2",
"@iconify-json/bi": "^1.2.7",
"@nuxt/icon": "^1.10.3", "@nuxt/icon": "^1.10.3",
"@nuxt/image": "^1.10.0", "@nuxt/image": "^1.10.0",
"@nuxtjs/google-fonts": "^3.2.0", "@nuxtjs/google-fonts": "^3.2.0",
+1 -1
View File
@@ -191,7 +191,7 @@ const handleSubmit = (withValidation: boolean) => {
> >
<Icon <Icon
v-if="updateAccountIsPending" v-if="updateAccountIsPending"
name="svg-spinners:3-dots-bounce" name="ci:svg-spinners-3-dots-bounce"
/> />
<span v-else> ثبت تغییرات </span> <span v-else> ثبت تغییرات </span>
</Button> </Button>
+1 -1
View File
@@ -114,7 +114,7 @@ watch(
<Switch v-model="subscribe" /> <Switch v-model="subscribe" />
<Icon <Icon
v-if="subscribeNotificationIsPending" v-if="subscribeNotificationIsPending"
name="svg-spinners:180-ring-with-bg" name="ci:svg-spinners-180-ring-with-bg"
size="20" size="20"
/> />
</div> </div>
+1 -1
View File
@@ -303,7 +303,7 @@ const handleSubmit = async () => {
v-if="createMessageIsPending" v-if="createMessageIsPending"
:name=" :name="
createMessageIsPending createMessageIsPending
? 'svg-spinners:3-dots-bounce' ? 'ci:svg-spinners-3-dots-bounce'
: 'ci:bi-send' : 'ci:bi-send'
" "
/> />
+1 -1
View File
@@ -325,7 +325,7 @@ const handleSubmit = async () => {
> >
<Icon <Icon
v-if="createTicketIsPending" v-if="createTicketIsPending"
:name="createTicketIsPending ? 'svg-spinners:3-dots-bounce' : 'ci:bi-send'" :name="createTicketIsPending ? 'ci:svg-spinners-3-dots-bounce' : 'ci:bi-send'"
/> />
<span v-else>ارسال تیکت</span> <span v-else>ارسال تیکت</span>
</Button> </Button>
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from SVG Spinners by Utkarsh Verma - https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE --><path fill="currentColor" d="M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z" opacity=".25"/><path fill="currentColor" d="M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"><animateTransform attributeName="transform" dur="0.75s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"/></path></svg>

After

Width:  |  Height:  |  Size: 644 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from SVG Spinners by Utkarsh Verma - https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE --><circle cx="4" cy="12" r="3" fill="currentColor"><animate id="SVGKiXXedfO" attributeName="cy" begin="0;SVGgLulOGrw.end+0.25s" calcMode="spline" dur="0.6s" keySplines=".33,.66,.66,1;.33,0,.66,.33" values="12;6;12"/></circle><circle cx="12" cy="12" r="3" fill="currentColor"><animate attributeName="cy" begin="SVGKiXXedfO.begin+0.1s" calcMode="spline" dur="0.6s" keySplines=".33,.66,.66,1;.33,0,.66,.33" values="12;6;12"/></circle><circle cx="20" cy="12" r="3" fill="currentColor"><animate id="SVGgLulOGrw" attributeName="cy" begin="SVGKiXXedfO.begin+0.2s" calcMode="spline" dur="0.6s" keySplines=".33,.66,.66,1;.33,0,.66,.33" values="12;6;12"/></circle></svg>

After

Width:  |  Height:  |  Size: 852 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from SVG Spinners by Utkarsh Verma - https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE --><circle cx="4" cy="12" r="3" fill="currentColor"><animate id="SVG7x14Dcom" fill="freeze" attributeName="opacity" begin="0;SVGqSjG0dUp.end-0.25s" dur="0.75s" values="1;.2"/></circle><circle cx="12" cy="12" r="3" fill="currentColor" opacity=".4"><animate fill="freeze" attributeName="opacity" begin="SVG7x14Dcom.begin+0.15s" dur="0.75s" values="1;.2"/></circle><circle cx="20" cy="12" r="3" fill="currentColor" opacity=".3"><animate id="SVGqSjG0dUp" fill="freeze" attributeName="opacity" begin="SVG7x14Dcom.begin+0.3s" dur="0.75s" values="1;.2"/></circle></svg>

After

Width:  |  Height:  |  Size: 753 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from SVG Spinners by Utkarsh Verma - https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE --><g stroke="currentColor"><circle cx="12" cy="12" r="9.5" fill="none" stroke-linecap="round" stroke-width="3"><animate attributeName="stroke-dasharray" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1" repeatCount="indefinite" values="0 150;42 150;42 150;42 150"/><animate attributeName="stroke-dashoffset" calcMode="spline" dur="1.5s" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" keyTimes="0;0.475;0.95;1" repeatCount="indefinite" values="0;-16;-59;-59"/></circle><animateTransform attributeName="transform" dur="2s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"/></g></svg>

After

Width:  |  Height:  |  Size: 858 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from SVG Spinners by Utkarsh Verma - https://github.com/n3r4zzurr0/svg-spinners/blob/main/LICENSE --><path fill="currentColor" d="M20.27,4.74a4.93,4.93,0,0,1,1.52,4.61,5.32,5.32,0,0,1-4.1,4.51,5.12,5.12,0,0,1-5.2-1.5,5.53,5.53,0,0,0,6.13-1.48A5.66,5.66,0,0,0,20.27,4.74ZM12.32,11.53a5.49,5.49,0,0,0-1.47-6.2A5.57,5.57,0,0,0,4.71,3.72,5.17,5.17,0,0,1,9.53,2.2,5.52,5.52,0,0,1,13.9,6.45,5.28,5.28,0,0,1,12.32,11.53ZM19.2,20.29a4.92,4.92,0,0,1-4.72,1.49,5.32,5.32,0,0,1-4.34-4.05A5.2,5.2,0,0,1,11.6,12.5a5.6,5.6,0,0,0,1.51,6.13A5.63,5.63,0,0,0,19.2,20.29ZM3.79,19.38A5.18,5.18,0,0,1,2.32,14a5.3,5.3,0,0,1,4.59-4,5,5,0,0,1,4.58,1.61,5.55,5.55,0,0,0-6.32,1.69A5.46,5.46,0,0,0,3.79,19.38ZM12.23,12a5.11,5.11,0,0,0,3.66-5,5.75,5.75,0,0,0-3.18-6,5,5,0,0,1,4.42,2.3,5.21,5.21,0,0,1,.24,5.92A5.4,5.4,0,0,1,12.23,12ZM11.76,12a5.18,5.18,0,0,0-3.68,5.09,5.58,5.58,0,0,0,3.19,5.79c-1,.35-2.9-.46-4-1.68A5.51,5.51,0,0,1,11.76,12ZM23,12.63a5.07,5.07,0,0,1-2.35,4.52,5.23,5.23,0,0,1-5.91.2,5.24,5.24,0,0,1-2.67-4.77,5.51,5.51,0,0,0,5.45,3.33A5.52,5.52,0,0,0,23,12.63ZM1,11.23a5,5,0,0,1,2.49-4.5,5.23,5.23,0,0,1,5.81-.06,5.3,5.3,0,0,1,2.61,4.74A5.56,5.56,0,0,0,6.56,8.06,5.71,5.71,0,0,0,1,11.23Z"><animateTransform attributeName="transform" dur="1.5s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"/></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB