@nextclaw/ui 0.15.1 → 0.15.3
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 +51 -0
- package/dist/assets/{api-b1R9VdeH.js → api-iNBpppzj.js} +3 -3
- package/dist/assets/{appearance-settings-page-D2O9pch9.js → appearance-settings-page-DMffQFR3.js} +1 -1
- package/dist/assets/{book-open-B77lQ2Tg.js → book-open-C3mJGwiy.js} +1 -1
- package/dist/assets/channels-list-page-CCtp0BRS.js +8 -0
- package/dist/assets/chat-page-H5a0dWvO.js +1 -0
- package/dist/assets/config-split-page-CrOJgB-Y.js +1 -0
- package/dist/assets/{confirm-dialog-C-NXSioX.js → confirm-dialog-Chv50USy.js} +2 -2
- package/dist/assets/{desktop-update-config-usHpXugP.js → desktop-update-config-KzTuXRf_.js} +1 -1
- package/dist/assets/{dist-jdGmbb6w.js → dist-BunzmC4B.js} +1 -1
- package/dist/assets/{dist-YtoqU-AT.js → dist-ChmGwvtK.js} +1 -1
- package/dist/assets/doc-browser-DNRL4Zvd.js +1 -0
- package/dist/assets/doc-browser-Dg0pmkOg.js +1 -0
- package/dist/assets/doc-browser-context-BHY-0FSD.js +1 -0
- package/dist/assets/{es2015-bNpL2LKy.js → es2015-DQZ5JWwK.js} +1 -1
- package/dist/assets/{external-link-BM6fk8q-.js → external-link-CU0kzzIP.js} +1 -1
- package/dist/assets/form-actions-BvCp_0lS.js +1 -0
- package/dist/assets/{i18n-provider-CntWolRA.js → i18n-provider-Cu8XyZb_.js} +1 -1
- package/dist/assets/index-CzfBdvK1.css +1 -0
- package/dist/assets/index-DGqHne1Q.js +104 -0
- package/dist/assets/loader-circle-CDSFuzmk.js +1 -0
- package/dist/assets/mcp-marketplace-page-BeEQK0DL.js +9 -0
- package/dist/assets/mcp-marketplace-page-D6idOTLp.js +1 -0
- package/dist/assets/model-config-page-bNNo-XyG.js +1 -0
- package/dist/assets/plus-D4DsdLN-.js +1 -0
- package/dist/assets/{provider-scoped-model-input-Cm_a4GHf.js → provider-scoped-model-input-IlgQCsoT.js} +1 -1
- package/dist/assets/providers-config-page-wLo6CAJw.js +1 -0
- package/dist/assets/{react-BN8uzPnp.js → react-BPIsQIlO.js} +1 -1
- package/dist/assets/{refresh-cw-BpVcFPmJ.js → refresh-cw-CILd1vAP.js} +1 -1
- package/dist/assets/remote-uKEYp7AR.js +1 -0
- package/dist/assets/rotate-cw-wPFPg1kH.js +1 -0
- package/dist/assets/runtime-config-page-DDn1sP4G.js +1 -0
- package/dist/assets/{save-BpFW5fpk.js → save-ByJqcPTP.js} +1 -1
- package/dist/assets/{search-D0uO7enf.js → search-DVIV6pfD.js} +1 -1
- package/dist/assets/search-config-page-B-Cf4iiB.js +1 -0
- package/dist/assets/secrets-config-page-DPKsY8Iw.js +3 -0
- package/dist/assets/security-config-e9SSBlKr.js +1 -0
- package/dist/assets/{select-Bh-CrA4p.js → select-BdgczSNw.js} +1 -1
- package/dist/assets/{setting-row-BJfCHRcb.js → setting-row-BkTVUTKx.js} +1 -1
- package/dist/assets/{settings-2-Blzi1vr6.js → settings-2-CH5shGg_.js} +1 -1
- package/dist/assets/{side-dock-ZdaSrQVB.js → side-dock-BsBvcJ9i.js} +2 -2
- package/dist/assets/{skeleton-BLlEzebZ.js → skeleton-DeX1FKw7.js} +1 -1
- package/dist/assets/switch-Cv8Ekb3x.js +1 -0
- package/dist/assets/{tag-chip-CzGihiQx.js → tag-chip-RB9uKcoC.js} +1 -1
- package/dist/assets/{tooltip-CdcrBjrC.js → tooltip-oQlEN-l6.js} +1 -1
- package/dist/assets/{use-config-CVPgsBmU.js → use-config-l3W7y8Qz.js} +1 -1
- package/dist/assets/{use-confirm-dialog-CSeBk9SF.js → use-confirm-dialog-BAxaVOJI.js} +1 -1
- package/dist/assets/x-BBMffEN0.js +1 -0
- package/dist/index.html +38 -30
- package/index.html +12 -4
- package/package.json +9 -9
- package/src/app/components/layout/__tests__/sidebar.layout.test.tsx +29 -1
- package/src/app/components/layout/sidebar-items.tsx +46 -7
- package/src/app/components/layout/sidebar-rail.styles.ts +2 -2
- package/src/app/components/layout/sidebar.tsx +84 -62
- package/src/app/configs/app-navigation.config.ts +49 -0
- package/src/app/styles/design-system.css +99 -4
- package/src/features/channels/components/config/channel-form.tsx +14 -11
- package/src/features/chat/components/conversation/__tests__/chat-conversation-header-section.test.tsx +40 -0
- package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +3 -1
- package/src/features/chat/components/conversation/chat-conversation-panel.tsx +1 -1
- package/src/features/chat/components/layout/__tests__/chat-sidebar-toolbar.test.tsx +48 -0
- package/src/features/chat/components/layout/__tests__/chat-sidebar-utility-menu.test.tsx +55 -0
- package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +0 -3
- package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +3 -4
- package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +30 -31
- package/src/features/chat/components/layout/chat-sidebar.tsx +21 -7
- package/src/features/chat/features/conversation/components/session-conversation-input.tsx +2 -1
- package/src/features/chat/features/conversation/components/session-queued-input-rows.tsx +1 -1
- package/src/features/chat/features/message/components/__tests__/chat-inline-panel-app-card.test.tsx +22 -1
- package/src/features/chat/features/message/components/__tests__/chat-message-list.container.test.tsx +62 -1
- package/src/features/chat/features/message/components/chat-inline-panel-app-card.tsx +10 -5
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +47 -1
- package/src/features/chat/features/message/utils/__tests__/chat-message-process-summary.utils.test.ts +11 -1
- package/src/features/chat/features/message/utils/__tests__/chat-message-texts.utils.test.ts +23 -0
- package/src/features/chat/features/message/utils/chat-inline-panel-app-card.utils.ts +0 -11
- package/src/features/chat/features/message/utils/chat-message-process-summary.utils.ts +5 -0
- package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +138 -0
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-project-groups.test.tsx +116 -0
- package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +108 -46
- package/src/features/chat/features/session/components/chat-sidebar-session-entry.tsx +6 -0
- package/src/features/chat/features/session/components/chat-sidebar-session-item.tsx +48 -24
- package/src/features/chat/features/session/components/chat-sidebar-session-list.tsx +0 -3
- package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +0 -4
- package/src/features/chat/features/session/components/session-header/chat-session-title-switcher.tsx +2 -2
- package/src/features/chat/features/session/utils/chat-sidebar-session-groups.utils.ts +25 -3
- package/src/features/chat/features/welcome/components/chat-welcome-capability-grid.tsx +9 -4
- package/src/features/chat/features/welcome/components/chat-welcome-project-picker.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-session-type-picker.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome.tsx +0 -5
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-file-preview.test.tsx +226 -56
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +1 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel.test.tsx +144 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-directory-browser.tsx +99 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumb-browser.tsx +2 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumbs.tsx +4 -2
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +232 -21
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +3 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +44 -1
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +45 -3
- package/src/features/chat/features/workspace/utils/chat-workspace-file-tab-persistence.utils.ts +4 -0
- package/src/features/chat/managers/__tests__/chat-session-list.manager.test.ts +33 -2
- package/src/features/chat/managers/chat-session-list.manager.ts +32 -0
- package/src/features/chat/managers/chat-thread.manager.ts +2 -0
- package/src/features/chat/stores/chat-session-list.store.ts +28 -5
- package/src/features/chat/stores/chat-thread.store.ts +3 -0
- package/src/features/cron/components/cron-config.tsx +63 -80
- package/src/features/marketplace/components/detail-doc/__tests__/marketplace-detail-doc.test.tsx +44 -6
- package/src/features/marketplace/components/marketplace-detail-doc.tsx +8 -4
- package/src/features/marketplace/components/marketplace-page-parts.tsx +1 -1
- package/src/features/marketplace/components/mcp/mcp-marketplace-page.tsx +5 -12
- package/src/features/marketplace/hooks/use-marketplace-detail-doc-entry.ts +84 -0
- package/src/features/panel-apps/components/panel-app-list-item.tsx +6 -6
- package/src/features/panel-apps/components/panel-apps-list.tsx +2 -2
- package/src/features/panel-apps/index.ts +1 -0
- package/src/features/panel-apps/utils/panel-app-doc-browser.utils.tsx +2 -10
- package/src/features/panel-apps/utils/panel-app-iframe.utils.ts +6 -0
- package/src/features/pwa/managers/__tests__/pwa-shell-theme.manager.test.ts +11 -3
- package/src/features/pwa/managers/pwa-shell-theme.manager.ts +3 -1
- package/src/features/right-panel-resources/components/right-panel-resource-home-page.tsx +1 -1
- package/src/features/service-apps/components/service-apps-panel.tsx +145 -35
- package/src/features/settings/components/config/provider-auth-section.tsx +1 -1
- package/src/features/settings/components/config/provider-form.tsx +11 -8
- package/src/features/settings/components/config/provider-models-section.tsx +7 -7
- package/src/features/settings/components/config/provider-pill-selector.tsx +1 -1
- package/src/features/settings/components/config/secrets-config-form.tsx +5 -4
- package/src/features/settings/pages/model-config-page.tsx +26 -25
- package/src/features/settings/pages/providers-config-page.tsx +10 -13
- package/src/features/settings/pages/search-config-page.tsx +8 -5
- package/src/features/side-dock/components/side-dock.tsx +3 -3
- package/src/features/system-status/components/config/runtime-config-editor.tsx +5 -4
- package/src/index.css +257 -13
- package/src/shared/components/actions/action-link.tsx +1 -1
- package/src/shared/components/config-split-page.tsx +6 -6
- package/src/shared/components/doc-browser/__tests__/doc-browser-url.utils.test.ts +73 -0
- package/src/shared/components/doc-browser/__tests__/doc-browser.test.tsx +48 -0
- package/src/shared/components/doc-browser/doc-browser-context.tsx +4 -0
- package/src/shared/components/doc-browser/doc-browser-panel-parts.tsx +6 -2
- package/src/shared/components/doc-browser/doc-browser-renderer.types.ts +2 -1
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +10 -10
- package/src/shared/components/doc-browser/doc-browser.tsx +6 -4
- package/src/shared/components/doc-browser/utils/doc-browser-url.utils.ts +62 -4
- package/src/shared/components/resizable-right-panel/__tests__/resizable-right-panel.test.tsx +18 -0
- package/src/shared/components/resizable-right-panel/resizable-right-panel.tsx +28 -3
- package/src/shared/components/ui/actions/__tests__/icon-action-button.test.tsx +36 -0
- package/src/shared/components/ui/actions/form-actions.tsx +25 -0
- package/src/shared/components/ui/actions/icon-action-button.tsx +25 -2
- package/src/shared/components/ui/button.tsx +1 -1
- package/src/shared/components/ui/card.tsx +12 -4
- package/src/shared/components/ui/dialog.tsx +1 -1
- package/src/shared/components/ui/input.tsx +1 -1
- package/src/shared/components/ui/select.tsx +1 -1
- package/src/shared/components/ui/switch.tsx +1 -1
- package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +2 -1
- package/src/shared/components/ui/tabs.tsx +1 -1
- package/src/shared/components/ui/textarea.tsx +1 -1
- package/src/shared/hooks/use-server-path-browse.ts +26 -4
- package/src/shared/hooks/use-server-path-read.ts +11 -1
- package/src/shared/lib/api/utils/server-path.utils.ts +1 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +99 -0
- package/src/shared/lib/i18n/locales/en-US/core.json +3 -0
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +5 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +99 -0
- package/src/shared/lib/i18n/locales/zh-CN/core.json +3 -0
- package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +5 -0
- package/src/shared/lib/session-project/workspace-file-breadcrumb.utils.ts +9 -5
- package/src/shared/lib/theme/index.test.ts +21 -0
- package/src/shared/lib/theme/index.ts +6 -4
- package/src/vite-env.d.ts +2 -0
- package/dist/assets/channels-list-page-DcsIQc6A.js +0 -8
- package/dist/assets/chat-page-CZ7WxPir.js +0 -1
- package/dist/assets/config-split-page-BWQ6_Raq.js +0 -1
- package/dist/assets/doc-browser-B_Tf9n70.js +0 -1
- package/dist/assets/doc-browser-BdZPFOVa.js +0 -1
- package/dist/assets/doc-browser-context-DwokemUn.js +0 -1
- package/dist/assets/index-BIcEw90u.js +0 -104
- package/dist/assets/index-BiNSTKTU.css +0 -1
- package/dist/assets/loader-circle-MBgNSVIH.js +0 -1
- package/dist/assets/mcp-marketplace-page-CLmUstLN.js +0 -9
- package/dist/assets/mcp-marketplace-page-rZkmWPMy.js +0 -1
- package/dist/assets/model-config-page-Di0ySJD2.js +0 -1
- package/dist/assets/plus-vDqW5Kxp.js +0 -1
- package/dist/assets/providers-config-page-BAf2W0MV.js +0 -1
- package/dist/assets/remote-CLQ0IBM8.js +0 -1
- package/dist/assets/rotate-cw-CvNBv7_w.js +0 -1
- package/dist/assets/runtime-config-page-CflvvoDc.js +0 -1
- package/dist/assets/search-config-page-D0klFUXd.js +0 -1
- package/dist/assets/secrets-config-page-dVZ631Wp.js +0 -3
- package/dist/assets/security-config-C5gnlkuj.js +0 -1
- package/dist/assets/switch-CFLJFNSd.js +0 -1
- package/dist/assets/x-BF2KQ--V.js +0 -1
- /package/dist/assets/{config-hints-fGnUjDe9.js → config-hints-C_iP1zl_.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as e,p as t,u as n,v as r}from"./react-
|
|
1
|
+
import{h as e,p as t,u as n,v as r}from"./react-BPIsQIlO.js";import{u as i}from"./switch-Cv8Ekb3x.js";var a=r(e(),1),o=t(),s=i(`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] font-medium`,{variants:{tone:{subtle:`border-gray-200 bg-gray-50 text-gray-600`,neutral:`border-gray-200 bg-white text-gray-600`,success:`border-emerald-200 bg-emerald-50 text-emerald-700`,warning:`border-amber-200 bg-amber-50 text-amber-800`,danger:`border-rose-200 bg-rose-50 text-rose-600`,info:`border-primary/20 bg-primary/10 text-primary`}},defaultVariants:{tone:`subtle`}}),c=a.forwardRef(({className:e,tone:t,...r},i)=>(0,o.jsx)(`span`,{ref:i,className:n(s({tone:t}),e),...r}));c.displayName=`TagChip`;export{c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as e,p as t,u as n,v as r}from"./react-
|
|
1
|
+
import{h as e,p as t,u as n,v as r}from"./react-BPIsQIlO.js";import{a as i,b as a,c as o,f as s,g as c,h as l,i as u,l as d,m as f,o as p,r as m,s as h,t as g,u as _,x as v,y}from"./dist-BunzmC4B.js";import{t as b}from"./dist-ChmGwvtK.js";var x=o(`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`}]]),S=r(e(),1),C=t(),[w,T]=y(`Tooltip`,[h]),E=h(),D=`TooltipProvider`,O=700,k=`tooltip.open`,[A,j]=w(D),M=e=>{let{__scopeTooltip:t,delayDuration:n=O,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=S.useRef(!0),s=S.useRef(!1),c=S.useRef(0);return S.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,C.jsx)(A,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:S.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:S.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:S.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};M.displayName=D;var N=`Tooltip`,[ee,P]=w(N),F=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,u=j(N,e.__scopeTooltip),d=E(t),[f,m]=S.useState(null),h=c(),g=S.useRef(0),_=o??u.disableHoverableContent,v=s??u.delayDuration,y=S.useRef(!1),[b,x]=l({prop:r,defaultProp:i??!1,onChange:e=>{e?(u.onOpen(),document.dispatchEvent(new CustomEvent(k))):u.onClose(),a?.(e)},caller:N}),w=S.useMemo(()=>b?y.current?`delayed-open`:`instant-open`:`closed`,[b]),T=S.useCallback(()=>{window.clearTimeout(g.current),g.current=0,y.current=!1,x(!0)},[x]),D=S.useCallback(()=>{window.clearTimeout(g.current),g.current=0,x(!1)},[x]),O=S.useCallback(()=>{window.clearTimeout(g.current),g.current=window.setTimeout(()=>{y.current=!0,x(!0),g.current=0},v)},[v,x]);return S.useEffect(()=>()=>{g.current&&=(window.clearTimeout(g.current),0)},[]),(0,C.jsx)(p,{...d,children:(0,C.jsx)(ee,{scope:t,contentId:h,open:b,stateAttribute:w,trigger:f,onTriggerChange:m,onTriggerEnter:S.useCallback(()=>{u.isOpenDelayedRef.current?O():T()},[u.isOpenDelayedRef,O,T]),onTriggerLeave:S.useCallback(()=>{_?D():(window.clearTimeout(g.current),g.current=0)},[D,_]),onOpen:T,onClose:D,disableHoverableContent:_,children:n})})};F.displayName=N;var I=`TooltipTrigger`,L=S.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=P(I,n),o=j(I,n),c=E(n),l=a(t,S.useRef(null),i.onTriggerChange),u=S.useRef(!1),d=S.useRef(!1),f=S.useCallback(()=>u.current=!1,[]);return S.useEffect(()=>()=>document.removeEventListener(`pointerup`,f),[f]),(0,C.jsx)(m,{asChild:!0,...c,children:(0,C.jsx)(s.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:v(e.onPointerMove,e=>{e.pointerType!==`touch`&&!d.current&&!o.isPointerInTransitRef.current&&(i.onTriggerEnter(),d.current=!0)}),onPointerLeave:v(e.onPointerLeave,()=>{i.onTriggerLeave(),d.current=!1}),onPointerDown:v(e.onPointerDown,()=>{i.open&&i.onClose(),u.current=!0,document.addEventListener(`pointerup`,f,{once:!0})}),onFocus:v(e.onFocus,()=>{u.current||i.onOpen()}),onBlur:v(e.onBlur,i.onClose),onClick:v(e.onClick,i.onClose)})})});L.displayName=I;var R=`TooltipPortal`,[z,B]=w(R,{forceMount:void 0}),V=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=P(R,t);return(0,C.jsx)(z,{scope:t,forceMount:n,children:(0,C.jsx)(b,{present:n||a.open,children:(0,C.jsx)(d,{asChild:!0,container:i,children:r})})})};V.displayName=R;var H=`TooltipContent`,U=S.forwardRef((e,t)=>{let n=B(H,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=P(H,e.__scopeTooltip);return(0,C.jsx)(b,{present:r||o.open,children:o.disableHoverableContent?(0,C.jsx)(K,{side:i,...a,ref:t}):(0,C.jsx)(W,{side:i,...a,ref:t})})}),W=S.forwardRef((e,t)=>{let n=P(H,e.__scopeTooltip),r=j(H,e.__scopeTooltip),i=S.useRef(null),o=a(t,i),[s,c]=S.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,p=S.useCallback(()=>{c(null),f(!1)},[f]),m=S.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=ae(r,ie(r,n.getBoundingClientRect())),a=oe(t.getBoundingClientRect());c(ce([...i,...a])),f(!0)},[f]);return S.useEffect(()=>()=>p(),[p]),S.useEffect(()=>{if(l&&d){let e=e=>m(e,d),t=e=>m(e,l);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),S.useEffect(()=>{if(s){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!se(n,s);r?p():i&&(p(),u())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,s,u,p]),(0,C.jsx)(K,{...e,ref:o})}),[G,te]=w(N,{isInside:!1}),ne=f(`TooltipContent`),K=S.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:s,...c}=e,l=P(H,n),u=E(n),{onClose:d}=l;return S.useEffect(()=>(document.addEventListener(k,d),()=>document.removeEventListener(k,d)),[d]),S.useEffect(()=>{if(l.trigger){let e=e=>{e.target?.contains(l.trigger)&&d()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[l.trigger,d]),(0,C.jsx)(_,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:d,children:(0,C.jsxs)(i,{"data-state":l.stateAttribute,...u,...c,ref:t,style:{...c.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,C.jsx)(ne,{children:r}),(0,C.jsx)(G,{scope:n,isInside:!0,children:(0,C.jsx)(g,{id:l.contentId,role:`tooltip`,children:a||r})})]})})});U.displayName=H;var q=`TooltipArrow`,re=S.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=E(n);return te(q,n).isInside?null:(0,C.jsx)(u,{...i,...r,ref:t})});re.displayName=q;function ie(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 ae(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 oe(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 se(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 ce(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),le(t)}function le(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 J=M,Y=F,X=L,Z=V,Q=U,ue=J,de=Y,fe=X,$=S.forwardRef(({className:e,sideOffset:t=4,...r},i)=>(0,C.jsx)(Z,{children:(0,C.jsx)(Q,{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})}));$.displayName=Q.displayName;export{Q as a,Y as c,fe as i,X as l,$ as n,Z as o,ue as r,J as s,de as t,x as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./react-
|
|
1
|
+
import{r as e}from"./react-BPIsQIlO.js";import{$ as t,H as n,I as r,It as i,J as a,K as o,Lt as s,Q as c,R as l,Rt as u,U as d,V as f,Y as p,Yt as m,at as h,et as g,it as _,nt as v,q as y,rt as b,tt as x,z as S}from"./api-iNBpppzj.js";function C(){return u({queryKey:[`config`],queryFn:f,staleTime:3e4,refetchOnWindowFocus:!0})}function w(){return u({queryKey:[`config-meta`],queryFn:n,staleTime:1/0})}function T(){return u({queryKey:[`providers`],queryFn:y,staleTime:3e4,refetchOnWindowFocus:!0})}function E(){return u({queryKey:[`provider-templates`],queryFn:o,staleTime:1/0})}function D(){return u({queryKey:[`config-schema`],queryFn:d,staleTime:1/0})}function O(){let t=m();return s({mutationFn:x,onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),i.success(e(`configSaved`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function k(){let t=m();return s({mutationFn:({data:e})=>_(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),i.success(e(`configSavedApplied`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function A(){let t=m();return s({mutationFn:({provider:e,data:t})=>v(e,t),onSuccess:(n,r)=>{t.invalidateQueries({queryKey:[`providers`]}),t.invalidateQueries({queryKey:[`config`]}),r.silentSuccess||i.success(e(`configSaved`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function j(){let t=m();return s({mutationFn:({data:e})=>r(e??{}),onSuccess:()=>{t.invalidateQueries({queryKey:[`providers`]}),t.invalidateQueries({queryKey:[`config`]}),i.success(e(`configSaved`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function M(){let t=m();return s({mutationFn:({provider:e})=>l(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`providers`]}),t.invalidateQueries({queryKey:[`config`]}),i.success(e(`configSaved`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function N(){return s({mutationFn:({provider:e,data:n})=>t(e,n)})}function P(){return s({mutationFn:({provider:e,data:t})=>c(e,t)})}function F(){return s({mutationFn:({provider:e,data:t})=>p(e,t)})}function I(){return s({mutationFn:({provider:e})=>a(e)})}function L(){let t=m();return s({mutationFn:({channel:e,data:t})=>g(e,t),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),i.success(e(`configSavedApplying`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function R(){let t=m();return s({mutationFn:({data:e})=>b(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),i.success(e(`configSavedApplied`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function z(){let t=m();return s({mutationFn:({data:e})=>h(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),i.success(e(`configSavedApplied`))},onError:t=>{i.error(e(`configSaveFailed`)+`: `+t.message)}})}function B(){return s({mutationFn:({actionId:e,data:t})=>S(e,t),onError:t=>{i.error(e(`error`)+`: `+t.message)}})}export{k as _,M as a,F as c,P as d,N as f,R as g,A as h,j as i,E as l,O as m,w as n,B as o,L as p,D as r,I as s,C as t,T as u,z as v};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as e,p as t,r as n,v as r}from"./react-
|
|
1
|
+
import{h as e,p as t,r as n,v as r}from"./react-BPIsQIlO.js";import{t as i}from"./confirm-dialog-Chv50USy.js";var a=r(e(),1),o=t(),s={open:!1,title:``,description:``,confirmLabel:n(`confirm`),cancelLabel:n(`cancel`),variant:`default`,resolve:null};function c(){let[e,t]=(0,a.useState)(s),r=(0,a.useCallback)(e=>new Promise(r=>{t({open:!0,title:e.title,description:e.description??``,confirmLabel:e.confirmLabel??n(`confirm`),cancelLabel:e.cancelLabel??n(`cancel`),variant:e.variant??`default`,resolve:e=>{r(e),t(e=>({...e,open:!1,resolve:null}))}})}),[]),c=(0,a.useCallback)(e=>{t(t=>(!e&&t.resolve&&t.resolve(!1),{...t,open:e,resolve:e?t.resolve:null}))},[]);return{confirm:r,ConfirmDialog:(0,a.useCallback)(()=>(0,o.jsx)(i,{open:e.open,onOpenChange:c,title:e.title,description:e.description||void 0,confirmLabel:e.confirmLabel,cancelLabel:e.cancelLabel,variant:e.variant,onConfirm:()=>e.resolve?.(!0),onCancel:()=>e.resolve?.(!1)}),[e,c])}}export{c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e}from"./dist-BunzmC4B.js";var t=e(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};
|
package/dist/index.html
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
<meta name="apple-mobile-web-app-title" content="NextClaw" />
|
|
12
12
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
13
13
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
14
|
-
<meta name="theme-color" content="#
|
|
15
|
-
<meta name="color-scheme" content="light
|
|
14
|
+
<meta name="theme-color" content="#FFFFFF" />
|
|
15
|
+
<meta name="color-scheme" content="light" />
|
|
16
16
|
<style>
|
|
17
17
|
html,
|
|
18
18
|
body,
|
|
19
19
|
#root {
|
|
20
|
-
background: #
|
|
20
|
+
background: #ffffff;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
html[data-theme="minimal"],
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
background: #ffffff;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
html[data-theme="work"],
|
|
30
|
+
html[data-theme="work"] body,
|
|
31
|
+
html[data-theme="work"] #root {
|
|
32
|
+
background: #ffffff;
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
html[data-theme="warm"],
|
|
30
36
|
html[data-theme="warm"] body,
|
|
31
37
|
html[data-theme="warm"] #root {
|
|
@@ -68,6 +74,7 @@
|
|
|
68
74
|
const storedTheme = window.localStorage.getItem(storageKey);
|
|
69
75
|
const themeColors = {
|
|
70
76
|
natural: '#FAF9F7',
|
|
77
|
+
work: '#FFFFFF',
|
|
71
78
|
minimal: '#FFFFFF',
|
|
72
79
|
warm: '#FAF8F4',
|
|
73
80
|
cool: '#F8FAFC',
|
|
@@ -78,6 +85,7 @@
|
|
|
78
85
|
};
|
|
79
86
|
const themeAppearances = {
|
|
80
87
|
natural: 'light',
|
|
88
|
+
work: 'light',
|
|
81
89
|
minimal: 'light',
|
|
82
90
|
warm: 'light',
|
|
83
91
|
cool: 'light',
|
|
@@ -94,7 +102,7 @@
|
|
|
94
102
|
: storedTheme;
|
|
95
103
|
const nextTheme = Object.prototype.hasOwnProperty.call(themeColors, normalizedStoredTheme)
|
|
96
104
|
? normalizedStoredTheme
|
|
97
|
-
: '
|
|
105
|
+
: 'work';
|
|
98
106
|
if (storedTheme !== nextTheme) {
|
|
99
107
|
window.localStorage.setItem(storageKey, nextTheme);
|
|
100
108
|
}
|
|
@@ -178,34 +186,34 @@
|
|
|
178
186
|
})();
|
|
179
187
|
</script>
|
|
180
188
|
<title>NextClaw</title>
|
|
181
|
-
<script type="module" crossorigin src="/assets/index-
|
|
182
|
-
<link rel="modulepreload" crossorigin href="/assets/react-
|
|
183
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
184
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
185
|
-
<link rel="modulepreload" crossorigin href="/assets/tooltip-
|
|
186
|
-
<link rel="modulepreload" crossorigin href="/assets/book-open-
|
|
187
|
-
<link rel="modulepreload" crossorigin href="/assets/plus-
|
|
188
|
-
<link rel="modulepreload" crossorigin href="/assets/x-
|
|
189
|
+
<script type="module" crossorigin src="/assets/index-DGqHne1Q.js"></script>
|
|
190
|
+
<link rel="modulepreload" crossorigin href="/assets/react-BPIsQIlO.js">
|
|
191
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-BunzmC4B.js">
|
|
192
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-ChmGwvtK.js">
|
|
193
|
+
<link rel="modulepreload" crossorigin href="/assets/tooltip-oQlEN-l6.js">
|
|
194
|
+
<link rel="modulepreload" crossorigin href="/assets/book-open-C3mJGwiy.js">
|
|
195
|
+
<link rel="modulepreload" crossorigin href="/assets/plus-D4DsdLN-.js">
|
|
196
|
+
<link rel="modulepreload" crossorigin href="/assets/x-BBMffEN0.js">
|
|
189
197
|
<link rel="modulepreload" crossorigin href="/assets/middleware-BILWbJE4.js">
|
|
190
|
-
<link rel="modulepreload" crossorigin href="/assets/doc-browser-context-
|
|
191
|
-
<link rel="modulepreload" crossorigin href="/assets/es2015-
|
|
192
|
-
<link rel="modulepreload" crossorigin href="/assets/switch-
|
|
193
|
-
<link rel="modulepreload" crossorigin href="/assets/confirm-dialog-
|
|
194
|
-
<link rel="modulepreload" crossorigin href="/assets/use-confirm-dialog-
|
|
198
|
+
<link rel="modulepreload" crossorigin href="/assets/doc-browser-context-BHY-0FSD.js">
|
|
199
|
+
<link rel="modulepreload" crossorigin href="/assets/es2015-DQZ5JWwK.js">
|
|
200
|
+
<link rel="modulepreload" crossorigin href="/assets/switch-Cv8Ekb3x.js">
|
|
201
|
+
<link rel="modulepreload" crossorigin href="/assets/confirm-dialog-Chv50USy.js">
|
|
202
|
+
<link rel="modulepreload" crossorigin href="/assets/use-confirm-dialog-BAxaVOJI.js">
|
|
195
203
|
<link rel="modulepreload" crossorigin href="/assets/host-capabilities-9bB_998Z.js">
|
|
196
|
-
<link rel="modulepreload" crossorigin href="/assets/side-dock-
|
|
197
|
-
<link rel="modulepreload" crossorigin href="/assets/select-
|
|
198
|
-
<link rel="modulepreload" crossorigin href="/assets/api-
|
|
199
|
-
<link rel="modulepreload" crossorigin href="/assets/search-
|
|
200
|
-
<link rel="modulepreload" crossorigin href="/assets/external-link-
|
|
201
|
-
<link rel="modulepreload" crossorigin href="/assets/refresh-cw-
|
|
202
|
-
<link rel="modulepreload" crossorigin href="/assets/doc-browser-
|
|
203
|
-
<link rel="modulepreload" crossorigin href="/assets/i18n-provider-
|
|
204
|
-
<link rel="modulepreload" crossorigin href="/assets/loader-circle-
|
|
205
|
-
<link rel="modulepreload" crossorigin href="/assets/skeleton-
|
|
206
|
-
<link rel="modulepreload" crossorigin href="/assets/tag-chip-
|
|
207
|
-
<link rel="modulepreload" crossorigin href="/assets/mcp-marketplace-page-
|
|
208
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
204
|
+
<link rel="modulepreload" crossorigin href="/assets/side-dock-BsBvcJ9i.js">
|
|
205
|
+
<link rel="modulepreload" crossorigin href="/assets/select-BdgczSNw.js">
|
|
206
|
+
<link rel="modulepreload" crossorigin href="/assets/api-iNBpppzj.js">
|
|
207
|
+
<link rel="modulepreload" crossorigin href="/assets/search-DVIV6pfD.js">
|
|
208
|
+
<link rel="modulepreload" crossorigin href="/assets/external-link-CU0kzzIP.js">
|
|
209
|
+
<link rel="modulepreload" crossorigin href="/assets/refresh-cw-CILd1vAP.js">
|
|
210
|
+
<link rel="modulepreload" crossorigin href="/assets/doc-browser-Dg0pmkOg.js">
|
|
211
|
+
<link rel="modulepreload" crossorigin href="/assets/i18n-provider-Cu8XyZb_.js">
|
|
212
|
+
<link rel="modulepreload" crossorigin href="/assets/loader-circle-CDSFuzmk.js">
|
|
213
|
+
<link rel="modulepreload" crossorigin href="/assets/skeleton-DeX1FKw7.js">
|
|
214
|
+
<link rel="modulepreload" crossorigin href="/assets/tag-chip-RB9uKcoC.js">
|
|
215
|
+
<link rel="modulepreload" crossorigin href="/assets/mcp-marketplace-page-BeEQK0DL.js">
|
|
216
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CzfBdvK1.css">
|
|
209
217
|
</head>
|
|
210
218
|
|
|
211
219
|
<body>
|
package/index.html
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
<meta name="apple-mobile-web-app-title" content="NextClaw" />
|
|
12
12
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
13
13
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
14
|
-
<meta name="theme-color" content="#
|
|
15
|
-
<meta name="color-scheme" content="light
|
|
14
|
+
<meta name="theme-color" content="#FFFFFF" />
|
|
15
|
+
<meta name="color-scheme" content="light" />
|
|
16
16
|
<style>
|
|
17
17
|
html,
|
|
18
18
|
body,
|
|
19
19
|
#root {
|
|
20
|
-
background: #
|
|
20
|
+
background: #ffffff;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
html[data-theme="minimal"],
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
background: #ffffff;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
html[data-theme="work"],
|
|
30
|
+
html[data-theme="work"] body,
|
|
31
|
+
html[data-theme="work"] #root {
|
|
32
|
+
background: #ffffff;
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
html[data-theme="warm"],
|
|
30
36
|
html[data-theme="warm"] body,
|
|
31
37
|
html[data-theme="warm"] #root {
|
|
@@ -68,6 +74,7 @@
|
|
|
68
74
|
const storedTheme = window.localStorage.getItem(storageKey);
|
|
69
75
|
const themeColors = {
|
|
70
76
|
natural: '#FAF9F7',
|
|
77
|
+
work: '#FFFFFF',
|
|
71
78
|
minimal: '#FFFFFF',
|
|
72
79
|
warm: '#FAF8F4',
|
|
73
80
|
cool: '#F8FAFC',
|
|
@@ -78,6 +85,7 @@
|
|
|
78
85
|
};
|
|
79
86
|
const themeAppearances = {
|
|
80
87
|
natural: 'light',
|
|
88
|
+
work: 'light',
|
|
81
89
|
minimal: 'light',
|
|
82
90
|
warm: 'light',
|
|
83
91
|
cool: 'light',
|
|
@@ -94,7 +102,7 @@
|
|
|
94
102
|
: storedTheme;
|
|
95
103
|
const nextTheme = Object.prototype.hasOwnProperty.call(themeColors, normalizedStoredTheme)
|
|
96
104
|
? normalizedStoredTheme
|
|
97
|
-
: '
|
|
105
|
+
: 'work';
|
|
98
106
|
if (storedTheme !== nextTheme) {
|
|
99
107
|
window.localStorage.setItem(storageKey, nextTheme);
|
|
100
108
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/ui",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"tailwind-merge": "^2.5.4",
|
|
29
29
|
"zod": "^3.23.8",
|
|
30
30
|
"zustand": "^5.0.2",
|
|
31
|
-
"@nextclaw/
|
|
32
|
-
"@nextclaw/
|
|
33
|
-
"@nextclaw/client
|
|
34
|
-
"@nextclaw/ncp
|
|
35
|
-
"@nextclaw/ncp-
|
|
36
|
-
"@nextclaw/shared": "0.4.
|
|
37
|
-
"@nextclaw/
|
|
38
|
-
"@nextclaw/
|
|
31
|
+
"@nextclaw/agent-chat-ui": "0.6.3",
|
|
32
|
+
"@nextclaw/client-sdk": "0.5.3",
|
|
33
|
+
"@nextclaw/ncp-http-agent-client": "0.4.3",
|
|
34
|
+
"@nextclaw/ncp": "0.7.3",
|
|
35
|
+
"@nextclaw/ncp-toolkit": "0.6.3",
|
|
36
|
+
"@nextclaw/shared": "0.4.3",
|
|
37
|
+
"@nextclaw/agent-chat": "0.3.2",
|
|
38
|
+
"@nextclaw/ncp-react": "0.5.3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@testing-library/react": "^16.3.0",
|
|
@@ -120,7 +120,35 @@ describe("Sidebar", () => {
|
|
|
120
120
|
const linkTexts = within(nav)
|
|
121
121
|
.getAllByRole("link")
|
|
122
122
|
.map((link) => link.textContent?.trim() || "");
|
|
123
|
-
|
|
123
|
+
const groupHeadings = within(nav)
|
|
124
|
+
.getAllByRole("heading", { level: 2 })
|
|
125
|
+
.map((heading) => heading.textContent?.trim() || "");
|
|
126
|
+
const groups = Array.from(nav.querySelectorAll("section"));
|
|
127
|
+
|
|
128
|
+
expect(groupHeadings).toEqual([
|
|
129
|
+
"Basic Configuration",
|
|
130
|
+
"Advanced Configuration",
|
|
131
|
+
]);
|
|
132
|
+
expect(groups).toHaveLength(2);
|
|
133
|
+
expect(
|
|
134
|
+
within(groups[0] as HTMLElement)
|
|
135
|
+
.getAllByRole("link")
|
|
136
|
+
.map((link) => link.textContent?.trim() || ""),
|
|
137
|
+
).toEqual(["Model", "Providers", "Channels"]);
|
|
138
|
+
expect(
|
|
139
|
+
within(groups[1] as HTMLElement)
|
|
140
|
+
.getAllByRole("link")
|
|
141
|
+
.map((link) => link.textContent?.trim() || ""),
|
|
142
|
+
).toEqual([
|
|
143
|
+
"Search Channels",
|
|
144
|
+
"Appearance",
|
|
145
|
+
"Security",
|
|
146
|
+
"Routing & Runtime",
|
|
147
|
+
"Updates",
|
|
148
|
+
"Remote Access",
|
|
149
|
+
"Secrets",
|
|
150
|
+
"MCP",
|
|
151
|
+
]);
|
|
124
152
|
expect(linkTexts).toEqual([
|
|
125
153
|
"Model",
|
|
126
154
|
"Providers",
|
|
@@ -19,8 +19,14 @@ import {
|
|
|
19
19
|
SIDEBAR_RAIL_SURFACE_CLASS,
|
|
20
20
|
} from "@/app/components/layout/sidebar-rail.styles";
|
|
21
21
|
|
|
22
|
-
type SidebarIcon = ComponentType<{ className?: string }>;
|
|
23
|
-
type SidebarItemDensity = "default" | "compact";
|
|
22
|
+
export type SidebarIcon = ComponentType<{ className?: string }>;
|
|
23
|
+
export type SidebarItemDensity = "default" | "compact";
|
|
24
|
+
|
|
25
|
+
export type SidebarNavListItem = {
|
|
26
|
+
target: string;
|
|
27
|
+
label: string;
|
|
28
|
+
icon: SidebarIcon;
|
|
29
|
+
};
|
|
24
30
|
|
|
25
31
|
type SidebarItemTone = {
|
|
26
32
|
row: string;
|
|
@@ -104,7 +110,7 @@ export function SidebarNavLinkItem({
|
|
|
104
110
|
aria-label={label}
|
|
105
111
|
aria-current={isActive ? "page" : undefined}
|
|
106
112
|
className={cn(
|
|
107
|
-
"group flex w-full items-center rounded-xl font-medium transition-colors duration-base focus-visible:outline-none focus-visible:ring-
|
|
113
|
+
"group flex w-full items-center rounded-xl font-medium transition-colors duration-base focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border",
|
|
108
114
|
collapsed
|
|
109
115
|
? cn(SIDEBAR_RAIL_CONTROL_CLASS, "justify-center px-0 py-0")
|
|
110
116
|
: tone.row,
|
|
@@ -124,7 +130,7 @@ export function SidebarNavLinkItem({
|
|
|
124
130
|
"shrink-0 transition-colors",
|
|
125
131
|
isActive
|
|
126
132
|
? "text-gray-700"
|
|
127
|
-
: "text-muted-foreground
|
|
133
|
+
: "text-muted-foreground group-hover:text-gray-700",
|
|
128
134
|
)}
|
|
129
135
|
/>
|
|
130
136
|
<span className={collapsed ? "sr-only" : "min-w-0 flex-1 text-left"}>
|
|
@@ -140,6 +146,39 @@ export function SidebarNavLinkItem({
|
|
|
140
146
|
);
|
|
141
147
|
}
|
|
142
148
|
|
|
149
|
+
type SidebarNavigationListProps = {
|
|
150
|
+
isCollapsed: boolean;
|
|
151
|
+
items: SidebarNavListItem[];
|
|
152
|
+
density: SidebarItemDensity;
|
|
153
|
+
className: string;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export function SidebarNavigationList({
|
|
157
|
+
isCollapsed,
|
|
158
|
+
items,
|
|
159
|
+
density,
|
|
160
|
+
className,
|
|
161
|
+
}: SidebarNavigationListProps) {
|
|
162
|
+
return (
|
|
163
|
+
<ul className={className}>
|
|
164
|
+
{items.map((item) => (
|
|
165
|
+
<li
|
|
166
|
+
key={item.target}
|
|
167
|
+
className={isCollapsed ? "flex justify-center" : undefined}
|
|
168
|
+
>
|
|
169
|
+
<SidebarNavLinkItem
|
|
170
|
+
to={item.target}
|
|
171
|
+
label={item.label}
|
|
172
|
+
icon={item.icon}
|
|
173
|
+
density={density}
|
|
174
|
+
collapsed={isCollapsed}
|
|
175
|
+
/>
|
|
176
|
+
</li>
|
|
177
|
+
))}
|
|
178
|
+
</ul>
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
143
182
|
type SidebarActionItemProps = {
|
|
144
183
|
label: string;
|
|
145
184
|
icon: SidebarIcon;
|
|
@@ -174,7 +213,7 @@ export function SidebarActionItem({
|
|
|
174
213
|
onClick={onClick}
|
|
175
214
|
aria-label={label}
|
|
176
215
|
className={cn(
|
|
177
|
-
"group flex w-full items-center rounded-xl font-medium text-muted-foreground transition-colors duration-base hover:bg-gray-200/60 hover:text-gray-900 focus-visible:outline-none focus-visible:ring-
|
|
216
|
+
"group flex w-full items-center rounded-xl font-medium text-muted-foreground transition-colors duration-base hover:bg-gray-200/60 hover:text-gray-900 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border",
|
|
178
217
|
collapsed
|
|
179
218
|
? cn(
|
|
180
219
|
SIDEBAR_RAIL_CONTROL_CLASS,
|
|
@@ -189,7 +228,7 @@ export function SidebarActionItem({
|
|
|
189
228
|
<Icon
|
|
190
229
|
className={cn(
|
|
191
230
|
collapsed ? SIDEBAR_RAIL_ICON_CLASS : tone.icon,
|
|
192
|
-
"shrink-0 text-muted-foreground
|
|
231
|
+
"shrink-0 text-muted-foreground transition-colors group-hover:text-gray-700",
|
|
193
232
|
)}
|
|
194
233
|
/>
|
|
195
234
|
<span
|
|
@@ -248,7 +287,7 @@ export function SidebarSelectItem({
|
|
|
248
287
|
<SelectTrigger
|
|
249
288
|
aria-label={label}
|
|
250
289
|
className={cn(
|
|
251
|
-
"group h-auto w-full rounded-xl border-0 bg-transparent font-medium text-muted-foreground shadow-none hover:bg-gray-200/60 hover:text-gray-900 focus:ring-0 focus-visible:ring-
|
|
290
|
+
"group h-auto w-full rounded-xl border-0 bg-transparent font-medium text-muted-foreground shadow-none hover:bg-gray-200/60 hover:text-gray-900 focus:ring-0 focus-visible:ring-1 focus-visible:ring-border",
|
|
252
291
|
collapsed
|
|
253
292
|
? cn(
|
|
254
293
|
SIDEBAR_RAIL_CONTROL_CLASS,
|
|
@@ -9,9 +9,9 @@ export const SIDEBAR_SCROLL_EDGE_FADE_CLASS =
|
|
|
9
9
|
"[mask-image:linear-gradient(to_bottom,black_calc(100%_-_28px),transparent)] [-webkit-mask-image:linear-gradient(to_bottom,black_calc(100%_-_28px),transparent)]";
|
|
10
10
|
|
|
11
11
|
export const SIDEBAR_RAIL_SURFACE_CLASS =
|
|
12
|
-
"text-muted-foreground transition-colors duration-base hover:bg-gray-200/60 hover:text-gray-900 active:bg-gray-200/80 focus-visible:outline-none focus-visible:ring-
|
|
12
|
+
"text-muted-foreground transition-colors duration-base hover:bg-gray-200/60 hover:text-gray-900 active:bg-gray-200/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border";
|
|
13
13
|
|
|
14
14
|
export const SIDEBAR_RAIL_ACTIVE_SURFACE_CLASS = "bg-gray-200/80 text-gray-900";
|
|
15
15
|
|
|
16
16
|
export const SIDEBAR_RAIL_PRIMARY_SURFACE_CLASS =
|
|
17
|
-
"bg-primary/10 text-primary transition-colors duration-base hover:bg-primary/15 hover:text-primary-700 active:bg-primary/20 focus-visible:outline-none focus-visible:ring-
|
|
17
|
+
"bg-primary/10 text-primary transition-colors duration-base hover:bg-primary/15 hover:text-primary-700 active:bg-primary/20 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border";
|