Compare commits

...

4 Commits

Author SHA1 Message Date
jamesgeorge007
019c2cec46 refactor: remove unnecessary check for slot contents 2023-12-12 14:26:13 +05:30
Liyas Thomas
40b9508361 chore: use template wrapper for slot 2023-12-12 14:26:13 +05:30
Liyas Thomas
85285a5204 fix: search input height 2023-12-12 14:26:13 +05:30
Liyas Thomas
c0c0c37a67 chore: improve placeholder component styles 2023-12-12 14:26:13 +05:30
42 changed files with 479 additions and 413 deletions

View File

@@ -17,9 +17,10 @@
v-if="isEmpty(shortcutsResults)" v-if="isEmpty(shortcutsResults)"
:text="`${t('state.nothing_found')} ‟${filterText}”`" :text="`${t('state.nothing_found')} ‟${filterText}”`"
> >
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <template #icon>
<icon-lucide-search class="svg-icons opacity-75" />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<details <details
v-for="(sectionResults, sectionTitle) in shortcutsResults" v-for="(sectionResults, sectionTitle) in shortcutsResults"
v-else v-else

View File

@@ -49,13 +49,15 @@
:text="`${t('state.nothing_found')} ‟${search}”`" :text="`${t('state.nothing_found')} ‟${search}”`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('action.clear')" :label="t('action.clear')"
outline outline
@click="search = ''" @click="search = ''"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
<div <div

View File

@@ -254,7 +254,7 @@
:text="`${t('state.nothing_found')}${filterText}`" :text="`${t('state.nothing_found')}${filterText}`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
@@ -263,6 +263,7 @@
:alt="`${t('empty.collections')}`" :alt="`${t('empty.collections')}`"
:text="t('empty.collections')" :text="t('empty.collections')"
> >
<template #body>
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<span class="text-center text-secondaryLight"> <span class="text-center text-secondaryLight">
{{ t("collection.import_or_create") }} {{ t("collection.import_or_create") }}
@@ -284,6 +285,7 @@
/> />
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else-if="node.data.type === 'collections'" v-else-if="node.data.type === 'collections'"
@@ -291,6 +293,7 @@
:alt="`${t('empty.collections')}`" :alt="`${t('empty.collections')}`"
:text="t('empty.collections')" :text="t('empty.collections')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('add.new')" :label="t('add.new')"
filled filled
@@ -303,6 +306,7 @@
}) })
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else-if="node.data.type === 'folders'" v-else-if="node.data.type === 'folders'"

View File

@@ -274,6 +274,7 @@
:text="t('empty.collections')" :text="t('empty.collections')"
@drop.stop @drop.stop
> >
<template #body>
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<span class="text-center text-secondaryLight"> <span class="text-center text-secondaryLight">
{{ t("collection.import_or_create") }} {{ t("collection.import_or_create") }}
@@ -287,7 +288,9 @@
:disabled="hasNoTeamAccess" :disabled="hasNoTeamAccess"
:title="hasNoTeamAccess ? t('team.no_access') : ''" :title="hasNoTeamAccess ? t('team.no_access') : ''"
@click=" @click="
hasNoTeamAccess ? null : emit('display-modal-import-export') hasNoTeamAccess
? null
: emit('display-modal-import-export')
" "
/> />
<HoppButtonSecondary <HoppButtonSecondary
@@ -301,6 +304,7 @@
/> />
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else-if="node.data.type === 'collections'" v-else-if="node.data.type === 'collections'"
@@ -309,6 +313,7 @@
:text="t('empty.collections')" :text="t('empty.collections')"
@drop.stop @drop.stop
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('add.new')" :label="t('add.new')"
filled filled
@@ -321,6 +326,7 @@
}) })
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else-if="node.data.type === 'folders'" v-else-if="node.data.type === 'folders'"

View File

