271f40e355
commit8ed95731cbAuthor: Phillip Thelen <phillip@habitica.com> Date: Tue Jul 23 17:59:56 2024 +0200 fix hatched dialog commit53242ad96cAuthor: Phillip Thelen <phillip@habitica.com> Date: Tue Jul 23 17:38:13 2024 +0200 fix popover not showing commitce4bfd25bdAuthor: Phillip Thelen <phillip@habitica.com> Date: Wed Jul 3 17:28:30 2024 +0200 move item popover to own component commit2e6a300c46Author: Phillip Thelen <phillip@habitica.com> Date: Mon Jul 1 18:48:24 2024 +0200 make scaled sprites look nice commita3cbadb8c2Author: Phillip Thelen <phillip@habitica.com> Date: Mon Jul 1 18:48:17 2024 +0200 fix hatching dialog commit0e5126df5eAuthor: Phillip Thelen <phillip@habitica.com> Date: Mon Jul 1 18:48:12 2024 +0200 fix popover alignment commit7362af9236Author: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 28 17:07:03 2024 +0200 fix item display commitcf353efdb7Author: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 28 16:59:13 2024 +0200 fix pet display commitcaf0cba9f2Author: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 28 15:24:39 2024 +0200 fix background icon display commit3b06febc01Author: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 26 12:30:04 2024 +0200 fix sprites for notifications commit160b2debdcAuthor: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 26 10:35:13 2024 +0200 fix gear display in profile commitb200a2f17dAuthor: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 26 10:28:11 2024 +0200 fix sprites for keys to the kennel commit3614e7a8fbAuthor: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 26 10:28:00 2024 +0200 fix sprites on avatar customization commit35f993d055Author: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 26 09:18:41 2024 +0200 fix hover icons commit28fc80115eAuthor: Phillip Thelen <phillip@habitica.com> Date: Tue Jun 11 16:50:37 2024 +0200 remove console commitb041c67679Author: Phillip Thelen <phillip@habitica.com> Date: Tue Jun 11 15:18:44 2024 +0200 more lint fixes commitf4261d0440Author: Phillip Thelen <phillip@habitica.com> Date: Tue Jun 11 15:18:16 2024 +0200 fix lint commit878ee8f77bAuthor: Phillip Thelen <phillip@habitica.com> Date: Tue Jun 11 13:23:08 2024 +0200 support gifs commitaac24715aaAuthor: Phillip Thelen <phillip@habitica.com> Date: Tue Jun 11 13:15:52 2024 +0200 move avatar customization to sprites commitf4d3663130Author: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 7 17:25:19 2024 +0200 Move more sprites out of css commit6e6b4c981aAuthor: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 7 16:59:30 2024 +0200 add new sprite to item and shopItem component commit8712413f5dAuthor: Phillip Thelen <phillip@habitica.com> Date: Fri Jun 7 16:37:24 2024 +0200 use new sprites for pets list commit1172893826Author: Phillip Thelen <phillip@habitica.com> Date: Wed Jun 5 09:43:51 2024 +0200 Begin building new system for loading sprites
224 lines
3.8 KiB
Vue
224 lines
3.8 KiB
Vue
<template>
|
|
<div>
|
|
<div
|
|
:id="itemId"
|
|
class="item-wrapper"
|
|
tabindex="0"
|
|
@click="click()"
|
|
@keypress.enter="click()"
|
|
>
|
|
<div
|
|
class="item"
|
|
:class="getItemClasses()"
|
|
>
|
|
<slot
|
|
name="badges"
|
|
:item="item"
|
|
:emptyItem="emptyItem"
|
|
></slot>
|
|
<div class="image">
|
|
<Sprite
|
|
v-once
|
|
:image-name="item.class"
|
|
/>
|
|
<slot
|
|
name="itemImage"
|
|
:item="item"
|
|
></slot>
|
|
</div>
|
|
<div
|
|
class="d-flex label-holder align-items-center justify-content-center"
|
|
:class="labelClass"
|
|
>
|
|
<slot
|
|
name="label"
|
|
:item="item"
|
|
></slot>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<b-popover
|
|
v-if="showPopover"
|
|
:target="itemId"
|
|
triggers="hover focus"
|
|
:placement="popoverPosition"
|
|
>
|
|
<slot
|
|
name="popoverContent"
|
|
:item="item"
|
|
>
|
|
</slot>
|
|
</b-popover>
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
@import '~@/assets/scss/colors.scss';
|
|
|
|
.item-wrapper {
|
|
z-index: 10;
|
|
}
|
|
|
|
.item {
|
|
height: 7.5rem;
|
|
width: 94px;
|
|
border-radius: 4px;
|
|
background-color: $white;
|
|
box-shadow: 0 1px 3px 0 rgba($black, 0.12), 0 1px 2px 0 rgba($black, 0.24);
|
|
cursor: initial;
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
&:hover {
|
|
border-color: transparent;
|
|
}
|
|
|
|
&.locked .price {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
.image {
|
|
margin: 12px 13px;
|
|
flex: 1;
|
|
|
|
align-items: center;
|
|
justify-content: center;
|
|
display: flex;
|
|
}
|
|
|
|
.label-holder {
|
|
height: 28px;
|
|
font-weight: bold;
|
|
line-height: 1.33;
|
|
text-align: center;
|
|
background-color: $gray-700;
|
|
border-bottom-left-radius: 4px;
|
|
border-bottom-right-radius: 4px;
|
|
}
|
|
|
|
.label-holder.purple {
|
|
margin: -1px;
|
|
color: $purple-300;
|
|
background-color: rgba($purple-400, .1);
|
|
}
|
|
|
|
.label-holder.yellow {
|
|
color: $yellow-5;
|
|
}
|
|
|
|
span.svg-icon.inline.lock {
|
|
height: 12px;
|
|
width: 10px;
|
|
position: absolute;
|
|
right: 8px;
|
|
top: 8px;
|
|
margin-top: 0;
|
|
color: $gray-200;
|
|
}
|
|
|
|
span.badge.badge-round.badge-item.badge-clock {
|
|
height: 24px;
|
|
width: 24px;
|
|
background-color: $purple-300;
|
|
position: absolute;
|
|
left: -8px;
|
|
top: -12px;
|
|
margin-top: 0;
|
|
padding: 4px;
|
|
}
|
|
|
|
span.svg-icon.inline.clock {
|
|
height: 16px;
|
|
width: 16px;
|
|
}
|
|
|
|
.suggestedDot {
|
|
width: 6px;
|
|
height: 6px;
|
|
background-color: $purple-400;
|
|
border-radius: 4px;
|
|
|
|
position: absolute;
|
|
right: 8px;
|
|
top: 8px;
|
|
margin-top: 0;
|
|
}
|
|
|
|
.icon-48 {
|
|
width: 48px;
|
|
height: 48px;
|
|
}
|
|
|
|
.w-0 {
|
|
width: 0rem;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
import { v4 as uuid } from 'uuid';
|
|
import Sprite from '@/components/ui/sprite';
|
|
|
|
export default {
|
|
components: {
|
|
Sprite,
|
|
},
|
|
props: {
|
|
item: {
|
|
type: Object,
|
|
},
|
|
price: {
|
|
type: Number,
|
|
default: -1,
|
|
},
|
|
emptyItem: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
highlightBorder: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
popoverPosition: {
|
|
type: String,
|
|
default: 'bottom',
|
|
},
|
|
showPopover: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
showEventBadge: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
owned: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
labelClass: {
|
|
type: String,
|
|
},
|
|
},
|
|
data () {
|
|
return Object.freeze({
|
|
itemId: uuid(),
|
|
});
|
|
},
|
|
computed: {
|
|
},
|
|
methods: {
|
|
click () {
|
|
this.$emit('click', {});
|
|
},
|
|
getItemClasses () {
|
|
return {
|
|
'item-empty': this.emptyItem,
|
|
'highlight-border': this.highlightBorder,
|
|
suggested: this.item.isSuggested,
|
|
locked: this.item.locked,
|
|
};
|
|
},
|
|
},
|
|
};
|
|
</script>
|