Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
8a99d46
chore: fix TokenDialog
Stefan-JLU Oct 15, 2024
b26bd21
chore: add TokenDialog to create page
Stefan-JLU Oct 15, 2024
554d3de
chore: fix tokendialog
Stefan-JLU Oct 15, 2024
c715773
chore: remove unneeded imports
Stefan-JLU Oct 15, 2024
ec53d4f
Merge remote-tracking branch 'origin/main' into chore/change-modals-t…
Stefan-JLU Oct 22, 2024
768d533
chore: add missing component
Stefan-JLU Oct 22, 2024
b23eb92
chore: change keyvalue dialog to use shadcn components
Stefan-JLU Oct 22, 2024
2583cc1
chore: change author dialog to shadcn components
Stefan-JLU Oct 22, 2024
d92b70b
add unfinished ontologydialog
Stefan-JLU Oct 29, 2024
c24da76
Merge remote-tracking branch 'origin/main' into chore/change-modals-t…
das-Abroxas Nov 20, 2024
cade070
fix: Broken import in CommandDialog
das-Abroxas Nov 20, 2024
79ddce8
feat: Integrate shadcn based OntologyDialog
das-Abroxas Nov 20, 2024
57d807c
chore: Remove deprecated Preline based modals
das-Abroxas Nov 20, 2024
92ed63a
chore: Import several shadcn-vue components
das-Abroxas Dec 1, 2024
d83c0b9
chore: Add Aruna v3 draft API definition
das-Abroxas Dec 1, 2024
6152ddd
chore: Move ontology type definitions to correct directory
das-Abroxas Dec 1, 2024
119544e
chore: Move constants to utils directory
das-Abroxas Dec 1, 2024
e0a8af9
feat: Adapt user register/fetch to v3
das-Abroxas Dec 1, 2024
84545f3
feat: Adapt user register/fetch to v3
das-Abroxas Dec 1, 2024
14b7ef8
feat: Refactor simple user profile display in individual component
das-Abroxas Dec 1, 2024
32bd3b5
chore: Fix some minor bugs
das-Abroxas Dec 2, 2024
ac057b6
chore: Encapsulate v3 data fetching in composables
das-Abroxas Dec 3, 2024
3d1be17
chore: Export v3 API through api_wrapper.ts
das-Abroxas Dec 9, 2024
492312d
Merge remote-tracking branch 'refs/remotes/origin/chore/change-modals…
das-Abroxas Dec 9, 2024
d028c47
refactor: Adapt existing dialogs to v3
das-Abroxas Dec 9, 2024
b7f3548
refactor: Migrate user profile tabs in individual components
das-Abroxas Dec 9, 2024
332930f
feat: Add GroupDialog for group creation
das-Abroxas Dec 9, 2024
bee7aed
feat: Migrate resource creation in individual component
das-Abroxas Dec 9, 2024
6b99e54
chore: Remove GroupInfo type from Groups composable
das-Abroxas Dec 9, 2024
30f3bad
chore: Minor CI adaptions on the explore page
das-Abroxas Dec 9, 2024
d729b71
chore: Update vueuse/core dependency to 12.0.0
das-Abroxas Dec 9, 2024
bf21594
fix: Broken profile display if user is undefined
das-Abroxas Dec 9, 2024
9b77b9b
feat: Adapted TokenDialog to v3
das-Abroxas Dec 9, 2024
efef75f
feat: Extended AuthorDialog with button customization
das-Abroxas Dec 9, 2024
e374867
feat: Implement first iteration of dashboard landing page
das-Abroxas Dec 9, 2024
129592e
feat: Add component to switch your current realm context
das-Abroxas Dec 9, 2024
c46780c
feat: Add a component for potential analytics content
das-Abroxas Dec 9, 2024
520ce6d
chore: remove duplicated import
Stefan-JLU Dec 10, 2024
56df213
feat: Add composable for Event data fetching
das-Abroxas Dec 10, 2024
3760796
feat: Add first iteration of resource explorer component
das-Abroxas Dec 10, 2024
8616431
feat: Add draft component for realm component visualization
das-Abroxas Dec 10, 2024
e2a1c66
feat: Add dashboard draft with individual components
das-Abroxas Dec 10, 2024
07d9fe4
Merge branch 'feat/v3' of github.com:ArunaStorage/website into feat/v3
das-Abroxas Dec 10, 2024
8220ed8
chore: Remove deprecated pages
das-Abroxas Dec 10, 2024
08f09dd
chore: Add static dummy data
das-Abroxas Dec 10, 2024
f44a1b2
chore: Add broken Event display component
das-Abroxas Dec 10, 2024
e7dc13e
chore: Add shadcn-vue Tabs component
das-Abroxas Dec 10, 2024
bfa71de
chore: Add shadcn-vue Tooltip component
das-Abroxas Dec 10, 2024
adac0be
add first search dropdown prototype
Stefan-JLU Dec 10, 2024
85eb6d5
fix: Event data fetching
das-Abroxas Dec 10, 2024
3ac138f
feat: Adapt notifications display to v3 events
das-Abroxas Dec 10, 2024
f907814
chore: Update aruna API definitions to latest version
das-Abroxas Dec 11, 2024
6b3e7ca
feat: Add resource deletion in FileExplorer
das-Abroxas Dec 11, 2024
475818a
chore: Display resource deleted status in info sidebar
das-Abroxas Dec 11, 2024
6952b8f
refactor: Simplify realm management in RealmSwitcher
das-Abroxas Dec 11, 2024
4aae97d
chore: Remove unnecessary dark mode classes
das-Abroxas Dec 11, 2024
587744f
feat: Improved registration flow
das-Abroxas Dec 11, 2024
cdeac12
chore: Remove deprecated dummy data file
das-Abroxas Dec 11, 2024
774eb3a
feat: Improve display of deleted resources
das-Abroxas Dec 11, 2024
807245a
feat: Improve display of resource actions
das-Abroxas Dec 11, 2024
c07bee3
chore: Replace static string with GenericNodeType enum
das-Abroxas Dec 11, 2024
19fb8ce
chore: Truncate long names in FileExplorer
das-Abroxas Dec 12, 2024
f7df3a5
chore: Truncate license select in upload sidebar
das-Abroxas Dec 12, 2024
46777eb
fix: Token refresh parse error
das-Abroxas Dec 16, 2024
ff321c7
chore: Update dependency package versions
das-Abroxas Dec 16, 2024
ef6c5c1
feat: Finally remove Preline dependency
das-Abroxas Dec 16, 2024
ec50a8c
chore: Update v3 API definition
das-Abroxas Dec 16, 2024
46d1035
fix: Incorrect height for events list scroll area
das-Abroxas Dec 16, 2024
964d0b8
chore: Remove deprecated Preline-based modals
das-Abroxas Dec 16, 2024
f39f9ac
fix: Event display components
das-Abroxas Dec 17, 2024
c86c831
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Dec 17, 2024
0c89394
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Dec 17, 2024
c2d8553
chore: Remove unused textarea in EventDisplay
das-Abroxas Dec 18, 2024
8cc02c2
feat: Adapt KeyValueDialog to v3
das-Abroxas Dec 18, 2024
f7124ad
feat: Implement first iteration of RealmComponentDialog
das-Abroxas Dec 18, 2024
c8cf47b
feat: Partially adapt Realms subcomponent to v3
das-Abroxas Dec 18, 2024
62b3f7f
fix: Event display panel height
das-Abroxas Jan 6, 2025
347074e
refactor: Event badges
das-Abroxas Jan 6, 2025
5ae4781
chore: Rename DataproxyDialog and adapt layout to v3 Component
das-Abroxas Jan 6, 2025
13af456
chore: Remove deprecated utils
das-Abroxas Jan 6, 2025
5dc2566
feat: Improve RealmSwitcher
das-Abroxas Jan 6, 2025
1c43224
chore: Change import to api_wrapper
das-Abroxas Jan 7, 2025
0a7d1c1
feat: Implement v3 realm components endpoints
das-Abroxas Jan 7, 2025
1dbf591
feat: Implement v3 s3 credentials endpoints
das-Abroxas Jan 7, 2025
556dfbe
chore: Extend v3 imports
das-Abroxas Jan 7, 2025
cb95e0e
feat: Make realm switch bidirectional
das-Abroxas Jan 7, 2025
661a215
feat: Adapt realm component display to v3
das-Abroxas Jan 7, 2025
f3e61eb
chore: Remove visualization dummy data
das-Abroxas Jan 7, 2025
81d7948
chore: Small improvements
das-Abroxas Jan 7, 2025
1525b4c
feat: Add links between server instances
das-Abroxas Jan 7, 2025
24a3ae2
refactor: Adapt key-values in resource creation to v3
das-Abroxas Jan 8, 2025
3a4c0ca
refactor: Resource meta info display in sidebar
das-Abroxas Jan 9, 2025
9214ee6
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Jan 14, 2025
ed36deb
fix: Add missing ulid package for events list
das-Abroxas Jan 14, 2025
80dae6d
chore: Add v3 license service API logic
das-Abroxas Jan 24, 2025
6a4fe63
feat: Add License service functionality to dashboard
das-Abroxas Jan 24, 2025
1b49f21
chore: Adjusted headline of events module
das-Abroxas Jan 24, 2025
43c42da
chore: Update v3 API definition
das-Abroxas Jan 27, 2025
9326d80
feat: Add rudimentary pagination to FileExplorer
das-Abroxas Jan 27, 2025
61cedc7
refactor: Adapt AuthorDialog to v3
das-Abroxas Jan 27, 2025
ba895ad
chore: Remove unused user_id field from AuthorDialog
das-Abroxas Jan 28, 2025
efcc731
refactor: Emit KeyValue instead of single values from OntologyDialog
das-Abroxas Jan 28, 2025
77b9418
feat: Integrate updated dialogs into resource creation form
das-Abroxas Jan 28, 2025
9d6d217
refactor: Refactor top nav dropdown to shadcn
das-Abroxas Jan 28, 2025
6446717
chore: Update dependencies to latest versions
das-Abroxas Jan 28, 2025
2627ea1
chore: Re-add @nuxtjs/color-mode to satisfy shadcn-nuxt
das-Abroxas Jan 28, 2025
9d0f024
chore: Replace Preline based tabs with shadcn on ToS page
das-Abroxas Feb 3, 2025
23b9ea1
chore: Replace Preline based tabs with shadcn on imprint page
das-Abroxas Feb 3, 2025
99693a2
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Feb 3, 2025
73b6f84
added a first Searchpage
Stefan-JLU Feb 4, 2025
f7d697d
feat: add show more results button
Stefan-JLU Feb 4, 2025
baddefe
fix: catch undefined results
Stefan-JLU Feb 4, 2025
3da0556
feat: add limit and filter props to SearchDialog
Stefan-JLU Feb 4, 2025
cda5cc5
refactor: Display resource creation form in single column
das-Abroxas Feb 4, 2025
ec09c1f
fix: Update AWS dependencies to latest versions
das-Abroxas Feb 4, 2025
505b3c3
feat: Provide licenses from the Aruna API to components
das-Abroxas Feb 4, 2025
fbafa83
fix: Pagination in FileExplorer
das-Abroxas Feb 4, 2025
d3d3609
refactor: Display resource info with table instead of description list
das-Abroxas Feb 4, 2025
73e2a09
chore: Update display of the resource creation form
das-Abroxas Feb 4, 2025
0105764
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Feb 11, 2025
ca690f8
feat: Add link to resource landing page to FileExplorer info bar
das-Abroxas Feb 12, 2025
234c27e
chore: Extend event transaction types
das-Abroxas Feb 12, 2025
49fd8b1
chore: Adapt parts of layout to CI
das-Abroxas Feb 12, 2025
efcac5a
feat: Implement EditableLabel component
das-Abroxas Feb 12, 2025
d0fcf69
chore: Add API endpoints for resource updates
das-Abroxas Feb 12, 2025
6fd097c
chore: Fix broken background image link
das-Abroxas Feb 12, 2025
d1454d4
feat: Replace static info display with EditableLabel
das-Abroxas Feb 12, 2025
1fb03f9
fix: Emit event after realm component creation
das-Abroxas Feb 12, 2025
781f505
chore: export missing types
das-Abroxas Feb 12, 2025
11e8400
feat: WIP change explore page to new v3 api
Stefan-JLU Feb 18, 2025
5623332
Merge remote-tracking branch 'origin/feat/v3' into feat/v3-search
Stefan-JLU Feb 24, 2025
ae8299f
feat: reenable badges on explore page
Stefan-JLU Feb 24, 2025
5d177d9
chore: formatting
Stefan-JLU Feb 24, 2025
cc5962c
feat: add link to show more results button
Stefan-JLU Feb 27, 2025
eab646d
chore: update styling for SearchDialog Button and add clickhandler fo…
Stefan-JLU Mar 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# ArunaWeb 5.0

