diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributeItem.vue b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributeItem.vue
new file mode 100644
index 000000000..65277ebb3
--- /dev/null
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributeItem.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ {{ attribute.attributeDisplayName }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributes.vue b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributes.vue
new file mode 100644
index 000000000..8891ee0bb
--- /dev/null
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributes.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
{{
+ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.UNUSED_ATTRIBUTES', {
+ count: unusedAttributesCount,
+ })
+ }}
+
+
+
+
+
+
+
+
+ {{
+ unusedAttributesCount === 0
+ ? t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.EMPTY_STATE')
+ : t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.NO_ATTRIBUTES')
+ }}
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/Pages/ContactDetails.vue b/app/javascript/dashboard/components-next/Contacts/Pages/ContactDetails.vue
index 127703927..e43fb92c9 100644
--- a/app/javascript/dashboard/components-next/Contacts/Pages/ContactDetails.vue
+++ b/app/javascript/dashboard/components-next/Contacts/Pages/ContactDetails.vue
@@ -109,8 +109,8 @@ const handleAvatarDelete = async () => {
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/CustomAttributes/DateAttribute.vue b/app/javascript/dashboard/components-next/CustomAttributes/DateAttribute.vue
new file mode 100644
index 000000000..364e193c5
--- /dev/null
+++ b/app/javascript/dashboard/components-next/CustomAttributes/DateAttribute.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+ {{ formattedDate }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/CustomAttributes/ListAttribute.vue b/app/javascript/dashboard/components-next/CustomAttributes/ListAttribute.vue
new file mode 100644
index 000000000..a4da94a23
--- /dev/null
+++ b/app/javascript/dashboard/components-next/CustomAttributes/ListAttribute.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+ {{
+ attribute.value ||
+ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.SELECT')
+ }}
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/CustomAttributes/OtherAttribute.vue b/app/javascript/dashboard/components-next/CustomAttributes/OtherAttribute.vue
new file mode 100644
index 000000000..d5ba437ea
--- /dev/null
+++ b/app/javascript/dashboard/components-next/CustomAttributes/OtherAttribute.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+ {{
+ attribute.value || t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT')
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/button/Button.vue b/app/javascript/dashboard/components-next/button/Button.vue
index 5c1a888a9..02dcfad53 100644
--- a/app/javascript/dashboard/components-next/button/Button.vue
+++ b/app/javascript/dashboard/components-next/button/Button.vue
@@ -6,7 +6,7 @@ import Icon from 'dashboard/components-next/icon/Icon.vue';
const props = defineProps({
label: {
- type: String,
+ type: [String, Number],
default: '',
},
variant: {
@@ -47,7 +47,7 @@ const STYLE_CONFIG = {
blue: {
solid: 'bg-n-brand text-white hover:brightness-110 outline-transparent',
faded:
- 'bg-n-brand/10 text-n-slate-12 hover:bg-n-brand/20 outline-transparent',
+ 'bg-n-brand/10 text-n-blue-text hover:bg-n-brand/20 outline-transparent',
outline: 'text-n-blue-text outline-n-blue-border',
link: 'text-n-blue-text hover:underline outline-transparent',
},
diff --git a/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue b/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
index 079ff3be9..4efa9a61b 100644
--- a/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
+++ b/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
@@ -1,5 +1,5 @@
@@ -60,7 +66,7 @@ const handleAction = (action, value) => {
:placeholder="
searchPlaceholder || t('DROPDOWN_MENU.SEARCH_PLACEHOLDER')
"
- class="w-full h-8 py-2 pl-10 pr-2 text-sm border-none rounded-xl bg-n-solid-1 text-n-slate-12"
+ class="w-full h-8 py-2 pl-10 pr-2 text-sm border-none rounded-lg bg-n-alpha-black2 dark:bg-n-solid-1 text-n-slate-12"
/>
-
+ />