@vertesia/ui 1.4.0-dev.20260629.130134Z → 1.4.1
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/lib/core/components/SidePanel.js +1 -1
- package/lib/core/components/SidePanel.js.map +1 -1
- package/lib/core/components/shadcn/button.d.ts +10 -3
- package/lib/core/components/shadcn/button.d.ts.map +1 -1
- package/lib/core/components/shadcn/button.js +41 -9
- package/lib/core/components/shadcn/button.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +1 -1
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/resizeable.d.ts +1 -1
- package/lib/core/components/shadcn/resizeable.d.ts.map +1 -1
- package/lib/core/components/shadcn/resizeable.js +12 -2
- package/lib/core/components/shadcn/resizeable.js.map +1 -1
- package/lib/core/components/shadcn/tabs.d.ts +12 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +12 -4
- package/lib/core/components/shadcn/tabs.js.map +1 -1
- package/lib/core/components/shadcn/theme/ThemeSwitcher.js +1 -1
- package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
- package/lib/core/hooks/useIntersectionObserver.d.ts.map +1 -1
- package/lib/core/hooks/useIntersectionObserver.js +3 -1
- package/lib/core/hooks/useIntersectionObserver.js.map +1 -1
- package/lib/features/agent/chat/AgentChatPlaybackControls.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentChatPlaybackControls.js +2 -2
- package/lib/features/agent/chat/AgentChatPlaybackControls.js.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.js +2 -2
- package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +4 -3
- package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/features/agent/chat/ImageLightbox.d.ts.map +1 -1
- package/lib/features/agent/chat/ImageLightbox.js +1 -1
- package/lib/features/agent/chat/ImageLightbox.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +57 -12
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +8 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +45 -36
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +4 -2
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +7 -3
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +158 -8
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +15 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts +1 -0
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.js +37 -3
- package/lib/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.js +13 -13
- package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/features/magic-pdf/DownloadPopover.js +2 -2
- package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js +3 -3
- package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.js +2 -2
- package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageSlider.js +2 -2
- package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js +3 -3
- package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
- package/lib/features/store/objects/DocumentQuickFilter.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentQuickFilter.js +5 -5
- package/lib/features/store/objects/DocumentQuickFilter.js.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.js +2 -2
- package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.js +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +3 -3
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js +1 -1
- package/lib/features/store/objects/components/VectorSearchWidget.js +1 -1
- package/lib/features/store/objects/components/VectorSearchWidget.js.map +1 -1
- package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/features/store/objects/layout/renderers.js +2 -2
- package/lib/features/store/objects/layout/renderers.js.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js +4 -4
- package/lib/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.js +4 -4
- package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/user/UserInfo.js +7 -3
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/router/HistoryNavigator.js +5 -0
- package/lib/router/HistoryNavigator.js.map +1 -1
- package/lib/router/Nav.d.ts.map +1 -1
- package/lib/router/Nav.js +9 -1
- package/lib/router/Nav.js.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/form/Form.js +1 -1
- package/lib/widgets/form/Form.js.map +1 -1
- package/lib/widgets/json-view/JSONSwitcher.js +1 -1
- package/lib/widgets/json-view/JSONSwitcher.js.map +1 -1
- package/lib/widgets/json-view/JSONView.js +6 -6
- package/lib/widgets/json-view/JSONView.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +29 -0
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
- package/package.json +29 -30
- package/src/__tests__/a11y.test.tsx +73 -0
- package/src/core/components/SidePanel.tsx +1 -1
- package/src/core/components/shadcn/button.tsx +67 -12
- package/src/core/components/shadcn/modal/dialog.tsx +1 -1
- package/src/core/components/shadcn/resizeable.test.tsx +77 -0
- package/src/core/components/shadcn/resizeable.tsx +28 -2
- package/src/core/components/shadcn/tabs.test.tsx +65 -0
- package/src/core/components/shadcn/tabs.tsx +25 -3
- package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +1 -1
- package/src/core/hooks/useIntersectionObserver.tsx +3 -1
- package/src/features/agent/chat/AgentChatPlaybackControls.tsx +0 -5
- package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +31 -0
- package/src/features/agent/chat/AgentRequestInputOverlay.tsx +6 -2
- package/src/features/agent/chat/AgentRightPanel.tsx +1 -1
- package/src/features/agent/chat/AskUserWidget.test.tsx +49 -0
- package/src/features/agent/chat/AskUserWidget.tsx +32 -22
- package/src/features/agent/chat/ImageLightbox.tsx +0 -1
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +246 -1
- package/src/features/agent/chat/ModernAgentConversation.tsx +62 -17
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +6 -1
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +81 -49
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +3 -3
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +25 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +5 -3
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +4 -1
- package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +328 -42
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +80 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +21 -1
- package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +70 -0
- package/src/features/agent/chat/hooks/useFileProcessing.ts +37 -6
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +62 -66
- package/src/features/magic-pdf/DownloadPopover.tsx +2 -2
- package/src/features/magic-pdf/MagicPdfView.tsx +3 -3
- package/src/features/oauth/McpConnectionsButton.tsx +0 -2
- package/src/features/oauth/McpConnectionsDialog.tsx +0 -1
- package/src/features/oauth/RemoteMcpConnectionButton.tsx +0 -1
- package/src/features/pdf-viewer/PdfPageSlider.tsx +5 -5
- package/src/features/pdf-viewer/SimplePdfViewer.tsx +11 -12
- package/src/features/store/objects/DocumentQuickFilter.tsx +13 -15
- package/src/features/store/objects/DocumentSearchResults.tsx +3 -6
- package/src/features/store/objects/components/ContentDispositionButton.tsx +5 -1
- package/src/features/store/objects/components/ContentOverview.tsx +11 -11
- package/src/features/store/objects/components/DocumentIcon.tsx +1 -1
- package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
- package/src/features/store/objects/layout/renderers.tsx +1 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
- package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +6 -5
- package/src/features/store/types/ContentObjectTypesTable.tsx +12 -14
- package/src/features/store/types/SelectContentTypeModal.tsx +2 -2
- package/src/features/user/UserInfo.tsx +7 -7
- package/src/router/HistoryNavigator.ts +5 -0
- package/src/router/Nav.tsx +12 -3
- package/src/widgets/form/Form.tsx +1 -1
- package/src/widgets/json-view/JSONSwitcher.tsx +2 -2
- package/src/widgets/json-view/JSONView.tsx +7 -7
- package/src/widgets/monacoEditor/MonacoEditor.tsx +29 -0
- package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
- package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button, Center
|
|
1
|
+
import { Button, Center } from '@vertesia/ui/core';
|
|
2
2
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { ChevronsDown, ChevronsUp, Image, Loader2, Maximize, Minus, Plus, ScanSearch } from 'lucide-react';
|
|
@@ -255,7 +255,7 @@ export function AnnotatedImageSlider({ className, currentPage, onChange }: Annot
|
|
|
255
255
|
return (
|
|
256
256
|
<div ref={ref} className={clsx('flex flex-col items-stretch gap-y-2', className)}>
|
|
257
257
|
<div className="relative flex items-center justify-center px-2 h-9">
|
|
258
|
-
<Button variant="ghost" size="xs" onClick={goPrev}
|
|
258
|
+
<Button variant="ghost" size="xs" onClick={goPrev} title={t('pdf.previousPage')}>
|
|
259
259
|
<ChevronsUp className="size-4" />
|
|
260
260
|
</Button>
|
|
261
261
|
<div className="absolute start-2 flex items-center gap-x-1">
|
|
@@ -302,7 +302,7 @@ export function AnnotatedImageSlider({ className, currentPage, onChange }: Annot
|
|
|
302
302
|
))}
|
|
303
303
|
</div>
|
|
304
304
|
<div className="flex items-center justify-center h-9">
|
|
305
|
-
<Button variant="ghost" size="xs" onClick={goNext}
|
|
305
|
+
<Button variant="ghost" size="xs" onClick={goNext} title={t('pdf.nextPage')}>
|
|
306
306
|
<ChevronsDown className="size-4" />
|
|
307
307
|
</Button>
|
|
308
308
|
</div>
|
|
@@ -320,22 +320,21 @@ interface ImageTypeButtonProps {
|
|
|
320
320
|
function ImageTypeButton({ type, currentType, onClick, icon, tooltip }: ImageTypeButtonProps) {
|
|
321
321
|
const isSelected = type === currentType;
|
|
322
322
|
return (
|
|
323
|
-
<
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
</VTooltip>
|
|
323
|
+
<Button
|
|
324
|
+
title={tooltip}
|
|
325
|
+
tooltipPlacement="bottom"
|
|
326
|
+
variant="unstyled"
|
|
327
|
+
aria-pressed={isSelected}
|
|
328
|
+
className={clsx(
|
|
329
|
+
'p-1 rounded cursor-pointer transition-colors',
|
|
330
|
+
isSelected
|
|
331
|
+
? 'text-primary bg-primary/10'
|
|
332
|
+
: 'text-muted-foreground hover:text-foreground hover:bg-muted',
|
|
333
|
+
)}
|
|
334
|
+
onClick={onClick}
|
|
335
|
+
>
|
|
336
|
+
{icon}
|
|
337
|
+
</Button>
|
|
339
338
|
);
|
|
340
339
|
}
|
|
341
340
|
|
|
@@ -351,54 +350,51 @@ function ZoomControls({ zoom, onZoomIn, onZoomOut, onFitToView, canZoomIn, canZo
|
|
|
351
350
|
const { t } = useUITranslation();
|
|
352
351
|
return (
|
|
353
352
|
<div className="flex items-center gap-x-0.5">
|
|
354
|
-
<
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
</VTooltip>
|
|
353
|
+
<Button
|
|
354
|
+
title={t('pdf.zoomOut')}
|
|
355
|
+
tooltipPlacement="bottom"
|
|
356
|
+
variant="unstyled"
|
|
357
|
+
className={clsx(
|
|
358
|
+
'p-1 rounded cursor-pointer transition-colors',
|
|
359
|
+
canZoomOut
|
|
360
|
+
? 'text-muted-foreground hover:text-foreground hover:bg-muted'
|
|
361
|
+
: 'text-muted-foreground/40 cursor-not-allowed',
|
|
362
|
+
)}
|
|
363
|
+
onClick={onZoomOut}
|
|
364
|
+
disabled={!canZoomOut}
|
|
365
|
+
>
|
|
366
|
+
<Minus className="size-4" />
|
|
367
|
+
</Button>
|
|
370
368
|
<span className="text-xs text-muted-foreground min-w-[32px] text-center">{zoom}%</span>
|
|
371
|
-
<
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
</Button>
|
|
401
|
-
</VTooltip>
|
|
369
|
+
<Button
|
|
370
|
+
title={t('pdf.zoomIn')}
|
|
371
|
+
tooltipPlacement="bottom"
|
|
372
|
+
variant="unstyled"
|
|
373
|
+
className={clsx(
|
|
374
|
+
'p-1 rounded cursor-pointer transition-colors',
|
|
375
|
+
canZoomIn
|
|
376
|
+
? 'text-muted-foreground hover:text-foreground hover:bg-muted'
|
|
377
|
+
: 'text-muted-foreground/40 cursor-not-allowed',
|
|
378
|
+
)}
|
|
379
|
+
onClick={onZoomIn}
|
|
380
|
+
disabled={!canZoomIn}
|
|
381
|
+
>
|
|
382
|
+
<Plus className="size-4" />
|
|
383
|
+
</Button>
|
|
384
|
+
<Button
|
|
385
|
+
title={t('pdf.fitToWidth')}
|
|
386
|
+
tooltipPlacement="bottom"
|
|
387
|
+
variant="unstyled"
|
|
388
|
+
className={clsx(
|
|
389
|
+
'p-1 rounded cursor-pointer transition-colors',
|
|
390
|
+
zoom !== DEFAULT_ZOOM
|
|
391
|
+
? 'text-muted-foreground hover:text-foreground hover:bg-muted'
|
|
392
|
+
: 'text-muted-foreground/40',
|
|
393
|
+
)}
|
|
394
|
+
onClick={onFitToView}
|
|
395
|
+
>
|
|
396
|
+
<Maximize className="size-4" />
|
|
397
|
+
</Button>
|
|
402
398
|
</div>
|
|
403
399
|
);
|
|
404
400
|
}
|
|
@@ -30,7 +30,7 @@ export function DownloadPopover({ object }: DownloadPopoverProps) {
|
|
|
30
30
|
// For markdown processor, only one download option - render simple button
|
|
31
31
|
if (processorType === 'markdown') {
|
|
32
32
|
return (
|
|
33
|
-
<Button variant="ghost" size="xs" onClick={() => onDownload('document.md')}
|
|
33
|
+
<Button variant="ghost" size="xs" onClick={() => onDownload('document.md')} title={t('pdf.download')}>
|
|
34
34
|
<Download className="size-4" />
|
|
35
35
|
</Button>
|
|
36
36
|
);
|
|
@@ -40,7 +40,7 @@ export function DownloadPopover({ object }: DownloadPopoverProps) {
|
|
|
40
40
|
return (
|
|
41
41
|
<Popover>
|
|
42
42
|
<PopoverTrigger>
|
|
43
|
-
<Button variant="ghost" size="xs"
|
|
43
|
+
<Button variant="ghost" size="xs" title={t('pdf.download')}>
|
|
44
44
|
<Download className="size-4" />
|
|
45
45
|
</Button>
|
|
46
46
|
</PopoverTrigger>
|
|
@@ -94,7 +94,7 @@ export function MagicPdfView({ objectId, onClose }: MagicPdfViewProps) {
|
|
|
94
94
|
{/* Header matching the main view layout */}
|
|
95
95
|
<div className="flex h-9 items-center justify-end shrink-0 bg-sidebar px-2 border-b border-sidebar-border">
|
|
96
96
|
{onClose && (
|
|
97
|
-
<Button variant="ghost" size="xs" onClick={onClose}
|
|
97
|
+
<Button variant="ghost" size="xs" onClick={onClose} title={t('pdf.close')}>
|
|
98
98
|
<X className="size-4" />
|
|
99
99
|
</Button>
|
|
100
100
|
)}
|
|
@@ -157,7 +157,7 @@ function MagicPdfViewImpl({ object, onClose }: _MagicPdfViewProps) {
|
|
|
157
157
|
</span>
|
|
158
158
|
<div className="flex items-center gap-x-2">
|
|
159
159
|
{!!onClose && (
|
|
160
|
-
<Button variant="ghost" size="xs" onClick={onClose}
|
|
160
|
+
<Button variant="ghost" size="xs" onClick={onClose} title={t('pdf.close')}>
|
|
161
161
|
<X className="size-4" />
|
|
162
162
|
</Button>
|
|
163
163
|
)}
|
|
@@ -195,7 +195,7 @@ function MagicPdfViewImpl({ object, onClose }: _MagicPdfViewProps) {
|
|
|
195
195
|
<span className="text-xs text-muted-foreground">{t('pdf.pageOf', { pageNumber, totalPages })}</span>
|
|
196
196
|
<div className="flex items-center gap-x-2">
|
|
197
197
|
{!!onClose && (
|
|
198
|
-
<Button variant="ghost" size="xs" onClick={onClose}
|
|
198
|
+
<Button variant="ghost" size="xs" onClick={onClose} title={t('pdf.close')}>
|
|
199
199
|
<X className="size-4" />
|
|
200
200
|
</Button>
|
|
201
201
|
)}
|
|
@@ -161,7 +161,6 @@ export function McpConnectionsInlineList({
|
|
|
161
161
|
size="sm"
|
|
162
162
|
disabled
|
|
163
163
|
className="h-6 w-32 justify-center px-2 text-xs"
|
|
164
|
-
aria-label={t('mcpConnections.checkingStatus')}
|
|
165
164
|
title={t('mcpConnections.checkingStatus')}
|
|
166
165
|
>
|
|
167
166
|
<Spinner className="size-3" />
|
|
@@ -234,7 +233,6 @@ export function McpConnectionsActionMenu({
|
|
|
234
233
|
variant="ghost"
|
|
235
234
|
size="icon"
|
|
236
235
|
className="size-8 rounded-md text-muted hover:bg-muted"
|
|
237
|
-
aria-label={t('mcpConnections.settings')}
|
|
238
236
|
title={t('mcpConnections.settings')}
|
|
239
237
|
disabled={loading}
|
|
240
238
|
>
|
|
@@ -308,7 +308,7 @@ export function PdfPageSlider({
|
|
|
308
308
|
return (
|
|
309
309
|
<div ref={ref} className={clsx('flex flex-col items-stretch', compact ? 'gap-y-1' : 'gap-y-2', className)}>
|
|
310
310
|
<div className={clsx('relative flex items-center justify-center px-2', compact ? 'h-6' : 'h-9')}>
|
|
311
|
-
<Button variant="ghost" size="xs" onClick={goPrev}
|
|
311
|
+
<Button variant="ghost" size="xs" onClick={goPrev} title={t('pdf.previousPage')}>
|
|
312
312
|
<ChevronsUp className="size-4" />
|
|
313
313
|
</Button>
|
|
314
314
|
<div className="absolute start-2 flex items-center gap-x-1">
|
|
@@ -378,7 +378,7 @@ export function PdfPageSlider({
|
|
|
378
378
|
/>
|
|
379
379
|
</div>
|
|
380
380
|
<div className={clsx('flex items-center justify-center', compact ? 'h-6' : 'h-9')}>
|
|
381
|
-
<Button variant="ghost" size="xs" onClick={goNext}
|
|
381
|
+
<Button variant="ghost" size="xs" onClick={goNext} title={t('pdf.nextPage')}>
|
|
382
382
|
<ChevronsDown className="size-4" />
|
|
383
383
|
</Button>
|
|
384
384
|
</div>
|
|
@@ -454,18 +454,18 @@ function ZoomControls({ zoom, onZoomIn, onZoomOut, onFitToView, canZoomIn, canZo
|
|
|
454
454
|
const { t } = useUITranslation();
|
|
455
455
|
return (
|
|
456
456
|
<div className="flex items-center gap-x-0.5">
|
|
457
|
-
<Button variant="ghost" size="xs" onClick={onZoomOut} isDisabled={!canZoomOut}
|
|
457
|
+
<Button variant="ghost" size="xs" onClick={onZoomOut} isDisabled={!canZoomOut} title={t('pdf.zoomOut')}>
|
|
458
458
|
<Minus />
|
|
459
459
|
</Button>
|
|
460
460
|
<span className="text-xs text-muted-foreground min-w-[32px] text-center">{zoom}%</span>
|
|
461
|
-
<Button variant="ghost" size="xs" onClick={onZoomIn} isDisabled={!canZoomIn}
|
|
461
|
+
<Button variant="ghost" size="xs" onClick={onZoomIn} isDisabled={!canZoomIn} title={t('pdf.zoomIn')}>
|
|
462
462
|
<Plus />
|
|
463
463
|
</Button>
|
|
464
464
|
<Button
|
|
465
465
|
variant="ghost"
|
|
466
466
|
size="xs"
|
|
467
467
|
onClick={onFitToView}
|
|
468
|
-
|
|
468
|
+
title={t('pdf.fitToWidth')}
|
|
469
469
|
className={zoom === DEFAULT_ZOOM ? 'text-muted-foreground/40' : undefined}
|
|
470
470
|
>
|
|
471
471
|
<Maximize />
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ContentObject } from '@vertesia/common';
|
|
2
|
-
import { Button, Spinner
|
|
2
|
+
import { Button, Spinner } from '@vertesia/ui/core';
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useUserSession } from '@vertesia/ui/session';
|
|
5
5
|
import { Maximize2, X } from 'lucide-react';
|
|
@@ -100,7 +100,7 @@ export function SimplePdfViewer({ object, url, source, className }: SimplePdfVie
|
|
|
100
100
|
variant="ghost"
|
|
101
101
|
size="xs"
|
|
102
102
|
onClick={() => setIsFullscreen(false)}
|
|
103
|
-
|
|
103
|
+
title={t('pdf.closeFullscreen')}
|
|
104
104
|
>
|
|
105
105
|
<X className="size-4" />
|
|
106
106
|
</Button>
|
|
@@ -131,16 +131,15 @@ export function SimplePdfViewer({ object, url, source, className }: SimplePdfVie
|
|
|
131
131
|
className={className}
|
|
132
132
|
compact
|
|
133
133
|
headerExtra={
|
|
134
|
-
<
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
</VTooltip>
|
|
134
|
+
<Button
|
|
135
|
+
title={t('pdf.fullscreen')}
|
|
136
|
+
tooltipPlacement="bottom"
|
|
137
|
+
variant="unstyled"
|
|
138
|
+
className="p-1 rounded cursor-pointer transition-colors text-muted-foreground hover:text-foreground hover:bg-muted"
|
|
139
|
+
onClick={() => setIsFullscreen(true)}
|
|
140
|
+
>
|
|
141
|
+
<Maximize2 className="size-4" />
|
|
142
|
+
</Button>
|
|
144
143
|
}
|
|
145
144
|
/>
|
|
146
145
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button, CopyButton
|
|
1
|
+
import { Button, CopyButton } from '@vertesia/ui/core';
|
|
2
2
|
import { Filter } from 'lucide-react';
|
|
3
3
|
import { createContext, type ReactNode, useContext } from 'react';
|
|
4
4
|
|
|
@@ -52,20 +52,18 @@ export function DocumentCellActions({
|
|
|
52
52
|
<CopyButton content={copyContent} className={ACTION_BTN_CLASS} />
|
|
53
53
|
)}
|
|
54
54
|
{hasValue && value !== undefined && (
|
|
55
|
-
<
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</Button>
|
|
68
|
-
</VTooltip>
|
|
55
|
+
<Button
|
|
56
|
+
variant="ghost"
|
|
57
|
+
size="sm"
|
|
58
|
+
title={`Filter by ${label}`}
|
|
59
|
+
className={ACTION_BTN_CLASS}
|
|
60
|
+
onClick={(e) => {
|
|
61
|
+
e.stopPropagation();
|
|
62
|
+
onFilter?.(field, value);
|
|
63
|
+
}}
|
|
64
|
+
>
|
|
65
|
+
<Filter className="size-3" />
|
|
66
|
+
</Button>
|
|
69
67
|
)}
|
|
70
68
|
</>
|
|
71
69
|
);
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
Spinner,
|
|
13
13
|
useIntersectionObserver,
|
|
14
14
|
useToast,
|
|
15
|
-
VTooltip,
|
|
16
15
|
} from '@vertesia/ui/core';
|
|
17
16
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
18
17
|
import { useNavigate } from '@vertesia/ui/router';
|
|
@@ -442,11 +441,9 @@ function Toolsbar(props: ToolsbarProps) {
|
|
|
442
441
|
</div>
|
|
443
442
|
)}
|
|
444
443
|
<div className="flex gap-1 items-center">
|
|
445
|
-
<
|
|
446
|
-
<
|
|
447
|
-
|
|
448
|
-
</Button>
|
|
449
|
-
</VTooltip>
|
|
444
|
+
<Button variant="outline" onClick={handleRefetch} title={t('store.refresh')}>
|
|
445
|
+
<RefreshCw size={16} />
|
|
446
|
+
</Button>
|
|
450
447
|
<ContentDispositionButton onUpdate={setIsGridView} />
|
|
451
448
|
</div>
|
|
452
449
|
</div>
|
|
@@ -33,7 +33,11 @@ export function ContentDispositionButton({ onUpdate }: Readonly<ContentDispositi
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<Button
|
|
36
|
+
<Button
|
|
37
|
+
variant="outline"
|
|
38
|
+
onClick={updateView}
|
|
39
|
+
title={isGridView ? t('misc.tableView') : t('misc.thumbnailView')}
|
|
40
|
+
>
|
|
37
41
|
{isGridView ? <TableProperties /> : <LayoutGrid />}
|
|
38
42
|
</Button>
|
|
39
43
|
);
|
|
@@ -247,7 +247,7 @@ function PropertiesPanel({
|
|
|
247
247
|
<Button
|
|
248
248
|
variant={`${viewCode ? 'ghost' : 'primary'}`}
|
|
249
249
|
size="sm"
|
|
250
|
-
|
|
250
|
+
title={t('store.previewProperties')}
|
|
251
251
|
onClick={() => setViewCode(!viewCode)}
|
|
252
252
|
>
|
|
253
253
|
Properties
|
|
@@ -255,7 +255,7 @@ function PropertiesPanel({
|
|
|
255
255
|
<Button
|
|
256
256
|
variant={`${viewCode ? 'primary' : 'ghost'}`}
|
|
257
257
|
size="sm"
|
|
258
|
-
|
|
258
|
+
title={t('store.viewInJsonFormat')}
|
|
259
259
|
onClick={() => setViewCode(!viewCode)}
|
|
260
260
|
>
|
|
261
261
|
JSON
|
|
@@ -422,7 +422,7 @@ function DataPanel({
|
|
|
422
422
|
<Button
|
|
423
423
|
variant={currentPanel === PanelView.Image ? 'primary' : 'ghost'}
|
|
424
424
|
size="sm"
|
|
425
|
-
|
|
425
|
+
title={t('store.viewImage')}
|
|
426
426
|
onClick={() => setCurrentPanel(PanelView.Image)}
|
|
427
427
|
>
|
|
428
428
|
Image
|
|
@@ -432,7 +432,7 @@ function DataPanel({
|
|
|
432
432
|
<Button
|
|
433
433
|
variant={currentPanel === PanelView.Video ? 'primary' : 'ghost'}
|
|
434
434
|
size="sm"
|
|
435
|
-
|
|
435
|
+
title={t('store.viewVideo')}
|
|
436
436
|
onClick={() => setCurrentPanel(PanelView.Video)}
|
|
437
437
|
>
|
|
438
438
|
Video
|
|
@@ -442,7 +442,7 @@ function DataPanel({
|
|
|
442
442
|
<Button
|
|
443
443
|
variant={currentPanel === PanelView.Audio ? 'primary' : 'ghost'}
|
|
444
444
|
size="sm"
|
|
445
|
-
|
|
445
|
+
title={t('store.viewAudio')}
|
|
446
446
|
onClick={() => setCurrentPanel(PanelView.Audio)}
|
|
447
447
|
>
|
|
448
448
|
Audio
|
|
@@ -452,7 +452,7 @@ function DataPanel({
|
|
|
452
452
|
<Button
|
|
453
453
|
variant={currentPanel === PanelView.Transcript ? 'primary' : 'ghost'}
|
|
454
454
|
size="sm"
|
|
455
|
-
|
|
455
|
+
title={t('store.viewTranscript')}
|
|
456
456
|
onClick={() => setCurrentPanel(PanelView.Transcript)}
|
|
457
457
|
>
|
|
458
458
|
Transcript
|
|
@@ -461,7 +461,7 @@ function DataPanel({
|
|
|
461
461
|
<Button
|
|
462
462
|
variant={currentPanel === PanelView.Text ? 'primary' : 'ghost'}
|
|
463
463
|
size="sm"
|
|
464
|
-
|
|
464
|
+
title={t('store.viewText')}
|
|
465
465
|
onClick={() => setCurrentPanel(PanelView.Text)}
|
|
466
466
|
>
|
|
467
467
|
Text
|
|
@@ -470,7 +470,7 @@ function DataPanel({
|
|
|
470
470
|
<Button
|
|
471
471
|
variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
|
|
472
472
|
size="sm"
|
|
473
|
-
|
|
473
|
+
title={t('store.viewPdf')}
|
|
474
474
|
onClick={() => setCurrentPanel(PanelView.Pdf)}
|
|
475
475
|
>
|
|
476
476
|
PDF
|
|
@@ -480,7 +480,7 @@ function DataPanel({
|
|
|
480
480
|
<Button
|
|
481
481
|
variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
|
|
482
482
|
size="sm"
|
|
483
|
-
|
|
483
|
+
title={t('store.viewAsPdf')}
|
|
484
484
|
onClick={() => {
|
|
485
485
|
setCurrentPanel(PanelView.Pdf);
|
|
486
486
|
if (!pdfRendition && !officePdfUrl && !officePdfConverting) {
|
|
@@ -687,7 +687,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
687
687
|
</>
|
|
688
688
|
)}
|
|
689
689
|
{isDownloading ? (
|
|
690
|
-
<Button variant="ghost" size="sm" disabled className="flex items-center gap-2"
|
|
690
|
+
<Button variant="ghost" size="sm" disabled className="flex items-center gap-2" title="download">
|
|
691
691
|
<Spinner size="sm" />
|
|
692
692
|
</Button>
|
|
693
693
|
) : (
|
|
@@ -698,7 +698,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
698
698
|
size="sm"
|
|
699
699
|
disabled={!text}
|
|
700
700
|
className="flex items-center gap-2"
|
|
701
|
-
|
|
701
|
+
title="download"
|
|
702
702
|
>
|
|
703
703
|
<Download className="size-4" />
|
|
704
704
|
</Button>
|
|
@@ -141,7 +141,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
|
|
|
141
141
|
<Button
|
|
142
142
|
variant="ghost"
|
|
143
143
|
onClick={() => setShowSettings(true)}
|
|
144
|
-
|
|
144
|
+
title={t('store.semanticSearchSettings')}
|
|
145
145
|
className="ms-1"
|
|
146
146
|
>
|
|
147
147
|
<Settings size={18} />
|
|
@@ -194,7 +194,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
|
|
|
194
194
|
isLoading={isLoading}
|
|
195
195
|
onClick={fireSearch}
|
|
196
196
|
isDisabled={!isReady}
|
|
197
|
-
|
|
197
|
+
title={t('store.semanticSearch')}
|
|
198
198
|
>
|
|
199
199
|
{t('store.search')}
|
|
200
200
|
</Button>
|
|
@@ -156,7 +156,6 @@ const renderers: Record<
|
|
|
156
156
|
<td key={index} className="flex justify-start items-center gap-2 group/field">
|
|
157
157
|
<Button
|
|
158
158
|
variant="ghost"
|
|
159
|
-
aria-label="Preview Object"
|
|
160
159
|
title="Preview Object"
|
|
161
160
|
onClick={(e) => {
|
|
162
161
|
e.stopPropagation();
|
|
@@ -213,7 +212,7 @@ const renderers: Record<
|
|
|
213
212
|
{displayValue}
|
|
214
213
|
<Button
|
|
215
214
|
variant="ghost"
|
|
216
|
-
|
|
215
|
+
title="Preview Object"
|
|
217
216
|
onClick={(e) => {
|
|
218
217
|
e.stopPropagation();
|
|
219
218
|
onClick?.(objectId);
|
|
@@ -64,7 +64,7 @@ interface StartWorkflowModalProps {
|
|
|
64
64
|
function StartWorkflowModal({ isOpen, onClose }: StartWorkflowModalProps) {
|
|
65
65
|
const { t } = useUITranslation();
|
|
66
66
|
return (
|
|
67
|
-
<Modal onClose={() => onClose(undefined)} isOpen={isOpen}
|
|
67
|
+
<Modal onClose={() => onClose(undefined)} isOpen={isOpen} size="lg">
|
|
68
68
|
<ModalTitle>{t('store.actions.startWorkflowByRule')}</ModalTitle>
|
|
69
69
|
<StartWorkflowBody onClose={onClose} />
|
|
70
70
|
</Modal>
|
|
@@ -75,8 +75,8 @@ function optionLayout(option: ObjectsActionSpec) {
|
|
|
75
75
|
return {
|
|
76
76
|
label: (
|
|
77
77
|
<div>
|
|
78
|
-
<div>{option.name}</div>
|
|
79
|
-
<div className="text-sm text-muted">{option.description}</div>
|
|
78
|
+
<div className="text-start">{option.name}</div>
|
|
79
|
+
<div className="text-sm text-muted text-wrap text-start">{option.description}</div>
|
|
80
80
|
</div>
|
|
81
81
|
),
|
|
82
82
|
reverse: true,
|
|
@@ -102,11 +102,12 @@ function StartWorkflowBody({ onClose }: StartWorkflowBodyProps) {
|
|
|
102
102
|
};
|
|
103
103
|
|
|
104
104
|
return (
|
|
105
|
-
|
|
105
|
+
<>
|
|
106
106
|
<ModalBody>
|
|
107
107
|
<div className="pb-2">{t('store.actions.chooseWorkflowRule')}</div>
|
|
108
108
|
<div className="max-h-[420px] overflow-y-scroll border-border border rounded-md">
|
|
109
109
|
<SelectList
|
|
110
|
+
className="w-full"
|
|
110
111
|
options={context.wfRules}
|
|
111
112
|
optionLayout={optionLayout}
|
|
112
113
|
onChange={onSelect}
|
|
@@ -122,6 +123,6 @@ function StartWorkflowBody({ onClose }: StartWorkflowBodyProps) {
|
|
|
122
123
|
Start
|
|
123
124
|
</Button>
|
|
124
125
|
</ModalFooter>
|
|
125
|
-
|
|
126
|
+
</>
|
|
126
127
|
);
|
|
127
128
|
}
|
|
@@ -42,20 +42,18 @@ export function ContentObjectTypesTable({ objects, isLoading, onFilter }: Conten
|
|
|
42
42
|
<span className="truncate">{obj.name}</span>
|
|
43
43
|
<CopyButton content={obj.id} className={ACTION_BTN_CLASS} />
|
|
44
44
|
{onFilter && (
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</Button>
|
|
58
|
-
</VTooltip>
|
|
45
|
+
<Button
|
|
46
|
+
variant="ghost"
|
|
47
|
+
size="sm"
|
|
48
|
+
title={`Filter by ${obj.name}`}
|
|
49
|
+
className={ACTION_BTN_CLASS}
|
|
50
|
+
onClick={(e) => {
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
onFilter('name', obj.name);
|
|
53
|
+
}}
|
|
54
|
+
>
|
|
55
|
+
<Filter className="size-3" />
|
|
56
|
+
</Button>
|
|
59
57
|
)}
|
|
60
58
|
</div>
|
|
61
59
|
</td>
|