diff --git a/models/chunter/src/actions.ts b/models/chunter/src/actions.ts index a7b7ab219f..4b33c7182f 100644 --- a/models/chunter/src/actions.ts +++ b/models/chunter/src/actions.ts @@ -19,6 +19,7 @@ import notification, { notificationActionTemplates } from '@hcengineering/model- import activity from '@hcengineering/activity' import workbench from '@hcengineering/model-workbench' import core from '@hcengineering/model-core' +import contact from '@hcengineering/contact' import chunter from './plugin' @@ -43,6 +44,18 @@ export function defineActions (builder: Builder): void { chunter.category.Chunter ) + createAction(builder, { + action: chunter.actionImpl.StartConversation, + label: chunter.string.StartConversation, + icon: chunter.icon.Thread, + input: 'focus', + category: chunter.category.Chunter, + target: contact.mixin.Employee, + context: { + mode: 'context', + group: 'associate' + } + }) defineMessageActions(builder) defineChannelActions(builder) } diff --git a/models/chunter/src/plugin.ts b/models/chunter/src/plugin.ts index c0fbc87557..8116ad3290 100644 --- a/models/chunter/src/plugin.ts +++ b/models/chunter/src/plugin.ts @@ -53,7 +53,8 @@ export default mergeIds(chunterId, chunter, { ReplyToThread: '' as ViewAction, OpenInSidebar: '' as ViewAction, TranslateMessage: '' as ViewAction, - ShowOriginalMessage: '' as ViewAction + ShowOriginalMessage: '' as ViewAction, + StartConversation: '' as ViewAction }, category: { Chunter: '' as Ref diff --git a/packages/presentation/src/components/FilePreview.svelte b/packages/presentation/src/components/FilePreview.svelte index 96d3eee38e..5c988b3c99 100644 --- a/packages/presentation/src/components/FilePreview.svelte +++ b/packages/presentation/src/components/FilePreview.svelte @@ -27,6 +27,7 @@ import { getFileUrl } from '../file' import { getPreviewType, previewTypes } from '../filetypes' + import { imageSizeToRatio } from '../image' import { BlobMetadata, FilePreviewExtension } from '../types' export let file: Ref @@ -68,8 +69,8 @@ return } const pR: number = mD?.pixelRatio ?? 1 - const fWidth: number = mD.originalWidth / pR - const fHeight: number = mD.originalHeight / pR + const fWidth: number = imageSizeToRatio(mD.originalWidth, pR) + const fHeight: number = imageSizeToRatio(mD.originalHeight, pR) let mHeight: number = 0 let scale: number = 1 if (fWidth > pWidth) { diff --git a/packages/presentation/src/image.ts b/packages/presentation/src/image.ts index cda525b48e..d5ff35337b 100644 --- a/packages/presentation/src/image.ts +++ b/packages/presentation/src/image.ts @@ -15,6 +15,11 @@ import extract from 'png-chunks-extract' +export function imageSizeToRatio (width: number, pixelRatio: number): number { + // consider pixel ratio < 2 as non retina and display them in original size + return pixelRatio < 2 ? width : Math.round(width / pixelRatio) +} + export async function getImageSize (file: Blob): Promise<{ width: number, height: number, pixelRatio: number }> { const size = isPng(file) ? await getPngImageSize(file) : undefined @@ -65,20 +70,18 @@ async function getPngImageSize (file: Blob): Promise<{ width: number, height: nu const idhrData = parseIHDR(new DataView(iHDRChunk.data.buffer)) const physData = parsePhys(new DataView(pHYsChunk.data.buffer)) - if (physData.unit === 0 && physData.ppux === physData.ppuy) { - const pixelRatio = Math.round(physData.ppux / 2834.5) - return { - width: idhrData.width, - height: idhrData.height, - pixelRatio - } + // Assuming pixels are square + // http://www.libpng.org/pub/png/spec/1.2/PNG-Decoders.html#D.Pixel-dimensions + const pixelRatio = Math.round(physData.ppux * 0.0254) / 72 + return { + width: idhrData.width, + height: idhrData.height, + pixelRatio } } catch (err) { console.error(err) return undefined } - - return undefined } // See http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html diff --git a/packages/ui/src/components/ModernTab.svelte b/packages/ui/src/components/ModernTab.svelte index 90b552fbf1..c9fb9e2a7f 100644 --- a/packages/ui/src/components/ModernTab.svelte +++ b/packages/ui/src/components/ModernTab.svelte @@ -148,6 +148,8 @@ } .icon { + writing-mode: initial; + text-orientation: initial; &.vertical { transform: rotate(90deg); text-orientation: upright; diff --git a/plugins/chunter-assets/lang/en.json b/plugins/chunter-assets/lang/en.json index 7d61091832..8412b7ca32 100644 --- a/plugins/chunter-assets/lang/en.json +++ b/plugins/chunter-assets/lang/en.json @@ -126,6 +126,7 @@ "TranslateMessage": "Translate message", "Translate": "Translate", "ShowOriginal": "Show original", - "Translating": "Translating..." + "Translating": "Translating...", + "StartConversation": "Start conversation" } } \ No newline at end of file diff --git a/plugins/chunter-assets/lang/es.json b/plugins/chunter-assets/lang/es.json index 1fef286c8a..027a3e2c10 100644 --- a/plugins/chunter-assets/lang/es.json +++ b/plugins/chunter-assets/lang/es.json @@ -126,6 +126,7 @@ "TranslateMessage": "Traducir mensaje", "Translate": "Traducir", "ShowOriginal": "Mostrar original", - "Translating": "Traduciendo..." + "Translating": "Traduciendo...", + "StartConversation": "Iniciar conversación" } } \ No newline at end of file diff --git a/plugins/chunter-assets/lang/fr.json b/plugins/chunter-assets/lang/fr.json index e5415a0cd1..f50055ed47 100644 --- a/plugins/chunter-assets/lang/fr.json +++ b/plugins/chunter-assets/lang/fr.json @@ -126,6 +126,7 @@ "TranslateMessage": "Traduire le message", "Translate": "Traduire", "ShowOriginal": "Afficher l'original", - "Translating": "Traduction en cours..." + "Translating": "Traduction en cours...", + "StartConversation": "Démarrer la conversation" } } \ No newline at end of file diff --git a/plugins/chunter-assets/lang/pt.json b/plugins/chunter-assets/lang/pt.json index 0b2c5a6425..fbfe71a7f0 100644 --- a/plugins/chunter-assets/lang/pt.json +++ b/plugins/chunter-assets/lang/pt.json @@ -126,6 +126,7 @@ "TranslateMessage": "Traduzir mensagem", "Translate": "Traduzir", "ShowOriginal": "Mostrar original", - "Translating": "A traduzir..." + "Translating": "A traduzir...", + "StartConversation": "Iniciar conversa" } } \ No newline at end of file diff --git a/plugins/chunter-assets/lang/ru.json b/plugins/chunter-assets/lang/ru.json index 0d62dcce64..febe44f00e 100644 --- a/plugins/chunter-assets/lang/ru.json +++ b/plugins/chunter-assets/lang/ru.json @@ -126,6 +126,7 @@ "TranslateMessage": "Перевести сообщение", "Translate": "Перевести", "ShowOriginal": "Показать оригинал", - "Translating": "Перевод..." + "Translating": "Перевод...", + "StartConversation": "Начать диалог" } } \ No newline at end of file diff --git a/plugins/chunter-assets/lang/zh.json b/plugins/chunter-assets/lang/zh.json index 84b7dbf3f8..80bfc8c339 100644 --- a/plugins/chunter-assets/lang/zh.json +++ b/plugins/chunter-assets/lang/zh.json @@ -126,6 +126,7 @@ "TranslateMessage": "翻译消息", "Translate": "翻译", "ShowOriginal": "显示原文", - "Translating": "翻译中..." + "Translating": "翻译中...", + "StartConversation": "开始对话" } } diff --git a/plugins/chunter-resources/src/components/chat/create/CreateDirectChat.svelte b/plugins/chunter-resources/src/components/chat/create/CreateDirectChat.svelte index 964c5cc822..0b5eeb277f 100644 --- a/plugins/chunter-resources/src/components/chat/create/CreateDirectChat.svelte +++ b/plugins/chunter-resources/src/components/chat/create/CreateDirectChat.svelte @@ -14,24 +14,20 @@ --> -{#await p then blobRef} +{#await getBlobRef(value, name) then blobRef} {#if loading}
diff --git a/plugins/workbench-resources/src/components/sidebar/SidebarMini.svelte b/plugins/workbench-resources/src/components/sidebar/SidebarMini.svelte index 24acec8ce5..7b5cf463d9 100644 --- a/plugins/workbench-resources/src/components/sidebar/SidebarMini.svelte +++ b/plugins/workbench-resources/src/components/sidebar/SidebarMini.svelte @@ -23,4 +23,4 @@ export let selected: Ref | undefined = undefined - + diff --git a/plugins/workbench-resources/src/components/sidebar/widgets/WidgetsBar.svelte b/plugins/workbench-resources/src/components/sidebar/widgets/WidgetsBar.svelte index 5f5717b4db..fbdb5d4b41 100644 --- a/plugins/workbench-resources/src/components/sidebar/widgets/WidgetsBar.svelte +++ b/plugins/workbench-resources/src/components/sidebar/widgets/WidgetsBar.svelte @@ -24,6 +24,7 @@ export let widgets: Widget[] = [] export let preferences: WidgetPreference[] = [] export let selected: Ref | undefined = undefined + export let roundBorder = false function handleAddWidget (): void { showPopup(AddWidgetsPopup, { widgets }) @@ -48,7 +49,7 @@ .filter((widget): widget is Widget => widget !== undefined && widget.type === WidgetType.Configurable) -
+
{#each fixedWidgets as widget}