@nextclaw/ui 0.15.26 → 0.15.27
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/CHANGELOG.md +16 -0
- package/dist/assets/{api-CK3Fro7z.js → api-a_GaOFc7.js} +4 -4
- package/dist/assets/{appearance-settings-page-zqwWO8Dy.js → appearance-settings-page-DlGXLgff.js} +1 -1
- package/dist/assets/{channels-list-page-CVCZBlCL.js → channels-list-page-BEEk4Uc9.js} +2 -2
- package/dist/assets/{chat-page-D4wehRTz.js → chat-page-DUQXXqQm.js} +1 -1
- package/dist/assets/{config-split-page-CceNFvlY.js → config-split-page-ps1Aod3g.js} +1 -1
- package/dist/assets/{confirm-dialog-CWeNYWZY.js → confirm-dialog-DJSUNG33.js} +2 -2
- package/dist/assets/desktop-update-config--zagjHic.js +1 -0
- package/dist/assets/{dist-D9xtGgdL.js → dist-BkTYNzm_.js} +1 -1
- package/dist/assets/{dist-AYxkFx2B.js → dist-DkR7_Dpl.js} +1 -1
- package/dist/assets/doc-browser-DahzJEWj.js +1 -0
- package/dist/assets/doc-browser-Q67TOGVS.js +1 -0
- package/dist/assets/{doc-browser-context-Cb7Z0j90.js → doc-browser-context-BQim8SqD.js} +1 -1
- package/dist/assets/form-actions-B2-bpFie.js +1 -0
- package/dist/assets/index-Ba_o5fu9.js +109 -0
- package/dist/assets/index-DSLK7zgR.css +1 -0
- package/dist/assets/loader-circle-DyXZU92l.js +1 -0
- package/dist/assets/mcp-marketplace-page-B0dBE5CV.js +1 -0
- package/dist/assets/mcp-marketplace-page-w8panjZG.js +9 -0
- package/dist/assets/{model-config-page-DfOLyQqR.js → model-config-page-rrhFaque.js} +1 -1
- package/dist/assets/{navigation-link-MiiyoIjH.js → navigation-link-mpHFXwRr.js} +2 -2
- package/dist/assets/plus-Dhb4KuMH.js +1 -0
- package/dist/assets/{provider-scoped-model-input-DXzjr5l0.js → provider-scoped-model-input-CFsfWEt9.js} +1 -1
- package/dist/assets/{providers-config-page-CaO8WfZH.js → providers-config-page-D-TYFZsF.js} +1 -1
- package/dist/assets/react-BlXwvOLo.js +8 -0
- package/dist/assets/{refresh-cw-a2VVeeAF.js → refresh-cw-JFuyDj_P.js} +1 -1
- package/dist/assets/remote-BwVv_Qq-.js +1 -0
- package/dist/assets/rotate-cw-DjbbiIW_.js +1 -0
- package/dist/assets/{runtime-config-page-BuA4A02z.js → runtime-config-page-Br9j9Vxe.js} +1 -1
- package/dist/assets/{save-CGm23Yww.js → save-BL8P8CLX.js} +1 -1
- package/dist/assets/{search-CH2t--sH.js → search-bZL75Pgc.js} +1 -1
- package/dist/assets/{search-config-page-BAmYqoAz.js → search-config-page-B3fvzMd1.js} +1 -1
- package/dist/assets/{secrets-config-page-BlPOuql_.js → secrets-config-page-ClwTxtXd.js} +2 -2
- package/dist/assets/security-config-DmJw9QZA.js +1 -0
- package/dist/assets/{select-DnxxDpcV.js → select-rUZ8nIZu.js} +2 -2
- package/dist/assets/{settings-2-agnMYc8a.js → settings-2-BI4SCkxQ.js} +1 -1
- package/dist/assets/skeleton-CVmEPG43.js +1 -0
- package/dist/assets/{tag-chip-CPOc8b2N.js → tag-chip-BdI_yIOA.js} +1 -1
- package/dist/assets/x-BcEayhV6.js +1 -0
- package/dist/index.html +19 -19
- package/package.json +7 -7
- package/src/app/components/layout/app-layout.tsx +38 -2
- package/src/app/hooks/__tests__/use-app-event-consumers.test.ts +20 -0
- package/src/app/hooks/use-app-event-consumers.ts +21 -0
- package/src/app/presenters/app.presenter.ts +6 -0
- package/src/features/apps/components/__tests__/app-packages-panel.test.tsx +92 -14
- package/src/features/apps/components/__tests__/apps-panel.test.tsx +58 -0
- package/src/features/apps/components/app-artwork.tsx +49 -0
- package/src/features/apps/components/app-marketplace-catalog.tsx +332 -0
- package/src/features/apps/components/app-marketplace-cover.tsx +64 -0
- package/src/features/apps/components/app-marketplace-detail.tsx +161 -0
- package/src/features/apps/components/app-marketplace-dialog.tsx +107 -217
- package/src/features/apps/components/app-marketplace-operation.tsx +84 -0
- package/src/features/apps/components/app-package-card.tsx +201 -52
- package/src/features/apps/components/app-packages-panel.tsx +98 -26
- package/src/features/apps/components/apps-panel.tsx +28 -27
- package/src/features/apps/hooks/use-app-marketplace.test.ts +144 -0
- package/src/features/apps/hooks/use-app-marketplace.ts +55 -85
- package/src/features/apps/hooks/use-app-packages.ts +59 -4
- package/src/features/apps/index.ts +1 -0
- package/src/features/apps/managers/__tests__/app-package-operation-settlement.manager.test.ts +81 -0
- package/src/features/apps/managers/app-package-operation-settlement.manager.ts +80 -0
- package/src/features/apps/services/app-marketplace.service.ts +223 -0
- package/src/features/apps/types/app-marketplace.types.ts +75 -0
- package/src/features/chat/features/conversation/components/__tests__/session-conversation-input.streaming.test.tsx +64 -3
- package/src/features/chat/features/conversation/components/session-queued-input-rows.tsx +24 -14
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-controller.test.tsx +53 -0
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-run-queue.test.tsx +18 -0
- package/src/features/chat/features/conversation/hooks/use-chat-composer-reference-intent.ts +4 -1
- package/src/features/chat/features/conversation/hooks/use-session-conversation-controller.ts +126 -32
- package/src/features/chat/features/conversation/hooks/use-session-run-queue.ts +12 -2
- package/src/features/chat/features/input/utils/__tests__/chat-inline-token.utils.test.ts +31 -0
- package/src/features/chat/features/input/utils/chat-composer-token-protocol.utils.ts +5 -0
- package/src/features/chat/features/input/utils/chat-inline-token-composer.utils.ts +14 -0
- package/src/features/chat/features/input/utils/chat-inline-token.utils.ts +25 -0
- package/src/features/chat/features/message/hooks/use-chat-inline-token-actions.ts +8 -1
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +77 -20
- package/src/features/chat/features/workspace/components/chat-session-workspace-directory-browser.tsx +56 -50
- package/src/features/chat/features/workspace/components/project-files/workspace-directory-tree.tsx +33 -11
- package/src/features/chat/features/workspace/components/project-files/workspace-project-tree-view.tsx +93 -0
- package/src/features/chat/features/workspace/stores/__tests__/workspace-project-tree.store.test.ts +38 -0
- package/src/features/chat/features/workspace/stores/workspace-project-tree.store.ts +160 -0
- package/src/features/chat/index.ts +1 -0
- package/src/features/chat/managers/__tests__/chat-composer-intent.manager.test.ts +29 -0
- package/src/features/chat/managers/chat-composer-intent.manager.ts +29 -2
- package/src/features/chat/presenters/chat.presenter.ts +2 -2
- package/src/features/panel-apps/components/__tests__/panel-apps-list.test.tsx +1 -1
- package/src/features/panel-apps/components/panel-apps-list.tsx +1 -6
- package/src/features/right-panel-resources/utils/__tests__/right-panel-resource-uri.utils.test.ts +34 -0
- package/src/features/right-panel-resources/utils/right-panel-resource-uri.utils.ts +29 -0
- package/src/features/service-apps/components/service-apps-panel.tsx +3 -17
- package/src/platforms/desktop/components/desktop-app-shell.tsx +5 -0
- package/src/platforms/mobile/components/mobile-app-shell.tsx +9 -1
- package/src/shared/components/actions/__tests__/navigation-link.test.tsx +12 -0
- package/src/shared/components/actions/navigation-link.tsx +6 -3
- package/src/shared/components/doc-browser/__tests__/doc-browser.test.tsx +34 -0
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +5 -0
- package/src/shared/components/doc-browser/doc-browser.tsx +11 -1
- package/src/shared/components/doc-browser/managers/doc-browser.manager.ts +13 -0
- package/src/shared/components/ui/tabs.tsx +24 -1
- package/src/shared/hooks/use-server-path-watch.ts +42 -0
- package/src/shared/lib/api/server-path/server-path.types.ts +10 -0
- package/src/shared/lib/api/types.ts +3 -0
- package/src/shared/lib/api/utils/server-path.utils.ts +10 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +1 -0
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +49 -7
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +1 -0
- package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +49 -7
- package/vite.config.ts +32 -1
- package/dist/assets/desktop-update-config-Dirc3bpt.js +0 -1
- package/dist/assets/doc-browser-4Sud6dWw.js +0 -1
- package/dist/assets/doc-browser-D4x_yH5F.js +0 -1
- package/dist/assets/form-actions-B2q4jgjE.js +0 -1
- package/dist/assets/index-CdyTsSBu.css +0 -1
- package/dist/assets/index-Das_bw2h.js +0 -107
- package/dist/assets/loader-circle-CpmBdaon.js +0 -1
- package/dist/assets/mcp-marketplace-page-CdOY3Sop.js +0 -1
- package/dist/assets/mcp-marketplace-page-DvjrfqEt.js +0 -9
- package/dist/assets/plus-C8FkjpSZ.js +0 -1
- package/dist/assets/react-C8XFFvuz.js +0 -8
- package/dist/assets/remote-BJHXa4mB.js +0 -1
- package/dist/assets/rotate-cw-DJ7UF3F2.js +0 -1
- package/dist/assets/security-config-CbDiY2xr.js +0 -1
- package/dist/assets/skeleton-XpqeWL62.js +0 -1
- package/dist/assets/x-odTHAtLZ.js +0 -1
|
@@ -387,6 +387,7 @@
|
|
|
387
387
|
"chatSending": "Sending...",
|
|
388
388
|
"chatQueueSend": "Queue",
|
|
389
389
|
"chatQueuedBannerAttachmentFallback": "Attachment message",
|
|
390
|
+
"chatQueuedSubmitting": "Adding to queue…",
|
|
390
391
|
"chatQueuedEdit": "Edit queued input",
|
|
391
392
|
"chatQueuedDelete": "Delete queued input",
|
|
392
393
|
"chatDeleteSession": "Delete Session",
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"docBrowserHomeTitle": "Start Page",
|
|
18
18
|
"docBrowserCloseTab": "Close Tab",
|
|
19
19
|
"docBrowserTabUntitled": "Untitled",
|
|
20
|
+
"docBrowserTabMoreActions": "More tab actions",
|
|
21
|
+
"docBrowserAddToChat": "Add to Chat",
|
|
20
22
|
"sideDockPinCurrent": "Pin to SideDock",
|
|
21
23
|
"sideDockUnpinCurrent": "Remove from SideDock",
|
|
22
24
|
"sideDockBuiltInDocked": "Built-in shortcut",
|
|
@@ -30,26 +32,29 @@
|
|
|
30
32
|
"sideDockVisibilityDescription": "Keep the right shortcut dock visible beside the workspace.",
|
|
31
33
|
"appsTitle": "Apps",
|
|
32
34
|
"appPackagesLibraryTitle": "Your apps",
|
|
33
|
-
"appPackagesLibraryDescription": "
|
|
35
|
+
"appPackagesLibraryDescription": "Open and manage the apps in NextClaw. Installs continue in the background, and personal data stays local.",
|
|
34
36
|
"appPackagesLoading": "Loading apps…",
|
|
35
37
|
"appPackagesLoadFailed": "Failed to load apps",
|
|
36
38
|
"appPackagesRefresh": "Refresh apps",
|
|
37
|
-
"appPackagesBrowse": "
|
|
38
|
-
"appPackagesMarketplaceTitle": "
|
|
39
|
-
"appPackagesMarketplaceDescription": "
|
|
39
|
+
"appPackagesBrowse": "Add apps",
|
|
40
|
+
"appPackagesMarketplaceTitle": "Add apps",
|
|
41
|
+
"appPackagesMarketplaceDescription": "Choose apps that fit the way you use NextClaw. You can keep browsing or leave while an install continues.",
|
|
40
42
|
"appPackagesMarketplaceSearch": "Search apps, features, or tags",
|
|
41
43
|
"appPackagesMarketplaceLoading": "Loading the app marketplace…",
|
|
44
|
+
"appPackagesMarketplaceLoadMore": "Load more",
|
|
45
|
+
"appPackagesMarketplaceLoadingMore": "Loading…",
|
|
42
46
|
"appPackagesMarketplaceFailed": "The app marketplace is temporarily unavailable. You can still install from a trusted source.",
|
|
43
47
|
"appPackagesMarketplaceEmpty": "No matching apps found",
|
|
48
|
+
"appPackagesMarketplaceEmptyHint": "Try a shorter search or switch back to All.",
|
|
44
49
|
"appPackagesMarketplaceFeatured": "Featured",
|
|
45
50
|
"appPackagesMarketplaceDetails": "Details",
|
|
46
51
|
"appPackagesMarketplaceInstalled": "Installed",
|
|
47
|
-
"appPackagesMarketplaceTrustHint": "Apps
|
|
52
|
+
"appPackagesMarketplaceTrustHint": "Apps come from the official NextClaw library. Review access before installing, then disable or uninstall at any time.",
|
|
48
53
|
"appPackagesInstall": "Install app",
|
|
49
54
|
"appPackagesInstallTitle": "Install a Mini APP",
|
|
50
|
-
"appPackagesInstallDescription": "Enter a trusted .napp file, local app directory, or
|
|
55
|
+
"appPackagesInstallDescription": "Enter a trusted .napp file path, local app directory, or app ID.",
|
|
51
56
|
"appPackagesInstallSource": "Install source",
|
|
52
|
-
"appPackagesInstallPlaceholder": "File path or
|
|
57
|
+
"appPackagesInstallPlaceholder": "File path, directory, or nextclaw.example-app",
|
|
53
58
|
"appPackagesInstallTrustHint": "Only install sources you trust. Apps with a Service can run local code, and start only after you enable them.",
|
|
54
59
|
"appPackagesInstalling": "Installing…",
|
|
55
60
|
"appPackagesEmptyTitle": "No apps available yet",
|
|
@@ -68,7 +73,44 @@
|
|
|
68
73
|
"appPackagesUninstall": "Uninstall",
|
|
69
74
|
"appPackagesUninstallTitle": "Uninstall this app?",
|
|
70
75
|
"appPackagesUninstallDescription": "The app code will be removed. Personal data is kept by default so a future reinstall can continue using it.",
|
|
76
|
+
"appPackagesKeepData": "Keep personal data",
|
|
77
|
+
"appPackagesKeepDataDescription": "Remove only the app code so a future reinstall can continue with existing content.",
|
|
78
|
+
"appPackagesDeleteData": "Delete personal data too",
|
|
79
|
+
"appPackagesDeleteDataDescription": "Permanently remove data saved by this app. This cannot be undone.",
|
|
71
80
|
"appPackagesActionFailed": "App action failed",
|
|
81
|
+
"appPackagesFilterLabel": "App categories",
|
|
82
|
+
"appPackagesFilterAll": "All",
|
|
83
|
+
"appPackagesFilterPersonal": "Personal",
|
|
84
|
+
"appPackagesFilterLocal": "Local-first",
|
|
85
|
+
"appPackagesBackToMarketplace": "Back to apps",
|
|
86
|
+
"appPackagesAboutApp": "About this app",
|
|
87
|
+
"appPackagesPanelsAdded": "App views",
|
|
88
|
+
"appPackagesServicesAdded": "Local services",
|
|
89
|
+
"appPackagesNone": "None",
|
|
90
|
+
"appPackagesAccessTitle": "Access",
|
|
91
|
+
"appPackagesOpenPublicDetails": "View the public app page",
|
|
92
|
+
"appPackagesDocumentAccess": "Needs access to {count} file folder(s) you approve",
|
|
93
|
+
"appPackagesNetworkAccess": "Needs to connect to {count} network domain(s)",
|
|
94
|
+
"appPackagesHostBridgeAccess": "Uses local capabilities provided by NextClaw",
|
|
95
|
+
"appPackagesLocalStorageAccess": "Stores its own app data on this device",
|
|
96
|
+
"appPackagesNoExtraAccess": "No additional file or network access declared",
|
|
97
|
+
"appPackagesPreparing": "Preparing",
|
|
98
|
+
"appPackagesResolving": "Checking app",
|
|
99
|
+
"appPackagesDownloading": "Downloading",
|
|
100
|
+
"appPackagesVerifying": "Verifying",
|
|
101
|
+
"appPackagesFinalizing": "Finishing up",
|
|
102
|
+
"appPackagesCompleted": "Completed",
|
|
103
|
+
"appPackagesSwitchingVersion": "Switching version",
|
|
104
|
+
"appPackagesUninstalling": "Uninstalling",
|
|
105
|
+
"appPackagesRetry": "Retry",
|
|
106
|
+
"appPackagesInstallCompleted": "App installed",
|
|
107
|
+
"appPackagesUpdateCompleted": "App updated",
|
|
108
|
+
"appPackagesAlreadyCurrent": "Already up to date",
|
|
109
|
+
"appPackagesAlreadyOnVersion": "Already on this version",
|
|
110
|
+
"appPackagesUpdate": "Update",
|
|
111
|
+
"appPackagesRollbackCompleted": "App version switched",
|
|
112
|
+
"appPackagesUninstallCompleted": "App uninstalled",
|
|
113
|
+
"appPackagesNextClawRequirement": "Requires NextClaw",
|
|
72
114
|
"panelAppsTitle": "Panel Apps",
|
|
73
115
|
"panelAppsLoading": "Loading panel apps...",
|
|
74
116
|
"panelAppsLoadFailed": "Failed to load panel apps",
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"docBrowserHomeTitle": "导航页",
|
|
18
18
|
"docBrowserCloseTab": "关闭标签",
|
|
19
19
|
"docBrowserTabUntitled": "未命名",
|
|
20
|
+
"docBrowserTabMoreActions": "更多标签操作",
|
|
21
|
+
"docBrowserAddToChat": "添加到聊天",
|
|
20
22
|
"sideDockPinCurrent": "固定到快捷栏",
|
|
21
23
|
"sideDockUnpinCurrent": "从快捷栏移除",
|
|
22
24
|
"sideDockBuiltInDocked": "内置快捷入口",
|
|
@@ -30,26 +32,29 @@
|
|
|
30
32
|
"sideDockVisibilityDescription": "在工作区右侧显示快捷入口栏。",
|
|
31
33
|
"appsTitle": "应用",
|
|
32
34
|
"appPackagesLibraryTitle": "你的应用",
|
|
33
|
-
"appPackagesLibraryDescription": "
|
|
35
|
+
"appPackagesLibraryDescription": "打开和管理装进 NextClaw 的应用。安装会在后台继续,个人数据保存在本机。",
|
|
34
36
|
"appPackagesLoading": "加载应用中…",
|
|
35
37
|
"appPackagesLoadFailed": "应用加载失败",
|
|
36
38
|
"appPackagesRefresh": "刷新应用",
|
|
37
|
-
"appPackagesBrowse": "
|
|
38
|
-
"appPackagesMarketplaceTitle": "
|
|
39
|
-
"appPackagesMarketplaceDescription": "
|
|
39
|
+
"appPackagesBrowse": "添加应用",
|
|
40
|
+
"appPackagesMarketplaceTitle": "添加应用",
|
|
41
|
+
"appPackagesMarketplaceDescription": "挑选适合自己的应用。开始安装后,你可以继续浏览或直接离开这里。",
|
|
40
42
|
"appPackagesMarketplaceSearch": "搜索应用、功能或标签",
|
|
41
43
|
"appPackagesMarketplaceLoading": "正在加载应用市场…",
|
|
44
|
+
"appPackagesMarketplaceLoadMore": "加载更多",
|
|
45
|
+
"appPackagesMarketplaceLoadingMore": "正在加载…",
|
|
42
46
|
"appPackagesMarketplaceFailed": "应用市场暂时不可用,你仍可从可信来源手动安装。",
|
|
43
47
|
"appPackagesMarketplaceEmpty": "没有找到匹配的应用",
|
|
48
|
+
"appPackagesMarketplaceEmptyHint": "试试更短的关键词,或切换到“全部”。",
|
|
44
49
|
"appPackagesMarketplaceFeatured": "精选",
|
|
45
50
|
"appPackagesMarketplaceDetails": "查看详情",
|
|
46
51
|
"appPackagesMarketplaceInstalled": "已安装",
|
|
47
|
-
"appPackagesMarketplaceTrustHint": "
|
|
52
|
+
"appPackagesMarketplaceTrustHint": "应用从 NextClaw 官方应用库下载。安装前可查看访问范围,安装后可随时停用或卸载。",
|
|
48
53
|
"appPackagesInstall": "安装应用",
|
|
49
54
|
"appPackagesInstallTitle": "安装 Mini APP",
|
|
50
|
-
"appPackagesInstallDescription": "输入可信的 .napp
|
|
55
|
+
"appPackagesInstallDescription": "输入可信的 .napp 文件路径、本机应用目录或应用 ID。",
|
|
51
56
|
"appPackagesInstallSource": "安装来源",
|
|
52
|
-
"appPackagesInstallPlaceholder": "
|
|
57
|
+
"appPackagesInstallPlaceholder": "文件路径、目录或 nextclaw.example-app",
|
|
53
58
|
"appPackagesInstallTrustHint": "只安装你信任的来源。包含 Service 的应用可在本机运行代码,并仅在启用后启动。",
|
|
54
59
|
"appPackagesInstalling": "安装中…",
|
|
55
60
|
"appPackagesEmptyTitle": "还没有可用应用",
|
|
@@ -68,7 +73,44 @@
|
|
|
68
73
|
"appPackagesUninstall": "卸载",
|
|
69
74
|
"appPackagesUninstallTitle": "卸载这个应用?",
|
|
70
75
|
"appPackagesUninstallDescription": "应用代码会被移除,个人数据默认保留,之后重新安装仍可继续使用。",
|
|
76
|
+
"appPackagesKeepData": "保留个人数据",
|
|
77
|
+
"appPackagesKeepDataDescription": "只移除应用代码,重新安装后可以继续使用原有内容。",
|
|
78
|
+
"appPackagesDeleteData": "同时删除个人数据",
|
|
79
|
+
"appPackagesDeleteDataDescription": "永久移除该应用保存的数据,此操作无法撤销。",
|
|
71
80
|
"appPackagesActionFailed": "应用操作失败",
|
|
81
|
+
"appPackagesFilterLabel": "应用分类",
|
|
82
|
+
"appPackagesFilterAll": "全部",
|
|
83
|
+
"appPackagesFilterPersonal": "个人",
|
|
84
|
+
"appPackagesFilterLocal": "本地优先",
|
|
85
|
+
"appPackagesBackToMarketplace": "返回应用列表",
|
|
86
|
+
"appPackagesAboutApp": "关于这个应用",
|
|
87
|
+
"appPackagesPanelsAdded": "可打开的界面",
|
|
88
|
+
"appPackagesServicesAdded": "本机服务",
|
|
89
|
+
"appPackagesNone": "无",
|
|
90
|
+
"appPackagesAccessTitle": "访问范围",
|
|
91
|
+
"appPackagesOpenPublicDetails": "查看公开详情页",
|
|
92
|
+
"appPackagesDocumentAccess": "需要访问 {count} 个由你授权的文件目录",
|
|
93
|
+
"appPackagesNetworkAccess": "需要连接 {count} 个网络域名",
|
|
94
|
+
"appPackagesHostBridgeAccess": "需要调用 NextClaw 提供的本机能力",
|
|
95
|
+
"appPackagesLocalStorageAccess": "会在本机保存自己的应用数据",
|
|
96
|
+
"appPackagesNoExtraAccess": "没有声明额外的文件或网络访问",
|
|
97
|
+
"appPackagesPreparing": "准备中",
|
|
98
|
+
"appPackagesResolving": "正在检查应用",
|
|
99
|
+
"appPackagesDownloading": "正在下载",
|
|
100
|
+
"appPackagesVerifying": "正在校验",
|
|
101
|
+
"appPackagesFinalizing": "即将完成",
|
|
102
|
+
"appPackagesCompleted": "已完成",
|
|
103
|
+
"appPackagesSwitchingVersion": "正在切换版本",
|
|
104
|
+
"appPackagesUninstalling": "正在卸载",
|
|
105
|
+
"appPackagesRetry": "重试",
|
|
106
|
+
"appPackagesInstallCompleted": "应用已安装",
|
|
107
|
+
"appPackagesUpdateCompleted": "应用已更新",
|
|
108
|
+
"appPackagesAlreadyCurrent": "已经是最新版本",
|
|
109
|
+
"appPackagesAlreadyOnVersion": "已经在这个版本",
|
|
110
|
+
"appPackagesUpdate": "更新",
|
|
111
|
+
"appPackagesRollbackCompleted": "应用版本已切换",
|
|
112
|
+
"appPackagesUninstallCompleted": "应用已卸载",
|
|
113
|
+
"appPackagesNextClawRequirement": "需要 NextClaw",
|
|
72
114
|
"panelAppsTitle": "面板应用",
|
|
73
115
|
"panelAppsLoading": "加载面板应用中...",
|
|
74
116
|
"panelAppsLoadFailed": "面板应用加载失败",
|
package/vite.config.ts
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
import { defineConfig } from 'vite';
|
|
2
2
|
import react from '@vitejs/plugin-react';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
3
4
|
import path from 'path';
|
|
4
5
|
|
|
5
6
|
const devProxyApiBase = process.env.VITE_DEV_PROXY_API_BASE ?? 'http://127.0.0.1:18792';
|
|
6
7
|
const devProxyWsBase = devProxyApiBase.replace(/^http/i, 'ws');
|
|
8
|
+
const marketplacePreviewCovers = new Map([
|
|
9
|
+
['hello-notes', path.resolve(__dirname, '../../apps/examples/hello-notes/marketplace-assets/cover.webp')],
|
|
10
|
+
['personal-organizer', path.resolve(__dirname, '../nextclaw/resources/apps/nextclaw-personal-organizer/marketplace-assets/cover.webp')],
|
|
11
|
+
['starter-card', path.resolve(__dirname, '../../apps/examples/starter-card/marketplace-assets/cover.webp')],
|
|
12
|
+
['workspace-glance', path.resolve(__dirname, '../../apps/examples/workspace-glance/marketplace-assets/cover.webp')],
|
|
13
|
+
]);
|
|
7
14
|
|
|
8
15
|
export default defineConfig({
|
|
9
|
-
plugins: [
|
|
16
|
+
plugins: [
|
|
17
|
+
react(),
|
|
18
|
+
{
|
|
19
|
+
name: 'nextclaw-app-marketplace-preview-assets',
|
|
20
|
+
apply: 'serve',
|
|
21
|
+
configureServer(server) {
|
|
22
|
+
server.middlewares.use('/__app-marketplace-preview', async (request, response, next) => {
|
|
23
|
+
const slug = request.url?.replace(/^\//, '').replace(/\.webp(?:\?.*)?$/, '');
|
|
24
|
+
const coverPath = slug ? marketplacePreviewCovers.get(slug) : undefined;
|
|
25
|
+
if (!coverPath) {
|
|
26
|
+
next();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
response.statusCode = 200;
|
|
31
|
+
response.setHeader('Content-Type', 'image/webp');
|
|
32
|
+
response.setHeader('Cache-Control', 'no-store');
|
|
33
|
+
response.end(await readFile(coverPath));
|
|
34
|
+
} catch (error) {
|
|
35
|
+
next(error);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
],
|
|
10
41
|
resolve: {
|
|
11
42
|
alias: {
|
|
12
43
|
'@/components/auth/login-page': path.resolve(__dirname, './src/features/account/components/login-page.tsx'),
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as e,P as t,i as n,o as r,r as i}from"./react-C8XFFvuz.js";import{t as a}from"./navigation-link-MiiyoIjH.js";import{It as o,Jt as s,Kt as c,Lt as l,Mt as u,Nt as d,Pt as f,Yt as p,en as m,qt as h,sn as g}from"./api-CK3Fro7z.js";import{a as _,i as v,n as y,r as b,t as x}from"./select-DnxxDpcV.js";import{t as S}from"./refresh-cw-a2VVeeAF.js";import{t as C}from"./rotate-cw-DJ7UF3F2.js";import{_t as w,bt as T,vt as E,xt as D,yt as O}from"./index-Das_bw2h.js";var k=e(),A={checking:`desktopUpdatesStatusChecking`,"update-available":`desktopUpdatesStatusAvailable`,downloading:`desktopUpdatesStatusDownloading`,downloaded:`desktopUpdatesStatusDownloaded`,applying:`desktopUpdatesStatusApplying`,"restart-required":`desktopUpdatesStatusRestartRequired`,"up-to-date":`desktopUpdatesStatusUpToDate`,blocked:`desktopUpdatesStatusBlocked`,failed:`desktopUpdatesStatusFailed`},j={feature:`desktopUpdatesReleaseNotesFeature`,enhancement:`desktopUpdatesReleaseNotesEnhancement`,fix:`desktopUpdatesReleaseNotesFix`,compatibility:`desktopUpdatesReleaseNotesCompatibility`};function M({snapshot:e}){return(0,k.jsx)(`span`,{className:t(`inline-flex rounded-full px-3 py-1 text-xs font-medium ring-1`,V(e.status)),children:B(e)})}function N({label:e,value:t}){return(0,k.jsxs)(`div`,{className:`rounded-lg bg-background/70 p-3`,children:[(0,k.jsx)(`p`,{className:`text-[11px] font-medium uppercase tracking-[0.08em] text-muted-foreground`,children:e}),(0,k.jsx)(`p`,{className:`mt-1 text-sm font-semibold text-foreground`,children:t})]})}function P({snapshot:e}){if(e.status!==`downloading`)return null;let t=e.progress?.percent,r=t==null?n(`desktopUpdatesDownloadProgressUnknown`):n(`desktopUpdatesDownloadProgressPercent`).replace(`{percent}`,String(t)),i=L(e.progress?.downloadedBytes??0,e.progress?.totalBytes??null);return(0,k.jsxs)(`div`,{className:`rounded-2xl border border-amber-200 bg-amber-50/70 p-4`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,k.jsx)(`p`,{className:`text-sm font-semibold text-amber-800`,children:r}),(0,k.jsx)(`p`,{className:`text-xs font-medium text-amber-700`,children:i})]}),(0,k.jsx)(`div`,{className:`mt-3 h-2 overflow-hidden rounded-full bg-amber-100`,children:(0,k.jsx)(`div`,{className:`h-full rounded-full bg-amber-500 transition-[width]`,style:{width:`${t??0}%`}})})]})}function F(e){return e?.trim()||`-`}function I(e){return e?i(e):`-`}function L(e,t){let n=R(e);return t&&t>0?`${n} / ${R(t)}`:n}function R(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||r===0?n.toFixed(0):n.toFixed(1)} ${t[r]}`}function z(e){return n(e===`beta`?`desktopUpdatesChannelBeta`:`desktopUpdatesChannelStable`)}function B(e){return e.status===`failed`&&e.failureStage?n(`desktopUpdatesFailureStage.${e.failureStage}`):n(A[e.status]??`desktopUpdatesStatusIdle`)}function V(e){return e===`downloaded`||e===`restart-required`?`bg-emerald-50 text-emerald-700 ring-emerald-100`:e===`update-available`||e===`downloading`||e===`checking`?`bg-amber-50 text-amber-700 ring-amber-100`:e===`failed`||e===`blocked`?`bg-red-50 text-red-700 ring-red-100`:`bg-gray-100 text-gray-700 ring-gray-200`}function H(){return r()===`zh`?`zh-CN`:`en-US`}function U(e,t){return d(e.title,t)??n(j[e.kind]??`desktopUpdatesReleaseNotesEnhancement`)}function W({snapshot:e}){let t=f(e),r=H(),i=g({queryKey:[`runtime-release-notes`,t],queryFn:async()=>await u(t??``),enabled:!!t,retry:!1,staleTime:300*1e3}),o=i.data,s=d(o?.title,r)??n(`desktopUpdatesReleaseNotesPreviewTitle`),c=d(o?.summary,r)??n(`desktopUpdatesReleaseNotesPreviewDescription`);return e.releaseNotesUrl?(0,k.jsxs)(w,{children:[(0,k.jsx)(T,{children:(0,k.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,k.jsxs)(`div`,{className:`space-y-1`,children:[(0,k.jsx)(D,{children:s}),(0,k.jsx)(O,{children:c})]}),(0,k.jsx)(a,{href:e.releaseNotesUrl,external:!0,children:n(`desktopUpdatesReleaseNotes`)})]})}),(0,k.jsxs)(E,{className:`space-y-4`,children:[i.isLoading?(0,k.jsx)(`p`,{className:`text-sm text-gray-500`,children:n(`desktopUpdatesReleaseNotesPreviewLoading`)}):null,!t||i.isError?(0,k.jsx)(`p`,{className:`text-sm text-gray-500`,children:n(`desktopUpdatesReleaseNotesPreviewUnavailable`)}):null,o?(0,k.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:o.sections.map(e=>(0,k.jsxs)(`div`,{className:`rounded-xl border border-gray-200 bg-gray-50/60 p-4`,children:[(0,k.jsx)(`p`,{className:`text-sm font-semibold text-gray-900`,children:U(e,r)}),(0,k.jsx)(`ul`,{className:`mt-3 space-y-3`,children:e.items.map((t,n)=>{let i=d(t.title,r),a=d(t.body,r);return(0,k.jsxs)(`li`,{className:`space-y-1`,children:[i?(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-800`,children:i}):null,a?(0,k.jsx)(`p`,{className:`text-sm leading-5 text-gray-600`,children:a}):null]},`${i??e.kind}-${n}`)})})]},e.kind))}):null]})]}):null}function G(){return(0,k.jsx)(p,{title:n(`runtimeUpdatesPageTitle`),description:n(`runtimeUpdatesPageDescription`),children:(0,k.jsx)(s,{title:n(`runtimeUpdatesUnavailableTitle`),description:n(`runtimeUpdatesUnavailableDescription`),children:(0,k.jsx)(h,{children:(0,k.jsx)(`p`,{className:`p-4 text-sm text-muted-foreground`,children:n(`runtimeUpdatesUnavailableHint`)})})})})}function K(){let{supported:e,initialized:r,busyAction:i,snapshot:a}=l();if(!r)return(0,k.jsx)(p,{title:n(`runtimeUpdatesPageTitle`),description:n(`runtimeUpdatesPageDescription`),children:(0,k.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:n(`loading`)})});if(!e||!a)return(0,k.jsx)(G,{});let u=i===`checking`,d=i===`downloading`,f=i===`applying`,g=i===`updating`,w=i===`switching-channel`,T=(a.status===`update-available`||a.status===`downloaded`)&&!d&&!f&&!g,E=[[n(`runtimeUpdatesHostVersion`),F(a.hostVersion)],[n(`desktopUpdatesCurrentBundleVersion`),F(a.currentVersion)],[n(`desktopUpdatesAvailableVersion`),F(a.availableVersion)],[n(`desktopUpdatesLastCheckedAt`),I(a.lastCheckedAt)],[n(`desktopUpdatesCurrentChannel`),z(a.channel)]];return(0,k.jsxs)(p,{title:n(`runtimeUpdatesPageTitle`),description:n(`runtimeUpdatesPageDescription`),actions:(0,k.jsxs)(m,{variant:`outline`,onClick:()=>void o.checkForUpdates(),disabled:u||d||f||g,children:[(0,k.jsx)(S,{className:t(`mr-2 h-4 w-4`,u&&`animate-spin`)}),n(`desktopUpdatesCheckNow`)]}),children:[(0,k.jsx)(s,{title:n(`desktopUpdatesOverviewTitle`),description:n(`desktopUpdatesOverviewDescription`),children:(0,k.jsx)(h,{children:(0,k.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:n(`desktopUpdatesStatusLabel`)}),(0,k.jsx)(M,{snapshot:a})]}),(0,k.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-5`,children:E.map(([e,t])=>(0,k.jsx)(N,{label:e,value:t},e))}),a.channel===`beta`?(0,k.jsxs)(`div`,{className:`rounded-2xl border border-amber-200 bg-amber-50/70 p-4`,children:[(0,k.jsx)(`p`,{className:`text-sm font-semibold text-amber-800`,children:n(`desktopUpdatesBetaBadgeTitle`)}),(0,k.jsx)(`p`,{className:`mt-1 text-sm text-amber-700`,children:n(`desktopUpdatesBetaBadgeDescription`)})]}):null,a.downloadedVersion?(0,k.jsxs)(`div`,{className:`rounded-2xl border border-emerald-200 bg-emerald-50/70 p-4`,children:[(0,k.jsx)(`p`,{className:`text-sm font-semibold text-emerald-800`,children:n(`desktopUpdatesDownloadedBannerTitle`)}),(0,k.jsx)(`p`,{className:`mt-1 text-sm text-emerald-700`,children:n(`runtimeUpdatesDownloadedBannerDescription`).replace(`{version}`,a.downloadedVersion)})]}):null,(0,k.jsx)(P,{snapshot:a}),a.status===`blocked`?(0,k.jsxs)(`div`,{className:`rounded-2xl border border-red-200 bg-red-50/70 p-4`,children:[(0,k.jsx)(`p`,{className:`text-sm font-semibold text-red-800`,children:n(`desktopUpdatesBlockedTitle`)}),(0,k.jsx)(`p`,{className:`mt-1 text-sm text-red-700`,children:a.errorMessage??n(`desktopUpdatesBlockedDescription`)}),a.recoveryCommand?(0,k.jsx)(`code`,{className:`mt-3 block rounded-lg bg-white/70 px-3 py-2 text-xs text-red-800`,children:a.recoveryCommand}):null]}):null,a.errorMessage&&a.status!==`blocked`?(0,k.jsx)(`div`,{className:`rounded-2xl border border-red-200 bg-red-50/70 p-4 text-sm text-red-700`,children:a.errorMessage}):null]})})}),(0,k.jsx)(W,{snapshot:a}),(0,k.jsx)(s,{title:n(`desktopUpdatesChannelSettingsTitle`),description:n(`desktopUpdatesChannelSettingsDescription`),children:(0,k.jsx)(h,{children:(0,k.jsx)(c,{title:n(`desktopUpdatesReleaseChannel`),description:n(`desktopUpdatesReleaseChannelHelp`),layout:`stacked`,children:(0,k.jsxs)(`div`,{className:`space-y-2`,children:[(0,k.jsxs)(x,{value:a.channel,disabled:w||u||d||f||g,onValueChange:e=>void o.updateChannel(e),children:[(0,k.jsx)(v,{className:`w-full max-w-sm`,children:(0,k.jsx)(_,{placeholder:n(`desktopUpdatesReleaseChannel`)})}),(0,k.jsxs)(y,{children:[(0,k.jsx)(b,{value:`stable`,children:n(`desktopUpdatesChannelStable`)}),(0,k.jsx)(b,{value:`beta`,children:n(`desktopUpdatesChannelBeta`)})]})]}),(0,k.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`desktopUpdatesReleaseChannelDowngradeHint`)})]})})})}),(0,k.jsx)(s,{title:n(`desktopUpdatesActionsTitle`),description:n(`runtimeUpdatesActionsDescription`),children:(0,k.jsx)(h,{children:(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 p-4`,children:[(0,k.jsxs)(m,{variant:`outline`,onClick:()=>void o.checkForUpdates(),disabled:u||d||f||g,children:[(0,k.jsx)(S,{className:t(`mr-2 h-4 w-4`,u&&`animate-spin`)}),n(`desktopUpdatesCheckNow`)]}),(0,k.jsxs)(m,{onClick:()=>void o.updateNow(),disabled:!T,children:[(0,k.jsx)(C,{className:t(`mr-2 h-4 w-4`,g&&`animate-spin`)}),n(`runtimeUpdatesApplyNow`)]})]})})})]})}export{K as DesktopUpdateConfig};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./chunk-DseTPa7n.js";import{L as t,P as n,R as r,f as i,g as a,i as o,z as s}from"./react-C8XFFvuz.js";import{t as c}from"./navigation-link-MiiyoIjH.js";import{a as l,b as u,c as d,f,g as p,h as m,i as h,l as g,m as _,o as v,r as y,s as b,t as x,u as S,x as C,y as w}from"./dist-AYxkFx2B.js";import{t as T}from"./dist-D9xtGgdL.js";import{n as ee,t as E}from"./search-CH2t--sH.js";import{t as te}from"./plus-C8FkjpSZ.js";import{t as D}from"./refresh-cw-a2VVeeAF.js";import{t as O}from"./x-odTHAtLZ.js";import{_ as ne,d as re,g as k,m as A,n as ie,p as ae}from"./doc-browser-context-Cb7Z0j90.js";var j=d(`ArrowRight`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),M=d(`Boxes`,[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]),N=d(`EllipsisVertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),oe=d(`GripVertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),P=d(`PanelRightOpen`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m10 15-3-3 3-3`,key:`1pgupc`}]]),F=d(`PictureInPicture2`,[[`path`,{d:`M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4`,key:`daa4of`}],[`rect`,{width:`10`,height:`7`,x:`12`,y:`13`,rx:`2`,key:`1nb8gs`}]]),se=d(`PinOff`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89`,key:`znwnzq`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11`,key:`c9qhm2`}]]),ce=d(`Pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),I=e(s(),1),L=t(),[R,z]=w(`Tooltip`,[b]),B=b(),V=`TooltipProvider`,le=700,H=`tooltip.open`,[ue,U]=R(V),de=e=>{let{__scopeTooltip:t,delayDuration:n=le,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=I.useRef(!0),s=I.useRef(!1),c=I.useRef(0);return I.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,L.jsx)(ue,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:I.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:I.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:I.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};de.displayName=V;var W=`Tooltip`,[G,K]=R(W),fe=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=U(W,e.__scopeTooltip),l=B(t),[u,d]=I.useState(null),f=p(),h=I.useRef(0),g=o??c.disableHoverableContent,_=s??c.delayDuration,y=I.useRef(!1),[b,x]=m({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(H))):c.onClose(),a?.(e)},caller:W}),S=I.useMemo(()=>b?y.current?`delayed-open`:`instant-open`:`closed`,[b]),C=I.useCallback(()=>{window.clearTimeout(h.current),h.current=0,y.current=!1,x(!0)},[x]),w=I.useCallback(()=>{window.clearTimeout(h.current),h.current=0,x(!1)},[x]),T=I.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{y.current=!0,x(!0),h.current=0},_)},[_,x]);return I.useEffect(()=>()=>{h.current&&=(window.clearTimeout(h.current),0)},[]),(0,L.jsx)(v,{...l,children:(0,L.jsx)(G,{scope:t,contentId:f,open:b,stateAttribute:S,trigger:u,onTriggerChange:d,onTriggerEnter:I.useCallback(()=>{c.isOpenDelayedRef.current?T():C()},[c.isOpenDelayedRef,T,C]),onTriggerLeave:I.useCallback(()=>{g?w():(window.clearTimeout(h.current),h.current=0)},[w,g]),onOpen:C,onClose:w,disableHoverableContent:g,children:n})})};fe.displayName=W;var q=`TooltipTrigger`,J=I.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=K(q,n),a=U(q,n),o=B(n),s=u(t,I.useRef(null),i.onTriggerChange),c=I.useRef(!1),l=I.useRef(!1),d=I.useCallback(()=>c.current=!1,[]);return I.useEffect(()=>()=>document.removeEventListener(`pointerup`,d),[d]),(0,L.jsx)(y,{asChild:!0,...o,children:(0,L.jsx)(f.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:s,onPointerMove:C(e.onPointerMove,e=>{e.pointerType!==`touch`&&!l.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),l.current=!0)}),onPointerLeave:C(e.onPointerLeave,()=>{i.onTriggerLeave(),l.current=!1}),onPointerDown:C(e.onPointerDown,()=>{i.open&&i.onClose(),c.current=!0,document.addEventListener(`pointerup`,d,{once:!0})}),onFocus:C(e.onFocus,()=>{c.current||i.onOpen()}),onBlur:C(e.onBlur,i.onClose),onClick:C(e.onClick,i.onClose)})})});J.displayName=q;var Y=`TooltipPortal`,[pe,me]=R(Y,{forceMount:void 0}),he=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=K(Y,t);return(0,L.jsx)(pe,{scope:t,forceMount:n,children:(0,L.jsx)(T,{present:n||a.open,children:(0,L.jsx)(g,{asChild:!0,container:i,children:r})})})};he.displayName=Y;var X=`TooltipContent`,ge=I.forwardRef((e,t)=>{let n=me(X,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=K(X,e.__scopeTooltip);return(0,L.jsx)(T,{present:r||o.open,children:o.disableHoverableContent?(0,L.jsx)(xe,{side:i,...a,ref:t}):(0,L.jsx)(_e,{side:i,...a,ref:t})})}),_e=I.forwardRef((e,t)=>{let n=K(X,e.__scopeTooltip),r=U(X,e.__scopeTooltip),i=I.useRef(null),a=u(t,i),[o,s]=I.useState(null),{trigger:c,onClose:l}=n,d=i.current,{onPointerInTransitChange:f}=r,p=I.useCallback(()=>{s(null),f(!1)},[f]),m=I.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Te(r,we(r,n.getBoundingClientRect())),a=Ee(t.getBoundingClientRect());s(Oe([...i,...a])),f(!0)},[f]);return I.useEffect(()=>()=>p(),[p]),I.useEffect(()=>{if(c&&d){let e=e=>m(e,d),t=e=>m(e,c);return c.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[c,d,m,p]),I.useEffect(()=>{if(o){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||d?.contains(t),i=!De(n,o);r?p():i&&(p(),l())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,d,o,l,p]),(0,L.jsx)(xe,{...e,ref:a})}),[ve,ye]=R(W,{isInside:!1}),be=_(`TooltipContent`),xe=I.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=K(X,n),u=B(n),{onClose:d}=c;return I.useEffect(()=>(document.addEventListener(H,d),()=>document.removeEventListener(H,d)),[d]),I.useEffect(()=>{if(c.trigger){let e=e=>{e.target?.contains(c.trigger)&&d()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[c.trigger,d]),(0,L.jsx)(S,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:d,children:(0,L.jsxs)(l,{"data-state":c.stateAttribute,...u,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,L.jsx)(be,{children:r}),(0,L.jsx)(ve,{scope:n,isInside:!0,children:(0,L.jsx)(x,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});ge.displayName=X;var Se=`TooltipArrow`,Ce=I.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=B(n);return ye(Se,n).isInside?null:(0,L.jsx)(h,{...i,...r,ref:t})});Ce.displayName=Se;function we(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function Te(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function Ee(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function De(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Oe(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:e.y>t.y?1:0),ke(t)}function ke(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var Ae=de,je=fe,Me=J,Ne=he,Pe=ge,Fe=Ae,Ie=je,Le=Me,Re=I.forwardRef(({className:e,sideOffset:t=4,...r},i)=>(0,L.jsx)(Ne,{children:(0,L.jsx)(Pe,{ref:i,sideOffset:t,className:n(`z-[var(--z-tooltip,10150)] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...r})}));Re.displayName=Pe.displayName;var ze={sm:`h-6 w-6 rounded-md p-1`,md:`h-7 w-7 rounded-md p-1.5`,lg:`h-8 w-8 rounded-lg p-1.5`},Be={default:`text-muted-foreground hover:bg-[var(--interaction-hover)] hover:text-accent-foreground disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45`,surface:`text-muted-foreground hover:bg-gray-200/60 hover:text-gray-900 active:bg-gray-200/80 disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45`,strong:`text-muted-foreground hover:bg-black/10 hover:text-foreground disabled:text-muted-foreground/45 disabled:hover:bg-transparent disabled:hover:text-muted-foreground/45`},Z=I.forwardRef(({className:e,disabled:t=!1,icon:r,label:i,size:a=`md`,tone:o=`default`,tooltip:s,tooltipSide:c=`bottom`,...l},u)=>{let d=(0,L.jsx)(`button`,{...l,ref:u,type:`button`,disabled:t,"aria-label":i,className:n(`inline-flex shrink-0 items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border disabled:cursor-not-allowed`,ze[a],Be[o],e),children:r}),f=s===!1?null:s??i;return f?(0,L.jsx)(Fe,{delayDuration:250,children:(0,L.jsxs)(Ie,{disableHoverableContent:!0,children:[(0,L.jsx)(Le,{asChild:!0,onFocus:e=>{e.currentTarget.matches(`:focus-visible`)||e.preventDefault()},children:t?(0,L.jsx)(`span`,{className:`inline-flex`,children:d}):d}),(0,L.jsx)(Re,{side:c,className:`text-xs`,children:f})]})}):d});Z.displayName=`IconActionButton`;var Ve=e(r(),1),He=(0,I.createContext)(null),Ue=8;function We({groups:e,label:t,onClose:r,position:i}){let a=(0,I.useRef)(null);(0,I.useLayoutEffect)(()=>{let e=a.current;if(!e)return;let t=e.getBoundingClientRect(),n=i.align===`end`?i.x-t.width:i.x,r=Math.max(Ue,Math.min(n,window.innerWidth-t.width-Ue)),o=Math.max(Ue,Math.min(i.y,window.innerHeight-t.height-Ue));e.style.left=`${r}px`,e.style.top=`${o}px`,e.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()},[i]);let o=e=>{let t=Array.from(a.current?.querySelectorAll(`[role="menuitem"]:not(:disabled)`)??[]);if(t.length===0)return;let n=t.indexOf(document.activeElement);t[n<0?0:(n+e+t.length)%t.length]?.focus()};return(0,Ve.createPortal)((0,L.jsx)(`div`,{className:`fixed inset-0 z-[var(--z-tooltip)]`,onContextMenu:e=>e.preventDefault(),onPointerDown:()=>r(!0),children:(0,L.jsx)(`div`,{ref:a,role:`menu`,"aria-label":t,className:`fixed min-w-52 max-w-72 overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-[0_18px_48px_-20px_rgba(15,23,42,0.42)]`,style:{left:i.x,top:i.y},onPointerDown:e=>e.stopPropagation(),onKeyDown:e=>{if(e.key===`Escape`)e.preventDefault(),r(!0);else if(e.key===`ArrowDown`)e.preventDefault(),o(1);else if(e.key===`ArrowUp`)e.preventDefault(),o(-1);else if(e.key===`Home`||e.key===`End`){e.preventDefault();let t=a.current?.querySelectorAll(`[role="menuitem"]:not(:disabled)`);t?.[e.key===`Home`?0:t.length-1]?.focus()}},children:e.map((e,t)=>(0,L.jsxs)(`div`,{role:`group`,children:[t>0?(0,L.jsx)(`div`,{className:`my-1 h-px bg-border`}):null,e.items.map(e=>{let t=n(`flex h-8 w-full items-center gap-2 rounded-lg px-2.5 text-left text-[13px] font-medium outline-none transition-colors`,e.destructive?`text-destructive hover:bg-destructive/10 focus-visible:bg-destructive/10`:`text-foreground hover:bg-muted focus-visible:bg-muted`,`disabled:pointer-events-none disabled:opacity-45`),i=(0,L.jsxs)(L.Fragment,{children:[e.icon?(0,L.jsx)(`span`,{className:n(`inline-flex h-4 w-4 shrink-0 items-center justify-center`,e.destructive?`text-destructive`:`text-muted-foreground`),children:e.icon}):null,(0,L.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.label})]});return e.href?(0,L.jsx)(`a`,{role:`menuitem`,className:t,href:e.href,download:e.download,onClick:()=>{e.onSelect?.(),r(!1)},children:i},e.key):(0,L.jsx)(`button`,{type:`button`,role:`menuitem`,disabled:e.disabled,className:t,onClick:()=>{e.onSelect?.(),r(e.restoreFocus!==!1)},children:i},e.key)})]},e.key))})}),document.body)}function Ge({children:e,groups:t,label:n}){let[r,i]=(0,I.useState)(null),a=t.filter(e=>e.items.length>0),o=e=>{let t=r?.trigger;i(null),e&&t&&window.setTimeout(()=>t.isConnected&&t.focus(),0)},s=e=>{if(r?.trigger===e){o(!0);return}if(a.length===0)return;let t=e.getBoundingClientRect();i({align:`end`,x:t.right,y:t.bottom,trigger:e})},c=(0,I.cloneElement)(e,{"data-context-menu-open":r?``:void 0,onContextMenu:t=>{if(e.props.onContextMenu?.(t),t.defaultPrevented||a.length===0)return;t.preventDefault();let n=t.currentTarget,r=n.getBoundingClientRect();i({align:`start`,x:t.clientX||r.left,y:t.clientY||r.bottom,trigger:n})}});return(0,L.jsxs)(He.Provider,{value:{isOpen:!!r,toggleFromButton:s},children:[c,r?(0,L.jsx)(We,{groups:a,label:n,position:r,onClose:o}):null]})}function Ke({children:e}){let t=(0,I.useContext)(He);if(!t)throw Error(`ContextMenuTrigger must be rendered inside ContextMenu`);return(0,I.cloneElement)(e,{"aria-expanded":t.isOpen,"aria-haspopup":`menu`,onClick:n=>{e.props.onClick?.(n),!n.defaultPrevented&&(n.stopPropagation(),t.toggleFromButton(n.currentTarget))}})}function qe(e,t){e.stopPropagation(),t()}function Je({tab:e}){if(!e.menuGroups?.some(e=>e.items.length>0))return null;let t=e.menuLabel??e.label;return(0,L.jsx)(`div`,{className:n(`-ml-1.5 flex w-0 shrink-0 overflow-hidden opacity-0 transition-[width,margin,opacity] group-hover:ml-0 group-hover:w-5 group-hover:opacity-100 group-focus-within:ml-0 group-focus-within:w-5 group-focus-within:opacity-100`,`group-data-[context-menu-open]:ml-0 group-data-[context-menu-open]:w-5 group-data-[context-menu-open]:opacity-100`),children:(0,L.jsx)(Ke,{children:(0,L.jsx)(`button`,{type:`button`,"aria-label":t,className:`inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 focus-visible:bg-gray-200 focus-visible:text-gray-700 focus-visible:outline-none`,children:(0,L.jsx)(N,{className:`h-3.5 w-3.5`})})})})}function Ye({labelClassName:e,tab:t}){let r=t.onClose&&t.closePlacement===`leading-hover`?null:t.leadingIcon,i=(0,L.jsxs)(`button`,{type:`button`,onClick:t.onSelect,"aria-label":t.label,className:`flex min-w-0 flex-1 items-center gap-1.5 text-left`,children:[r?(0,L.jsx)(`span`,{className:`inline-flex shrink-0 items-center justify-center`,children:r}):null,(0,L.jsx)(`span`,{className:n(`min-w-0 truncate text-[12px] font-medium`,e,t.labelClassName),children:t.label}),t.badge,t.unreadIndicator]}),a=t.tooltip??t.label;return a?(0,L.jsx)(Fe,{delayDuration:250,children:(0,L.jsxs)(Ie,{children:[(0,L.jsx)(Le,{asChild:!0,children:i}),(0,L.jsx)(Re,{side:`bottom`,className:`text-xs`,children:a})]})}):i}function Xe({activeTabClassName:e,inactiveTabClassName:t,itemRef:r,labelClassName:i,tab:a,tabBaseClassName:o}){let s=a.onClose&&a.closePlacement===`leading-hover`,c=(0,L.jsxs)(`div`,{ref:r,"data-compact-tab-item":``,onClick:e=>e.target===e.currentTarget&&a.onSelect(),className:n(o??`group flex max-w-[180px] min-w-0 cursor-pointer items-center gap-1.5 border-r border-gray-200/70 border-b-2 px-2.5 py-2 transition-colors`,a.active?e??`border-b-primary bg-white text-gray-900`:t??`border-b-transparent bg-gray-50/85 text-gray-500 hover:bg-gray-100`),children:[s?(0,L.jsxs)(`button`,{type:`button`,onClick:e=>qe(e,a.onClose),className:`relative inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700`,"aria-label":a.closeLabel,children:[(0,L.jsx)(`span`,{className:`flex items-center justify-center group-hover:hidden`,children:a.leadingIcon}),(0,L.jsx)(O,{className:`hidden h-3.5 w-3.5 group-hover:block`})]}):null,(0,L.jsx)(Ye,{tab:a,labelClassName:i}),(0,L.jsx)(Je,{tab:a}),a.onClose&&a.closePlacement!==`leading-hover`?(0,L.jsx)(Z,{size:`sm`,tone:`strong`,icon:(0,L.jsx)(O,{className:`h-3 w-3`}),label:a.closeLabel??``,tooltip:a.closeLabel??null,onClick:e=>qe(e,a.onClose)}):null]});return a.menuGroups?.some(e=>e.items.length>0)?(0,L.jsx)(Ge,{groups:a.menuGroups,label:a.menuLabel??a.label,children:c}):c}function Ze({actionButtonClassName:e,actions:t,actionsClassName:r,actionsTestId:i,className:a,onPointerDown:o,onScrollPointerDown:s,scrollClassName:c,scrollTestId:l,tabs:u,tabsClassName:d,testId:f,...p}){let m=I.useCallback(e=>{e?.scrollIntoView?.({block:`nearest`,inline:`nearest`})},[]);return(0,L.jsxs)(`div`,{"data-testid":f,className:n(`flex min-w-0 items-stretch border-b border-gray-200/70 bg-gray-50/85`,a),onPointerDown:o,children:[(0,L.jsx)(`div`,{className:n(`min-w-0 flex-1 overflow-x-auto overflow-y-hidden`,c),onPointerDown:s,children:(0,L.jsx)(`div`,{"data-testid":l,className:n(`flex min-w-max items-stretch`,d),children:u.map(e=>(0,L.jsx)(Xe,{itemRef:e.active?m:void 0,tab:e,...p},e.key))})}),(0,L.jsx)(`div`,{className:n(`flex shrink-0 items-center gap-1`,r),"data-testid":i,onPointerDown:e=>e.stopPropagation(),children:t.map(t=>(0,L.jsx)(Z,{icon:t.icon,label:t.label,disabled:t.disabled,onClick:t.onClick,className:e},t.key))})]})}function Qe(){return(0,L.jsx)(`div`,{className:`flex h-full items-center justify-center bg-background px-5 py-6`,children:(0,L.jsxs)(`div`,{className:`flex max-w-[260px] flex-col items-center gap-3 text-center`,children:[(0,L.jsx)(`span`,{className:`flex h-12 w-12 items-center justify-center rounded-lg border border-border bg-muted text-muted-foreground shadow-[0_1px_2px_rgba(30,20,10,0.04)]`,children:(0,L.jsx)(M,{className:`h-5 w-5`})}),(0,L.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:o(`docBrowserHomeTitle`)})]})})}function $e(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.kind===`document`?!0:t.kind===`element`&&Array.isArray(t.path)&&t.path.length>0&&t.path.length<=30&&t.path.every(e=>typeof e?.index==`number`&&Number.isInteger(e.index)&&e.index>=0&&e.index<=1e3&&typeof e.tagName==`string`&&e.tagName.length>0&&e.tagName.length<=32)}function et(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.type===a.scrollMessageType&&t.version===a.version&&$e(t.target)&&typeof t.x==`number`&&Number.isFinite(t.x)&&t.x>=0&&typeof t.y==`number`&&Number.isFinite(t.y)&&t.y>=0}function tt({currentTab:e,iframeRef:t,isEnabled:n,tabs:r}){let i=(0,I.useRef)(new Map);return(0,I.useEffect)(()=>{let e=new Set(r.map(e=>e.id));for(let t of i.current.keys())e.has(t)||i.current.delete(t)},[r]),(0,I.useEffect)(()=>{if(!e||!n)return;let r=n=>{n.source!==t.current?.contentWindow||!et(n.data)||i.current.set(e.id,{currentUrl:e.currentUrl,target:n.data.target,x:n.data.x,y:n.data.y})};return window.addEventListener(`message`,r),()=>window.removeEventListener(`message`,r)},[e,t,n]),(0,I.useCallback)(()=>{if(!e||!n)return;let r=i.current.get(e.id);!r||r.currentUrl!==e.currentUrl||t.current?.contentWindow?.postMessage({type:a.restoreScrollMessageType,version:a.version,target:r.target,x:r.x,y:r.y},`*`)},[e,t,n])}function nt({isVisible:e,onRefresh:t,onSubmit:n,onUrlInputChange:r,placeholder:i,urlInput:a}){return e?(0,L.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/70 bg-card px-3.5 py-2 shrink-0`,children:[(0,L.jsxs)(`form`,{onSubmit:n,className:`flex-1 relative`,children:[(0,L.jsx)(E,{className:`absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground/70`}),(0,L.jsx)(`input`,{type:`text`,value:a,onChange:e=>r(e.target.value),"aria-label":o(`docBrowserAddressLabel`),placeholder:i,className:`h-8 w-full rounded-lg border border-border/75 bg-background pl-8 pr-3 text-xs text-foreground transition-colors placeholder:text-muted-foreground/55 focus:outline-none focus:ring-0`})]}),(0,L.jsx)(Z,{icon:(0,L.jsx)(D,{className:`h-3.5 w-3.5`}),label:o(`docBrowserRefresh`),onClick:t})]}):null}function rt({currentTab:e,currentUrl:t,customContent:n,iframeRef:r,iframeInstanceId:a,iframeSandbox:o,isDragging:s,isResizing:c,onIframeLoad:l,onIframePointerOver:u}){return(0,L.jsxs)(`div`,{className:`flex-1 relative overflow-hidden`,children:[n||(0,L.jsx)(`iframe`,{ref:r,src:t,name:i(e?.contentParams),className:`absolute inset-0 w-full h-full border-0`,title:e?.title||`NextClaw Docs`,sandbox:o,tabIndex:u?0:void 0,onLoad:l,onPointerOver:u,allow:`clipboard-read; clipboard-write`,allowFullScreen:!0},a),(c||s)&&(0,L.jsx)(`div`,{className:`absolute inset-0 z-10`})]})}function it(e){try{let t=new URL(e,window.location.origin);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function at({currentUrl:e,isVisible:t}){if(!t||!it(e))return null;let n=k(e)?o(`docBrowserOpenExternal`):o(`docBrowserOpenInBrowser`);return(0,L.jsx)(`div`,{className:`flex items-center justify-between border-t border-border/70 bg-muted/55 px-4 py-2 shrink-0`,children:(0,L.jsx)(c,{href:e,external:!0,iconPosition:`trailing`,size:`xs`,"data-doc-external":!0,children:n})})}function ot(e){return e instanceof Element&&!!e.closest(`button, a, input, textarea, select, [data-compact-tab-item]`)}function st({tabs:e,activeTabId:t,canGoBack:r,canGoForward:i,isDocked:a,isFullscreen:s,dockState:c,onGoBack:l,onGoForward:u,onOpenNewTab:d,onToggleDock:f,onSetActiveTab:p,onCloseTab:m,onClose:h,onDragStart:g,onToggleMode:_}){let v=o(`docBrowserBack`),y=o(`docBrowserClose`),b=o(`docBrowserCloseTab`),x=c?.isDocked?c.removable?o(`sideDockUnpinCurrent`):o(`sideDockBuiltInDocked`):o(`sideDockPinCurrent`),S=o(`docBrowserForward`),C=o(a?`docBrowserFloatMode`:`docBrowserDockMode`),w=o(`docBrowserNewTab`);return(0,L.jsx)(Ze,{testId:`doc-browser-tab-strip`,actionsTestId:`doc-browser-tab-actions`,tabs:e.map(e=>({key:e.id,label:e.title||o(`docBrowserTabUntitled`),active:e.id===t,tooltip:e.title,closeLabel:b,closePlacement:`trailing`,onSelect:()=>p(e.id),onClose:()=>m(e.id)})),actions:[{key:`back`,disabled:!r,icon:(0,L.jsx)(ee,{className:`h-3.5 w-3.5`}),label:v,onClick:l},{key:`forward`,disabled:!i,icon:(0,L.jsx)(j,{className:`h-3.5 w-3.5`}),label:S,onClick:u},{key:`new-tab`,icon:(0,L.jsx)(te,{className:`h-3.5 w-3.5`}),label:w,onClick:d},...c?.canDock?[{key:`dock`,disabled:c.isDocked&&!c.removable,icon:c.isDocked&&c.removable?(0,L.jsx)(se,{className:`h-3.5 w-3.5`}):(0,L.jsx)(ce,{className:`h-3.5 w-3.5`}),label:x,onClick:()=>f?.()}]:[],...s?[]:[{key:`mode`,icon:a?(0,L.jsx)(F,{className:`h-3.5 w-3.5`}):(0,L.jsx)(P,{className:`h-3.5 w-3.5`}),label:C,onClick:_}],{key:`close`,icon:(0,L.jsx)(O,{className:`h-3.5 w-3.5`}),label:y,onClick:h}],className:n(`h-10 gap-1.5 border-border/50 bg-card/80 px-2 shrink-0 select-none`,s&&`h-[calc(env(safe-area-inset-top,0px)+2.5rem)] pt-[env(safe-area-inset-top,0px)]`),scrollClassName:n(`doc-browser-tab-scrollbar flex h-full items-center gap-0.5`,!a&&!s&&`cursor-grab active:cursor-grabbing`),tabsClassName:`items-center gap-0.5`,actionsClassName:`h-full items-center gap-0.5`,actionButtonClassName:`rounded-md p-1.5 text-muted-foreground hover:bg-muted/60 hover:text-foreground disabled:opacity-50`,tabBaseClassName:`group inline-flex min-w-0 cursor-pointer items-center gap-0.5 h-7 px-2 rounded-md text-xs max-w-[220px] shrink-0 transition-colors`,activeTabClassName:`bg-muted/80 text-foreground`,inactiveTabClassName:`text-muted-foreground hover:bg-muted/45 hover:text-foreground`,labelClassName:`px-0.5 text-xs font-normal`,onPointerDown:!a&&!s?g:void 0,onScrollPointerDown:e=>{if(ot(e.target)){e.stopPropagation();return}!a&&!s&&(e.stopPropagation(),g(e))}})}var Q=40,ct=360,lt=400;function $(e,t,n){return Math.min(n,Math.max(t,e))}function ut(e,t){return e.split(`-`).includes(t)}function dt(){return{x:Math.max(Q,window.innerWidth-520),y:80,w:480,h:600}}function ft(e,t,n){return{...e,x:$(e.x+t,Q,window.innerWidth-Q-e.w),y:$(e.y+n,Q,window.innerHeight-Q-e.h)}}function pt(e,t,n,r){let i=t.x+t.w,a=t.y+t.h,o=ut(e,`left`)?$(t.x+n,Q,i-ct):t.x,s=ut(e,`right`)?$(i+n,o+ct,window.innerWidth-Q):i,c=ut(e,`top`)?$(t.y+r,Q,a-lt):t.y,l=ut(e,`bottom`)?$(a+r,c+lt,window.innerHeight-Q):a;return{x:o,y:c,w:s-o,h:l-c}}function mt({children:e,className:t,style:r,defaultWidth:i=420,minWidth:a=320,maxWidth:o=860,onWidthCommit:s,overlay:c=!1,overlayScope:l=`viewport`,width:u,...d}){let f=(0,I.useRef)(null),p=(0,I.useRef)(u??i),[m,h]=(0,I.useState)(!1),[g,_]=(0,I.useState)(null),[v,y]=(0,I.useState)(i),b=g??u??v,x=c?l===`container`?`absolute inset-0 z-30`:`fixed inset-0 z-40`:`border-l border-border`,S=e=>{if(c)return;e.preventDefault(),e.stopPropagation(),e.currentTarget.setPointerCapture?.(e.pointerId),h(!0),p.current=b,f.current={startX:e.clientX,startWidth:b};let t=e=>{let t=f.current;if(!t)return;let n=t.startWidth+t.startX-e.clientX,r=Math.max(a,Math.min(o,n));p.current=r,_(r)},n=()=>{u===void 0&&y(p.current),s?.(p.current),_(null),h(!1),f.current=null,window.removeEventListener(`pointermove`,t),window.removeEventListener(`pointerup`,n),window.removeEventListener(`pointercancel`,n)};window.addEventListener(`pointermove`,t),window.addEventListener(`pointerup`,n),window.addEventListener(`pointercancel`,n)};return(0,L.jsxs)(`aside`,{...d,className:n(`relative flex h-full min-h-0 shrink-0 overflow-hidden bg-card text-card-foreground`,x,t),style:c?r:{...r,width:b},children:[(0,L.jsx)(`div`,{className:`flex h-full min-h-0 w-full flex-col overflow-hidden`,children:e}),c?null:(0,L.jsx)(`div`,{className:`absolute left-0 top-0 z-30 h-full w-3 cursor-ew-resize transition-colors hover:bg-primary/10`,"data-testid":`resizable-right-panel-handle`,onPointerDown:S}),m?(0,L.jsx)(`div`,{className:`absolute inset-0 z-10 cursor-ew-resize`,"data-testid":`resizable-right-panel-resize-shield`}):null]})}var ht=`allow-same-origin allow-scripts allow-popups allow-forms`;function gt(e,t){if(e.startsWith(`/`))try{return new URL(e,t).toString()}catch{return e}return/^[a-z][a-z\d+.-]*:\/\//i.test(e)||e===`about:blank`?e:/^(localhost|127\.|0\.0\.0\.0|\[::1\])(?::|\/|$)/i.test(e)?`http://${e}`:`https://${e}`}function _t(e,t){if(!t)return ht;let n=e?.getIframeSandbox?.(t);return n===void 0?t.kind===`content`?void 0:ht:n}function vt(e,t,n){return(0,I.useCallback)(()=>{if(n?.canDock){if(n.isDocked){n.removable&&e?.unpinTab(t);return}e?.pinTab(t)}},[t,e,n])}function yt({activeTabId:e,currentUrl:t,isAddressToolbarTab:n,isContentTab:r,isDocsTab:i,navigate:a}){let o=`${e}:${t}:${r?`content`:`docs`}`,[s,c]=(0,I.useState)(null),l=(()=>{if(!n)return``;if(r)return t;try{return new URL(t).pathname}catch{return t}})(),u=s?.key===o?s.value:l,d=(0,I.useCallback)(e=>c({key:o,value:e}),[o]);return{handleUrlSubmit:(0,I.useCallback)(e=>{if(e.preventDefault(),!n)return;let r=u.trim();r&&(i&&r.startsWith(`/`)?a(A(r)):i&&r.startsWith(`http`)?a(r):a(i?A(`/${r}`):gt(r,t)))},[t,n,i,a,u]),setUrlInput:d,urlInput:u}}function bt({customTabRenderers:e={},displayMode:t=`desktop`,dockControls:r}){let{isOpen:i,mode:a,dockedWidth:s,tabs:c,activeTabId:l,activeHistory:u,activeHistoryIndex:d,currentTab:f,open:p,openTarget:m,openNewTab:h,close:g,toggleMode:_,setDockedWidth:v,goBack:y,goForward:b,navigate:x,syncUrl:S,setActiveTab:C,closeTab:w}=ie(),[T,ee]=(0,I.useState)(0),[E,te]=(0,I.useState)(dt),[D,O]=(0,I.useState)(null),k=(0,I.useRef)(null),A=f?.currentUrl??ae(),j=f?.navVersion??0,M=`${l}:${j}:${T}`,N=(0,I.useRef)(null),P=(0,I.useRef)(j),F=f?.kind===`docs`,se=f?.kind===re,ce=d>0,R=d<u.length-1,z=f?e[f.kind]:void 0,B=r?.getDockState(f),V=f?.kind===`content`,le=F||V,H=tt({currentTab:f,iframeRef:k,isEnabled:z?.supportsScrollRestoration===!0,tabs:c}),{handleUrlSubmit:ue,setUrlInput:U,urlInput:de}=yt({activeTabId:l,currentUrl:A,isAddressToolbarTab:le,isContentTab:V,isDocsTab:F,navigate:x});(0,I.useEffect)(()=>{if(!F){N.current=null;return}if(j!==P.current){P.current=j,N.current=ne(A);return}if(k.current?.contentWindow)try{let e=new URL(A).pathname;N.current=ne(A),k.current.contentWindow.postMessage({type:`docs-navigate`,path:e},`*`)}catch{}},[A,j,F]),(0,I.useEffect)(()=>{let e=e=>{if(F&&e.data?.type===`docs-route-change`&&typeof e.data.url==`string`){let t=ne(e.data.url);if(N.current&&t!==N.current)return;N.current=null,S(e.data.url)}};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[A,S,F]),(0,I.useEffect)(()=>{if(!f||!z?.onIframeMessage)return;let e=e=>{z.onIframeMessage?.({event:e,iframe:k.current,iframeInstanceId:M,tab:f})};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[f,z,M]);let W=(0,I.useCallback)(e=>{e.preventDefault(),O({kind:`drag`,startX:e.clientX,startY:e.clientY,startRect:E})},[E]),G=(0,I.useCallback)(e=>t=>{t.preventDefault(),t.stopPropagation(),O({kind:`resize`,edge:e,startX:t.clientX,startY:t.clientY,startRect:E})},[E]);(0,I.useEffect)(()=>{if(!D)return;let e=e=>{let{startRect:t,startX:n,startY:r}=D,i=e.clientX-n,a=e.clientY-r;if(D.kind===`drag`){te(ft(t,i,a));return}te(pt(D.edge,t,i,a))},t=()=>O(null);return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),window.addEventListener(`pointercancel`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t),window.removeEventListener(`pointercancel`,t)}},[D]);let K=(0,I.useCallback)(()=>{ee(e=>e+1)},[]),fe=vt(r,f,B);if(!i)return null;let q=a===`docked`,J=t===`fullscreen`,Y=f?{currentUrl:A,open:p,openTarget:m,refreshIframe:K,tab:f}:void 0,pe=Y?z?.renderToolbar?.(Y):null,me=Y?z?.renderContent?.(Y)??(se?(0,L.jsx)(Qe,{}):null):null,he=_t(z,f),X=(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(st,{tabs:c,activeTabId:l,canGoBack:ce,canGoForward:R,dockState:B,isDocked:q,isFullscreen:J,onGoBack:y,onGoForward:b,onOpenNewTab:h,onToggleDock:fe,onSetActiveTab:C,onCloseTab:w,onClose:g,onDragStart:W,onToggleMode:_}),(0,L.jsx)(nt,{isVisible:le,onRefresh:K,onSubmit:ue,onUrlInputChange:U,placeholder:o(F?`docBrowserSearchPlaceholder`:`docBrowserAddressPlaceholder`),urlInput:de}),pe,(0,L.jsx)(rt,{currentTab:f,currentUrl:A,customContent:me,iframeRef:k,iframeInstanceId:M,iframeSandbox:he,isDragging:D?.kind===`drag`,isResizing:D?.kind===`resize`,onIframeLoad:H,onIframePointerOver:z?.onIframePointerOver}),(0,L.jsx)(at,{currentUrl:A,isVisible:F||V})]});return q&&!J?(0,L.jsx)(mt,{"data-testid":`doc-browser-panel`,defaultWidth:s,width:s,minWidth:320,maxWidth:860,onWidthCommit:v,children:X}):(0,L.jsxs)(`div`,{"data-testid":`doc-browser-panel`,className:n(`relative flex flex-col overflow-hidden bg-card text-card-foreground`,J?`fixed inset-0 z-[var(--z-floating-panel)] h-[100dvh] w-screen rounded-none border-0 shadow-2xl`:`rounded-2xl border border-border shadow-2xl`),style:J?void 0:{position:`fixed`,left:E.x,top:E.y,width:E.w,height:E.h,zIndex:`var(--z-floating-panel)`},children:[X,!q&&!J&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`div`,{className:`absolute top-0 left-0 h-3 w-full cursor-ns-resize z-20 hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-top`,onPointerDown:G(`top`)}),(0,L.jsx)(`div`,{className:`absolute top-0 left-0 w-3 h-full cursor-ew-resize z-20 hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-left`,onPointerDown:G(`left`)}),(0,L.jsx)(`div`,{className:`absolute top-0 right-0 w-3 h-full cursor-ew-resize z-20 hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-right`,onPointerDown:G(`right`)}),(0,L.jsx)(`div`,{className:`absolute bottom-0 left-0 h-3 w-full cursor-ns-resize z-20 hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-bottom`,onPointerDown:G(`bottom`)}),(0,L.jsx)(`div`,{className:`absolute top-0 left-0 z-30 h-4 w-4 cursor-nw-resize hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-top-left`,onPointerDown:G(`top-left`)}),(0,L.jsx)(`div`,{className:`absolute top-0 right-0 z-30 h-4 w-4 cursor-ne-resize hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-top-right`,onPointerDown:G(`top-right`)}),(0,L.jsx)(`div`,{className:`absolute bottom-0 left-0 z-30 h-4 w-4 cursor-sw-resize hover:bg-primary/10 transition-colors`,"data-testid":`doc-browser-resize-bottom-left`,onPointerDown:G(`bottom-left`)}),(0,L.jsx)(`div`,{className:`absolute bottom-0 right-0 z-30 flex h-4 w-4 cursor-se-resize items-center justify-center text-muted-foreground/45 transition-colors hover:text-muted-foreground`,"data-testid":`doc-browser-resize-bottom-right`,onPointerDown:G(`bottom-right`),children:(0,L.jsx)(oe,{className:`w-3 h-3 rotate-[-45deg]`})})]})]})}export{P as _,Ke as a,j as b,Re as c,Pe as d,Ne as f,ce as g,Me as h,Ge as i,Fe as l,je as m,mt as n,Z as o,Ae as p,Ze as r,Ie as s,bt as t,Le as u,N as v,M as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./doc-browser-4Sud6dWw.js";export{e as DocBrowser};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as e,P as t}from"./react-C8XFFvuz.js";var n=e();function r({align:e=`end`,className:r,...i}){return(0,n.jsx)(`div`,{className:t(`flex flex-wrap items-center gap-2`,e===`start`&&`justify-start`,e===`end`&&`justify-end`,e===`between`&&`justify-between`,r),...i})}export{r as t};
|