@@ -180,6 +180,7 @@
:alt="`${t('empty.collection')}`" :alt="`${t('empty.collection')}`"
:text="t('empty.collection')" :text="t('empty.collection')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('add.new')" :label="t('add.new')"
filled filled
@@ -190,6 +191,7 @@
}) })
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -176,8 +176,7 @@
:src="`/images/states/${colorMode.value}/pack.svg`" :src="`/images/states/${colorMode.value}/pack.svg`"
:alt="`${t('empty.folder')}`" :alt="`${t('empty.folder')}`"
:text="t('empty.folder')" :text="t('empty.folder')"
> />
</HoppSmartPlaceholder>
</div> </div>
</div> </div>
<HoppSmartConfirmModal <HoppSmartConfirmModal

View File

@@ -11,7 +11,7 @@
type="search" type="search"
autocomplete="off" autocomplete="off"
:placeholder="t('action.search')" :placeholder="t('action.search')"
class="!border-0 bg-transparent py-2 pl-4 pr-2" class="flex w-full bg-transparent px-4 py-2 h-8"
/> />
<div <div
class="flex flex-1 flex-shrink-0 justify-between border-y border-dividerLight bg-primary" class="flex flex-1 flex-shrink-0 justify-between border-y border-dividerLight bg-primary"
@@ -66,6 +66,7 @@
:alt="`${t('empty.collections')}`" :alt="`${t('empty.collections')}`"
:text="t('empty.collections')" :text="t('empty.collections')"
> >
<template #body>
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<span class="text-center text-secondaryLight"> <span class="text-center text-secondaryLight">
{{ t("collection.import_or_create") }} {{ t("collection.import_or_create") }}
@@ -87,13 +88,14 @@
/> />
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-if="!(filteredCollections.length !== 0 || collections.length === 0)" v-if="!(filteredCollections.length !== 0 || collections.length === 0)"
:text="`${t('state.nothing_found')}${filterText}`" :text="`${t('state.nothing_found')}${filterText}`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<CollectionsGraphqlAdd <CollectionsGraphqlAdd

View File

@@ -22,7 +22,7 @@
v-model="filterTexts" v-model="filterTexts"
type="search" type="search"
autocomplete="off" autocomplete="off"
class="flex w-full bg-transparent px-4 py-2" class="flex w-full bg-transparent px-4 py-2 h-8"
:placeholder="t('action.search')" :placeholder="t('action.search')"
:disabled="collectionsType.type === 'team-collections'" :disabled="collectionsType.type === 'team-collections'"
/> />

View File

@@ -11,7 +11,9 @@
v-if="!currentInterceptorSupportsCookies" v-if="!currentInterceptorSupportsCookies"
:text="t('cookies.modal.interceptor_no_support')" :text="t('cookies.modal.interceptor_no_support')"
> >
<template #body>
<AppInterceptor class="rounded border border-dividerLight p-2" /> <AppInterceptor class="rounded border border-dividerLight p-2" />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="flex flex-col"> <div v-else class="flex flex-col">
<div <div
@@ -38,8 +40,7 @@
:alt="`${t('cookies.modal.empty_domains')}`" :alt="`${t('cookies.modal.empty_domains')}`"
:text="t('cookies.modal.empty_domains')" :text="t('cookies.modal.empty_domains')"
class="mt-6" class="mt-6"
> />
</HoppSmartPlaceholder>
<div <div
v-for="[domain, entries] in workingCookieJar.entries()" v-for="[domain, entries] in workingCookieJar.entries()"
v-else v-else

View File

