@tekkare/auriga 0.2.192 → 0.2.198
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/runtime/components/argAccordionMenu.vue +154 -0
- package/dist/runtime/components/argAccordionMenu.vue.d.ts +48 -0
- package/dist/runtime/components/argDashboardSection.vue +74 -0
- package/dist/runtime/components/argDrawer.vue +53 -0
- package/dist/runtime/components/argDrawer.vue.d.ts +38 -0
- package/dist/runtime/components/argFooter.vue +1 -1
- package/dist/runtime/components/argHomeNewHeader.vue +6 -2
- package/dist/runtime/components/argHomeNewHeader.vue.d.ts +2 -1
- package/dist/runtime/components/argLoginPage.vue +107 -0
- package/dist/runtime/components/argModal.vue +17 -7
- package/dist/runtime/components/argModal.vue.d.ts +4 -2
- package/dist/runtime/components/argNoLicense.vue +75 -0
- package/dist/runtime/components/argPharmanalyzeSvg.vue +96 -0
- package/dist/runtime/components/argPharmanalyzeSvg.vue.d.ts +23 -0
- package/dist/runtime/components/argProfilePage.vue +360 -0
- package/dist/runtime/components/argProjectDashboard.vue +631 -0
- package/dist/runtime/components/argResourceCard.vue +109 -0
- package/dist/runtime/components/argResourceTable.vue +302 -0
- package/package.json +2 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="arg_no_license_landing">
|
|
3
|
+
<!-- Animated background blobs -->
|
|
4
|
+
<div class="arg_no_license_background">
|
|
5
|
+
<div class="arg_no_license_blob arg_no_license_blob_1"></div>
|
|
6
|
+
<div class="arg_no_license_blob arg_no_license_blob_2"></div>
|
|
7
|
+
<div class="arg_no_license_blob arg_no_license_blob_3"></div>
|
|
8
|
+
<div class="arg_no_license_blob arg_no_license_blob_4"></div>
|
|
9
|
+
<div class="arg_no_license_blob arg_no_license_blob_5"></div>
|
|
10
|
+
<div class="arg_no_license_blob arg_no_license_blob_6"></div>
|
|
11
|
+
<div class="arg_no_license_blob arg_no_license_blob_7"></div>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="arg_no_license_content">
|
|
15
|
+
<div class="arg_no_license_card">
|
|
16
|
+
<!-- Icon -->
|
|
17
|
+
<div class="arg_no_license_icon_container">
|
|
18
|
+
<slot name="icon">
|
|
19
|
+
<svg
|
|
20
|
+
class="arg_no_license_icon"
|
|
21
|
+
fill="none"
|
|
22
|
+
stroke="currentColor"
|
|
23
|
+
viewBox="0 0 24 24"
|
|
24
|
+
>
|
|
25
|
+
<path
|
|
26
|
+
stroke-linecap="round"
|
|
27
|
+
stroke-linejoin="round"
|
|
28
|
+
stroke-width="2"
|
|
29
|
+
d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
|
|
30
|
+
/>
|
|
31
|
+
</svg>
|
|
32
|
+
</slot>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<!-- Title -->
|
|
36
|
+
<h1 class="arg_no_license_title">{{ title }}</h1>
|
|
37
|
+
|
|
38
|
+
<!-- Description -->
|
|
39
|
+
<p class="arg_no_license_description">
|
|
40
|
+
<template v-if="description">{{ description }}</template>
|
|
41
|
+
<template v-else>
|
|
42
|
+
You need a <strong>{{ appName }}</strong> license to access this application.
|
|
43
|
+
</template>
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<!-- Default slot for action content -->
|
|
47
|
+
<slot />
|
|
48
|
+
|
|
49
|
+
<!-- Footer slot -->
|
|
50
|
+
<div v-if="$slots.footer" class="arg_no_license_footer">
|
|
51
|
+
<slot name="footer" />
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</template>
|
|
57
|
+
|
|
58
|
+
<script setup lang="ts">
|
|
59
|
+
withDefaults(
|
|
60
|
+
defineProps<{
|
|
61
|
+
appName?: string;
|
|
62
|
+
title?: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
}>(),
|
|
65
|
+
{
|
|
66
|
+
appName: "Application",
|
|
67
|
+
title: "License Required",
|
|
68
|
+
description: "",
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<style scoped>
|
|
74
|
+
.arg_no_license_landing{align-items:center;background:linear-gradient(135deg,#f8fafc,#e0e7ff 50%,#ddd6fe);display:flex;justify-content:center;min-height:100vh;overflow:hidden;position:relative}.arg_no_license_background{inset:0;overflow:hidden;position:absolute}.arg_no_license_blob{animation:arg_no_license_float 20s ease-in-out infinite;border-radius:50%;filter:blur(150px);opacity:.5;position:absolute}.arg_no_license_blob_1{background:linear-gradient(135deg,#1e3a8a,#3b82f6);height:900px;left:-200px;top:-300px;width:900px}.arg_no_license_blob_2{animation-delay:-7s;background:linear-gradient(135deg,#ec4899,#f472b6);bottom:-250px;height:800px;right:-200px;width:800px}.arg_no_license_blob_3{animation-delay:-14s;background:linear-gradient(135deg,#8b5cf6,#a78bfa);height:700px;left:50%;top:50%;transform:translate(-50%,-50%);width:700px}.arg_no_license_blob_4{animation-delay:-10s;background:linear-gradient(135deg,#06b6d4,#67e8f9);height:600px;left:5%;top:60%;width:600px}.arg_no_license_blob_5{animation-delay:-5s;background:linear-gradient(135deg,#3b82f6,#60a5fa);height:550px;right:10%;top:10%;width:550px}.arg_no_license_blob_6{animation-delay:-12s;background:linear-gradient(135deg,#a855f7,#c084fc);bottom:20%;height:500px;left:20%;width:500px}.arg_no_license_blob_7{animation-delay:-3s;background:linear-gradient(135deg,#ec4899,#f472b6);height:450px;left:35%;top:5%;width:450px}@keyframes arg_no_license_float{0%,to{transform:translate(0) scale(1)}25%{transform:translate(30px,-30px) scale(1.05)}50%{transform:translate(-20px,20px) scale(.95)}75%{transform:translate(-30px,-20px) scale(1.02)}}.arg_no_license_content{max-width:480px;padding:24px;position:relative;width:100%;z-index:10}.arg_no_license_card{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:hsla(0,0%,100%,.95);border:1px solid hsla(0,0%,100%,.8);border-radius:24px;box-shadow:0 25px 50px -12px rgba(0,0,0,.15);padding:48px 40px;text-align:center}.arg_no_license_icon_container{align-items:center;background:linear-gradient(135deg,#f59e0b,#d97706);border-radius:20px;box-shadow:0 10px 40px -10px rgba(245,158,11,.5);display:flex;height:80px;justify-content:center;margin:0 auto 1.5rem;width:80px}.arg_no_license_icon{color:#fff;height:40px;width:40px}.arg_no_license_title{color:#1f2937;font-size:1.75rem;font-weight:700;margin:0 0 1rem}.arg_no_license_description{color:#6b7280;font-size:1rem;line-height:1.6;margin:0 0 1.5rem}.arg_no_license_description strong{color:#6366f1}.arg_no_license_footer{border-top:1px solid #e5e7eb;display:flex;gap:.75rem;justify-content:center;margin-top:1.5rem;padding-top:1.5rem}@media (max-width:480px){.arg_no_license_card{padding:32px 24px}.arg_no_license_title{font-size:1.5rem}}
|
|
75
|
+
</style>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg
|
|
3
|
+
:width="width"
|
|
4
|
+
:height="height"
|
|
5
|
+
viewBox="0 0 644 576"
|
|
6
|
+
fill="none"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
>
|
|
9
|
+
<path
|
|
10
|
+
fill-rule="evenodd"
|
|
11
|
+
clip-rule="evenodd"
|
|
12
|
+
d="M311.741 180.303C312.373 180.722 313.013 181.146 313.645 181.565C313.012 181.145 312.373 180.722 311.741 180.303Z"
|
|
13
|
+
fill="url(#paint0_linear_19_44014)"
|
|
14
|
+
/>
|
|
15
|
+
<path
|
|
16
|
+
fill-rule="evenodd"
|
|
17
|
+
clip-rule="evenodd"
|
|
18
|
+
d="M313.645 181.565L311.741 180.303C300.676 172.972 289.613 165.639 278.581 158.254C277.608 157.601 276.8 157.251 276 157.216V156.02C300.253 156.021 324.505 156.025 348.758 156.028C381.237 156.033 413.715 156.037 446.194 156.037C446.256 156.037 446.322 156.033 446.388 156.028C446.42 156.025 446.452 156.022 446.485 156.019C446.687 156 446.894 155.981 447.063 156.037C447.618 156.211 448.195 156.356 448.773 156.501C450.152 156.847 451.537 157.194 452.643 157.946C458.671 162.07 464.559 166.392 470.447 170.741C509.673 199.671 547.104 230.593 579.32 267.379C610.947 303.549 635.986 342.973 642.042 392.078C643.635 405.905 643.609 413.609 642.07 427.265C641.362 430.588 640.716 433.846 640.081 437.051C638.752 443.754 637.468 450.229 635.761 456.588C608.087 559.709 504.626 588.891 439.241 571.129C407.95 562.599 381.986 545.594 359.808 522.333C354.06 516.272 353.948 513.774 359.948 507.769C378.257 489.446 396.622 471.123 414.987 452.828C420.174 447.665 423.091 447.721 428.278 452.968C428.949 453.641 429.615 454.321 430.28 455.001C430.946 455.681 431.614 456.364 432.287 457.037C440.671 465.427 450.176 472.105 461.727 475.529C502.719 487.65 543.88 456.869 545.253 413.263C545.87 393.537 539.478 375.859 528.15 360.37C517.131 345.302 505.215 330.711 492.345 317.186C459.064 282.251 420.287 253.798 380.697 226.552C358.528 211.301 336.093 196.437 313.655 181.571L313.645 181.565Z"
|
|
19
|
+
fill="url(#paint1_linear_19_44014)"
|
|
20
|
+
/>
|
|
21
|
+
<path
|
|
22
|
+
fill-rule="evenodd"
|
|
23
|
+
clip-rule="evenodd"
|
|
24
|
+
d="M331.489 395.697C330.857 395.278 330.217 394.854 329.585 394.435C330.218 394.855 330.857 395.278 331.489 395.697Z"
|
|
25
|
+
fill="url(#paint2_linear_19_44014)"
|
|
26
|
+
/>
|
|
27
|
+
<path
|
|
28
|
+
fill-rule="evenodd"
|
|
29
|
+
clip-rule="evenodd"
|
|
30
|
+
d="M329.585 394.435L331.489 395.697C342.555 403.028 353.617 410.361 364.649 417.746C365.622 418.399 366.43 418.749 367.23 418.784V419.98C342.978 419.979 318.725 419.975 294.472 419.972C261.994 419.967 229.515 419.963 197.036 419.963C196.974 419.963 196.909 419.967 196.842 419.972C196.81 419.975 196.778 419.978 196.746 419.981C196.543 420 196.336 420.019 196.167 419.963C195.613 419.789 195.035 419.644 194.458 419.499C193.079 419.153 191.694 418.806 190.587 418.054C184.559 413.93 178.671 409.608 172.783 405.259C133.558 376.329 96.1264 345.407 63.9103 308.621C32.2831 272.451 7.24488 233.027 1.18861 183.922C-0.404747 170.095 -0.378319 162.392 1.16059 148.735C1.86805 145.412 2.51411 142.154 3.1496 138.949C4.47849 132.246 5.76218 125.771 7.46925 119.412C35.1431 16.2915 138.604 -12.8909 203.99 4.87105C235.281 13.4013 261.244 30.4056 283.422 53.6674C289.17 59.7283 289.282 62.2257 283.282 68.2305C264.973 86.5537 246.608 104.877 228.243 123.172C223.056 128.335 220.14 128.279 214.953 123.032C214.281 122.359 213.615 121.679 212.95 120.999C212.284 120.319 211.616 119.636 210.943 118.963C202.56 110.573 193.055 103.895 181.503 100.471C140.511 88.3495 99.3508 119.131 97.9769 162.737C97.3601 182.463 103.753 200.141 115.08 215.63C126.099 230.698 138.016 245.289 150.885 258.814C184.167 293.749 222.944 322.202 262.534 349.448C284.702 364.699 307.137 379.563 329.576 394.429L329.585 394.435Z"
|
|
31
|
+
fill="url(#paint3_linear_19_44014)"
|
|
32
|
+
/>
|
|
33
|
+
<defs>
|
|
34
|
+
<linearGradient
|
|
35
|
+
id="paint0_linear_19_44014"
|
|
36
|
+
x1="321.615"
|
|
37
|
+
y1="0"
|
|
38
|
+
x2="321.615"
|
|
39
|
+
y2="576"
|
|
40
|
+
gradientUnits="userSpaceOnUse"
|
|
41
|
+
>
|
|
42
|
+
<stop stop-color="#FF7942" />
|
|
43
|
+
<stop offset="1" stop-color="#F7520E" />
|
|
44
|
+
</linearGradient>
|
|
45
|
+
<linearGradient
|
|
46
|
+
id="paint1_linear_19_44014"
|
|
47
|
+
x1="321.615"
|
|
48
|
+
y1="0"
|
|
49
|
+
x2="321.615"
|
|
50
|
+
y2="576"
|
|
51
|
+
gradientUnits="userSpaceOnUse"
|
|
52
|
+
>
|
|
53
|
+
<stop stop-color="#FF7942" />
|
|
54
|
+
<stop offset="1" stop-color="#F7520E" />
|
|
55
|
+
</linearGradient>
|
|
56
|
+
<linearGradient
|
|
57
|
+
id="paint2_linear_19_44014"
|
|
58
|
+
x1="321.615"
|
|
59
|
+
y1="0"
|
|
60
|
+
x2="321.615"
|
|
61
|
+
y2="576"
|
|
62
|
+
gradientUnits="userSpaceOnUse"
|
|
63
|
+
>
|
|
64
|
+
<stop stop-color="#FF7942" />
|
|
65
|
+
<stop offset="1" stop-color="#F7520E" />
|
|
66
|
+
</linearGradient>
|
|
67
|
+
<linearGradient
|
|
68
|
+
id="paint3_linear_19_44014"
|
|
69
|
+
x1="321.615"
|
|
70
|
+
y1="0"
|
|
71
|
+
x2="321.615"
|
|
72
|
+
y2="576"
|
|
73
|
+
gradientUnits="userSpaceOnUse"
|
|
74
|
+
>
|
|
75
|
+
<stop stop-color="#FF7942" />
|
|
76
|
+
<stop offset="1" stop-color="#F7520E" />
|
|
77
|
+
</linearGradient>
|
|
78
|
+
</defs>
|
|
79
|
+
</svg>
|
|
80
|
+
</template>
|
|
81
|
+
<script>
|
|
82
|
+
import { defineComponent } from "vue";
|
|
83
|
+
export default defineComponent({
|
|
84
|
+
name: "argPharmanalyzeSvg",
|
|
85
|
+
props: {
|
|
86
|
+
width: {
|
|
87
|
+
type: String,
|
|
88
|
+
default: "59"
|
|
89
|
+
},
|
|
90
|
+
height: {
|
|
91
|
+
type: String,
|
|
92
|
+
default: "30"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
</script>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
width: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
default: string;
|
|
5
|
+
};
|
|
6
|
+
height: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
11
|
+
width: {
|
|
12
|
+
type: StringConstructor;
|
|
13
|
+
default: string;
|
|
14
|
+
};
|
|
15
|
+
height: {
|
|
16
|
+
type: StringConstructor;
|
|
17
|
+
default: string;
|
|
18
|
+
};
|
|
19
|
+
}>> & Readonly<{}>, {
|
|
20
|
+
width: string;
|
|
21
|
+
height: string;
|
|
22
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
23
|
+
export default _default;
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="arg_profile_page">
|
|
3
|
+
<div class="arg_profile_container">
|
|
4
|
+
<!-- Loading -->
|
|
5
|
+
<div v-if="loading" class="arg_profile_loading">
|
|
6
|
+
<div class="arg_profile_spinner"></div>
|
|
7
|
+
<p>Loading your profile...</p>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<!-- Error -->
|
|
11
|
+
<div v-else-if="error" class="arg_profile_error">
|
|
12
|
+
<div class="arg_profile_error_icon">!</div>
|
|
13
|
+
<p>{{ error }}</p>
|
|
14
|
+
<button class="arg_profile_btn arg_profile_btn_primary" @click="$emit('onRetry')">Retry</button>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- Content -->
|
|
18
|
+
<div v-else class="arg_profile_content">
|
|
19
|
+
<!-- Profile Header -->
|
|
20
|
+
<div class="arg_profile_header">
|
|
21
|
+
<div class="arg_profile_avatar">
|
|
22
|
+
<img
|
|
23
|
+
v-if="userImage"
|
|
24
|
+
:src="userImage"
|
|
25
|
+
:alt="userName || 'Profile'"
|
|
26
|
+
/>
|
|
27
|
+
<div v-else class="arg_profile_avatar_placeholder">
|
|
28
|
+
{{ (userName || userEmail || "U").charAt(0).toUpperCase() }}
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="arg_profile_info">
|
|
32
|
+
<h1>{{ userName || "User Profile" }}</h1>
|
|
33
|
+
<p class="arg_profile_email">{{ userEmail }}</p>
|
|
34
|
+
<div class="arg_profile_badge">
|
|
35
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
|
36
|
+
<path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
37
|
+
<circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2"/>
|
|
38
|
+
</svg>
|
|
39
|
+
Verified Account
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="arg_profile_actions">
|
|
43
|
+
<slot name="header-actions">
|
|
44
|
+
<button @click="navigateHome" class="arg_profile_btn arg_profile_btn_secondary">
|
|
45
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
|
46
|
+
<path d="M3 9L12 2L21 9V20C21 20.5304 20.7893 21.0391 20.4142 21.4142C20.0391 21.7893 19.5304 22 19 22H5C4.46957 22 3.96086 21.7893 3.58579 21.4142C3.21071 21.0391 3 20.5304 3 20V9Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
47
|
+
</svg>
|
|
48
|
+
Home
|
|
49
|
+
</button>
|
|
50
|
+
<button @click="$emit('onSignOut')" class="arg_profile_btn arg_profile_btn_outline">
|
|
51
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
|
52
|
+
<path d="M9 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H9" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
53
|
+
<polyline points="16,17 21,12 16,7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
54
|
+
<line x1="21" y1="12" x2="9" y2="12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
55
|
+
</svg>
|
|
56
|
+
Sign Out
|
|
57
|
+
</button>
|
|
58
|
+
</slot>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- Navigation Tabs -->
|
|
63
|
+
<div class="arg_profile_tabs">
|
|
64
|
+
<button
|
|
65
|
+
@click="activeSection = 'account'"
|
|
66
|
+
class="arg_profile_tab"
|
|
67
|
+
:class="{ active: activeSection === 'account' }"
|
|
68
|
+
>
|
|
69
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
|
70
|
+
<path d="M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
71
|
+
<circle cx="12" cy="7" r="4" stroke="currentColor" stroke-width="2"/>
|
|
72
|
+
</svg>
|
|
73
|
+
Account
|
|
74
|
+
</button>
|
|
75
|
+
<button
|
|
76
|
+
@click="activeSection = 'workspace'"
|
|
77
|
+
class="arg_profile_tab"
|
|
78
|
+
:class="{ active: activeSection === 'workspace' }"
|
|
79
|
+
>
|
|
80
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
|
81
|
+
<path d="M3 9L12 2L21 9V20C21 20.5304 20.7893 21.0391 20.4142 21.4142C20.0391 21.7893 19.5304 22 19 22H5C4.46957 22 3.96086 21.7893 3.58579 21.4142C3.21071 21.0391 3 20.5304 3 20V9Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
82
|
+
</svg>
|
|
83
|
+
Workspace
|
|
84
|
+
</button>
|
|
85
|
+
<button
|
|
86
|
+
@click="activeSection = 'licenses'"
|
|
87
|
+
class="arg_profile_tab"
|
|
88
|
+
:class="{ active: activeSection === 'licenses' }"
|
|
89
|
+
>
|
|
90
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none">
|
|
91
|
+
<path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
92
|
+
<rect x="3" y="4" width="18" height="16" rx="2" stroke="currentColor" stroke-width="2"/>
|
|
93
|
+
</svg>
|
|
94
|
+
Licenses
|
|
95
|
+
</button>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<!-- Account Section -->
|
|
99
|
+
<div v-show="activeSection === 'account'" class="arg_profile_section_content">
|
|
100
|
+
<div class="arg_profile_cards_grid">
|
|
101
|
+
<div class="arg_profile_card">
|
|
102
|
+
<div class="arg_profile_card_header">
|
|
103
|
+
<div class="arg_profile_card_icon">
|
|
104
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
105
|
+
<path d="M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
106
|
+
<circle cx="12" cy="7" r="4" stroke="currentColor" stroke-width="2"/>
|
|
107
|
+
</svg>
|
|
108
|
+
</div>
|
|
109
|
+
<h2>Account Information</h2>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="arg_profile_card_content">
|
|
112
|
+
<div class="arg_profile_info_row">
|
|
113
|
+
<span class="arg_profile_info_label">Email Address</span>
|
|
114
|
+
<span class="arg_profile_info_value">{{ userEmail || "Not provided" }}</span>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="arg_profile_info_row">
|
|
117
|
+
<span class="arg_profile_info_label">Display Name</span>
|
|
118
|
+
<span class="arg_profile_info_value">{{ userName || "Not provided" }}</span>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="arg_profile_info_row">
|
|
121
|
+
<span class="arg_profile_info_label">Account Status</span>
|
|
122
|
+
<span class="arg_profile_info_value arg_profile_status_active">
|
|
123
|
+
<span class="arg_profile_status_dot"></span>
|
|
124
|
+
Active
|
|
125
|
+
</span>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="arg_profile_info_row">
|
|
128
|
+
<span class="arg_profile_info_label">Platform Admin</span>
|
|
129
|
+
<span class="arg_profile_info_value">{{ isPlatformAdmin ? 'Yes' : 'No' }}</span>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
<slot name="account-extra" />
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<!-- Workspace Section -->
|
|
138
|
+
<div v-show="activeSection === 'workspace'" class="arg_profile_section_content">
|
|
139
|
+
<div class="arg_profile_card">
|
|
140
|
+
<div class="arg_profile_card_header">
|
|
141
|
+
<div class="arg_profile_card_icon arg_profile_workspace_icon">
|
|
142
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
143
|
+
<path d="M3 9L12 2L21 9V20C21 20.5304 20.7893 21.0391 20.4142 21.4142C20.0391 21.7893 19.5304 22 19 22H5C4.46957 22 3.96086 21.7893 3.58579 21.4142C3.21071 21.0391 3 20.5304 3 20V9Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
144
|
+
</svg>
|
|
145
|
+
</div>
|
|
146
|
+
<h2>Current Workspace</h2>
|
|
147
|
+
</div>
|
|
148
|
+
<div class="arg_profile_card_content">
|
|
149
|
+
<div v-if="currentWorkspace" class="arg_profile_current_workspace">
|
|
150
|
+
<div class="arg_profile_cw_row">
|
|
151
|
+
<div class="arg_profile_cw_avatar" :class="currentWorkspace.isPersonal ? 'personal' : 'team'">
|
|
152
|
+
{{ currentWorkspace.name.charAt(0).toUpperCase() }}
|
|
153
|
+
</div>
|
|
154
|
+
<div class="arg_profile_cw_details">
|
|
155
|
+
<div class="arg_profile_cw_name">{{ currentWorkspace.name }}</div>
|
|
156
|
+
<div class="arg_profile_cw_meta">
|
|
157
|
+
<span class="arg_profile_cw_tag">{{ currentWorkspace.role }}</span>
|
|
158
|
+
<span v-if="currentWorkspace.isPersonal" class="arg_profile_cw_tag arg_profile_personal_tag">Personal</span>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<span class="arg_profile_cw_active">Active</span>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
<div v-else class="arg_profile_no_workspace">
|
|
165
|
+
<p>No workspace selected</p>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<!-- Switch Workspace -->
|
|
171
|
+
<div v-if="workspaces.length > 1" class="arg_profile_card">
|
|
172
|
+
<div class="arg_profile_card_header">
|
|
173
|
+
<div class="arg_profile_card_icon arg_profile_switch_icon">
|
|
174
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
175
|
+
<path d="M8 3L4 7L8 11" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
176
|
+
<path d="M4 7H16C17.0609 7 18.0783 7.42143 18.8284 8.17157C19.5786 8.92172 20 9.93913 20 11V13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
177
|
+
<path d="M16 21L20 17L16 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
178
|
+
<path d="M20 17H8C6.93913 17 5.92172 16.5786 5.17157 15.8284C4.42143 15.0783 4 14.0609 4 13V11" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
179
|
+
</svg>
|
|
180
|
+
</div>
|
|
181
|
+
<h2>Switch Workspace</h2>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="arg_profile_card_content">
|
|
184
|
+
<div class="arg_profile_workspace_list">
|
|
185
|
+
<button
|
|
186
|
+
v-for="ws in workspaces"
|
|
187
|
+
:key="ws.workspaceId"
|
|
188
|
+
class="arg_profile_workspace_option"
|
|
189
|
+
:class="{ selected: ws.workspaceId === currentWorkspaceId }"
|
|
190
|
+
@click="handleSwitchWorkspace(ws)"
|
|
191
|
+
:disabled="ws.workspaceId === currentWorkspaceId"
|
|
192
|
+
>
|
|
193
|
+
<div class="arg_profile_ws_avatar" :class="ws.isPersonal ? 'personal' : 'team'">
|
|
194
|
+
{{ ws.name.charAt(0).toUpperCase() }}
|
|
195
|
+
</div>
|
|
196
|
+
<div class="arg_profile_ws_info">
|
|
197
|
+
<span class="arg_profile_ws_name">{{ ws.name }}</span>
|
|
198
|
+
<span class="arg_profile_ws_meta">{{ ws.role }}</span>
|
|
199
|
+
</div>
|
|
200
|
+
<span v-if="ws.workspaceId === currentWorkspaceId" class="arg_profile_ws_check">
|
|
201
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
|
202
|
+
<path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
203
|
+
</svg>
|
|
204
|
+
</span>
|
|
205
|
+
</button>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
<slot name="workspace-extra" />
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
<!-- Licenses Section -->
|
|
213
|
+
<div v-show="activeSection === 'licenses'" class="arg_profile_section_content">
|
|
214
|
+
<div class="arg_profile_card">
|
|
215
|
+
<div class="arg_profile_card_header">
|
|
216
|
+
<div class="arg_profile_card_icon arg_profile_licenses_icon">
|
|
217
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
218
|
+
<path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
219
|
+
<rect x="3" y="4" width="18" height="16" rx="2" stroke="currentColor" stroke-width="2"/>
|
|
220
|
+
</svg>
|
|
221
|
+
</div>
|
|
222
|
+
<h2>My Product Licenses</h2>
|
|
223
|
+
</div>
|
|
224
|
+
<div class="arg_profile_card_content">
|
|
225
|
+
<div v-if="licenses.length > 0" class="arg_profile_licenses_list">
|
|
226
|
+
<div v-for="license in licenses" :key="license.licenseId" class="arg_profile_license_item">
|
|
227
|
+
<div class="arg_profile_license_product">
|
|
228
|
+
<div class="arg_profile_product_icon arg_profile_product_default">
|
|
229
|
+
{{ (license.product?.name || license.product?.slug || 'L').charAt(0).toUpperCase() }}
|
|
230
|
+
</div>
|
|
231
|
+
<div class="arg_profile_product_info">
|
|
232
|
+
<span class="arg_profile_product_name">{{ productDisplayNames[license.product?.slug] || license.product?.name || license.product?.slug }}</span>
|
|
233
|
+
<span class="arg_profile_license_status" :class="license.status">{{ license.status }}</span>
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
<div class="arg_profile_license_dates">
|
|
237
|
+
<span class="arg_profile_date_label">Assigned:</span>
|
|
238
|
+
<span class="arg_profile_date_value">{{ formatDate(license.assignedAt) }}</span>
|
|
239
|
+
</div>
|
|
240
|
+
<div v-if="license.expiresAt" class="arg_profile_license_expiry">
|
|
241
|
+
<span class="arg_profile_expiry_badge" :class="{ expired: new Date(license.expiresAt) < new Date() }">
|
|
242
|
+
{{ new Date(license.expiresAt) < new Date() ? 'Expired' : `Expires ${formatDate(license.expiresAt)}` }}
|
|
243
|
+
</span>
|
|
244
|
+
</div>
|
|
245
|
+
<div v-else class="arg_profile_license_expiry">
|
|
246
|
+
<span class="arg_profile_expiry_badge arg_profile_no_expiry">No expiration</span>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
<div v-else class="arg_profile_no_licenses">
|
|
251
|
+
<svg width="48" height="48" viewBox="0 0 24 24" fill="none">
|
|
252
|
+
<rect x="3" y="4" width="18" height="16" rx="2" stroke="currentColor" stroke-width="2" opacity="0.5"/>
|
|
253
|
+
<path d="M9 10H15M9 14H12" stroke="currentColor" stroke-width="2" stroke-linecap="round" opacity="0.5"/>
|
|
254
|
+
</svg>
|
|
255
|
+
<p>No licenses assigned</p>
|
|
256
|
+
<span class="arg_profile_hint">Contact your workspace administrator to request access to products.</span>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
<slot name="licenses-extra" />
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
</template>
|
|
266
|
+
|
|
267
|
+
<script setup lang="ts">
|
|
268
|
+
import { ref, computed, watch } from "vue";
|
|
269
|
+
|
|
270
|
+
interface Workspace {
|
|
271
|
+
workspaceId: string;
|
|
272
|
+
name: string;
|
|
273
|
+
role: string;
|
|
274
|
+
isPersonal: boolean;
|
|
275
|
+
isCurrent?: boolean;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
interface License {
|
|
279
|
+
licenseId: string;
|
|
280
|
+
product: { slug: string; name: string };
|
|
281
|
+
status: string;
|
|
282
|
+
assignedAt: string;
|
|
283
|
+
expiresAt?: string;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const props = withDefaults(
|
|
287
|
+
defineProps<{
|
|
288
|
+
userName?: string;
|
|
289
|
+
userEmail?: string;
|
|
290
|
+
userImage?: string;
|
|
291
|
+
isPlatformAdmin?: boolean;
|
|
292
|
+
loading?: boolean;
|
|
293
|
+
error?: string;
|
|
294
|
+
workspaces?: Workspace[];
|
|
295
|
+
currentWorkspaceId?: string;
|
|
296
|
+
licenses?: License[];
|
|
297
|
+
productDisplayNames?: Record<string, string>;
|
|
298
|
+
initialTab?: "account" | "workspace" | "licenses";
|
|
299
|
+
}>(),
|
|
300
|
+
{
|
|
301
|
+
userName: "",
|
|
302
|
+
userEmail: "",
|
|
303
|
+
userImage: "",
|
|
304
|
+
isPlatformAdmin: false,
|
|
305
|
+
loading: false,
|
|
306
|
+
error: "",
|
|
307
|
+
workspaces: () => [],
|
|
308
|
+
currentWorkspaceId: "",
|
|
309
|
+
licenses: () => [],
|
|
310
|
+
productDisplayNames: () => ({}),
|
|
311
|
+
initialTab: "account",
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
const emit = defineEmits<{
|
|
316
|
+
onSignOut: [];
|
|
317
|
+
onSwitchWorkspace: [workspace: Workspace];
|
|
318
|
+
onRetry: [];
|
|
319
|
+
}>();
|
|
320
|
+
|
|
321
|
+
const activeSection = ref<"account" | "workspace" | "licenses">(props.initialTab);
|
|
322
|
+
|
|
323
|
+
watch(
|
|
324
|
+
() => props.initialTab,
|
|
325
|
+
(tab) => {
|
|
326
|
+
activeSection.value = tab;
|
|
327
|
+
}
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
const currentWorkspace = computed(() => {
|
|
331
|
+
if (!props.currentWorkspaceId || !props.workspaces.length) return null;
|
|
332
|
+
return (
|
|
333
|
+
props.workspaces.find((w) => w.workspaceId === props.currentWorkspaceId) ||
|
|
334
|
+
props.workspaces[0]
|
|
335
|
+
);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
const formatDate = (dateString: string): string => {
|
|
339
|
+
return new Date(dateString).toLocaleDateString("en-US", {
|
|
340
|
+
year: "numeric",
|
|
341
|
+
month: "short",
|
|
342
|
+
day: "numeric",
|
|
343
|
+
});
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
const handleSwitchWorkspace = (workspace: Workspace) => {
|
|
347
|
+
if (workspace.workspaceId === props.currentWorkspaceId) return;
|
|
348
|
+
emit("onSwitchWorkspace", workspace);
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
const navigateHome = () => {
|
|
352
|
+
if (typeof window !== "undefined") {
|
|
353
|
+
window.location.href = "/";
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
</script>
|
|
357
|
+
|
|
358
|
+
<style scoped>
|
|
359
|
+
.arg_profile_page{background:var(--Main-Lightest,#f8fafc);min-height:100vh;padding:40px 20px 80px}.arg_profile_container{margin:0 auto;max-width:900px}.arg_profile_error,.arg_profile_loading{align-items:center;color:var(--medium,#5a6c7d);display:flex;flex-direction:column;gap:16px;justify-content:center;padding:80px 20px}.arg_profile_spinner{animation:arg_profile_spin 1s linear infinite;border:3px solid var(--Main-Lightest,#f0f0f0);border-radius:50%;border-top-color:var(--primary,#6366f1);height:40px;width:40px}@keyframes arg_profile_spin{to{transform:rotate(1turn)}}.arg_profile_error{color:#dc2626}.arg_profile_error_icon{align-items:center;background:#fee2e2;border-radius:50%;color:#dc2626;display:flex;font-size:24px;font-weight:700;height:48px;justify-content:center;width:48px}.arg_profile_header{align-items:center;background:#fff;border:1px solid var(--dividers,#e4e7ec);border-radius:16px;display:grid;gap:24px;grid-template-columns:auto 1fr auto;margin-bottom:24px;padding:24px}.arg_profile_avatar{align-items:center;background:linear-gradient(135deg,var(--primary,#6366f1),#8b5cf6);border-radius:16px;display:flex;height:80px;justify-content:center;overflow:hidden;width:80px}.arg_profile_avatar img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.arg_profile_avatar_placeholder{color:#fff;font-size:32px;font-weight:700}.arg_profile_info h1{color:var(--Main-Darkest,#21243d);font-size:1.75rem;font-weight:700;margin:0 0 8px}.arg_profile_email{color:var(--medium,#5a6c7d);font-size:1rem;margin:0 0 12px}.arg_profile_badge{align-items:center;background:#e0e7ff;border-radius:20px;color:#4338ca;display:inline-flex;font-size:.85rem;font-weight:500;gap:6px;padding:6px 12px}.arg_profile_actions{display:flex;gap:12px}.arg_profile_btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:.9rem;font-weight:500;gap:8px;padding:10px 16px;text-decoration:none;transition:all .2s ease}.arg_profile_btn_primary{background:var(--primary,#6366f1);color:#fff}.arg_profile_btn_primary:hover{background:var(--primary-hover,#4f46e5)}.arg_profile_btn_secondary{background:var(--Main-Lightest,#f3f4f6);color:var(--Main-Darkest,#374151)}.arg_profile_btn_secondary:hover{background:#e5e7eb}.arg_profile_btn_outline{background:#fff;border:1px solid var(--dividers,#e4e7ec);color:var(--Main-Darkest,#374151)}.arg_profile_btn_outline:hover{background:var(--Main-Lightest,#f3f4f6)}.arg_profile_tabs{border-bottom:2px solid var(--dividers,#e4e7ec);display:flex;gap:8px;margin-bottom:24px;overflow-x:auto}.arg_profile_tab{align-items:center;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--medium,#5a6c7d);cursor:pointer;display:flex;font-size:.95rem;font-weight:500;gap:8px;margin-bottom:-2px;padding:12px 20px;transition:all .2s ease;white-space:nowrap}.arg_profile_tab:hover{background:rgba(99,102,241,.05);color:var(--Main-Darkest,#21243d)}.arg_profile_tab.active{border-bottom-color:var(--primary,#6366f1);color:var(--primary,#6366f1)}.arg_profile_cards_grid{display:grid;gap:24px;grid-template-columns:repeat(auto-fit,minmax(350px,1fr))}.arg_profile_card{background:#fff;border:1px solid var(--dividers,#e4e7ec);border-radius:16px;margin-bottom:24px;overflow:hidden;transition:all .2s ease}.arg_profile_card:hover{box-shadow:0 4px 16px rgba(99,102,241,.1)}.arg_profile_card_header{align-items:center;background:var(--Main-Lightest,#fafbfc);border-bottom:1px solid var(--dividers,#e4e7ec);display:flex;gap:12px;padding:20px 24px}.arg_profile_card_icon{align-items:center;background:linear-gradient(135deg,var(--primary,#6366f1),#8b5cf6);border-radius:8px;color:#fff;display:flex;height:40px;justify-content:center;width:40px}.arg_profile_card_icon.arg_profile_workspace_icon{background:linear-gradient(135deg,#10b981,#059669)}.arg_profile_card_icon.arg_profile_switch_icon{background:linear-gradient(135deg,#3b82f6,#2563eb)}.arg_profile_card_icon.arg_profile_licenses_icon{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.arg_profile_card_header h2{color:var(--Main-Darkest,#21243d);font-size:1.15rem;font-weight:600;margin:0}.arg_profile_card_content{padding:24px}.arg_profile_info_row{align-items:center;border-bottom:1px solid #f1f3f4;display:flex;justify-content:space-between;padding:14px 0}.arg_profile_info_row:last-child{border-bottom:none}.arg_profile_info_label{color:var(--medium,#5a6c7d);font-weight:500}.arg_profile_info_value{color:var(--Main-Darkest,#21243d);font-weight:500}.arg_profile_status_active{align-items:center;color:#059669!important;display:flex;gap:6px}.arg_profile_status_dot{animation:arg_profile_pulse 2s infinite;background:#10b981;border-radius:50%;height:8px;width:8px}@keyframes arg_profile_pulse{0%,to{opacity:1}50%{opacity:.5}}.arg_profile_current_workspace{background:var(--Main-Lightest,#f8fafc);border-radius:10px;padding:16px}.arg_profile_cw_row{align-items:center;display:flex;gap:14px}.arg_profile_cw_avatar{align-items:center;border-radius:10px;color:#fff;display:flex;font-size:18px;font-weight:600;height:48px;justify-content:center;width:48px}.arg_profile_cw_avatar.personal{background:linear-gradient(135deg,#10b981,#059669)}.arg_profile_cw_avatar.team{background:linear-gradient(135deg,var(--primary,#6366f1),#4f46e5)}.arg_profile_cw_details{flex:1}.arg_profile_cw_name{color:var(--Main-Darkest,#21243d);font-size:16px;font-weight:600;margin-bottom:6px}.arg_profile_cw_meta{display:flex;gap:8px}.arg_profile_cw_tag{background:#e5e7eb;border-radius:4px;color:#374151;font-size:11px;font-weight:500;padding:3px 10px;text-transform:uppercase}.arg_profile_cw_tag.arg_profile_personal_tag{background:#d1fae5;color:#065f46}.arg_profile_cw_active{background:#dcfce7;border-radius:16px;color:#15803d;font-size:12px;font-weight:500;padding:6px 12px}.arg_profile_no_workspace{color:var(--medium,#5a6c7d);padding:24px;text-align:center}.arg_profile_workspace_list{display:flex;flex-direction:column;gap:10px}.arg_profile_workspace_option{align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:10px;cursor:pointer;display:flex;gap:12px;padding:14px;text-align:left;transition:all .15s ease;width:100%}.arg_profile_workspace_option:hover:not(:disabled){background:#fafafa;border-color:var(--primary,#6366f1)}.arg_profile_workspace_option.selected{background:#f5f3ff;border-color:var(--primary,#6366f1)}.arg_profile_workspace_option:disabled{cursor:default}.arg_profile_ws_avatar{align-items:center;border-radius:8px;color:#fff;display:flex;font-size:14px;font-weight:600;height:36px;justify-content:center;width:36px}.arg_profile_ws_avatar.personal{background:linear-gradient(135deg,#10b981,#059669)}.arg_profile_ws_avatar.team{background:linear-gradient(135deg,var(--primary,#6366f1),#4f46e5)}.arg_profile_ws_info{display:flex;flex:1;flex-direction:column;gap:3px}.arg_profile_ws_name{color:var(--Main-Darkest,#21243d);font-size:14px;font-weight:500}.arg_profile_ws_meta{color:var(--medium,#5a6c7d);font-size:12px;text-transform:capitalize}.arg_profile_ws_check{color:var(--primary,#6366f1);font-size:16px;font-weight:600}.arg_profile_licenses_list{display:flex;flex-direction:column;gap:14px}.arg_profile_license_item{background:var(--Main-Lightest,#f8f9fa);border:1px solid var(--dividers,#e4e7ec);border-radius:12px;display:flex;flex-direction:column;gap:10px;padding:16px}.arg_profile_license_product{align-items:center;display:flex;gap:12px}.arg_profile_product_icon{align-items:center;border-radius:8px;color:#fff;display:flex;font-size:16px;font-weight:700;height:40px;justify-content:center;width:40px}.arg_profile_product_icon.arg_profile_product_default{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.arg_profile_product_info{display:flex;flex-direction:column;gap:4px}.arg_profile_product_name{color:var(--Main-Darkest,#21243d);font-weight:600}.arg_profile_license_status{font-size:12px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.arg_profile_license_status.active{color:#059669}.arg_profile_license_status.cancelled{color:#dc2626}.arg_profile_license_status.expired{color:#9ca3af}.arg_profile_license_dates{display:flex;font-size:13px;gap:6px}.arg_profile_date_label{color:var(--medium,#5a6c7d)}.arg_profile_date_value{color:var(--Main-Darkest,#21243d);font-weight:500}.arg_profile_license_expiry{margin-top:4px}.arg_profile_expiry_badge{background:#dcfce7;border-radius:12px;color:#166534;font-size:12px;padding:4px 10px}.arg_profile_expiry_badge.expired{background:#fee2e2;color:#991b1b}.arg_profile_expiry_badge.arg_profile_no_expiry{background:#e0e7ff;color:#4338ca}.arg_profile_no_licenses{color:var(--medium,#5a6c7d);padding:40px 20px;text-align:center}.arg_profile_no_licenses svg{margin-bottom:16px}.arg_profile_no_licenses p{color:var(--Main-Darkest,#21243d);font-weight:600;margin:0 0 8px}.arg_profile_hint{font-size:14px;line-height:1.5}@media (max-width:768px){.arg_profile_header{gap:16px;grid-template-columns:1fr;text-align:center}.arg_profile_avatar{margin:0 auto}.arg_profile_actions{flex-wrap:wrap;justify-content:center}.arg_profile_cards_grid{grid-template-columns:1fr}.arg_profile_tabs{justify-content:center}}
|
|
360
|
+
</style>
|