|
439 | 439 | </div>
|
440 | 440 | </template>
|
441 | 441 | </ExpansiblePanel>
|
| 442 | + <ExpansiblePanel |
| 443 | + v-for="miniWidgetContainer in miniWidgetsBars" |
| 444 | + :key="miniWidgetContainer.name" |
| 445 | + :compact="interfaceStore.isLg || interfaceStore.isOnSmallScreen ? true : false" |
| 446 | + invert-chevron |
| 447 | + hover-effect |
| 448 | + elevation-effect |
| 449 | + no-top-divider |
| 450 | + :is-expanded="miniWidgetContainer.widgets.length > 0" |
| 451 | + > |
| 452 | + <template #title> |
| 453 | + <div |
| 454 | + class="flex w-[90%] justify-between items-center 2xl:text-[18px] xl:text-[16px] lg:text-[14px] -mb-3 font-normal ml-2" |
| 455 | + > |
| 456 | + {{ miniWidgetContainer.name }} |
| 457 | + <v-badge |
| 458 | + :content="miniWidgetContainer.widgets.length" |
| 459 | + color="#3B78A8" |
| 460 | + rounded="md" |
| 461 | + class="ml-10 2xl:mb-1 opacity-90" |
| 462 | + :class="interfaceStore.isLg || interfaceStore.isOnSmallScreen ? 'scale-75' : ''" |
| 463 | + /> |
| 464 | + </div> |
| 465 | + </template> |
| 466 | + <template #content> |
| 467 | + <div class="w-full mb-1"> |
| 468 | + <span class="w-full px-1 2xl:text-sm text-xs text-left select-none text-slate-400">{{ |
| 469 | + miniWidgetContainer.name |
| 470 | + }}</span> |
| 471 | + <div class="flex flex-col items-center w-full 2xl:px-3 overflow-x-hidden grow"> |
| 472 | + <TransitionGroup name="fade"> |
| 473 | + <div v-if="miniWidgetContainer.widgets.isEmpty()" class="flex items-center justify-between w-full"> |
| 474 | + --- |
| 475 | + </div> |
| 476 | + <div |
| 477 | + v-for="widget in miniWidgetContainer.widgets" |
| 478 | + :key="widget.hash" |
| 479 | + class="flex items-center justify-center w-full border-[1px] border-[#FFFFFF15] rounded-md 2xl:mx-2 my-[3px] 2xl:p-1 pl-1 pr-[2px] py-[2px] cursor-pointer" |
| 480 | + :class="store.miniWidgetManagerVars(widget.hash).highlighted ? 'bg-[#CBCBCB64]' : 'bg-[#CBCBCB2A]'" |
| 481 | + @mouseover="store.miniWidgetManagerVars(widget.hash).highlighted = true" |
| 482 | + @mouseleave="store.miniWidgetManagerVars(widget.hash).highlighted = false" |
| 483 | + > |
| 484 | + <div class="flex items-center justify-start w-full overflow-auto"> |
| 485 | + <p class="overflow-hidden select-none text-ellipsis whitespace-nowrap 2xl:text-sm text-xs ml-3"> |
| 486 | + {{ widget.name || widget.component }} |
| 487 | + </p> |
| 488 | + </div> |
| 489 | + <v-divider vertical class="opacity-10 mr-1" /> |
| 490 | + <div |
| 491 | + class="icon-btn mdi mdi-cog" |
| 492 | + @click="store.miniWidgetManagerVars(widget.hash).configMenuOpen = true" |
| 493 | + /> |
| 494 | + <div class="icon-btn mdi mdi-trash-can" @click="store.deleteMiniWidget(widget)" /> |
| 495 | + </div> |
| 496 | + </TransitionGroup> |
| 497 | + </div> |
| 498 | + </div> |
| 499 | + </template> |
| 500 | + </ExpansiblePanel> |
442 | 501 | </div>
|
443 | 502 | </div>
|
444 | 503 | <div class="flex items-center justify-between edit-panel bottom-panel" :class="{ active: editMode }">
|
@@ -679,6 +738,12 @@ const { showDialog, closeDialog } = useInteractionDialog()
|
679 | 738 | const interfaceStore = useAppInterfaceStore()
|
680 | 739 | const store = useWidgetManagerStore()
|
681 | 740 |
|
| 741 | +const miniWidgetsBars = computed(() => |
| 742 | + store.miniWidgetContainersInCurrentView.filter( |
| 743 | + (container) => !container.name.startsWith('Top') && !container.name.startsWith('Bottom') |
| 744 | + ) |
| 745 | +) |
| 746 | +
|
682 | 747 | const trashList = ref<Widget[]>([])
|
683 | 748 | watch(trashList, () => {
|
684 | 749 | nextTick(() => (trashList.value = []))
|
|
0 commit comments