@@ -93,20 +93,12 @@
} }
" "
/> />
<div <HoppSmartPlaceholder
v-if="myEnvironments.length === 0" v-if="myEnvironments.length === 0"
class="flex flex-col items-center justify-center text-secondaryLight"
>
<img
:src="`/images/states/${colorMode.value}/blockchain.svg`" :src="`/images/states/${colorMode.value}/blockchain.svg`"
loading="lazy"
class="mb-2 inline-flex h-16 w-16 flex-col object-contain object-center"
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')"
/> />
<span class="pb-2 text-center">
{{ t("empty.environments") }}
</span>
</div>
</HoppSmartTab> </HoppSmartTab>
<HoppSmartTab <HoppSmartTab
:id="'team-environments'" :id="'team-environments'"
@@ -140,20 +132,12 @@
} }
" "
/> />
<div <HoppSmartPlaceholder
v-if="teamEnvironmentList.length === 0" v-if="teamEnvironmentList.length === 0"
class="flex flex-col items-center justify-center text-secondaryLight"
>
<img
:src="`/images/states/${colorMode.value}/blockchain.svg`" :src="`/images/states/${colorMode.value}/blockchain.svg`"
loading="lazy"
class="mb-2 inline-flex h-16 w-16 flex-col object-contain object-center"
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')"
/> />
<span class="pb-2 text-center">
{{ t("empty.environments") }}
</span>
</div>
</div> </div>
<div <div
v-if="!teamListLoading && teamAdapterError" v-if="!teamListLoading && teamAdapterError"

View File

@@ -78,11 +78,13 @@
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')" :text="t('empty.environments')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
filled filled
@click="addEnvironmentVariable" @click="addEnvironmentVariable"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -38,6 +38,7 @@
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')" :text="t('empty.environments')"
> >
<template #body>
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<span class="text-center text-secondaryLight"> <span class="text-center text-secondaryLight">
{{ t("environment.import_or_create") }} {{ t("environment.import_or_create") }}
@@ -59,6 +60,7 @@
/> />
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<EnvironmentsMyDetails <EnvironmentsMyDetails
:show="showModalDetails" :show="showModalDetails"

View File

@@ -81,6 +81,7 @@
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')" :text="t('empty.environments')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
v-if="isViewer" v-if="isViewer"
disabled disabled
@@ -93,6 +94,7 @@
filled filled
@click="addEnvironmentVariable" @click="addEnvironmentVariable"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -49,6 +49,7 @@
:alt="`${t('empty.environments')}`" :alt="`${t('empty.environments')}`"
:text="t('empty.environments')" :text="t('empty.environments')"
> >
<template #body>
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<span class="text-center text-secondaryLight"> <span class="text-center text-secondaryLight">
{{ t("environment.import_or_create") }} {{ t("environment.import_or_create") }}
@@ -74,6 +75,7 @@
/> />
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else-if="!loading"> <div v-else-if="!loading">
<EnvironmentsTeamsEnvironment <EnvironmentsTeamsEnvironment

View File

@@ -120,6 +120,7 @@
:alt="`${t('empty.authorization')}`" :alt="`${t('empty.authorization')}`"
:text="t('empty.authorization')" :text="t('empty.authorization')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
outline outline
:label="t('app.documentation')" :label="t('app.documentation')"
@@ -128,6 +129,7 @@
:icon="IconExternalLink" :icon="IconExternalLink"
reverse reverse
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="flex flex-1 border-b border-dividerLight"> <div v-else class="flex flex-1 border-b border-dividerLight">
<div class="w-2/3 border-r border-dividerLight"> <div class="w-2/3 border-r border-dividerLight">

View File

@@ -162,12 +162,14 @@
:alt="`${t('empty.headers')}`" :alt="`${t('empty.headers')}`"
:text="t('empty.headers')" :text="t('empty.headers')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
filled filled
:icon="IconPlus" :icon="IconPlus"
@click="addHeader" @click="addHeader"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</template> </template>

View File

