@djangocfg/ui-tools 2.1.404 → 2.1.408
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/README.md +9 -11
- package/dist/file-icon/index.cjs +449 -61
- package/dist/file-icon/index.cjs.map +1 -1
- package/dist/file-icon/index.d.cts +56 -18
- package/dist/file-icon/index.d.ts +56 -18
- package/dist/file-icon/index.mjs +448 -62
- package/dist/file-icon/index.mjs.map +1 -1
- package/dist/tree/index.cjs +49 -22
- package/dist/tree/index.cjs.map +1 -1
- package/dist/tree/index.d.cts +9 -3
- package/dist/tree/index.d.ts +9 -3
- package/dist/tree/index.mjs +49 -22
- package/dist/tree/index.mjs.map +1 -1
- package/dist/{types-B_zhyAqR.d.cts → types-eEu8SeiQ.d.cts} +4 -0
- package/dist/{types-B_zhyAqR.d.ts → types-eEu8SeiQ.d.ts} +4 -0
- package/package.json +13 -16
- package/src/components/FloatingToolbar/index.tsx +37 -3
- package/src/lib/page-snapshot/__tests__/capture-integration.test.ts +85 -0
- package/src/lib/page-snapshot/__tests__/engine.test.ts +36 -0
- package/src/lib/page-snapshot/__tests__/redaction-integration.test.ts +99 -0
- package/src/lib/page-snapshot/__tests__/tokens.test.ts +17 -0
- package/src/lib/page-snapshot/capture/__tests__/budget.test.ts +49 -0
- package/src/lib/page-snapshot/capture/__tests__/chrome-filter.test.ts +47 -0
- package/src/lib/page-snapshot/capture/__tests__/fold.test.ts +66 -0
- package/src/lib/page-snapshot/capture/__tests__/scope.test.ts +74 -0
- package/src/lib/page-snapshot/capture/__tests__/walk.test.ts +129 -0
- package/src/lib/page-snapshot/capture/accessible-name.ts +73 -0
- package/src/lib/page-snapshot/capture/budget.ts +95 -0
- package/src/lib/page-snapshot/capture/chrome-filter.ts +81 -0
- package/src/lib/page-snapshot/capture/classify.ts +111 -0
- package/src/lib/page-snapshot/capture/dom-utils.ts +111 -0
- package/src/lib/page-snapshot/capture/fold.ts +96 -0
- package/src/lib/page-snapshot/capture/scope.ts +169 -0
- package/src/lib/page-snapshot/capture/walk.ts +250 -0
- package/src/lib/page-snapshot/cst/__tests__/serialize.test.ts +50 -0
- package/src/lib/page-snapshot/cst/directives.ts +47 -0
- package/src/lib/page-snapshot/cst/payload.ts +50 -0
- package/src/lib/page-snapshot/cst/serialize.ts +84 -0
- package/src/lib/page-snapshot/cst/types.ts +115 -0
- package/src/lib/page-snapshot/engine.ts +176 -0
- package/src/lib/page-snapshot/index.ts +93 -0
- package/src/lib/page-snapshot/react/PageSnapshotChip.tsx +72 -0
- package/src/lib/page-snapshot/react/PageSnapshotPreview.tsx +78 -0
- package/src/lib/page-snapshot/react/__tests__/PageSnapshotChip.test.tsx +54 -0
- package/src/lib/page-snapshot/react/__tests__/provider.test.tsx +103 -0
- package/src/lib/page-snapshot/react/__tests__/use-page-snapshot-toggle.test.tsx +62 -0
- package/src/lib/page-snapshot/react/provider.tsx +162 -0
- package/src/lib/page-snapshot/react/use-page-snapshot-toggle.ts +47 -0
- package/src/lib/page-snapshot/react/use-page-snapshot.ts +67 -0
- package/src/lib/page-snapshot/redaction/__tests__/audit.test.ts +25 -0
- package/src/lib/page-snapshot/redaction/__tests__/heuristics.test.ts +73 -0
- package/src/lib/page-snapshot/redaction/__tests__/luhn.test.ts +26 -0
- package/src/lib/page-snapshot/redaction/__tests__/patterns.test.ts +60 -0
- package/src/lib/page-snapshot/redaction/audit.ts +58 -0
- package/src/lib/page-snapshot/redaction/heuristics.ts +75 -0
- package/src/lib/page-snapshot/redaction/index.ts +75 -0
- package/src/lib/page-snapshot/redaction/luhn.ts +25 -0
- package/src/lib/page-snapshot/redaction/patterns.ts +111 -0
- package/src/lib/page-snapshot/refs/__tests__/registry.test.ts +24 -0
- package/src/lib/page-snapshot/refs/registry.ts +46 -0
- package/src/lib/page-snapshot/staleness/__tests__/hash.test.ts +34 -0
- package/src/lib/page-snapshot/staleness/hash.ts +20 -0
- package/src/lib/page-snapshot/tokens.ts +15 -0
- package/src/tools/AudioPlayer/context/PlayerProvider.tsx +13 -14
- package/src/tools/AudioPlayer/hooks/useAudioElementEvents.ts +55 -6
- package/src/tools/AudioPlayer/lazy.tsx +13 -27
- package/src/tools/AudioPlayer/parts/Meta/TimeDisplay.tsx +2 -5
- package/src/tools/Chat/README.md +267 -39
- package/src/tools/Chat/composer/Composer.tsx +471 -0
- package/src/tools/Chat/composer/ComposerActionBar.tsx +65 -0
- package/src/tools/Chat/composer/ComposerBanner.tsx +128 -0
- package/src/tools/Chat/composer/ComposerButton.tsx +64 -0
- package/src/tools/Chat/composer/ComposerFooter.tsx +90 -0
- package/src/tools/Chat/composer/ComposerMenuButton.tsx +62 -0
- package/src/tools/Chat/composer/ComposerModelPicker.tsx +104 -0
- package/src/tools/Chat/composer/ComposerRichTextarea.tsx +88 -0
- package/src/tools/Chat/composer/ComposerToolPill.tsx +95 -0
- package/src/tools/Chat/composer/index.ts +45 -0
- package/src/tools/Chat/composer/size-context.tsx +26 -0
- package/src/tools/Chat/composer/types.ts +143 -0
- package/src/tools/Chat/composer/useComposerActions.tsx +164 -0
- package/src/tools/Chat/context/ChatProvider.tsx +54 -3
- package/src/tools/Chat/core/__tests__/metadata.test.ts +69 -0
- package/src/tools/Chat/core/index.ts +23 -1
- package/src/tools/Chat/core/markdown.ts +1 -1
- package/src/tools/Chat/core/metadata.ts +47 -0
- package/src/tools/Chat/core/payload-dispatch.ts +1 -1
- package/src/tools/Chat/core/transport/http.ts +71 -32
- package/src/tools/Chat/core/transport/sse.ts +18 -10
- package/src/tools/Chat/highlight/HighlightOverlay.tsx +101 -0
- package/src/tools/Chat/highlight/README.md +103 -0
- package/src/tools/Chat/highlight/SpotlightCanvas.tsx +153 -0
- package/src/tools/Chat/highlight/__tests__/HighlightOverlay.test.tsx +112 -0
- package/src/tools/Chat/highlight/__tests__/resolveRef.test.ts +55 -0
- package/src/tools/Chat/highlight/index.ts +21 -0
- package/src/tools/Chat/highlight/resolveRef.ts +42 -0
- package/src/tools/Chat/highlight/types.ts +49 -0
- package/src/tools/Chat/highlight/useHighlightTargets.ts +128 -0
- package/src/tools/Chat/hooks/index.ts +0 -5
- package/src/tools/Chat/hooks/useAutoFocusOnStreamEnd.ts +28 -47
- package/src/tools/Chat/hooks/useChat.ts +47 -14
- package/src/tools/Chat/hooks/useChatComposer.ts +2 -2
- package/src/tools/Chat/hooks/useChatLayout.ts +1 -1
- package/src/tools/Chat/hooks/useStreamEndFocus.ts +54 -0
- package/src/tools/Chat/index.ts +25 -219
- package/src/tools/Chat/launcher/ChatDock.tsx +1 -1
- package/src/tools/Chat/launcher/ChatLauncher.tsx +1 -1
- package/src/tools/Chat/launcher/{ChatHeader.tsx → header/ChatHeader.tsx} +24 -11
- package/src/tools/Chat/launcher/{ChatHeaderActionButton.tsx → header/ChatHeaderActionButton.tsx} +34 -3
- package/src/tools/Chat/launcher/{ChatHeaderLanguageButton.tsx → header/ChatHeaderLanguageButton.tsx} +2 -2
- package/src/tools/Chat/launcher/{ChatHeaderModeToggle.tsx → header/ChatHeaderModeToggle.tsx} +1 -1
- package/src/tools/Chat/launcher/{ChatHeaderResetButton.tsx → header/ChatHeaderResetButton.tsx} +2 -1
- package/src/tools/Chat/launcher/{HeaderSlots.tsx → header/HeaderSlots.tsx} +3 -3
- package/src/tools/Chat/launcher/header/index.ts +26 -0
- package/src/tools/Chat/launcher/index.ts +3 -10
- package/src/tools/Chat/lazy.tsx +38 -284
- package/src/tools/Chat/{components → messages}/MessageBubble.tsx +58 -5
- package/src/tools/Chat/{components → messages}/MessageList.tsx +8 -25
- package/src/tools/Chat/messages/blocks/MessageBlocks.tsx +131 -0
- package/src/tools/Chat/messages/blocks/builtin.tsx +91 -0
- package/src/tools/Chat/messages/blocks/index.ts +12 -0
- package/src/tools/Chat/messages/blocks/registry.tsx +42 -0
- package/src/tools/Chat/messages/blocks/renderers/AudioBlock.tsx +20 -0
- package/src/tools/Chat/messages/blocks/renderers/CodeBlock.tsx +19 -0
- package/src/tools/Chat/messages/blocks/renderers/GalleryBlock.tsx +26 -0
- package/src/tools/Chat/messages/blocks/renderers/ImageBlock.tsx +27 -0
- package/src/tools/Chat/messages/blocks/renderers/JsonBlock.tsx +12 -0
- package/src/tools/Chat/messages/blocks/renderers/LottieBlock.tsx +11 -0
- package/src/tools/Chat/messages/blocks/renderers/MapBlock.tsx +36 -0
- package/src/tools/Chat/messages/blocks/renderers/MermaidBlock.tsx +11 -0
- package/src/tools/Chat/messages/blocks/renderers/VideoBlock.tsx +24 -0
- package/src/tools/Chat/messages/blocks/renderers/types.ts +8 -0
- package/src/tools/Chat/{components → messages}/index.ts +11 -5
- package/src/tools/Chat/public.ts +212 -0
- package/src/tools/Chat/shell/ChatRoot.tsx +326 -0
- package/src/tools/Chat/{components → shell}/EmptyState.tsx +4 -2
- package/src/tools/Chat/shell/index.ts +15 -0
- package/src/tools/Chat/types/block.ts +120 -0
- package/src/tools/Chat/types/config.ts +0 -5
- package/src/tools/Chat/types/index.ts +17 -0
- package/src/tools/Chat/types/message.ts +3 -0
- package/src/tools/Chat/utils/index.ts +4 -0
- package/src/tools/CodeEditor/README.md +4 -6
- package/src/tools/CodeEditor/components/DiffEditor.tsx +48 -13
- package/src/tools/CodeEditor/components/Editor.tsx +96 -44
- package/src/tools/CodeEditor/context/EditorProvider.tsx +34 -17
- package/src/tools/CodeEditor/hooks/useEditorTheme.ts +92 -99
- package/src/tools/CodeEditor/hooks/useMonaco.ts +37 -22
- package/src/tools/CodeEditor/lazy.tsx +6 -0
- package/src/tools/CodeEditor/lib/index.ts +1 -1
- package/src/tools/CodeEditor/lib/themes.ts +3 -39
- package/src/tools/CronScheduler/CronScheduler.client.tsx +230 -61
- package/src/tools/CronScheduler/components/CustomInput.tsx +21 -4
- package/src/tools/CronScheduler/components/DayChips.tsx +13 -11
- package/src/tools/CronScheduler/components/MonthDayGrid.tsx +4 -4
- package/src/tools/CronScheduler/components/SchedulePreview.tsx +7 -3
- package/src/tools/CronScheduler/components/TimeSelector.tsx +1 -1
- package/src/tools/CronScheduler/index.tsx +1 -1
- package/src/tools/CronScheduler/types/index.ts +8 -3
- package/src/tools/CronScheduler/utils/cron-humanize.ts +61 -16
- package/src/tools/CronScheduler/utils/cron-parser.ts +13 -4
- package/src/tools/FileIcon/FileIcon.tsx +24 -39
- package/src/tools/FileIcon/get-file-icon.ts +73 -0
- package/src/tools/FileIcon/icons/icon-data.ts +399 -0
- package/src/tools/FileIcon/index.ts +4 -0
- package/src/tools/FileIcon/loader.ts +17 -35
- package/src/tools/FileIcon/specialFolders.ts +18 -0
- package/src/tools/Gallery/components/lightbox/GalleryLightbox.tsx +112 -35
- package/src/tools/Gallery/components/media/GalleryVideo.tsx +21 -2
- package/src/tools/Gallery/components/preview/GalleryCarousel.tsx +11 -1
- package/src/tools/Gallery/hooks/usePreloadImages.ts +54 -7
- package/src/tools/ImageViewer/components/ImageInfo.tsx +12 -1
- package/src/tools/ImageViewer/components/ImageToolbar.tsx +51 -43
- package/src/tools/ImageViewer/components/ImageViewer.tsx +106 -26
- package/src/tools/ImageViewer/hooks/useImageLoading.ts +13 -0
- package/src/tools/ImageViewer/utils/constants.ts +3 -0
- package/src/tools/ImageViewer/utils/index.ts +1 -0
- package/src/tools/JsonForm/JsonSchemaForm.tsx +4 -1
- package/src/tools/JsonForm/templates/ArrayFieldTemplate.tsx +5 -3
- package/src/tools/JsonForm/templates/BaseInputTemplate.tsx +7 -4
- package/src/tools/JsonForm/templates/ErrorListTemplate.tsx +3 -1
- package/src/tools/JsonForm/templates/ObjectFieldTemplate.tsx +23 -3
- package/src/tools/JsonForm/widgets/ColorWidget.tsx +20 -12
- package/src/tools/JsonForm/widgets/NumberWidget.tsx +14 -9
- package/src/tools/JsonForm/widgets/RadioWidget.tsx +78 -0
- package/src/tools/JsonForm/widgets/SelectWidget.tsx +1 -0
- package/src/tools/JsonForm/widgets/SliderWidget.tsx +7 -4
- package/src/tools/JsonForm/widgets/TextWidget.tsx +41 -17
- package/src/tools/JsonForm/widgets/index.ts +1 -0
- package/src/tools/JsonTree/components/JsonContent.tsx +115 -40
- package/src/tools/LottiePlayer/LottiePlayer.client.tsx +177 -72
- package/src/tools/LottiePlayer/index.tsx +14 -4
- package/src/tools/LottiePlayer/lazy.tsx +11 -3
- package/src/tools/LottiePlayer/types.ts +31 -1
- package/src/tools/LottiePlayer/useLottie.ts +32 -9
- package/src/tools/LottiePlayer/usePrefersReducedMotion.ts +46 -0
- package/src/tools/Map/components/LayerSwitcher.tsx +54 -21
- package/src/tools/Map/components/MapCluster.tsx +28 -21
- package/src/tools/Map/components/MapContainer.tsx +11 -4
- package/src/tools/Map/components/MapLegend.tsx +46 -15
- package/src/tools/Map/components/MapMarker.tsx +31 -2
- package/src/tools/Map/hooks/useMapEvents.ts +64 -105
- package/src/tools/MarkdownEditor/MarkdownEditor.tsx +61 -6
- package/src/tools/MarkdownEditor/MentionList.tsx +37 -4
- package/src/tools/MarkdownEditor/createMentionSuggestion.ts +11 -0
- package/src/tools/MarkdownEditor/lazy.tsx +32 -7
- package/src/tools/MarkdownEditor/styles.css +13 -0
- package/src/tools/MarkdownMessage/CodeBlock.tsx +40 -17
- package/src/tools/MarkdownMessage/MarkdownMessage.tsx +26 -6
- package/src/tools/MarkdownMessage/components.tsx +22 -9
- package/src/tools/MarkdownMessage/types.ts +24 -1
- package/src/tools/Mermaid/Mermaid.client.tsx +27 -5
- package/src/tools/Mermaid/components/MermaidErrorPanel.tsx +31 -0
- package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +14 -17
- package/src/tools/Mermaid/hooks/useMermaidRenderer.ts +264 -168
- package/src/tools/Mermaid/hooks/useMermaidValidation.ts +76 -10
- package/src/tools/Mermaid/index.tsx +6 -0
- package/src/tools/Mermaid/utils/mermaid-helpers.ts +141 -18
- package/src/tools/OpenapiViewer/components/DocsLayout/EndpointDoc/SchemaFields/FieldRow.tsx +11 -1
- package/src/tools/OpenapiViewer/components/DocsLayout/EndpointDoc/SchemaFields/buildTree.ts +49 -20
- package/src/tools/OpenapiViewer/components/DocsLayout/EndpointDoc/index.tsx +7 -0
- package/src/tools/OpenapiViewer/components/DocsLayout/grouping.ts +7 -4
- package/src/tools/OpenapiViewer/constants.ts +3 -0
- package/src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts +73 -11
- package/src/tools/OpenapiViewer/utils/schemaExport.ts +26 -6
- package/src/tools/PrettyCode/PrettyCode.client.tsx +23 -16
- package/src/tools/PrettyCode/lazy.tsx +1 -1
- package/src/tools/SpeechRecognition/README.md +1 -1
- package/src/tools/SpeechRecognition/__tests__/language.test.ts +9 -3
- package/src/tools/SpeechRecognition/components/RecordingPulse.tsx +59 -0
- package/src/tools/SpeechRecognition/components/index.ts +2 -0
- package/src/tools/SpeechRecognition/core/engine/external.ts +24 -7
- package/src/tools/SpeechRecognition/core/language.ts +23 -6
- package/src/tools/SpeechRecognition/hooks/usePushToTalk.ts +36 -5
- package/src/tools/SpeechRecognition/hooks/useSpeechRecognition.ts +18 -11
- package/src/tools/SpeechRecognition/widgets/VoiceComposerSlot.tsx +94 -26
- package/src/tools/SpeechRecognition/widgets/index.ts +1 -1
- package/src/tools/Tree/README.md +4 -8
- package/src/tools/Tree/TreeRoot.tsx +22 -10
- package/src/tools/Tree/components/TreeContent.tsx +24 -4
- package/src/tools/Tree/components/TreeLabel.tsx +8 -2
- package/src/tools/Tree/components/TreeRow.tsx +16 -6
- package/src/tools/Tree/data/flatten.ts +10 -4
- package/src/tools/Tree/types.ts +4 -0
- package/src/tools/Uploader/components/UploadAddButton.tsx +29 -6
- package/src/tools/Uploader/components/UploadDropzone.tsx +63 -7
- package/src/tools/Uploader/components/UploadPageDropOverlay.tsx +19 -5
- package/src/tools/Uploader/components/UploadPreviewItem.tsx +47 -17
- package/src/tools/Uploader/components/UploadPreviewList.tsx +24 -12
- package/src/tools/Uploader/utils/formatters.ts +8 -3
- package/src/tools/VideoPlayer/README.md +87 -230
- package/src/tools/VideoPlayer/VideoPlayer.tsx +82 -0
- package/src/tools/VideoPlayer/canvas/canvas-dispatcher.tsx +34 -0
- package/src/tools/VideoPlayer/canvas/hls-canvas.tsx +39 -0
- package/src/tools/VideoPlayer/canvas/iframe-canvas.tsx +33 -0
- package/src/tools/VideoPlayer/canvas/index.ts +12 -0
- package/src/tools/VideoPlayer/canvas/jsx-augmentation.ts +47 -0
- package/src/tools/VideoPlayer/canvas/native-canvas.tsx +38 -0
- package/src/tools/VideoPlayer/canvas/vimeo-canvas.tsx +40 -0
- package/src/tools/VideoPlayer/canvas/youtube-canvas.tsx +78 -0
- package/src/tools/VideoPlayer/index.ts +51 -65
- package/src/tools/VideoPlayer/lazy.tsx +11 -54
- package/src/tools/VideoPlayer/parts/controls-bar.tsx +35 -0
- package/src/tools/VideoPlayer/parts/fullscreen.tsx +19 -0
- package/src/tools/VideoPlayer/parts/index.ts +15 -0
- package/src/tools/VideoPlayer/parts/pip.tsx +19 -0
- package/src/tools/VideoPlayer/parts/play-button.tsx +19 -0
- package/src/tools/VideoPlayer/parts/playback-rate.tsx +31 -0
- package/src/tools/VideoPlayer/parts/poster.tsx +3 -0
- package/src/tools/VideoPlayer/parts/seek-bar.tsx +26 -0
- package/src/tools/VideoPlayer/parts/volume.tsx +32 -0
- package/src/tools/VideoPlayer/styles/video-player.css +141 -0
- package/src/tools/VideoPlayer/types.ts +82 -0
- package/src/tools/VideoPlayer/utils/parse-embed-url.ts +70 -0
- package/src/tools/VideoPlayer/utils/vimeo-id.ts +24 -0
- package/src/tools/VideoPlayer/utils/youtube-id.ts +64 -0
- package/src/tools/index.ts +37 -29
- package/src/tools/Chat/components/AudioToggle.tsx +0 -78
- package/src/tools/Chat/components/ChatRoot.tsx +0 -305
- package/src/tools/Chat/components/Composer.tsx +0 -216
- package/src/tools/Chat/hooks/useChatScroll.ts +0 -145
- package/src/tools/Chat/types.ts +0 -9
- package/src/tools/JsonTree/components/JsonToolbar.tsx +0 -95
- package/src/tools/JsonTree/hooks/useElementCorner.ts +0 -84
- package/src/tools/JsonTree/hooks/useNavbarHeight.ts +0 -83
- package/src/tools/OpenapiViewer/components/DocsLayout/schemaFields.ts +0 -121
- package/src/tools/Tour/README.md +0 -373
- package/src/tools/Tour/components/Tour.tsx +0 -12
- package/src/tools/Tour/components/TourContent.tsx +0 -171
- package/src/tools/Tour/components/TourNavigation.tsx +0 -77
- package/src/tools/Tour/components/TourProgress.tsx +0 -88
- package/src/tools/Tour/components/TourSpotlight.tsx +0 -199
- package/src/tools/Tour/components/index.ts +0 -5
- package/src/tools/Tour/context/TourContext.ts +0 -19
- package/src/tools/Tour/context/TourProvider.tsx +0 -292
- package/src/tools/Tour/context/index.ts +0 -2
- package/src/tools/Tour/hooks/index.ts +0 -3
- package/src/tools/Tour/hooks/useKeyboardNavigation.ts +0 -59
- package/src/tools/Tour/hooks/useStepTarget.ts +0 -121
- package/src/tools/Tour/hooks/useTour.ts +0 -42
- package/src/tools/Tour/index.ts +0 -38
- package/src/tools/Tour/types/index.ts +0 -224
- package/src/tools/Tour/utils/dom.ts +0 -98
- package/src/tools/Tour/utils/index.ts +0 -3
- package/src/tools/Tour/utils/logger.ts +0 -3
- package/src/tools/Tour/utils/scrollIntoView.ts +0 -24
- package/src/tools/VideoPlayer/components/VideoControls.tsx +0 -138
- package/src/tools/VideoPlayer/components/VideoErrorFallback.tsx +0 -172
- package/src/tools/VideoPlayer/components/VideoPlayer.tsx +0 -201
- package/src/tools/VideoPlayer/components/index.ts +0 -14
- package/src/tools/VideoPlayer/context/VideoPlayerContext.tsx +0 -52
- package/src/tools/VideoPlayer/context/index.ts +0 -8
- package/src/tools/VideoPlayer/hooks/index.ts +0 -12
- package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +0 -71
- package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +0 -117
- package/src/tools/VideoPlayer/providers/NativeProvider.tsx +0 -284
- package/src/tools/VideoPlayer/providers/StreamProvider.tsx +0 -505
- package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +0 -397
- package/src/tools/VideoPlayer/providers/index.ts +0 -8
- package/src/tools/VideoPlayer/types/index.ts +0 -38
- package/src/tools/VideoPlayer/types/player.ts +0 -116
- package/src/tools/VideoPlayer/types/provider.ts +0 -93
- package/src/tools/VideoPlayer/types/sources.ts +0 -97
- package/src/tools/VideoPlayer/utils/debug.ts +0 -14
- package/src/tools/VideoPlayer/utils/fileSource.ts +0 -78
- package/src/tools/VideoPlayer/utils/index.ts +0 -12
- package/src/tools/VideoPlayer/utils/resolvers.ts +0 -75
- /package/src/tools/Chat/{config.ts → constants.ts} +0 -0
- /package/src/tools/Chat/launcher/{ChatHeaderAudioToggle.tsx → header/ChatHeaderAudioToggle.tsx} +0 -0
- /package/src/tools/Chat/{components → messages}/Attachments.tsx +0 -0
- /package/src/tools/Chat/{components → messages}/JumpToLatest.tsx +0 -0
- /package/src/tools/Chat/{components → messages}/MessageActions.tsx +0 -0
- /package/src/tools/Chat/{components → messages}/Sources.tsx +0 -0
- /package/src/tools/Chat/{components → messages}/StreamingIndicator.tsx +0 -0
- /package/src/tools/Chat/{components → messages}/ToolCalls.tsx +0 -0
- /package/src/tools/Chat/{components → shell}/ErrorBanner.tsx +0 -0
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { ChevronDown, ChevronUp, Download } from 'lucide-react';
|
|
4
|
-
import React, { memo } from 'react';
|
|
5
|
-
|
|
6
|
-
import { Button, CopyButton } from '@djangocfg/ui-core/components';
|
|
7
|
-
|
|
8
|
-
interface JsonToolbarProps {
|
|
9
|
-
/** Viewport right coordinate (distance from right edge) for fixed positioning */
|
|
10
|
-
right: number;
|
|
11
|
-
/** Bottom edge of the container in viewport coords */
|
|
12
|
-
bottom: number;
|
|
13
|
-
/** Top edge — used only to detect if block is fully off-screen */
|
|
14
|
-
top: number;
|
|
15
|
-
isExpanded: boolean;
|
|
16
|
-
onToggleExpand: () => void;
|
|
17
|
-
jsonString: string;
|
|
18
|
-
onDownload: () => void;
|
|
19
|
-
showExpandControls: boolean;
|
|
20
|
-
showActionButtons: boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';
|
|
24
|
-
const TOOLBAR_H = 24 + 8 + 8;
|
|
25
|
-
const OFFSET = 8;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* JsonToolbar — floating toolbar for JsonTree.
|
|
29
|
-
*
|
|
30
|
-
* Memoised: re-renders only when any prop changes. Position props
|
|
31
|
-
* (`top`, `right`, `bottom`) are primitives, so default shallow
|
|
32
|
-
* comparison is sufficient.
|
|
33
|
-
*/
|
|
34
|
-
const JsonToolbar = memo(({
|
|
35
|
-
top,
|
|
36
|
-
right,
|
|
37
|
-
bottom,
|
|
38
|
-
isExpanded,
|
|
39
|
-
onToggleExpand,
|
|
40
|
-
jsonString,
|
|
41
|
-
onDownload,
|
|
42
|
-
showExpandControls,
|
|
43
|
-
showActionButtons,
|
|
44
|
-
}: JsonToolbarProps) => {
|
|
45
|
-
const viewportHeight = window.visualViewport?.height ?? document.documentElement.clientHeight;
|
|
46
|
-
|
|
47
|
-
// Hide when block is fully above or below viewport
|
|
48
|
-
if (bottom <= 0 || top >= viewportHeight) return null;
|
|
49
|
-
// Hide when block is too small to fit toolbar
|
|
50
|
-
if (bottom - top < TOOLBAR_H) return null;
|
|
51
|
-
|
|
52
|
-
// Anchor to bottom-right of block, clamped so toolbar stays in viewport
|
|
53
|
-
const toolbarBottom = Math.min(bottom - OFFSET, viewportHeight - OFFSET);
|
|
54
|
-
|
|
55
|
-
return (
|
|
56
|
-
<div
|
|
57
|
-
className="flex items-center gap-1"
|
|
58
|
-
style={{ position: 'fixed', bottom: viewportHeight - toolbarBottom, right: right + OFFSET, zIndex: 30 }}
|
|
59
|
-
>
|
|
60
|
-
{showExpandControls && (
|
|
61
|
-
<Button
|
|
62
|
-
variant="ghost"
|
|
63
|
-
size="icon"
|
|
64
|
-
onClick={onToggleExpand}
|
|
65
|
-
className={BUTTON_CLASS}
|
|
66
|
-
title={isExpanded ? 'Collapse All' : 'Expand All'}
|
|
67
|
-
>
|
|
68
|
-
{isExpanded ? <ChevronUp className="h-3 w-3" /> : <ChevronDown className="h-3 w-3" />}
|
|
69
|
-
</Button>
|
|
70
|
-
)}
|
|
71
|
-
|
|
72
|
-
{showActionButtons && (
|
|
73
|
-
<>
|
|
74
|
-
<CopyButton
|
|
75
|
-
value={jsonString}
|
|
76
|
-
variant="ghost"
|
|
77
|
-
size="icon"
|
|
78
|
-
className={BUTTON_CLASS}
|
|
79
|
-
iconClassName="h-3 w-3"
|
|
80
|
-
title="Copy JSON"
|
|
81
|
-
/>
|
|
82
|
-
<Button
|
|
83
|
-
variant="ghost"
|
|
84
|
-
size="icon"
|
|
85
|
-
onClick={onDownload}
|
|
86
|
-
className={BUTTON_CLASS}
|
|
87
|
-
title="Download JSON"
|
|
88
|
-
>
|
|
89
|
-
<Download className="h-3 w-3" />
|
|
90
|
-
</Button>
|
|
91
|
-
</>
|
|
92
|
-
)}
|
|
93
|
-
</div>
|
|
94
|
-
);
|
|
95
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useEffect, useRef, useState } from 'react';
|
|
4
|
-
|
|
5
|
-
interface Corner {
|
|
6
|
-
top: number;
|
|
7
|
-
right: number;
|
|
8
|
-
bottom: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Tracks the top-right corner of a referenced element in viewport coordinates.
|
|
13
|
-
* Returns { top, right } in px — ready for `position: fixed` toolbar placement.
|
|
14
|
-
*
|
|
15
|
-
* Uses `visualViewport` for accurate viewport width — correctly handles:
|
|
16
|
-
* - DevTools panel open (docked left/right/bottom)
|
|
17
|
-
* - Browser zoom
|
|
18
|
-
* - Mobile virtual keyboard / pinch-zoom
|
|
19
|
-
* - Scrollbars
|
|
20
|
-
*
|
|
21
|
-
* Falls back to `document.documentElement.clientWidth` (excludes scrollbars,
|
|
22
|
-
* matches `position: fixed` coordinate space) when visualViewport is unavailable.
|
|
23
|
-
*
|
|
24
|
-
* Updates on:
|
|
25
|
-
* - Any ancestor scroll (capture phase)
|
|
26
|
-
* - visualViewport resize/scroll
|
|
27
|
-
* - ResizeObserver on the element itself
|
|
28
|
-
*/
|
|
29
|
-
export function useElementCorner(ref: React.RefObject<HTMLElement | null>) {
|
|
30
|
-
const [corner, setCorner] = useState<Corner | null>(null);
|
|
31
|
-
const updateRef = useRef<() => void>(() => {});
|
|
32
|
-
|
|
33
|
-
updateRef.current = () => {
|
|
34
|
-
if (!ref.current) return;
|
|
35
|
-
const rect = ref.current.getBoundingClientRect();
|
|
36
|
-
|
|
37
|
-
// `position: fixed` is relative to the layout viewport (document.documentElement.clientWidth),
|
|
38
|
-
// NOT window.innerWidth (which includes scrollbar gutter).
|
|
39
|
-
// visualViewport.width is the visible area — same as layout viewport when no zoom/keyboard.
|
|
40
|
-
const viewportWidth =
|
|
41
|
-
window.visualViewport?.width ?? document.documentElement.clientWidth;
|
|
42
|
-
|
|
43
|
-
setCorner({
|
|
44
|
-
top: rect.top,
|
|
45
|
-
right: viewportWidth - rect.right,
|
|
46
|
-
bottom: rect.bottom,
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
const handler = () => updateRef.current();
|
|
52
|
-
|
|
53
|
-
handler();
|
|
54
|
-
|
|
55
|
-
// Element size changes
|
|
56
|
-
const ro = new ResizeObserver(handler);
|
|
57
|
-
if (ref.current) ro.observe(ref.current);
|
|
58
|
-
|
|
59
|
-
// Any ancestor scroll (capture catches all, including overflow:auto containers)
|
|
60
|
-
window.addEventListener('scroll', handler, { capture: true, passive: true });
|
|
61
|
-
|
|
62
|
-
// visualViewport handles: DevTools resize, browser zoom, mobile keyboard
|
|
63
|
-
const vv = window.visualViewport;
|
|
64
|
-
if (vv) {
|
|
65
|
-
vv.addEventListener('resize', handler);
|
|
66
|
-
vv.addEventListener('scroll', handler);
|
|
67
|
-
} else {
|
|
68
|
-
window.addEventListener('resize', handler, { passive: true });
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return () => {
|
|
72
|
-
ro.disconnect();
|
|
73
|
-
window.removeEventListener('scroll', handler, { capture: true });
|
|
74
|
-
if (vv) {
|
|
75
|
-
vv.removeEventListener('resize', handler);
|
|
76
|
-
vv.removeEventListener('scroll', handler);
|
|
77
|
-
} else {
|
|
78
|
-
window.removeEventListener('resize', handler);
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
}, [ref]);
|
|
82
|
-
|
|
83
|
-
return corner;
|
|
84
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useEffect, useRef, useState } from 'react';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Detects the height of any element covering the top of the viewport.
|
|
7
|
-
*
|
|
8
|
-
* Strategy: uses elementFromPoint() along the top of the viewport to find
|
|
9
|
-
* whatever is actually rendered there — fixed, sticky, or in-flow elements.
|
|
10
|
-
* Walks up the DOM from the hit element to find the topmost covering block.
|
|
11
|
-
*
|
|
12
|
-
* Performance:
|
|
13
|
-
* - Samples a few x-points across the viewport top (not the whole width)
|
|
14
|
-
* - Throttled with requestAnimationFrame
|
|
15
|
-
* - Only re-runs on resize (navbars rarely change height on scroll)
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const SAMPLE_POINTS = 5; // how many x positions to probe across viewport
|
|
19
|
-
|
|
20
|
-
function measureNavbarHeight(): number {
|
|
21
|
-
const vv = window.visualViewport;
|
|
22
|
-
const viewportWidth = vv?.width ?? document.documentElement.clientWidth;
|
|
23
|
-
|
|
24
|
-
let maxBottom = 0;
|
|
25
|
-
|
|
26
|
-
for (let i = 0; i < SAMPLE_POINTS; i++) {
|
|
27
|
-
const x = (viewportWidth / (SAMPLE_POINTS + 1)) * (i + 1);
|
|
28
|
-
|
|
29
|
-
// Probe just below the very top — y=1 to avoid hitting browser chrome
|
|
30
|
-
const el = document.elementFromPoint(x, 1);
|
|
31
|
-
if (!el || el === document.documentElement || el === document.body) continue;
|
|
32
|
-
|
|
33
|
-
const rect = el.getBoundingClientRect();
|
|
34
|
-
// Only count elements that are anchored at the very top (top ≤ 2px)
|
|
35
|
-
if (rect.top <= 2 && rect.bottom > maxBottom) {
|
|
36
|
-
maxBottom = rect.bottom;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return maxBottom;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function useNavbarHeight(): number {
|
|
44
|
-
const [height, setHeight] = useState(0);
|
|
45
|
-
const rafRef = useRef<number | null>(null);
|
|
46
|
-
|
|
47
|
-
const scheduleUpdate = () => {
|
|
48
|
-
if (rafRef.current !== null) return;
|
|
49
|
-
rafRef.current = requestAnimationFrame(() => {
|
|
50
|
-
rafRef.current = null;
|
|
51
|
-
setHeight(measureNavbarHeight());
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
// Initial measure after first paint
|
|
57
|
-
scheduleUpdate();
|
|
58
|
-
|
|
59
|
-
// Navbars can change height on resize (mobile keyboard, orientation)
|
|
60
|
-
const vv = window.visualViewport;
|
|
61
|
-
if (vv) {
|
|
62
|
-
vv.addEventListener('resize', scheduleUpdate);
|
|
63
|
-
} else {
|
|
64
|
-
window.addEventListener('resize', scheduleUpdate, { passive: true });
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Watch for navbar being added/removed from DOM
|
|
68
|
-
const mo = new MutationObserver(scheduleUpdate);
|
|
69
|
-
mo.observe(document.body, { childList: true, subtree: false });
|
|
70
|
-
|
|
71
|
-
return () => {
|
|
72
|
-
if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);
|
|
73
|
-
if (vv) {
|
|
74
|
-
vv.removeEventListener('resize', scheduleUpdate);
|
|
75
|
-
} else {
|
|
76
|
-
window.removeEventListener('resize', scheduleUpdate);
|
|
77
|
-
}
|
|
78
|
-
mo.disconnect();
|
|
79
|
-
};
|
|
80
|
-
}, []);
|
|
81
|
-
|
|
82
|
-
return height;
|
|
83
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Flatten a JSON Schema node into a flat list of (name, type, required,
|
|
3
|
-
* description) rows, ready to feed into the existing parameter table.
|
|
4
|
-
*
|
|
5
|
-
* Rules:
|
|
6
|
-
* - ``type: object`` → one row per property.
|
|
7
|
-
* - ``type: array`` → recurse into items; prefix each row with ``[].``
|
|
8
|
-
* so the caller sees "[].username string" etc.
|
|
9
|
-
* - Nested objects → dot-joined path: ``category.name``. We expand
|
|
10
|
-
* one level; deeper graphs get a single summary
|
|
11
|
-
* row ("category.* (object)") to keep the table
|
|
12
|
-
* readable.
|
|
13
|
-
*
|
|
14
|
-
* This is a presentation helper — not a full form generator. It powers
|
|
15
|
-
* the read-only fields table shown in the docs longread.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
type JsonSchemaNode = Record<string, unknown> & {
|
|
19
|
-
type?: string;
|
|
20
|
-
properties?: Record<string, JsonSchemaNode>;
|
|
21
|
-
required?: string[];
|
|
22
|
-
items?: JsonSchemaNode;
|
|
23
|
-
enum?: unknown[];
|
|
24
|
-
description?: string;
|
|
25
|
-
format?: string;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export interface SchemaField {
|
|
29
|
-
name: string;
|
|
30
|
-
type: string;
|
|
31
|
-
required: boolean;
|
|
32
|
-
description?: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const MAX_DEPTH = 2;
|
|
36
|
-
|
|
37
|
-
function describeType(node: JsonSchemaNode): string {
|
|
38
|
-
if (!node.type && node.properties) return 'object';
|
|
39
|
-
const base = node.type || 'any';
|
|
40
|
-
if (base === 'array') {
|
|
41
|
-
const itemType = node.items ? describeType(node.items) : 'any';
|
|
42
|
-
return `array<${itemType}>`;
|
|
43
|
-
}
|
|
44
|
-
if (Array.isArray(node.enum) && node.enum.length > 0) {
|
|
45
|
-
return `${base} enum`;
|
|
46
|
-
}
|
|
47
|
-
if (node.format) return `${base} (${node.format})`;
|
|
48
|
-
return base;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function schemaToFields(
|
|
52
|
-
schema: JsonSchemaNode | undefined,
|
|
53
|
-
prefix = '',
|
|
54
|
-
depth = 0,
|
|
55
|
-
): SchemaField[] {
|
|
56
|
-
if (!schema || depth > MAX_DEPTH) return [];
|
|
57
|
-
|
|
58
|
-
// Unwrap arrays: show the inner item's fields, prefixed with ``[]``.
|
|
59
|
-
if (schema.type === 'array') {
|
|
60
|
-
if (!schema.items) {
|
|
61
|
-
return [{ name: prefix || '[]', type: 'array', required: false }];
|
|
62
|
-
}
|
|
63
|
-
const inner = schemaToFields(schema.items, prefix ? `${prefix}[]` : '[]', depth);
|
|
64
|
-
if (inner.length === 0) {
|
|
65
|
-
return [
|
|
66
|
-
{
|
|
67
|
-
name: prefix || '[]',
|
|
68
|
-
type: describeType(schema),
|
|
69
|
-
required: false,
|
|
70
|
-
description: schema.description,
|
|
71
|
-
},
|
|
72
|
-
];
|
|
73
|
-
}
|
|
74
|
-
return inner;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Primitives and unknown — single row.
|
|
78
|
-
if (schema.type !== 'object' && !schema.properties) {
|
|
79
|
-
return [
|
|
80
|
-
{
|
|
81
|
-
name: prefix || '(body)',
|
|
82
|
-
type: describeType(schema),
|
|
83
|
-
required: false,
|
|
84
|
-
description: schema.description,
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Objects — one row per property, recurse for nested objects/arrays.
|
|
90
|
-
const required = new Set(schema.required ?? []);
|
|
91
|
-
const rows: SchemaField[] = [];
|
|
92
|
-
const props = schema.properties ?? {};
|
|
93
|
-
for (const [key, node] of Object.entries(props)) {
|
|
94
|
-
const fullName = prefix ? `${prefix}.${key}` : key;
|
|
95
|
-
const isRequired = required.has(key);
|
|
96
|
-
|
|
97
|
-
const isNestedExpandable =
|
|
98
|
-
(node.type === 'object' && node.properties) ||
|
|
99
|
-
(node.type === 'array' && node.items);
|
|
100
|
-
|
|
101
|
-
if (isNestedExpandable && depth < MAX_DEPTH) {
|
|
102
|
-
// Leaf summary row for the parent itself (so the user sees
|
|
103
|
-
// its description) + recurse for inner fields.
|
|
104
|
-
rows.push({
|
|
105
|
-
name: fullName,
|
|
106
|
-
type: describeType(node),
|
|
107
|
-
required: isRequired,
|
|
108
|
-
description: node.description,
|
|
109
|
-
});
|
|
110
|
-
rows.push(...schemaToFields(node, fullName, depth + 1));
|
|
111
|
-
} else {
|
|
112
|
-
rows.push({
|
|
113
|
-
name: fullName,
|
|
114
|
-
type: describeType(node),
|
|
115
|
-
required: isRequired,
|
|
116
|
-
description: node.description,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return rows;
|
|
121
|
-
}
|