@djangocfg/ui-tools 2.1.407 → 2.1.409
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 -10
- 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 +8 -13
- 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/parts/Meta/TimeDisplay.tsx +2 -5
- package/src/tools/Chat/README.md +277 -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 +345 -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 +96 -24
- 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/canvas/hls-canvas.tsx +1 -0
- package/src/tools/VideoPlayer/canvas/{jsx.d.ts → jsx-augmentation.ts} +12 -19
- package/src/tools/VideoPlayer/canvas/vimeo-canvas.tsx +1 -0
- package/src/tools/VideoPlayer/canvas/youtube-canvas.tsx +1 -0
- package/src/tools/VideoPlayer/parts/fullscreen.tsx +1 -1
- package/src/tools/VideoPlayer/parts/pip.tsx +1 -1
- package/src/tools/VideoPlayer/parts/playback-rate.tsx +1 -1
- package/src/tools/VideoPlayer/parts/seek-bar.tsx +2 -2
- package/src/tools/VideoPlayer/parts/volume.tsx +2 -2
- package/src/tools/index.ts +2 -1
- 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/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
package/dist/tree/index.mjs
CHANGED
|
@@ -43,8 +43,9 @@ function flattenTree({
|
|
|
43
43
|
}) {
|
|
44
44
|
const out = [];
|
|
45
45
|
const walk = /* @__PURE__ */ __name((nodes, level, parentId) => {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
const visible = filterNode ? nodes.filter(filterNode) : nodes;
|
|
47
|
+
const setSize = visible.length;
|
|
48
|
+
visible.forEach((node, index) => {
|
|
48
49
|
const isFolder = isNodeFolder(node);
|
|
49
50
|
const isExpanded = expandedIds.has(node.id);
|
|
50
51
|
const resolved = isFolder ? resolveChildren(cache, node) : { children: [], status: "loaded" };
|
|
@@ -55,12 +56,14 @@ function flattenTree({
|
|
|
55
56
|
isFolder,
|
|
56
57
|
isExpanded,
|
|
57
58
|
isLoading: resolved.status === "loading",
|
|
58
|
-
hasError: resolved.status === "error"
|
|
59
|
+
hasError: resolved.status === "error",
|
|
60
|
+
posInSet: index + 1,
|
|
61
|
+
setSize
|
|
59
62
|
});
|
|
60
63
|
if (isFolder && isExpanded && resolved.children) {
|
|
61
64
|
walk(resolved.children, level + 1, node.id);
|
|
62
65
|
}
|
|
63
|
-
}
|
|
66
|
+
});
|
|
64
67
|
}, "walk");
|
|
65
68
|
walk(roots, 0, null);
|
|
66
69
|
return out;
|
|
@@ -623,10 +626,10 @@ function TreeLabelRaw({ children, isMatchingSearch, className }) {
|
|
|
623
626
|
return /* @__PURE__ */ jsx(
|
|
624
627
|
"span",
|
|
625
628
|
{
|
|
626
|
-
style: { fontSize: "var(--tree-font-size)" },
|
|
629
|
+
style: { fontSize: "var(--tree-font-size)", color: "var(--foreground)" },
|
|
627
630
|
className: cn(
|
|
628
631
|
"truncate leading-tight tracking-[-0.005em]",
|
|
629
|
-
isMatchingSearch && "font-medium
|
|
632
|
+
isMatchingSearch && "font-medium",
|
|
630
633
|
className
|
|
631
634
|
),
|
|
632
635
|
children
|
|
@@ -645,6 +648,7 @@ function TreeRowRaw({ row, className }) {
|
|
|
645
648
|
focused,
|
|
646
649
|
matchingIds,
|
|
647
650
|
select,
|
|
651
|
+
setSelectedIds,
|
|
648
652
|
toggle,
|
|
649
653
|
setFocus,
|
|
650
654
|
activate,
|
|
@@ -654,10 +658,11 @@ function TreeRowRaw({ row, className }) {
|
|
|
654
658
|
renderActions,
|
|
655
659
|
renderContextMenu
|
|
656
660
|
} = ctx;
|
|
657
|
-
const { node, level, isFolder, isExpanded, isLoading } = row;
|
|
661
|
+
const { node, level, isFolder, isExpanded, isLoading, posInSet, setSize } = row;
|
|
658
662
|
const isSelected = selected.has(node.id);
|
|
659
663
|
const isFocused = focused === node.id;
|
|
660
664
|
const isMatchingSearch = matchingIds.has(node.id);
|
|
665
|
+
const isMultiSelect = ctx.selectionMode === "multiple";
|
|
661
666
|
const slot = {
|
|
662
667
|
node,
|
|
663
668
|
level,
|
|
@@ -671,7 +676,11 @@ function TreeRowRaw({ row, className }) {
|
|
|
671
676
|
const handleClick = /* @__PURE__ */ __name((e) => {
|
|
672
677
|
if (node.disabled) return;
|
|
673
678
|
setFocus(node.id);
|
|
674
|
-
|
|
679
|
+
if (isMultiSelect && !(e.metaKey || e.ctrlKey)) {
|
|
680
|
+
setSelectedIds([node.id]);
|
|
681
|
+
} else {
|
|
682
|
+
select(node.id);
|
|
683
|
+
}
|
|
675
684
|
if (isFolder) {
|
|
676
685
|
toggle(node.id);
|
|
677
686
|
} else if (activationMode === "single-click") {
|
|
@@ -679,7 +688,6 @@ function TreeRowRaw({ row, className }) {
|
|
|
679
688
|
} else if (activationMode === "single-click-preview") {
|
|
680
689
|
activate(node, { preview: true });
|
|
681
690
|
}
|
|
682
|
-
e.currentTarget.scrollIntoView?.({ block: "nearest" });
|
|
683
691
|
}, "handleClick");
|
|
684
692
|
const handleDoubleClick = /* @__PURE__ */ __name(() => {
|
|
685
693
|
if (node.disabled) return;
|
|
@@ -689,11 +697,13 @@ function TreeRowRaw({ row, className }) {
|
|
|
689
697
|
const trigger = /* @__PURE__ */ jsxs(
|
|
690
698
|
"div",
|
|
691
699
|
{
|
|
700
|
+
id: treeRowDomId(node.id),
|
|
692
701
|
role: "treeitem",
|
|
693
702
|
"aria-level": level + 1,
|
|
703
|
+
"aria-posinset": posInSet,
|
|
704
|
+
"aria-setsize": setSize,
|
|
694
705
|
"aria-expanded": isFolder ? isExpanded : void 0,
|
|
695
|
-
"aria-selected":
|
|
696
|
-
"aria-current": isSelected ? "true" : void 0,
|
|
706
|
+
"aria-selected": ctx.selectionMode === "none" ? void 0 : isSelected,
|
|
697
707
|
"aria-disabled": node.disabled || void 0,
|
|
698
708
|
"data-tree-row": "",
|
|
699
709
|
"data-id": node.id,
|
|
@@ -702,7 +712,7 @@ function TreeRowRaw({ row, className }) {
|
|
|
702
712
|
"data-focused": isFocused && !isSelected ? "true" : void 0,
|
|
703
713
|
"data-folder": isFolder || void 0,
|
|
704
714
|
"data-expanded": isExpanded || void 0,
|
|
705
|
-
tabIndex:
|
|
715
|
+
tabIndex: -1,
|
|
706
716
|
style: {
|
|
707
717
|
paddingLeft: 6 + level * appearance.indent,
|
|
708
718
|
height: "var(--tree-row-height)",
|
|
@@ -783,16 +793,24 @@ function TreeEmpty({ children, className }) {
|
|
|
783
793
|
);
|
|
784
794
|
}
|
|
785
795
|
__name(TreeEmpty, "TreeEmpty");
|
|
786
|
-
|
|
787
|
-
|
|
796
|
+
var treeRowDomId = /* @__PURE__ */ __name((id) => `tree-row-${id}`, "treeRowDomId");
|
|
797
|
+
function TreeContent({
|
|
798
|
+
children,
|
|
799
|
+
className,
|
|
800
|
+
ariaLabel,
|
|
801
|
+
role = "tree"
|
|
802
|
+
}) {
|
|
803
|
+
const { flatRows, labels, selected, focused, matchingIds, appearance, selectionMode } = useTreeContext();
|
|
788
804
|
if (flatRows.length === 0) {
|
|
789
805
|
return /* @__PURE__ */ jsx(TreeEmpty, { children: labels.empty });
|
|
790
806
|
}
|
|
807
|
+
const isTree = role === "tree";
|
|
791
808
|
return /* @__PURE__ */ jsx(
|
|
792
809
|
"div",
|
|
793
810
|
{
|
|
794
|
-
role
|
|
795
|
-
"aria-label": ariaLabel ?? labels.ariaLabel,
|
|
811
|
+
role,
|
|
812
|
+
"aria-label": isTree ? ariaLabel ?? labels.ariaLabel : void 0,
|
|
813
|
+
"aria-multiselectable": isTree && selectionMode === "multiple" ? true : void 0,
|
|
796
814
|
className: cn("relative flex flex-col py-1", className),
|
|
797
815
|
style: appearanceToStyle(appearance),
|
|
798
816
|
children: flatRows.map((row) => {
|
|
@@ -1231,13 +1249,17 @@ function TreeRootShell({
|
|
|
1231
1249
|
},
|
|
1232
1250
|
[keyboardRef]
|
|
1233
1251
|
);
|
|
1252
|
+
const focusedId = ctx.focused;
|
|
1253
|
+
useEffect(() => {
|
|
1254
|
+
if (!focusedId) return;
|
|
1255
|
+
const el = containerRef.current?.querySelector(
|
|
1256
|
+
`[data-tree-row][data-id="${CSS.escape(focusedId)}"]`
|
|
1257
|
+
);
|
|
1258
|
+
el?.scrollIntoView({ block: "nearest" });
|
|
1259
|
+
}, [focusedId]);
|
|
1234
1260
|
const onTypeAheadMatch = useCallback(
|
|
1235
1261
|
(id) => {
|
|
1236
1262
|
ctx.setFocus(id);
|
|
1237
|
-
const el = containerRef.current?.querySelector(
|
|
1238
|
-
`[data-tree-row][data-id="${CSS.escape(id)}"]`
|
|
1239
|
-
);
|
|
1240
|
-
el?.scrollIntoView({ block: "nearest" });
|
|
1241
1263
|
},
|
|
1242
1264
|
[ctx]
|
|
1243
1265
|
);
|
|
@@ -1253,15 +1275,20 @@ function TreeRootShell({
|
|
|
1253
1275
|
{
|
|
1254
1276
|
ref: setContainerRef,
|
|
1255
1277
|
tabIndex: 0,
|
|
1278
|
+
role: "tree",
|
|
1279
|
+
"aria-label": ctx.labels.ariaLabel,
|
|
1280
|
+
"aria-multiselectable": ctx.selectionMode === "multiple" || void 0,
|
|
1281
|
+
"aria-activedescendant": focusedId ? treeRowDomId(focusedId) : void 0,
|
|
1256
1282
|
className: cn(
|
|
1257
|
-
"group/tree flex h-full w-full flex-col gap-2 outline-none",
|
|
1283
|
+
"group/tree flex h-full w-full flex-col gap-2 rounded-sm outline-none",
|
|
1284
|
+
"focus-visible:ring-1 focus-visible:ring-ring/50",
|
|
1258
1285
|
className
|
|
1259
1286
|
),
|
|
1260
1287
|
style: { ...appearanceToStyle(ctx.appearance), ...style },
|
|
1261
1288
|
"data-tree-root": "",
|
|
1262
1289
|
children: [
|
|
1263
1290
|
enableSearch ? /* @__PURE__ */ jsx(TreeSearchInput, { className: "mx-2 mt-2" }) : null,
|
|
1264
|
-
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto px-1", children: /* @__PURE__ */ jsx(TreeContent, { children: renderRow }) })
|
|
1291
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto px-1", children: /* @__PURE__ */ jsx(TreeContent, { role: "group", children: renderRow }) })
|
|
1265
1292
|
]
|
|
1266
1293
|
}
|
|
1267
1294
|
);
|