@@ -20,8 +20,7 @@
:src="`/images/states/${colorMode.value}/add_comment.svg`" :src="`/images/states/${colorMode.value}/add_comment.svg`"
:alt="`${t('empty.documentation')}`" :alt="`${t('empty.documentation')}`"
:text="t('empty.documentation')" :text="t('empty.documentation')"
> />
</HoppSmartPlaceholder>
<div v-else> <div v-else>
<div <div
class="sticky top-0 z-10 flex flex-shrink-0 overflow-x-auto bg-primary" class="sticky top-0 z-10 flex flex-shrink-0 overflow-x-auto bg-primary"
@@ -30,7 +29,7 @@
v-model="graphqlFieldsFilterText" v-model="graphqlFieldsFilterText"
type="search" type="search"
autocomplete="off" autocomplete="off"
class="flex w-full bg-transparent px-4 py-2" class="flex w-full bg-transparent px-4 py-2 h-8"
:placeholder="`${t('action.search')}`" :placeholder="`${t('action.search')}`"
/> />
<div class="flex"> <div class="flex">

View File

@@ -9,7 +9,7 @@
v-model="filterText" v-model="filterText"
type="search" type="search"
autocomplete="off" autocomplete="off"
class="flex w-full bg-transparent px-4 py-2" class="flex w-full bg-transparent px-4 py-2 h-8"
:placeholder="`${t('action.search')}`" :placeholder="`${t('action.search')}`"
/> />
<div class="flex"> <div class="flex">
@@ -114,8 +114,7 @@
:src="`/images/states/${colorMode.value}/history.svg`" :src="`/images/states/${colorMode.value}/history.svg`"
:alt="`${t('empty.history')}`" :alt="`${t('empty.history')}`"
:text="t('empty.history')" :text="t('empty.history')"
> />
</HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else-if=" v-else-if="
Object.keys(filteredHistoryGroups).length === 0 || Object.keys(filteredHistoryGroups).length === 0 ||
@@ -124,8 +123,9 @@
:text="`${t('state.nothing_found')} ‟${filterText || filterSelection}”`" :text="`${t('state.nothing_found')} ‟${filterText || filterSelection}”`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('action.clear')" :label="t('action.clear')"
outline outline
@@ -136,6 +136,7 @@
} }
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartConfirmModal <HoppSmartConfirmModal
:show="confirmRemove" :show="confirmRemove"

View File

@@ -119,6 +119,7 @@
:alt="`${t('empty.authorization')}`" :alt="`${t('empty.authorization')}`"
:text="t('empty.authorization')" :text="t('empty.authorization')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
outline outline
:label="t('app.documentation')" :label="t('app.documentation')"
@@ -127,6 +128,7 @@
:icon="IconExternalLink" :icon="IconExternalLink"
reverse reverse
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="flex flex-1 border-b border-dividerLight"> <div v-else class="flex flex-1 border-b border-dividerLight">
<div class="w-2/3 border-r border-dividerLight"> <div class="w-2/3 border-r border-dividerLight">

View File

@@ -112,6 +112,7 @@
:alt="`${t('empty.body')}`" :alt="`${t('empty.body')}`"
:text="t('empty.body')" :text="t('empty.body')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
outline outline
:label="`${t('app.documentation')}`" :label="`${t('app.documentation')}`"
@@ -120,6 +121,7 @@
:icon="IconExternalLink" :icon="IconExternalLink"
reverse reverse
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</template> </template>

View File

@@ -158,12 +158,14 @@
:alt="`${t('empty.body')}`" :alt="`${t('empty.body')}`"
:text="t('empty.body')" :text="t('empty.body')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
filled filled
:icon="IconPlus" :icon="IconPlus"
@click="addBodyParam" @click="addBodyParam"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</template> </template>

View File

@@ -61,7 +61,7 @@
:text="`${t('state.nothing_found')}${searchQuery}`" :text="`${t('state.nothing_found')}${searchQuery}`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>

View File

