Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
1 change: 1 addition & 0 deletions apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@
"date-fns": "^4.1.0",
"dompurify": "^3.3.1",
"effect": "^3.19.15",
"facehash": "^0.0.7",
"json5": "^2.2.3",
"lucide-react": "^0.544.0",
"motion": "^11.18.2",
Expand Down
30 changes: 17 additions & 13 deletions apps/desktop/src/components/main/body/contacts/details.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Facehash } from "facehash";
import {
Building2,
CircleMinus,
Expand All @@ -17,7 +18,6 @@ import {
import { Textarea } from "@hypr/ui/components/ui/textarea";

import * as main from "../../../../store/tinybase/store/main";
import { getInitials } from "./shared";

export function DetailsColumn({
selectedHumanId,
Expand Down Expand Up @@ -211,13 +211,16 @@ export function DetailsColumn({
<>
<div className="px-6 py-4 border-b border-neutral-200">
<div className="flex items-start gap-4">
<div className="w-12 h-12 rounded-full bg-neutral-200 flex items-center justify-center">
<span className="text-lg font-medium text-neutral-600">
{getInitials(
selectedPersonData.name || selectedPersonData.email,
)}
</span>
</div>
<Facehash
name={String(
selectedPersonData.name ||
selectedPersonData.email ||
selectedHumanId,
)}
size={48}
interactive={false}
showInitial={false}
/>
<div className="flex-1">
<div className="flex flex-col gap-2">
<div className="flex items-center gap-2">
Expand Down Expand Up @@ -264,11 +267,12 @@ export function DetailsColumn({
className="flex items-center justify-between p-2 bg-neutral-50 rounded-md border border-neutral-200"
>
<div className="flex items-center gap-2">
<div className="w-8 h-8 rounded-full bg-neutral-200 flex items-center justify-center">
<span className="text-xs font-medium text-neutral-600">
{getInitials(dup.name || dup.email)}
</span>
</div>
<Facehash
name={String(dup.name || dup.email || dup.id)}
size={32}
interactive={false}
showInitial={false}
/>
<div>
<div className="text-sm font-medium text-neutral-900">
{dup.name || "Unnamed Contact"}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Icon } from "@iconify-icon/react";
import { Facehash } from "facehash";
import { Building2, Mail } from "lucide-react";

import { commands as openerCommands } from "@hypr/plugin-opener2";
import { Button } from "@hypr/ui/components/ui/button";
import { Input } from "@hypr/ui/components/ui/input";

import * as main from "../../../../store/tinybase/store/main";
import { getInitials } from "./shared";

export function OrganizationDetailsColumn({
selectedOrganizationId,
Expand Down Expand Up @@ -77,14 +77,14 @@ export function OrganizationDetailsColumn({
onClick={() => onPersonClick?.(humanId)}
>
<div className="flex flex-col items-center text-center gap-3">
<div className="w-12 h-12 rounded-full bg-neutral-200 flex items-center justify-center shrink-0">
<span className="text-sm font-medium text-neutral-600">
{getInitials(
(human.name as string) ||
(human.email as string),
)}
</span>
</div>
<Facehash
name={String(
human.name || human.email || humanId,
)}
size={48}
interactive={false}
showInitial={false}
/>
<div className="w-full">
<div className="font-semibold text-sm truncate">
{human.name || human.email || "Unnamed"}
Expand Down
14 changes: 8 additions & 6 deletions apps/desktop/src/components/main/body/contacts/people.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { Facehash } from "facehash";
import { CornerDownLeft, Pin } from "lucide-react";
import { Reorder } from "motion/react";
import React, { useCallback, useMemo, useState } from "react";

import { cn } from "@hypr/utils";

import * as main from "../../../../store/tinybase/store/main";
import { ColumnHeader, getInitials, type SortOption } from "./shared";
import { ColumnHeader, type SortOption } from "./shared";

export function PeopleColumn({
currentOrgId,
Expand Down Expand Up @@ -251,11 +252,12 @@ function PersonItem({
active ? "border-neutral-500 bg-neutral-100" : "border-transparent",
])}
>
<div className="shrink-0 w-8 h-8 rounded-full bg-neutral-200 flex items-center justify-center">
<span className="text-xs font-medium text-neutral-600">
{getInitials(personName || personEmail)}
</span>
</div>
<Facehash
name={personName || personEmail || humanId}
size={32}
interactive={false}
showInitial={false}
/>
<div className="flex-1 min-w-0">
<div className="font-medium truncate flex items-center gap-1">
{personName || personEmail || "Unnamed"}
Expand Down
12 changes: 9 additions & 3 deletions apps/desktop/src/components/main/sidebar/profile/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useQuery } from "@tanstack/react-query";
import { Facehash } from "facehash";
import {
CalendarIcon,
ChevronUpIcon,
Expand Down Expand Up @@ -313,18 +314,23 @@ function ProfileButton({
className={cn([
"flex size-8 shrink-0 items-center justify-center",
"overflow-hidden rounded-full",
"border border-t border-neutral-400",
"bg-linear-to-br from-indigo-400 to-purple-500",
"shadow-xs",
"transition-transform duration-300",
])}
>
{profile.data && (
{profile.data ? (
<img
src={profile.data}
alt="Profile"
className="h-full w-full rounded-full"
/>
) : (
<Facehash
name={auth?.session?.user.email || name || "user"}
size={32}
interactive={false}
showInitial={false}
/>
)}
</div>
<div className="min-w-0 flex-1 text-sm text-black truncate">{name}</div>
Expand Down
17 changes: 7 additions & 10 deletions apps/desktop/src/components/main/sidebar/search/item.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import DOMPurify from "dompurify";
import { Facehash } from "facehash";
import { useCallback, useMemo } from "react";

import { cn } from "@hypr/utils";

import { type SearchResult } from "../../../../contexts/search/ui";
import * as main from "../../../../store/tinybase/store/main";
import { type TabInput, useTabs } from "../../../../store/zustand/tabs";
import { getInitials } from "../../body/contacts/shared";

export function SearchResultItem({
result,
Expand Down Expand Up @@ -88,15 +88,12 @@ function HumanSearchResultItem({
isSelected && "bg-neutral-100",
])}
>
<div
className={cn([
"shrink-0 w-8 h-8 rounded-full bg-neutral-200 flex items-center justify-center",
])}
>
<span className={cn(["text-xs font-medium text-neutral-600"])}>
{getInitials(result.title)}
</span>
</div>
<Facehash
name={result.title || result.id}
size={32}
interactive={false}
showInitial={false}
/>
<div className={cn(["flex-1 min-w-0"])}>
<div
className={cn([
Expand Down
Loading
Loading