This is another total revised version for the Aruna website. Powered by [Vue 3](https://vuejs.org/), [Nuxt 3](https://nuxt.com/), [Tailwind CSS](https://tailwindcss.com/) and [Preline](https://preline.co/).
This is another total revised version for the Aruna website. Powered by [Vue 3](https://vuejs.org/), [Nuxt 3](https://nuxt.com/), [Tailwind CSS](https://tailwindcss.com/) and [shadcn-vue](https://www.shadcn-vue.com/).

This version is intended to be used with version **2.x.x** of Aruna, so to start a local test instance, you need a running Aruna instance and a running API Gateway to translate the RESTful http calls into native gRPC for the Aruna server.
This version is intended to be used with version **3.x.x** of Aruna, so to start a local test instance, you need a running Aruna instance and a running API Gateway to translate the RESTful http calls into native gRPC for the Aruna server.

1. How to start a local Aruna instance is described in the [Getting started instructions of the Aruna main repository](https://github.com/arunaengine/aruna?tab=readme-ov-file#getting-started) which guides you through the individual steps.

Expand Down
101 changes: 13 additions & 88 deletions app.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
<script setup lang="ts">
import {IconPlant} from "@tabler/icons-vue";
import type {v2User} from "./composables/aruna_api_json";
import EventBus from "~/composables/EventBus";
import type {ArunaError} from "~/composables/ArunaError";
import {parseJwt} from "~/composables/utils";
import {useUser} from '~/composables/User'

import {h} from 'vue';
import Toaster from '@/components/ui/toast/Toaster.vue'
import Toaster from '~/components/ui/toast/Toaster.vue'
import RegistrationDialog from "~/components/custom-ui/dialog/RegistrationDialog.vue";
import {useToast} from '@/components/ui/toast/use-toast'
import Banner from "~/components/custom-ui/Banner.vue";
import {addSeconds} from "date-fns";

const {toast} = useToast()

useHead({
title: "Aruna | The data orchestration engine",
meta: [
Expand All @@ -36,7 +30,7 @@ const bannerVisible = computed(() => {
const validTo = Date.parse(bannerConf.validTo) || Number.MAX_SAFE_INTEGER

// Check if in specified time range
if ((currentTimestamp-validFrom)*(currentTimestamp-validTo) <= 0) {
if ((currentTimestamp - validFrom) * (currentTimestamp - validTo) <= 0) {
// Check if cookie is already present
if (bannerCookie.value) {
const cookieDate = Date.parse(bannerCookie.value)
Expand All @@ -61,87 +55,16 @@ function hideBanner() {
}

// Provide user object globally read-only
const notRegistered = ref(false)
const user: Ref<v2User | undefined> = ref(undefined)
const {user, unregistered, refreshUser} = await useUser(useRuntimeConfig().public.maintenanceMode)
provide('userRef', readonly(user))

// Try to fetch user
async function updateUser() {
// Only fetch user if not in maintenance mode
if (useRuntimeConfig().public.maintenanceMode)
return

await $fetch<v2User | ArunaError>('/api/user')
.then(response => {
if (typeof response === 'undefined') {
user.value = undefined
toast({
title: 'Error',
//description: 'Something went wrong. If this problem persists please contact an administrator.',
description: 'User fetch response is undefined. This should not be possible :/',
variant: 'destructive',
duration: 10000,
})
} else if (response.type === 'ArunaError') {
user.value = undefined
if ((response as ArunaError).message === 'Not registered') {
notRegistered.value = true
} else if ((response as ArunaError).code === 13) {
// gRPC code 13 = Internal
notRegistered.value = false
console.error(`${(response as ArunaError).code} - ${(response as ArunaError).message}`)
} else if ((response as ArunaError).code === 14) {
// gRPC code 14 = Unavailable
notRegistered.value = false
toast({
title: 'Error',
description: 'Aruna server is currently unavailable.',
variant: 'destructive',
duration: 10000,
})
} else if ((response as ArunaError).code === 16) {
// gRPC code 16 = Unauthorized
notRegistered.value = false
} else {
// Nuxt server-side error
notRegistered.value = false
console.error((response as ArunaError).message)
}
} else {
notRegistered.value = false
user.value = response as v2User

if (!user.value.active)
toast({
description: h('div',
{class: 'flex space-x-2 items-center justify-center'},
[
h(IconPlant, {class: 'flex-shrink-0 size-5 text-green-400'}),
h('span',
{class: 'text-fuchsia-50'},
['Please wait until your account gets activated by an administrator.'])
]),
duration: 10000
})
}
}).catch(() => {
user.value = undefined
notRegistered.value = false
toast({
title: 'Error',
description: 'Something unexpected went wrong. If this problem persists please contact an administrator.',
variant: 'destructive',
duration: 10000,
})
})
}

// Re-fetch user on demand
EventBus.on('updateUser', () => {
EventBus.on('updateUser', async () => {
console.log("Received user refresh event")
updateUser()
await refreshUser() //updateUser()
})

// Auto-refresh access/refresh token before expiry
async function refreshTokens() {
const refresh_token = useCookie<string>('refresh_token')
const access_token = useCookie<string>('access_token')
Expand All @@ -165,16 +88,17 @@ async function refreshTokens() {
}

onBeforeMount(() => setInterval(refreshTokens, 30000))
onBeforeMount(() => updateUser())
</script>

<template>
<RegistrationDialog @closeRegisterDialog="notRegistered=false" :withButton="false" :initialOpen="notRegistered"/>
<RegistrationDialog @closeRegisterDialog="refreshUser()" :withButton="false" :initialOpen="unregistered"/>

<!-- Header + Navigation -->
<!-- Main body -->
<div v-if="useRuntimeConfig().public.maintenanceMode"
class="h-[100vh] w-[100vw] bg-[url('/public/imgs/maintenance_sm.webp')] md:bg-[url('/public/imgs/maintenance_md.webp')] lg:bg-[url('/public/imgs/maintenance_lg.webp')] bg-no-repeat bg-center bg-cover to-transparent">
class="h-[100vh] w-[100vw] bg-no-repeat bg-center bg-cover to-transparent
bg-[url('/imgs/maintenance_sm.webp')]
md:bg-[url('/imgs/maintenance_md.webp')]
lg:bg-[url('/imgs/maintenance_lg.webp')]">
</div>

<div v-else
Expand All @@ -189,6 +113,7 @@ onBeforeMount(() => updateUser())
<NuxtLoadingIndicator/>
<NuxtPage/>
</div>
<!-- End Main body -->

<Toaster/>
</template>
97 changes: 58 additions & 39 deletions components/card/resource.vue
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
<script setup lang="ts">
import {modelsv2Status, v2DataClass, type v2GenericResource, v2ResourceVariant,} from '~/composables/aruna_api_json';
import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger,} from "@/components/ui/tooltip"

import {ResourceVariant, VisibilityClass} from "~/types/aruna-v3-enums";


/* ----- PROPERTIES ----- */
interface ResourceCardProps {
resource: v2GenericResource
resource: Resource
}

const {resource} = defineProps<ResourceCardProps>()
const entry = toSearchResult(resource)

/* ----- END PROPERTIES ----- */

Expand All @@ -17,72 +19,88 @@ function displayDescription(description: string): string {
}
return description
}
function displayDataClass(dataClass: v2DataClass): string {
switch (dataClass) {
case v2DataClass.DATA_CLASS_PUBLIC: return 'Public'
case v2DataClass.DATA_CLASS_PRIVATE: return 'Private'
default: return 'Unspecified'

function displayVisbility(visibility: VisibilityClass): string {
switch (visibility) {
case VisibilityClass.Public:
return 'Public';
case VisibilityClass.PublicMetadata:
return 'Public Metadata';
case VisibilityClass.Private:
return 'Private';
default:
return 'Unspecified'
}
}
function dataClassCss(dataClass: v2DataClass): string {
switch (dataClass) {
case v2DataClass.DATA_CLASS_PUBLIC: return 'border-green-600 text-green-600'
case v2DataClass.DATA_CLASS_PRIVATE: return 'border-red-600/80 text-red-600/80'
case v2DataClass.DATA_CLASS_CONFIDENTIAL: return 'border-white text-white'
case v2DataClass.DATA_CLASS_WORKSPACE: return 'border-indigo-600 text-indigo-600'
default: return 'border-aruna-text/50 text-aruna-text/50'

function visibilityCss(visibility: VisibilityClass): string {
switch (visibility) {
case VisibilityClass.Public:
return 'border-green-600 text-green-600';
case VisibilityClass.PublicMetadata:
return 'border-white text-white';
case VisibilityClass.Private:
return 'border-red-600/80 text-red-600/80';
default:
return 'border-aruna-text/50 text-aruna-text/50'
}
}
</script>

<template>
<div v-if="entry"
class="flex flex-auto my-3 p-4 gap-x-4 bg-aruna-bg/90 border border-l-4 border-l-aruna-highlight shadow-sm rounded-md border-aruna-text/50"
:class="{'border-l-destructive': entry.object_status === modelsv2Status.STATUS_DELETED}">
<div
class="flex flex-auto my-3 p-4 gap-x-4 bg-aruna-bg/90 border border-l-4 border-l-aruna-highlight shadow-sm rounded-md border-aruna-text/50"
:class="{'border-l-destructive': resource.deleted}">
<div class="flex flex-col basis-1/3 gap-y-3 border-aruna-text/50">
<!-- Name and ID display with links -->
<NuxtLink :to="`/objects/${entry.id}`"
class="text-aruna-highlight font-bold">
<h3>{{ entry.name }}</h3>
</NuxtLink>
<!-- Name and ID display -->
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<NuxtLink :to="`/objects/${resource.id}`"
class="text-aruna-highlight font-bold">
<h3>{{ resource.name }}</h3>
</NuxtLink>
</TooltipTrigger>
<TooltipContent>
<p>{{ resource.id }}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>

<NuxtLink :to="`/objects/${entry.id}`"
class="text-sm text-aruna-text-accent font-bold">
<h4>{{ entry.id }}</h4>
</NuxtLink>
<!-- END Name and ID display with links -->
<h4>{{ resource.type === "Resource" ? resource.variant : resource.type }}</h4>
<!-- END Name and ID display -->

<!-- Badges -->
<div class="flex flex-col md:flex-row mt-2 gap-x-2 gap-y-2">
<!-- DataClass Badge -->
<Badge :class="cn('px-2 py-1 bg-transparent hover:bg-transparent border', dataClassCss(entry.data_class))">
{{ displayDataClass(entry.data_class) }}
<Badge :class="cn('px-2 py-1 bg-transparent hover:bg-transparent border', visibilityCss(resource.data_class))">
{{ displayVisbility(resource.visibility) }}
</Badge>
<!-- END DataClass -->
<!-- Stats Badge -->
<Badge v-if="entry.variant !== v2ResourceVariant.RESOURCE_VARIANT_OBJECT"
<Badge v-if="resource.variant !== ResourceVariant.Object"
class="px-2 py-1 bg-transparent hover:bg-transparent border border-aruna-text text-aruna-text">
Children: {{ entry.stats.count }}
Children: {{ resource.count }}
</Badge>
<Badge class="px-2 py-1 bg-transparent hover:bg-transparent border border-aruna-text text-aruna-text">
{{ entry.stats.size ? formatBytes(+entry.stats.size) : "N/A Bytes" }}
<Badge v-if="resource.variant === ResourceVariant.Object"
class="px-2 py-1 bg-transparent hover:bg-transparent border border-aruna-text text-aruna-text">
{{ resource.content_len ? formatBytes(+resource.content_len) : "N/A Bytes" }}
</Badge>
<!-- END Stats Badge -->
</div>
<!-- END Badges -->
</div>

<div class="mx-2 grow flex-col basis-2/3">
<h4 class="text-sm my-3 uppercase text-aruna-text-accent">Description</h4>
<p v-if="entry.description.length > 0" class="mt-2 text-aruna-text">
{{ displayDescription(entry.description) }}
<p v-if="resource.description.length > 0" class="mt-2 text-aruna-text">
{{ displayDescription(resource.description) }}
</p>

<hr v-if="entry.key_values.length > 0" class="my-4 text-aruna-text "/>
<hr v-if="resource.labels.length > 0" class="my-4 text-aruna-text "/>

<!-- Basic Label Display -->
<div class="flex flex-row flex-wrap">
<div v-for="label in entry.key_values" class="flex flex-row my-1 me-2 last:me-0">
<div v-for="label in resource.labels" class="flex flex-row my-1 me-2 last:me-0">
<span
:class="{ 'me-2 rounded-md': label.value === '' || label.value === undefined, 'rounded-l-md': label.value && label.value.length > 0 }"
class="text-xs font-medium truncate max-w-60 whitespace-nowrap items-center gap-x-1.5 py-1.5 px-3 rounded-l-md text-aruna-highlight border border-aruna-highlight">
Expand All @@ -93,6 +111,7 @@ function dataClassCss(dataClass: v2DataClass): string {
{{ label.value }}</span>
</div>
</div>

</div>
</div>
</template>
Loading