@@ -209,12 +209,14 @@
:alt="`${t('empty.headers')}`" :alt="`${t('empty.headers')}`"
:text="t('empty.headers')" :text="t('empty.headers')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
filled filled
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
:icon="IconPlus" :icon="IconPlus"
@click="addHeader" @click="addHeader"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -157,12 +157,14 @@
:alt="`${t('empty.parameters')}`" :alt="`${t('empty.parameters')}`"
:text="t('empty.parameters')" :text="t('empty.parameters')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
:icon="IconPlus" :icon="IconPlus"
filled filled
@click="addParam" @click="addParam"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -37,7 +37,9 @@
:text="t('helpers.network_fail')" :text="t('helpers.network_fail')"
large large
> >
<template #body>
<AppInterceptor class="rounded border border-dividerLight p-2" /> <AppInterceptor class="rounded border border-dividerLight p-2" />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-if="response.type === 'script_fail'" v-if="response.type === 'script_fail'"
@@ -47,12 +49,14 @@
:text="t('helpers.script_fail')" :text="t('helpers.script_fail')"
large large
> >
<template #body>
<div <div
class="mt-2 w-full overflow-auto whitespace-normal rounded bg-primaryLight px-4 py-2 font-mono text-red-400" class="mt-2 w-full overflow-auto whitespace-normal rounded bg-primaryLight px-4 py-2 font-mono text-red-400"
> >
{{ response.error.name }}: {{ response.error.message }}<br /> {{ response.error.name }}: {{ response.error.message }}<br />
{{ response.error.stack }} {{ response.error.stack }}
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div <div
v-if="response.type === 'success' || response.type === 'fail'" v-if="response.type === 'success' || response.type === 'fail'"

View File

@@ -159,8 +159,7 @@
:alt="`${t('error.test_script_fail')}`" :alt="`${t('error.test_script_fail')}`"
:heading="t('error.test_script_fail')" :heading="t('error.test_script_fail')"
:text="t('helpers.test_script_fail')" :text="t('helpers.test_script_fail')"
> />
</HoppSmartPlaceholder>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-else v-else
:src="`/images/states/${colorMode.value}/validation.svg`" :src="`/images/states/${colorMode.value}/validation.svg`"
@@ -168,6 +167,7 @@
:heading="t('empty.tests')" :heading="t('empty.tests')"
:text="t('helpers.tests')" :text="t('helpers.tests')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
outline outline
:label="`${t('action.learn_more')}`" :label="`${t('action.learn_more')}`"
@@ -175,8 +175,8 @@
blank blank
:icon="IconExternalLink" :icon="IconExternalLink"
reverse reverse
class="my-4"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<EnvironmentsMyDetails <EnvironmentsMyDetails
:show="showMyEnvironmentDetailsModal" :show="showMyEnvironmentDetailsModal"

View File

@@ -149,12 +149,14 @@
:alt="`${t('empty.body')}`" :alt="`${t('empty.body')}`"
:text="t('empty.body')" :text="t('empty.body')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
filled filled
:label="`${t('add.new')}`" :label="`${t('add.new')}`"
:icon="IconPlus" :icon="IconPlus"
@click="addUrlEncodedParam" @click="addUrlEncodedParam"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -5,6 +5,7 @@
:heading="t('error.network_fail')" :heading="t('error.network_fail')"
large large
> >
<template #body>
<div class="my-1 flex flex-col items-center text-secondaryLight"> <div class="my-1 flex flex-col items-center text-secondaryLight">
<span> <span>
{{ t("error.please_install_extension") }} {{ t("error.please_install_extension") }}
@@ -54,6 +55,7 @@
</HoppSmartToggle> </HoppSmartToggle>
</div> </div>
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</template> </template>

View File

@@ -32,10 +32,12 @@
:alt="`${t('empty.shared_requests_logout')}`" :alt="`${t('empty.shared_requests_logout')}`"
:text="`${t('empty.shared_requests_logout')}`" :text="`${t('empty.shared_requests_logout')}`"
> >
<template #body>
<HoppButtonPrimary <HoppButtonPrimary
:label="t('auth.login')" :label="t('auth.login')"
@click="invokeAction('modals.login.toggle')" @click="invokeAction('modals.login.toggle')"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<template v-else-if="sharedRequests.length"> <template v-else-if="sharedRequests.length">

View File

@@ -60,7 +60,7 @@
:text="`${t('state.nothing_found')}${searchQuery}`" :text="`${t('state.nothing_found')}${searchQuery}`"
> >
<template #icon> <template #icon>
<icon-lucide-search class="svg-icons pb-2 opacity-75" /> <icon-lucide-search class="svg-icons opacity-75" />
</template> </template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>

View File

@@ -45,6 +45,7 @@
:alt="`${t('empty.members')}`" :alt="`${t('empty.members')}`"
:text="t('empty.members')" :text="t('empty.members')"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:icon="IconUserPlus" :icon="IconUserPlus"
:label="t('team.invite')" :label="t('team.invite')"
@@ -54,6 +55,7 @@
} }
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="divide-y divide-dividerLight"> <div v-else class="divide-y divide-dividerLight">
<div <div

View File

@@ -125,8 +125,7 @@
pendingInvites.data.right.team?.teamInvitations.length === 0 pendingInvites.data.right.team?.teamInvitations.length === 0
" "
:text="t('empty.pending_invites')" :text="t('empty.pending_invites')"
> />
</HoppSmartPlaceholder>
<div <div
v-if="!pendingInvites.loading && E.isLeft(pendingInvites.data)" v-if="!pendingInvites.loading && E.isLeft(pendingInvites.data)"
class="flex flex-col items-center p-4" class="flex flex-col items-center p-4"
@@ -245,11 +244,13 @@
:alt="`${t('empty.invites')}`" :alt="`${t('empty.invites')}`"
:text="`${t('empty.invites')}`" :text="`${t('empty.invites')}`"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('add.new')" :label="t('add.new')"
filled filled
@click="addNewInvitee" @click="addNewInvitee"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
<div <div

View File

@@ -16,11 +16,13 @@
:alt="`${t('empty.teams')}`" :alt="`${t('empty.teams')}`"
:text="`${t('empty.teams')}`" :text="`${t('empty.teams')}`"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="`${t('team.create_new')}`" :label="`${t('team.create_new')}`"
filled filled
@click="displayModalAdd(true)" @click="displayModalAdd(true)"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div <div
v-else-if="!loading" v-else-if="!loading"

View File

@@ -21,6 +21,7 @@
:alt="`${t('empty.teams')}`" :alt="`${t('empty.teams')}`"
:text="`${t('empty.teams')}`" :text="`${t('empty.teams')}`"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('team.create_new')" :label="t('team.create_new')"
filled filled
@@ -28,6 +29,7 @@
:icon="IconPlus" :icon="IconPlus"
@click="displayModalAdd(true)" @click="displayModalAdd(true)"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else-if="!loading" class="flex flex-col"> <div v-else-if="!loading" class="flex flex-col">
<div <div

View File

@@ -14,10 +14,12 @@
:alt="`${t('empty.profile')}`" :alt="`${t('empty.profile')}`"
:text="`${t('empty.profile')}`" :text="`${t('empty.profile')}`"
> >
<template #body>
<HoppButtonPrimary <HoppButtonPrimary
:label="t('auth.login')" :label="t('auth.login')"
@click="invokeAction('modals.login.toggle')" @click="invokeAction('modals.login.toggle')"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="space-y-8"> <div v-else class="space-y-8">
<div <div

View File

@@ -142,12 +142,14 @@
:alt="`${t('empty.subscription')}`" :alt="`${t('empty.subscription')}`"
:text="`${t('empty.subscription')}`" :text="`${t('empty.subscription')}`"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:label="t('mqtt.new')" :label="t('mqtt.new')"
filled filled
outline outline
@click="showSubscriptionModal(true)" @click="showSubscriptionModal(true)"
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else> <div v-else>
<div <div

View File

@@ -197,6 +197,7 @@
:alt="`${t('socketio.connection_not_authorized')}`" :alt="`${t('socketio.connection_not_authorized')}`"
:text="`${t('socketio.connection_not_authorized')}`" :text="`${t('socketio.connection_not_authorized')}`"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
outline outline
:label="t('app.documentation')" :label="t('app.documentation')"
@@ -205,6 +206,7 @@
:icon="IconExternalLink" :icon="IconExternalLink"
reverse reverse
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div <div
v-if="authType === 'Bearer'" v-if="authType === 'Bearer'"

View File

@@ -163,8 +163,7 @@
:src="`/images/states/${colorMode.value}/add_category.svg`" :src="`/images/states/${colorMode.value}/add_category.svg`"
:alt="`${t('empty.protocols')}`" :alt="`${t('empty.protocols')}`"
:text="`${t('empty.protocols')}`" :text="`${t('empty.protocols')}`"
> />
</HoppSmartPlaceholder>
</HoppSmartTab> </HoppSmartTab>
</HoppSmartTabs> </HoppSmartTabs>
</template> </template>

View File

@@ -117,7 +117,13 @@
alt="No invites" alt="No invites"
text="No invites" text="No invites"
> >
<HoppButtonSecondary label="Add new" filled @click="addNewMember" /> <template #body>
<HoppButtonSecondary
label="Add new"
filled
@click="addNewMember"
/>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
<div <div

View File

@@ -15,6 +15,7 @@
v-if="team?.teamMembers?.length === 0" v-if="team?.teamMembers?.length === 0"
text="No members in this team. Add members to this team to collaborate" text="No members in this team. Add members to this team to collaborate"
> >
<template #body>
<HoppButtonSecondary <HoppButtonSecondary
:icon="IconUserPlus" :icon="IconUserPlus"
:label="t('teams.add_members')" :label="t('teams.add_members')"
@@ -24,6 +25,7 @@
} }
" "
/> />
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
<div v-else class="divide-y divide-dividerLight"> <div v-else class="divide-y divide-dividerLight">
<div <div

View File

@@ -41,10 +41,12 @@
v-if="team && pendingInvites?.length === 0" v-if="team && pendingInvites?.length === 0"
text="No pending invites" text="No pending invites"
> >
<template #body>
<div v-if="!fetching && error" class="flex flex-col items-center p-4"> <div v-if="!fetching && error" class="flex flex-col items-center p-4">
<icon-lucide-help-circle class="mb-4 svg-icons" /> <icon-lucide-help-circle class="mb-4 svg-icons" />
Something went wrong. Please try again later. {{ t('error.something_went_wrong') }}
</div> </div>
</template>
</HoppSmartPlaceholder> </HoppSmartPlaceholder>
</div> </div>
</div> </div>

View File

@@ -4,24 +4,29 @@
v-if="src" v-if="src"
:src="src" :src="src"
loading="lazy" loading="lazy"
class="inline-flex flex-col object-contain object-center mb-4" class="inline-flex flex-col object-contain object-center"
:class="large ? 'w-32 h-32' : 'w-16 h-16'" :class="large ? 'w-32 h-32' : 'w-16 h-16'"
:alt="alt" :alt="alt"
/> />
<slot name="icon"></slot> <slot name="icon"></slot>
<span v-if="heading" class="mb-2 font-semibold text-center"> <span v-if="heading" class="font-semibold mt-2 text-center">
{{ heading }} {{ heading }}
</span> </span>
<span <span
class="max-w-sm mb-4 text-center whitespace-normal text-secondaryLight" v-if="text"
class="max-w-sm mt-2 text-center whitespace-normal text-secondaryLight text-tiny"
> >
{{ text }} {{ text }}
</span> </span>
<slot></slot> <div v-if="hasBody" class="mt-4">
<slot name="body"></slot>
</div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, useSlots } from "vue"
withDefaults( withDefaults(
defineProps<{ defineProps<{
src?: string src?: string
@@ -35,4 +40,10 @@ withDefaults(
text: "", text: "",
} }
) )
const slots = useSlots()
const hasBody = computed(() => {
return !!slots.body
})
</script> </script>