From efa8d07992f451dfee41cab38d683c91008275ca Mon Sep 17 00:00:00 2001 From: Jamie Pine Date: Sat, 4 Apr 2026 21:35:20 -0700 Subject: [PATCH] Rename @spaceui/* deps to @spacedrive/* --- CONTRIBUTING.md | 14 ++-- apps/mobile/metro.config.js | 4 +- apps/mobile/package.json | 2 +- apps/mobile/tailwind.config.js | 2 +- apps/tauri/package.json | 2 +- apps/tauri/src/index.css | 16 ++-- apps/tauri/src/routes/ContextMenuWindow.tsx | 2 +- apps/tauri/vite.config.ts | 10 +-- apps/web/vite.config.ts | 8 +- bun.lockb | Bin 866878 -> 866902 bytes docs/design/MIGRATE-TO-SPACEUI.md | 26 +++--- docs/design/POPOVER-REFACTOR.md | 6 +- packages/interface/SHARED-UI-STRATEGY.md | 74 +++++++++--------- packages/interface/package.json | 6 +- .../src/Settings/pages/AboutSettings.tsx | 2 +- packages/interface/src/Shell.tsx | 2 +- .../interface/src/Spacebot/ChatComposer.tsx | 4 +- .../src/Spacebot/ConversationScreen.tsx | 6 +- .../src/Spacebot/InlineWorkerCard.tsx | 2 +- .../src/Spacebot/SpacebotContext.tsx | 2 +- .../interface/src/Spacebot/SpacebotLayout.tsx | 2 +- .../src/Spacebot/routes/TasksRoute.tsx | 2 +- .../interface/src/TopBar/OverflowMenu.tsx | 2 +- .../Inspector/variants/FileInspector.tsx | 2 +- .../Inspector/variants/LocationInspector.tsx | 2 +- .../JobManager/JobManagerPopover.tsx | 2 +- .../JobManager/JobsScreen/index.tsx | 2 +- .../QuickPreview/ContentRenderer.tsx | 2 +- .../components/QuickPreview/MeshViewer.tsx | 2 +- .../SpacesSidebar/AddGroupModal.tsx | 2 +- .../SpacesSidebar/CreateSpaceModal.tsx | 2 +- .../SpacesSidebar/SpaceCustomizationPanel.tsx | 2 +- .../SpacesSidebar/SpaceSwitcher.tsx | 2 +- .../src/components/SpacesSidebar/index.tsx | 2 +- .../SyncMonitor/SyncMonitorPopover.tsx | 2 +- .../src/components/TabManager/TabBar.tsx | 2 +- .../src/components/Tags/TagSelector.tsx | 2 +- .../src/components/WrappedPopover.tsx | 4 +- .../components/modals/CreateLibraryModal.tsx | 2 +- .../components/modals/FileOperationModal.tsx | 2 +- .../src/components/modals/SyncSetupModal.tsx | 2 +- .../overlays/DaemonDisconnectedOverlay.tsx | 2 +- packages/interface/src/hooks/useOpenWith.ts | 2 +- .../src/routes/explorer/ExplorerView.tsx | 2 +- .../src/routes/explorer/SortMenu.tsx | 2 +- .../src/routes/explorer/TagAssignmentMode.tsx | 2 +- .../src/routes/explorer/ViewModeMenu.tsx | 2 +- .../src/routes/explorer/ViewSettings.tsx | 2 +- .../explorer/components/AddLocationModal.tsx | 2 +- .../explorer/components/AddStorageModal.tsx | 2 +- .../components/ExpandableSearchButton.tsx | 2 +- .../explorer/components/InlineNameEdit.tsx | 2 +- .../routes/explorer/components/PathBar.tsx | 2 +- .../explorer/views/SizeView/SizeView.tsx | 2 +- .../src/routes/overview/DevicePanel.tsx | 2 +- .../src/routes/overview/HeroStats.tsx | 2 +- .../src/routes/overview/OverviewTopBar.tsx | 2 +- .../src/routes/overview/VolumeBar.tsx | 2 +- .../interface/src/routes/sources/Adapters.tsx | 2 +- .../src/routes/sources/SourceDetail.tsx | 2 +- .../interface/src/routes/sources/index.tsx | 4 +- packages/interface/src/windows/DemoWindow.tsx | 2 +- packages/interface/src/windows/Spacedrop.tsx | 2 +- .../interface/src/windows/VoiceOverlay.tsx | 2 +- 64 files changed, 141 insertions(+), 141 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 17dabbfe6..589f5d560 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -584,11 +584,11 @@ Spacedrive's UI components come from [SpaceUI](https://github.com/spacedriveapp/ | Package | Description | |---------|-------------| -| `@spaceui/tokens` | Design tokens, semantic color system, Tailwind v4 theme | -| `@spaceui/primitives` | Base UI components built on Radix UI | -| `@spaceui/forms` | Form field wrappers for react-hook-form | -| `@spaceui/ai` | AI agent interaction components | -| `@spaceui/explorer` | File management components | +| `@spacedrive/tokens` | Design tokens, semantic color system, Tailwind v4 theme | +| `@spacedrive/primitives` | Base UI components built on Radix UI | +| `@spacedrive/forms` | Form field wrappers for react-hook-form | +| `@spacedrive/ai` | AI agent interaction components | +| `@spacedrive/explorer` | File management components | ### Working on UI Alongside Spacedrive @@ -615,14 +615,14 @@ bun run link # Link into Spacedrive cd ../spacedrive -bun link @spaceui/tokens @spaceui/primitives @spaceui/ai +bun link @spacedrive/tokens @spacedrive/primitives @spacedrive/ai ``` With linking active, changes you make in `spaceui/` are picked up immediately by Spacedrive's Vite dev server — no rebuild needed. The Vite configs in `apps/tauri/` and `apps/web/` already have the necessary source aliases, `optimizeDeps.exclude`, and `server.fs.allow` settings configured. ### If You're Only Working on Spacedrive -If you're not modifying SpaceUI itself, you don't need to clone it. Spacedrive consumes published `@spaceui/*` packages from npm. Just run `bun install` and everything resolves from the registry. +If you're not modifying SpaceUI itself, you don't need to clone it. Spacedrive consumes published `@spacedrive/*` packages from npm. Just run `bun install` and everything resolves from the registry. ### SpaceUI Integration Guide diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js index ac47820f7..c0f41157e 100644 --- a/apps/mobile/metro.config.js +++ b/apps/mobile/metro.config.js @@ -6,7 +6,7 @@ const path = require("path"); const projectRoot = __dirname; const workspaceRoot = path.resolve(projectRoot, "../.."); const spaceUiTokensRoot = path.dirname( - require.resolve("@spaceui/tokens/raw-colors", { paths: [projectRoot, workspaceRoot] }) + require.resolve("@spacedrive/tokens/raw-colors", { paths: [projectRoot, workspaceRoot] }) ); const spaceUiTokensNodeModules = path.resolve(spaceUiTokensRoot, "node_modules"); @@ -50,7 +50,7 @@ config.resolver = { // Dynamically resolve React/React Native from wherever the package manager installed them extraNodeModules: { - "@spaceui/tokens": spaceUiTokensRoot, + "@spacedrive/tokens": spaceUiTokensRoot, react: path.dirname(require.resolve("react/package.json", { paths: [projectRoot, workspaceRoot] })), "react-native": path.dirname( require.resolve("react-native/package.json", { paths: [projectRoot, workspaceRoot] }) diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 5b114dc30..0c07eb9c1 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -29,7 +29,7 @@ "@react-navigation/native-stack": "^7.2.0", "@sd/assets": "workspace:*", "@sd/ts-client": "workspace:*", - "@spaceui/tokens": "link:@spaceui/tokens", + "@spacedrive/tokens": "link:@spacedrive/tokens", "@shopify/flash-list": "2.0.2", "@tanstack/react-query": "^5.59.0", "class-variance-authority": "^0.7.1", diff --git a/apps/mobile/tailwind.config.js b/apps/mobile/tailwind.config.js index ab1b95c8c..3080cc472 100644 --- a/apps/mobile/tailwind.config.js +++ b/apps/mobile/tailwind.config.js @@ -1,4 +1,4 @@ -const sharedColors = require('@spaceui/tokens/raw-colors'); +const sharedColors = require('@spacedrive/tokens/raw-colors'); /** * Convert shared color format (HSL string) to NativeWind format (hsl() function) diff --git a/apps/tauri/package.json b/apps/tauri/package.json index 371f56b28..d3f3f4e49 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "@headlessui/tailwindcss": "^0.2.0", - "@spaceui/tokens": "link:@spaceui/tokens", + "@spacedrive/tokens": "link:@spacedrive/tokens", "@tailwindcss/forms": "^0.5.7", "@tailwindcss/typography": "^0.5.10", "@tailwindcss/vite": "^4.1.0", diff --git a/apps/tauri/src/index.css b/apps/tauri/src/index.css index f6c549488..69e2738d2 100644 --- a/apps/tauri/src/index.css +++ b/apps/tauri/src/index.css @@ -1,12 +1,12 @@ @import "tailwindcss"; -@import "@spaceui/tokens/src/css/theme.css"; -@import "@spaceui/tokens/src/css/base.css"; -@import "@spaceui/tokens/src/css/themes/light.css"; -@import "@spaceui/tokens/src/css/themes/midnight.css"; -@import "@spaceui/tokens/src/css/themes/noir.css"; -@import "@spaceui/tokens/src/css/themes/slate.css"; -@import "@spaceui/tokens/src/css/themes/nord.css"; -@import "@spaceui/tokens/src/css/themes/mocha.css"; +@import "@spacedrive/tokens/src/css/theme.css"; +@import "@spacedrive/tokens/src/css/base.css"; +@import "@spacedrive/tokens/src/css/themes/light.css"; +@import "@spacedrive/tokens/src/css/themes/midnight.css"; +@import "@spacedrive/tokens/src/css/themes/noir.css"; +@import "@spacedrive/tokens/src/css/themes/slate.css"; +@import "@spacedrive/tokens/src/css/themes/nord.css"; +@import "@spacedrive/tokens/src/css/themes/mocha.css"; /* Tell Tailwind v4 where to scan for utility classes */ @source "../../../packages/ui/src"; diff --git a/apps/tauri/src/routes/ContextMenuWindow.tsx b/apps/tauri/src/routes/ContextMenuWindow.tsx index 19bba546a..e014841b1 100644 --- a/apps/tauri/src/routes/ContextMenuWindow.tsx +++ b/apps/tauri/src/routes/ContextMenuWindow.tsx @@ -1,6 +1,6 @@ import { invoke } from "@tauri-apps/api/core"; import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; -import { ContextMenu } from "@spaceui/primitives"; +import { ContextMenu } from "@spacedrive/primitives"; import { useEffect, useRef, useState } from "react"; export interface MenuItem { diff --git a/apps/tauri/vite.config.ts b/apps/tauri/vite.config.ts index 905c13bd5..8cda2945e 100644 --- a/apps/tauri/vite.config.ts +++ b/apps/tauri/vite.config.ts @@ -54,28 +54,28 @@ export default defineConfig(async () => ({ ) }, { - find: '@spaceui/tokens/src/css', + find: '@spacedrive/tokens/src/css', replacement: path.resolve( __dirname, '../../../spaceui/packages/tokens/src/css' ) }, { - find: '@spaceui/tokens', + find: '@spacedrive/tokens', replacement: path.resolve( __dirname, '../../../spaceui/packages/tokens' ) }, { - find: '@spaceui/ai', + find: '@spacedrive/ai', replacement: path.resolve( __dirname, '../../../spaceui/packages/ai/src/index.ts' ) }, { - find: '@spaceui/primitives', + find: '@spacedrive/primitives', replacement: path.resolve( __dirname, '../../../spaceui/packages/primitives/src/index.ts' @@ -106,7 +106,7 @@ export default defineConfig(async () => ({ }, optimizeDeps: { - exclude: ['@spaceui/ai', '@spaceui/primitives', '@spaceui/tokens'] + exclude: ['@spacedrive/ai', '@spacedrive/primitives', '@spacedrive/tokens'] }, clearScreen: false, diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 2db7c32d7..596f48bf8 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -28,21 +28,21 @@ export default defineConfig({ replacement: path.resolve(__dirname, "./node_modules/react-dom/client.js"), }, { - find: "@spaceui/tokens/css/themes", + find: "@spacedrive/tokens/css/themes", replacement: path.resolve( __dirname, "../../../spaceui/packages/tokens/src/css/themes", ), }, { - find: "@spaceui/tokens/css", + find: "@spacedrive/tokens/css", replacement: path.resolve( __dirname, "../../../spaceui/packages/tokens/src/css/base.css", ), }, { - find: "@spaceui/tokens", + find: "@spacedrive/tokens", replacement: path.resolve( __dirname, "../../../spaceui/packages/tokens/src/index.ts", @@ -67,7 +67,7 @@ export default defineConfig({ }, }, optimizeDeps: { - exclude: ["@spaceui/ai", "@spaceui/primitives", "@spaceui/tokens"], + exclude: ["@spacedrive/ai", "@spacedrive/primitives", "@spacedrive/tokens"], }, build: { outDir: "dist", diff --git a/bun.lockb b/bun.lockb index f0ce7a626af2ddeb7f17126a2c9b817148a6800d..6324e782440b7e5fcae79a43018b649b97d42b95 100755 GIT binary patch delta 103706 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ⅆw zO;!QoDcM3OQF{u!_yloLc=5Yp&cF;=y@ITcFHfju$y`O5s|IcksV#*PmhQ5blkDXN zua~J#mckVi+;gf+A{OPvpB=JFBveXqO7OQ699tL+ILh2^S&s+cG86z4PUGR^zckq^ z3T{5aS{m3Rb9lv3HH>DI6oxzTxmiwkI=uK)D5gGDO>mgZRX1dH%y}wZsf=5 zI3l6mNB}3U7s`aoJPUA<6V(SCJ1+zL<`E~jugqP6yD~YJ5o%&t*`S#+){8GjvB;ilsG4O-|t`86nU^Y_q0=feHmQffG z3}Eh3bpt|y&OjHSH_#mj0r;)2f`9<%0aKt5U=l0%>nqlIyWbL7D3e)=nwFDkZwSCfL}Jj zH~duiIG-v9zz6nJ_z<4zF9093Q@sa10JSiS)&c4Q^?)3`Ds@FQAy%UqtV%88E(}w5 zEC4kVKnuJ@s&jx`pg*o706x++4p;!p17-sAfp}mRFddi#Oa%zQl&qQz45fD-f_-#Z zILiYS00UqFSOV674Nwf=_cYf5+ky1})>Nw1Kr*laSOIJV)&M(zUBD(_C$Je<2_ykn zqNx%Atg}>WfmQs=h0EYL0Hgt_z#qU~;3RMmI0Wni_5mb)X7hXR4yQ)rBPWqSS}gg?(x*zuR>?HOW`FqsEO?Tuq@$G!ILofyMAz z1S|oPfTO@t;5@JkSO%;GP6H{xZXgv%12Tclz!u;bfQ6lEE3gOn12_XL2lfK{fWyE# zAcNmI!)j5r4Oju}2et#JfR(@z;CCP$*Z?E~tAG>0Ip6@W5ZDML13Q4Tz-r(iuoE~A ztO2e94}mD4HQ)*Os@tNg!chls1zdnifD180C8 z0Ke8U5*Q2&0XhJkfGR*KAO@ylfeC;f*9C#EaH}Et^|iu)8Bhe!qDAO{41jx9QrTm1l>L#gve!>-XDSj!n9nc>=i{GPq2bF~=t^t_9nvz!o;gh(6IAeys z0T`gdOM{QpsG+bzAB&JY*+$WehA1}&7!hAefGh-90)>GRKtaF?FartzMF0V?21)`& z0UMwgU;^j?b3h9e2TTDSz>684#Q9Yrp18G0Q2_Ed7`FMyW^)q$!&Wnco*s#=W1j-V$^1OquV6joUWJMq;4kElr&TQnxR=+vVp(3ih(1*A)r3RHW#cN zujRAg0XLuFW=ux`g##|Mr@2rKyGKu&3suY-!G|#$aWx{x7HBJts8I{Vfp6XMRTY}w zLimI;5D6`X628Nr%Bu%9Tms;ECI&SI2LS_s z{=irKwU%W=S=LvPRV$%JKm%Mi2buv*0o?QPM^pKmO8iX`{zM#qX_~(tDT1&20)2qq zKpUVJ5Ds(<G*~p}KPzoS{HBpgYh5=n3=#1_BWP2cHZ~q7SWv4rV+9b82~}UPfJ7 z3vF%I!?_Mv3-IK-23QSHW^18l^j9ty&Kv)6S@86`8{j#93$PiGe2xFJ9?$(efAbu# zOxYZc=XwsuYXV*au$y_-O943198TiVN7>N|;6mYfI|q0LyaY}Fe*iqcb3zUQJpc1L zfEUTUF5oo-<0$Yua0EyP4$E%7J`Owrt^&OBW$pryiTHUf)T435VLQ-GKM4FMjb>H~g2J%AUtbpf8k@eAR< z2?l*hIC-SR@6omudTDLpw4oVoh3e6)%)W&I9!1On9!r}5O#y#^6UZgj60!y02Def= zZE?->BhO^*0nP-wc@*M%7hYY20!lCH19vZ=CxBiPEp{iRD~5yY0dSpnhwKJ~0ZQ-T zp2Xdc^?QTg3dzQqXO4A;0R4e}Kwn@m5D5$d1_FE+5y60de|23<;kZ!7Ob4B`hA#~{ z5Uvpr|V4D+x2|z3`8o)o19}mY$fR}r_xs9)eBLSEMOa*2GGl3bvbYL1V8DPJ7 zSx%AVEJ!vs2jKARX1!HFBCrBj4iGR8mI|!zFr2f zzv5ORV#(oIt^rste?r&}XND897GV3Fm?S{7#l_0G;fq}WHylEZTtg=2puL(%L|BHRi04uB&~2DSrAD!@7B1hRo2jsA*PN`Mp0C8Q*Zc@D$Zimk0Y z#&HpHt~gcfRswK+{tg@g(t$(3L4X?@*Ebtvo&48_f8c)fSFSlew($qoKN~sd-FV85%fKSy>&*5U9>Uu=N0V*N1n2_`4kS!FS=0M)1y< zA5agd3)BK?0=$pLcP>1_y@Iiqz;giq#F31zU*x-1+$9ml7T`TpD}YDvkH81uJ@7a1 z7w`^vOCLH3h3dD4NscBLR1Pp4z&|nVyd&oaH!n0S;O1|V6bHQiuwbR- zubP;Vf3RSP{(|s%z-QnS@D)(OTLYK?I)L{clsii{!{*p5n`d1cfP)PLc+TPVY%{

Sv^pfq%)BaDNAvA`H065!n@rD5}~B6p&AU;x|^z#t%hf|PF0w)6XO zhxtQokW#HEMIkV6YfWLJ_>i_>jZ;rfA%em3XC^bKV~8-zoU3a!unIspY+QT@5uV|| z%)_q28#6ArC*OP?h6)umxIHQoCRpJxRQWK$zRM_R@OBl4<(9~QE8(sWFt?|GwBk&G z>;_^NK}waoLY`Q60B?2v)YCxc*iZa5slv z3m}xt!iBlqW>$p@WwcUFoeURhHsf@1Tj6y}V}SSDId6Pd$?4{6u1%JGfr9e&0LVUo z7#_9T1Hb(tcyJ8kdkQXc3@JT@226eIDU>Y5k@6Orl0N==OgqHH`D#IKy|CBtlDhN~ z>dJu=dkIaCbCZs0BD_7M!)7oeWwbqt|_X!GyD~rOTb0oHYN7OE)I^s^%bmrIsdo8Dka7h%L@zU?|^@e6!Fd+&jGyS zb{rh0I7M_9uTzV*kRPy}W57wX!Mh6x_a=0n3#i%A@q z2lsGt9w69Ta#Kve*TMb&y~%=S1>W8ij%NgXhXE6SIDic@wvc0_&>HVVMMer;`P0LZXn5FPA1qV};~{Mcbg!d6gMmBH z=U&D!b5BcVI{;VT7M8#UfWxhTTn;P)cxGA&nFwr!?kY%eUyEi87KTLUH+v9XZ1OB{ z1~>(97EVGQ0{X+v732jo9L)i^Icppp7b7=OPBJ$%w#BxUBy#f7felEyl0+n{xR_4P z<5GAY23k?V5VYO>lr%)>;K#XDlEu;GUv_arMJiNIkgUgMt2REDG7`S|uzN~~%B=d?pzvOHy_LxV#{%`B4(dMWuxM zH_7@jawgb*6yHsA>*A+bO0G)7&5?0xmE07Ocib}BKY!$GOG!X}cVF0IySL$A z3>`qx=}UeiaO^_4RH8GNRqP=14*}d=4d8fGX$NyW1hk=q5khNormDcp38)0Lq1+Kd z7289g*}@)B%J?L9dh!}6bjJ%Yi$)49@Z{s+NTGUpZfV?wdqbJKFW*h|g1aZs5C{h* zlHVu{p~ER^l<>PbC!9NYP55vMdQh{`c&w|?O0lt2ibE-0E)p&ZE)v$S54Shm6XE7W z_~9B((LBp$KlpQk8UU=vb13UHg&RL@WvXfnME#36}~TY6uZN< zDoPzIc>N<0U7-{Vu)!dpKk#EhnO72_$oye`)Mvk+C2p7&U3e%wRcI?iAS3e`9xU@p z1gw+a9hFa4v60_@B>Z{m=60z}q&(9pGgKM)FE^p5dAkJ>+45%TTIbD}sg`k!!O zv&ZYOLa^C)Cdhvx9>0E1C8ICV(uqQ)ANb6Pg8dJaqFRi~#R=uSzO#dra2|^wHC-UN zSh$`4Grwcwa5mz*ptJ>4^Y18FQ}R~{wakr|uPtC*aa+l5Ye?o5eU*kvP7=yAI|xeh#!~r2Y9p29$~o2w8phR0<*gz+$`%u@=}i7p%ga>_l7HR=?N4^F#g!< zNV+u%&zragc$@DTsV587N`*s%4OauY!tIZV!W(YB6&XPOlQBMXTG*S_*v)C-_}%1d zUTS#4?IB-#L9*G}kTroCfG@!2nXdT8l(Qr2d1_BWP-z4^j3`cOjR~Z0zOS%>>v@RYB zYI;Gegn+34Zi8w}5z1JugxU_MB?A+Hov7N)6gdSa3VYF(DHuXpP~cQ-&+vc~gVvJ+ z$+mYv`4!}0$UVRj**^{L4bV%4G<)mZ+=jq8b!C=PE-e2NUTpN)2bivv-9F!O8=OgI90KUDc4taz8rsMq3 z3V2VXj?=MhNT#IeLfK~A?7zx(c&L63mxWjcr1ANWkl4NcrZJ380A*P~nnM~OTWy_cB%gOyN5;C6;Z{?nW zes4(gzai`i0^;3lR=MRa}HT4`cv5dSuG-f-IR++9vO-T>`(7MlKY}irWHg>X)Dc z3kB;^5iooQp|SxUhwei@klmq_yAXHDTT-=)g!6?A!8X{1LIvvw*81aVz~X%x^|PB-j|5Lj(U}KA4C1`{H?a5j5No8#GSSp)-Ol6<#Zp^crg? zrPia><1IlIs@8!PbX?rAZv`JSgs+mddT?gH9i27mNnnbANu=Plftyf&6xiSo2#z0gvlt+-%=V1swl{W|L{9Nal@Mn$O| z-M)Qj*(Ub`z9wo^80r>JE6INYa`jeL_;bO~*NJui+GkYIRg!|HKTKF(!n(=dMjx9> zv=kB9Rfa|hq{y}Y;;yN>q8g({?MjpZ4evIxM!d=9-d)XWj4*0+mwg2DI#trt^UfH3 zhE<}{8&Q{2pN>3e<^56)I=ANY zvVCVPjyDF?I7voN{1szAW=-H+qmPvny+pL$RiI&oXn(7dQN^y5`8uP9pX_61-SEls zt;3EReL6T%txYJ90kTH_&{bbAC+tBJQA&G)6Aglf<~LWGx=C=?bakbJxHgPJ!xtO- z*XOTIOP(rkqV{z0@^JCMj6u1Zkh>Hrv{|q((t8 z&~tG7$sR_Z#_kldMX>Se1`TwB)@cT-8g1K(;b;XEEMa1KLg1F}1Fi)b6?Vx!-TxeU)^z2P2&2zQ z%0p1YZ76U%eHwnfO}{tR?nZ^Tc-ZAa0fS!5iA7}`kG{zcHY!-uqc+ly39SGR3^-%5_=QPpYXci4DEO#@=0Mp>_bn6L4+FLXgdR z2J~4`qM?I@I>b|&bej56yJVqqoxafEy8IiGXTtKw*0!x^=xZVlvhJ9*RmJN|-RM!9 zQ3d=17o|!*J{U^f8_?k$7DI+%2euv;GUs%w} z9fFCZXsN4?oXh6ynl+Th`^W327QK8~HwY2RiI&EBP4W6vWGBWH*{Twmaw#qYtW4b8 zF^OX(;DJfFtFx)C`fs|m6V1c4G0m>T<&GBEn2PTbVl)*R)4W|mPke#xYXQvG7=(VD zuTXFv4r9hRgm_kOLar&oIZfwg3wC2X>(h)LxtLZfjh;BRnbg_l?>*3Rw;g_`U0Nn! z0Gmd!yD^$9q9rUgQp#?mY8Q=lF|{R4s*s^Ew4_U^LQCgvEv3ouaE*R2E0bbbZ)J`K-#773!?F1DG%yWDuhEn=7=1toSiGQICclf9>g*9b?ehGk ze%~dec_HWHW2YJu`CBWRxd&CZga*1HU5BAN73#2yC&;$fh#6id&ffRERazr342agZ)5Xjp%Nb203XB^#Jz+vxDn8!kyOQ9ircyRYjx)waD!opX^+-doP$_aS$3j2hmabn%#`Tm{7aq1R%R7X$6$JU2xFTZzq-JbiRGdyMj)r2C`jbAM`xNn%G5?Ps54bfM*)uM zO!XG%ZSXOquIZ@eUl+sznB>{5&V>7?oYgDw%>ktWtfMUms`;O)D2=Ke!3=vIcK9CS zNSD-lO6Srd?ZmVObQ}!u4Uw!k~lllYU z!wn1_cQP&c9X*?5g{~nMqY_HRr9lDhkMC*L(RnC%r9y#AxkAyMl`Ag9PdKw}QQ?H_ z)4f8MvUk$coW-C>88#WH)KS=eDl24c-M8Pd-#ET6;F~TtH`ON!fP$uQSL%NhBXFs% zwDKs*pjuaHCcD|Q^8?e$Z|{q7dGd~PuVTIZ(&3;k_aA}0f-Glgm%Lpqnp3fgIf{yMt5M;|C4gM6d0g$6>w z>o62bpbUmOZ5^5O#HX=n+l_~si?WYNL>fu>32j!CmIis!(zr97fLe`)-VSe7Rc26!6p0WblX}& z3@he(Ev5f~p?ojhfH0hg9SziN7SJ|~Hsji^A42e2yML#3 zn=+0zogznuEKdxhyU_4j1`S^2*b58Jd~`Tp8XDZFP+4j4;of?`czvIp=W0Ha!=f%O zk@E>8G#3hvP#AKdX!^Nb@3^yaH$f9A-c4HR`R**U`T8?gPbH|Us(J{GIf2r;Cb#9f z&Ii-yY?|1!m=qSqb7|WNOlZGIIhHU}C=an~iVPu}lNgef@lKu+?Cgh18xS!WN4~!H zEIJ%rz827cDoGoa`gRBOc%TEa{F%zV_V75x4*p+%)&G)N9Ew2h6m zEqcWzrj#dZY||-AabC1)BpdE_53rchqY!hBjvci0%9)D@j}03hARWij?XxIE=dseD z^oL!EFUy`3wNYYlSJfR$5h++2*B?h!&q1@-IH^KB=5!yGzHH@Kjk*&U-dq|ojzXbf zm@HqX+8n!?k@1E5EB7V$>iDS7+;dokNz3CB%4dHDE<9g!TzpF^hVO{IIVS{ad}FEk zc_BpOA4?n0qp0T6!}C}yULo5IEZQDYuMAw}(vl3ck1w&($lY^E`@^HG7Fr`Rto(St zs_1yi$UuS}$4mFEhNj0&T-G;S2n~#>Ja5z)Pp%fIpSI(vbS4ts51QQTbk}Y#oz}y0 z7~7KOxk(g|iNRtOC0x~8P;{oCHKfUAYg^r)Zev-gn4C*=`z%@kW$)**wTUadC!O4Q z{FrD>oKp%;kVcH6?PgYLx^=PCV#WEi)C78olz4l~8s{oC*m>^S5GP~Umad0s0|l#k6S@|#Az zjT|rGiP16Ya!H8ASO4x@LWZ-U#_6xTH7N4&+NU45L@;!tjl7}~S!j@|IBI2SYGY>_ zC)q2tC$RWF^_%Cc=;H2;h^^yjOcsW6$2eM$h4HOQ96iVqc4-F2(c;TOWy4K`#GY2n z;P9~S80u8B|GawJcJ|SE#njn!=dxgHnmtLn5BHc%5l6T?O(wf581`VG%@v`tCIEaN zy^U$WWU1T|Ce!jO$mv!}EQ~R0FJ)dq13W>`Slpq3I*`xE{wh-MK7~SW2sYIJs?bVP zXA14ViUi7}-Iys-mL>+y>iw>u(-CAzzDboeunlb}#KWO%W$HDYNt9yM6rN6puVIxe zUqU4&N3ivrE*0lGCqtLytd8a|$x|T)+==kvW?}VVyoG(eB87~R5uLwW1pYhMT@mFP7?XVA-M=(VvkaLfg!c2=;qoW7*{W|+d>IY%NVRMGqva_&ru zxsUe0X{PvYUd*X7H~(6CbRN&0Jp3T!O$xY;XmcqO88(cZC6%Qq*{1#vFIQQs^&bG=dj`;z?6C5X@2epi1#l+VBV zilwiVnNr^WLr+PjXAdxAH&`MKmFc?iQ_EUB2yluVk1-4^ST z>+x(&(bx_j-h!snf|C7ys0X`WcR0C^C|yTxCra1(Au7YK2c4&s{TLlrzk)tL z##rmHLTZVox}IBFKlyyvSZK9Ykn0m@w1Ebfdy$xNA=~bR>^EviQ-nNEdHl;j_r0RG z{Yq&P(a(QZyyl`77hqAIM1Gy@?@ZYK*SK69#iiAMF)I#`(qu<%o?#bqMxwNusasskb znbqt(S4#uT4qN*c=_Sfy-$uM~g5egc>ELs$qe7v6!yK2p>};KOUM zLeILk9bLOHk1%o>$E~KqFEGv%CA>t`;zaC$4c{3r@~tPXV_ue%qs(%itEuu!tXh=8 zxfgE722&Ff?RXJ+mn`~NBMkxzNZF4@vaAIbs~Itg*tjt^x(78UUIwO+gaRD zEuv+)Vsa8+3sxpxIQ>JJOkm~4;sR-33;uT52+w!5YZl+jY_@K}SIIIrm#7UC@fy>i zERio5vc(Xw?=`B%ViV=S_ZKPS_$%sH5|T`M!m!Jz^!!eozT!L8X@_Ke)N3ibl=% z-MB|o?b=3X{t|2~{&_oncpJU{OK|W$i?FF+;GU)+x~`qbG@OA*$t12nj7 znod$RuevS>PvDh!Bezq=--5f{G-woq#=)eW$C_^0)f5k%@Nl2^6P9eJ((loFw`?b$ z_d?}zC!mQ&`IFls#V3Ew2k)Yl?@?PlchO5&u^YQf>SagXSADlM)0GDYmjDa-+H2)pYEbT(C`*gq`S?<`#0Ur`jCR> z^NL0V_&6YJ_$`-`wRX*@W%OyBLU%vGdJkx@^{gGeXCGYhq>fP|CWSUbL$fM{3V(#= z5omIqy^N2)DKv>3Z%py!6siXe@8{6qx@-M<)uEm)QPxHc&2FjA78iEZn{=#Q&*)Qf zH_ha*uFzoXvF9}v+fLAoHEJ}357*hNpj-2cG*8KAHDov4l9P@1P*@lEKew< zsgO=B^N@#g=@bKLFdUIucWIBtVUI`6FJm0LGU#j`Hp+*|hgVJ%Y(tG74>-cbA#TR0 zetI;8x9L<<$?yehUn?i6jF%f+_g;L`y^}F$6)oHhg$duxi7&zAuIH7mPj~oai}6GyzHBJD1GFVx^8&deYjc zA)VK$Ax8Am12dw}bvf>CR-g4n?JfQ?hJQ-~z9MlOQI6c6s`j%k_~!S%jg1OFJ#-`* zJ#>Wje?@Ek>G>d0BkKs|K*Rf|ho3}^pPnEReY#hgUq^3aXM>dUvdFvTncazVc8xM7 z?C`1igZ1uw1}LYxsilc4j%Uq3q__3HC!fLUv!~X2Pu+k=VhD`n?y8@j&Julem8ghX zZ{z*b*hGz=p3V||a5}3q!rJ|`phS)Cm1s6Je%=;Ejh~**5`CnGS|NtK3xXat+>=! z@&lacGs4;(LNj9xck{9Bv-kei&8UGRU9JV7kp&GN9QTGFbn&upf6}ON@gn6s(O0IK z1@vWkDO)MS1gl(m1hV?MCgtSnt!TSeuQkEVgM4Ek-ePzd)K{eW zVMa#5`b9hU;(cuSzS)*)VjoQ-E$VHQ-NC9fMW^?W*7m)ASjWq%G`OJNQ^`0t_wR2$ zH2K%*US+OIGw9aC^tkM$X<>dt;b}M`T`q z;ptr%6u!&-f4E8IBKe}nMcAp~MJXFa3Tr{upy%-pj8-lE1u)ZnXw$8qKDtK0@ zTwWN<8q&rdzC!wpw?G>}kC&&dM#oRmu0F)iu4O%cvd6ZwSNU7g3fs9+Lm!)K?elMZ z{W9oJ%IrTBxm-o`;17Lqyzt>=rmv|^r${q>FRvPRrBt5u{+j60Bb-ka@Y)T{wIO`? zHmY#QQin%X+uIw{--hnA*IRL4?kwwEDKu%q#_UzRTP^3YH~AGo@eie778A(11H?R< zg)6T!+0v4JvUX0T8#Qm-Kq&cs{@1BFO<}NL$hs#zHF@5nQ{b&yhZ`cOd_R7d%!?w5 z<5UI0FyVou*FNBMtFU6bjvJ$xNnMNTdl~+GD5W9r;`4H&1{UiG1st*Be4nOlHY8<| z`>jk=rfS8I_%?Eu^ZKi|4=U4;&y({p6zC0kBn@ocBFojTSE#5De7G>MqBufh5flxc zieb<=OQ-qj3i+F3gZ@h~eR25#g;jYAwepDK{$pw6{XKj7f&sHUbjFi|S5gt~q8d*n z9ZSH>R;meMNPQyJqyGK*$H9kfaWmwplK#?ZAQZe#LxG<+%^WkRMB0!tdo^lrS>dwm zbFspWy)I23;K-VX?2}Cg*!FWMa7);IUP#cG-p?~Cyr*0!XiT2cIcuECH-9SiM(0B* zrFvC~@h~ddQ(X%r)|on5=sh&%PpOTK-iFp%=v%4x&^vJWi711O-i{hs>aD-|pRmGb z1>aMGC4xSpO)RR?F-v_{y={(^-6V3hLgxM%aakznk>(yA&O`eQ2v?2tF1Bw@+)C^n zRh510X*7aL@!H}^(l#r-KQ=t_Kx(?RBpYjeOUd(FdXbd;*;Rr{><_wj@8v?9zRGlI zS~9CoTE$|h#T|_!tey1MUejFA{%{bmHsqZ zqpmDh%HL#fizI5_P*ppWd5JfY;><|RKql}7mYUxyO;%AfW@7&;?V zQJ60rYI$9s_2jiNR6lwJ1+P)ELc+&h`#Na1e>5sgk$sZ3_qsSq^9WBkm6R={+9hFo zovg6)lJEO6?_Q!GC9S%{GfmzItpgd zo3?P_jHOw)@|uHCe0Ib$^mg*A19$Q4SV{S>%gc|l?a+LsQvMIMBGfvK78a9ifT*Sl4;mM#q3!@pW;!M10`u z<~oYL!pt|t@?WLh=GW6IRaED-a1t=!V>O5otUmddM$rXBf!BQT$F^QS)Fv;26{M$w zkrZ1RSsgw9VNpt_6$I)O6Yy~S_E!uJaebinA`UoHK_OuIe%_Dpan$X0mKfe}kS6d6T@9Fc}- zs_TeQGpHk99i$n!itc?^8m?;h%IGm>a$oTT06(O6Qzea*#=u=4N?)HHvpmg0O^Arw z;9f}X52nSuU8|W+z)|n@V7T#}gyeDab!6$!V|J9>VDz~JA5-`^)l3Si(D~h5*@w&S zHoSQB88xPk&#I3d3c!nMmeJd4MXQuN$kdV|%IM3e%TfYp^-0QY2jNV01NF8g+G(U; z=~=$2_^@pU`dC@uH^p+x=pF5j!h_S2*tdGh@eiYTXH#Aa%BOLtaanyU!Se6__}m zN?9b=7TA@RPG8#?{?tkNNh@PfbKHi*?P1Q{*9A#cy{63aFp)>kAT;`d6yc8*qa~TQ zK`I;zO8Ltu^|rfewVpTSnK+ENu8mx z3xz0$^&u*Xx=;!$iGsPzq*D4;Ko)*dQ?@GcsAZ-2rs;^by40Ia zP^2I9<-EyB&mwatkmBC21=V%ZYmxpfZS;;5KP?NL2aPZtmjuq&0jW%$q0YDa?aB? zpG7@B+l6oKd}Y14l(`Oid!SbhdV2=EDO-Qx9$r1d9&dU+CjTl>_;G+JrY>Aqs(75D zhk|^(jnCA7cNI`Izu&)IA)KX_b08g*gQf4a|M&j+j@|tuUAfNxHC^9Z$#+F>U9bp~ z8|!zijyj_)|7=K*7xUs^8?x5Zua<`${|eV0!GNqSV(6@5b< zI==4>c(GucEAk_?c|Kw|yN}*N%T4V#<-tdzTSYc*`kqRklCAu-Ystfb+}rKKt)+Ru zto)%`4Ku5SBUyYOi9R8nFSNl={x10qk&ADW;Jp$bc_uR4LP#ELmu-9h7Dt8n`L2AH z<_TqDz`>7tK4T#^84I1*gNl>A2dFdT>mg2J10a-B>$KMcrTSw-lv*m@mXyv$;)Or% zKynPuRMr!APLX*HQ;q>Ef7z!MP4h%VYbbgV#11;-sqZD}Aq)750Qq@=A5Otu;H7sy z@Dl)ss+d~Q8!vtJ9||(x5RO&5Ip%9+pi&>D8Dn5c9y`y|CvPmKrFno>IiLZB)4&=~ zs6bR5QDLX2I}Lb_dz!0*+p(v{}|ttXfX*~ z^o4o~6|4bqkZN-LQszuBGDr#XI$1`lzF{5QOU)S5>XcmZD4Z<#@IF=2g5}S(4xw1U z<91HG(Yr?nYG9F4vz#=O)U&*^u*M-loJph+ayHeiiTq31!>le&O7$qcCQ=~Hu#{WV zSiJd)L7s1Db}fBxC8xihK$T*bW3VT``WVEjR+PF}k=HAx2RrxTeKKF93t5tc1no|g~>o>cc=qk6(~ zu-xn;=q&3=9i=2X$}grynl)T+Nmc9Wg~iq*@`t55v_Ns?C$JT;JafcvPbaCj5hbNRixd^Vhbt zzQGUOa>Xf2j)N3cAAMv9t!NBV4mF0%d2y02u+n3c)sZ2ts?=buS{8n_>)>edxRkV- zl9wRT3JAv?^R06Xa}cT+DzZdY8J9K5OAd0`NCWaJs@4!u?w}W(j^F8P2*gjD#`j6h zmqxict8K}@5gJXDvlLhPu&6R^A_p%+T=Kf}D8)iS$!vZLvhDnoloURB&S%t>a>zF{ ze;39OSWWKYtIxU=>+_u7E|8atV%9vQ6@^9wk)uUW!wF~{k?-c zujSDz+)&sR^OAm}_Dy@gTE7nuHmADwTD2T0GJnZnJjNgz4X`r{~H=W{PhHtA2&uP@o zeB#w6#(kOPRH`kWA?|_#&qk#Znn!eBITvrhC>u9Fy@L`nAsvpeD&>wCe{z>4>WFEu zs3Fe!>Y7p<0To@!rYsJ&m1><=uD`xj67yw^UjNf5#BGrvlrrCs)^8oy+JDAe9)IOq zJh_OLQ(!wx2Xd4De#77%6~czWzuZSlI||C3u+#*9y1%d@P#>toA+^JAb@?YXXpa%= zEe&svbcp-nwqCt|xydpVKAfR#eKuvCDRIz>%L&Z}kLl#60Dn^MepJ1*qyMXYcJL=V zAl4Yl!@j>}kS*B+>D|>+s6`MmJTp*w>Nv6PB}4O!6KD|bE+bU@mqyW0z&i?yf)M%^ zo#m@Xv?5e|$=+3!L+XxT#J7^I>@k%5;>BcaHEHpRen)Hqm#1Y2VsNb|jrn8zpGPbx z_#?ql+EOT0Q(wA0GrU9L>EW{RUC#?6e$DGp% z?ObGSsZ21sr9IUShQ?1!;LLX;wfM+?+Vqe!pW^a%BYt`Bp-(Q|? zy=xa_p)Z+3D0U4$8pKYcVo=oo9~IQWw51ESFs1V4=YZl1;GU}0R4oLR_Ul>Y5}oEX zNdC#Cm%1eN>Z*T&styQ+-#Y3CVc6b6nmT4JYSR0)VI!ZNl%ETVZNb(s7PZNncjmUo z$R@+*G8A|Z6a$b{-MGPd!G?ZP>+)O2$H*}Z5q71z-5?^Uc5jGFG!UfMPZ|~96k|bK z3-R)zJF-UG#WhNAK446kKZW%`gp;AbvoD2Ts&IDZ)_f_?pPMoHY68I-;+I{aGUa2tS7f{koXK&JKV4xB)_)!h(Jag z(~{~E0-?{9YZfTNha z-}~{;^4v2!yE{8OJ2N{w4+R7og{gX(7BjGFKx$9wNt@A94rA-4tg|k91y1IuK1L-0H5wF0Ev&L1;Qaay1vmyYt~8{PmbZEw4%#yFGA`m$re@t zw7eI%7Lw?7FYJz)Gmv0~ATviO((UUF(urM~-9May;7xCX2Os)H~0q%2$4Tq zTv(F6j{K%4ZDsHBel1*k|E3E#_h1JWGDKN5Xear~di!~;gVliIc%wM31KkJ#U-bll z6ZmT4m!|`JpYB*60FVN(qO2m2mY(^l1eNZCDHok|pf-IBh16-Pt`yDcWAM=yBP|)5 z3Y$ySu6n3x9X6wUaoG>-g52Ujq1#AbP`GB;6mOJPXv4EFi1!Sb*tU)@lO-;9!eJag znV08BitLNt*6JviXK0SyLpIet%VxQnhLN-d0LU$HlHo2~kbzdS7JOb^womE7VpKkS zj@zHUF&qXL3+1FtsKH+w7cBelxB6Ig?ZvfLOJLx|-N~p>0MDX@T*T3q7a$03kDU#L z{NGAZFY)UhD&G%M_7p|;gSe4+InDQ{ehiwf+DY1^_1C{prTemsdT1 zAqG-`gL9=Gh!k@H_C_Z+o|{;}@}w2k7p^#CtMzWcDw}IL9RxBg)@xiGqNXEIT%_Cs z(843sazL#d>(8F8XuXJi#1LOT(7iv?tt}vq(sZ@lU34P;Cpc@K3r$+&dCAcs6+||w zk`xO}x>~e>5q1F_Ur2PD*R|mNAAXsU0ymm&0l>5b0K88%T79=;&3gg+QvmkjjXU0y z-dLc3@ml^w5rBeAm23u-2{SB&L}Dsy!CfWK+{m8)C;g}6t5T>ELP=o&7yd%c0{K%5ldbJ(bo;sU?4tws%A~j25eW|AiOI^8Vb#~nri-VT!QdeAB%GCiXsD}1RfY&UMTWy5 z95BRi7C!|HP5w#eNp4T@REehZkAbvqDEb&k9>dU`W+74_46FL8$AQopWf2`MqZq7? zP%r=-)92B#3#BQ;u(n&##$gcIUFps+;InM95>dDzNQ*~`Q9i~Bf4p+G+t)WZ&o_s6 zB+|EV>?6UH7=b=TQPgl0(q_tlJHZmnI*5Z1Jobe4P5`)ik~lI;5Cc6$!O6@$8ugbW zuC!=E(Dl53Kn*uzkE5l`!3ta!^n3*9sTgGB0LdVg`g|Hc|N0mbb0?fRY8*Gomc5vA z;#tyH9|?gdoKI#~rxR|GgSNukDTi%NWn_c282E(fHO3G^5%W+eUzG`>Zze^JH#pGk z(T1$wA<$CVgnE9Nk1<1Q!5dPjEoWkHIKbSn}}vIpa4jXbQ%wj56e%&aP= zk;NXI5x6DbtXocHMqy3MOZ$#C>{^C)j-PP&9KnU6=}X##C(SxcZl|Fae;so>`>eSs zQ=n0U`2bfdM-tBUKlWMmMKxuCLYInq=Drjm-59X1C0qtGl4=elIppz}dC+Eb$H^_~ zKMajRqp+S8Z!L?0@6SS5n0dy`6G-5doXktkjH0W=;4p2F&I*?5n1mUn`aVi1+C~rM zckx(*d&XGRJej+!D5Z)@NL&r!qPnA8B8oZ|&id3GtOgQ34g+8u)YM@Qu zhmWhz_{fth_HL`>Bl<6ZlT+f118hu#LpJz7AObCDK_jDuYjjIApp|RmKL2C^rB+wE zrQ)Og5+Qd%V_C=1b?Y@BDORf=H?xlt#z2?orv0Zvqyr%31|sW5=?ylL!+M^2bv>H+{=7#*AoxD2o8L4o0{ z-kShtiUuMMKrUvJcnTkHmFcMf3sD#z5nr_BHi`g>n{M#& zOYfQ+r4Gg;qosbbKdi*H=cDU8qBH6ZC(N5+@cwRQJ#m2}qa$5x-@NjQ)ASkW82!tQ<1fyh8*xhfQNW~u{qrVoOUus0t{c&bHbES_2Muh@Db-QlH`SqMbA_dA++HE zTKYhdGtoo>ZJCKDIazwc6nZ!l3YVI@hO-Qdbn7V34#c~_L-z+&^M+cq8 zNsoLkp|hb7jHl??DF?Q&4|EIA%1nB}3r@|~V{)GZN~tZCn#{qjEa#kloMYIIIPz!X zj4A9;h$3$r@)anL{D*0suI8Cl9H2NxE)UGWHLMbu?sTdGZo&`JLrXOX{FzxY zJ1?tB6wAP;Xag6QsmmLrk`-=>`*e#89)>d0rDZK4sPsI@AxoW4YC8X_(tJm4Q@gU% zLEy{(Pb!Ai$VE!0w)2Oq5;H-j)l>i>Q0E1DyupR#= zFU@=O4D;#wK30awIQ6o-*`!qcc(IbaS@h(ZNre{Te#pknG7{W(d)(aHZgv9!p^Vgw za|*Gw{R8z|2wK;s2CGqYr{(;#mv*DjqGw7&Cs*-VbCxZ!hF24uF7(sY^orr2q^t$p zE5PBJ&6py$TDNW=)}K#z5VFHsTRy6?2msY)Nr0wTyBsKg%CyD|P{FDfg#kbpOOqLH zH{e+P*m!fNH9l*Ag=(hu8y@kIM!<9NIPAv*>VJ0{!5#~ag)d_ZsMsi z0Q{~2fOC^n$Tn@~EK}hqbGJOLGG1T4tOcy1C2K(FVyk4`It!;ZYy9O#ObT)t{HLo= z)8P}FyVhW>4FD|13kG-%TRi)$8v<0!9gz~&l(~c@RAt$F;HLqTkKVdH&)h}df0w=c zX*r~~?h)-~A#N9^vnmNhjX(LnTzR!{xVaBz8Ex_h01M}yzU{O5>uMzn@$y!gi|uYy zWgT!&MO6<}t$p`L??=rL~Xt#-E-c zBRR#kQggM=3hLaL?zLUoAN|XwNloP^TTMqze{bRbjjtX77wKcC+wIiuj-J9C; zCLqs4v*5E~`2SEL_53H(&D^{Y(dLcE{G*cZ-^ZOQcGf&w z(#;~h)HYwcyXO60Dg)UKw0SGGRN4G@=$U$g)9ktC9zo~v zP0op~5N59Ws4gdOTb6XlaHcZ)QEyHyX&y;6>Ua`^6~fs(W;HxBtZO$Vat5||{xK%W zPeyzQEk5L% zC`DRcHn6-bjbk>H?8t7a!Dv>~&qNwssQwh_?ZR#|J2|M7Gv zH{IDGPHu$FUU#RVw`R9jdbUr^YHxRD+uwJDco1f%Go9QCMa|rmV)PAfyzAGOQit~d8j4vlY0rp+Y}1bhqw%TDT!y=I#AFAI=|wCBa6rDfw(d&fQX8v}QDcFp-I1=Ls@ZkqM!EN;P(t%SHP-%DO>!I= z==h|9s3v6XW9kS%vzw#>#qv{a+JNFa=6!Rz#c;y%#rY7hvya;4%enDY@@&AZGRSKm z-romMnf*XCS^-opJ$CDRmvX$ns{{LK)CB+t06>JE@aBp6c2?%LI^W8`;Uqm$UY?67 zi5tl3Ebo-1{pgUF)h6;ffCdgy;ypBgE?L;%ri6Ii6|o|&oMJYF!nZI6zn>WS`&MW7OC>Lh6p#km}q z@FA4lD74L}#%F_mA8Q;r?dACh)xe<4%7>}xp9ZHw7`au~pTJH4+Cf9!th~8&sKSk` z4(enK?uJ(h;M3>8mLGu2P#=~TP6uOQ2 zRXLEQNTT;gk|mZ_@QB3kIiX*R>~*X0SvSxz|CFFRN3jB}56z7dKW9!<%<7@gqpbxI_$c*B-s&x9Y0nGT>8e)2H<#e9 zs7#H|fQ-h&(h@ncsnbvUE`BQ~0N4ZU`IMR-2YJ+>)LwB4AJ~O#e}OkzgAsBeK6|`i zLGyBl8**?LJLB+SKB{zrr)Y(=JpVZxUh0VbqTlp7VQWLQ6{G$D@Jp}XtDVUzz4~r` zV;4vJPGCJHVxX*-?;GCpw_n%SydseEt_IyX5y*8l$@ULWIgYCRfhRS)8LBB3`?B7= z5lc|>o+~$GC$X`rEn1Nzfnu>?n-7xpYDv<~li(aVH*?Pz>{Cq)xWj|fTVzLgPZvyG z##P7DiBssl#K18Qg%WT~?RnZ@Z#2(w_LJ1`G)Q58Qf_*qhHmhw7xaleuWHjPM59k* z@Ln|kG&a@@d&7I}zp{zRbXqQ^T{g>CS)W+5MKpoi3g5p?znD2J3RQVa&gK~G81bYA zPC$eh!cHjyQqvAmYkx)>h=;m${?xVgkF6Y;Wm#}}X3XN5bFf@GN`Pgye8DjPTfAar zu=AQ%rb3^|`pdj?3dtTCtwR9S8QO9I6Lp88zM%L>%in`9?9S57b5L$eQd0w9YEYi@ zc!>}C{$&V;yCLclt{aa#E44dU+Q=^})4|IK`8azG*9gbaor?yaWQbI+l7Gvn^|Z|n zq}<Gf3!!)t`BC^Nu0Y{CMGhDW^Su-J z;aHybqNM=P4WylS!R5#31wU=3Z1?b_uKYELV}eP^-;-+<3rg*V_A-s-NiEeP9=OU0E)P-p3`KBph2}go)YcoH(e;OhiWx^F@zs8OM8oS5;CEAl zN7#~X(tH$}=L>1-)bBYcU%U2Q5S@lS0#Vznfa@N^_OuATN*8I>{0X`>i*`SOz9Q3E zd7A?Y%Re>z33;0H8B|zZq9jhCmY^_l#vY}K1$P1g-NZ$D0|%0icMqV}k& zxdDKc$#>gw%pL!&SzAF@9}_Yi$RI?M2LRaW8c`?UUi)^5UI2ix$J$}W=lDFh3Uq^U z2coLjAgk7Bn4{ESj^4s$3O1=)P@d%!CCmtS>eb_ zi(VQ0^f}+s#aGBS@xxm=Q!^;rYp~jJs`MJ;i+Lvr5ck=3$%_N${b6(Sy*U`f^Qk`o zaA)&iB8mfaEfEPhE>Xg3aP%%p(BTFdQdRHQ&N30%f!3TU^f`NvGeU zTl?tITTH?O(%zwvoZ|QPtK|1zd%3;7e%-ADXa-{lpXIXBeUlQh!PsrSwe$CbF%9py z__O;)h3s%;`L}llSEmP2@-mMh$B56{%0{lX(~ZYhmG}Q`$Y;PmqF0u?t=eXA;E&8kWwy@D3?{XJD~Y_#t~`aN$u-T8#-M=0PUimTL~3$?qyqUm_jvg!50Nd0F= z?7BF==#aOXXH|LCi>IT9}}>)0|w!`e~IU=~bCCBmJ9< zbWN#IYMGD7lKU-n&5Ra7+G&(S`_HPU8oOFFO3hdL=ywTXL3w4m{Pzh^`mf@-jCde< z75oPsJR`cOF8zO1#VzJWi_5MT`|h4HZvy-l9|l)KA;l-u%?r$Iz^SojylDP!qx(Nj zz9PTHtWzPQF`XfxM9P01aYoi+@_bql(JWb|>6?aP|7-sHKM9@eW@$rBY;YyTE|<|e z`)s4!lGtu>q3*eiE_!@gYfLUz>gXLa*WY|aB z^*Oz922iyMU*_>D|AEc{8h16Hp>X}TEi=E~ItNv>GmgPQ5I%bAjBnt^U$Qeg>Y%zm z%VVqrCzr^(zz3k>N{KU6WZc_zr2h7}D^(?zUbwf%eBGDNGj4odgzn)N)>g$?yEC%J z;KbXB_SqZr8k*r%QM~${ZrCH_HSH&?vL}DS>IUU;zz|-M2MP@zRu>_rWhy$Drn&Ek zL^d*Y>oFe%I~YB(6wj?EcbL?++4U6w%X&y7+UNkvwWT`_#vr}?5LqdkASed56gEG* zgS9@Z`U+Qa_Od<{<%HZR!jc$HTO84WnRJqiHT1yI*vtGCD_n*IAm52hRcMXSFrT&5 z|9B$Q=GDp;cDk@Udf_8KObJfLAl(HjkQY6|9Ys!L@{nSC!EVc|8SQD=>g?HRNnWFi zmWV2>Gljc`oV_!l6T51mgR`Gr1apgnhh`!ZitA^9a(j~o_SxI9{*&JYs4y$!*WajO zJ|MKQ*9-mMvwy<;*nE*DR@lHJm`exhpU>!Q@&N!l@*96Tylszl*9CfA0sO)g3{+Ly zZYc6JXY|lLsH(DKwxDYHp=w>oXKbn+R8T8?E;U*j_lZvy*gpsloPgrb$PLPGjKV~` z%Wn+QUO4K7Z5m*^&Fbe7MWM>!jrqt-m>Sf6Sn}so?qabN?m#* zI1{vZNS~ZRNl6l_>0&I8YylB2;FQ(*^um;i$yRbn(8{fA1bQz%Y>A{z0D!mhgo|;Z z_D~UT$@twh*Cyq{EwE8c6|@pdqcy-aqxl+|xJRe?Nu;XDOG%osymnR73&q~s_~y3L zuxZ_`A&_yM9eUY&YU~P%I=bpbF!JCb`zjnMHL7R|Kv}$Dhq?ACam?gX&aG13)ThO$ zs)Ycc5CBg9Y~x(|hV9!FfQfVt05C$HG29=3a|hgwUjrT5Ie08gfx{Qe3ZM_h0us^9 z{kvT^#~iGi0+5zXks}no0Sw%#3iU%(P%@@~(ZkT$U8U%_7xBnfx6VBIb7S<1 zcT@QT^Rn9C^om=wE36k+w<;GZ)+zAu3R4O|IlSRP#qON7=k%aD*;3v#rYZ%2yFUPU zG=H{S{73Jgr$`@d#yx|=0D#lG$qaV^a76(3q@hid7rH(NQsCaxeui_Vs|7J>k0_@b zz~9HqJLn-RSLE7ZZ(q9xb0!-RR&OW(0QxK?sDqm^zm~6r6k$&1@0b3ZFnpT;6jI<3 zP0t9E;3{z(@P-b%LA(HyeIa8{&~A7kbf6P$EQIceyV#C0-n0+h!B5E_tW=*KCl7bb zRDCVJzPquB4u_`;3mcss(oT^b26n8l(LE&dwf3Z(l#u6_KlLtr&#Q{)p-AJC9@%HW zBEWb|`Zwo1I8`KwtYa)JS%fFsW@xnt^|9uD27w08>tDNH6K<%3h*mVU7|`wl01L#|vkd*e zMMPc}04(f~F6bZt^wvIfy_oSgT?dLS4un1NSwe{;6o`0L`@;0t2Tmt46C*ciyRrVR1b}Z~sE=g478(voPs7wj;WeouA0MPkvqtI%( zJB(FTfjgeM001tn2reGdoD%5DCzEXH)IHboEwVJolhV>$x>v%;{-*{%0DKbl_yI!n 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 delta 104549 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 diff --git a/docs/design/MIGRATE-TO-SPACEUI.md b/docs/design/MIGRATE-TO-SPACEUI.md index 33b8bf59e..6a373331b 100644 --- a/docs/design/MIGRATE-TO-SPACEUI.md +++ b/docs/design/MIGRATE-TO-SPACEUI.md @@ -1,6 +1,6 @@ -# Migrate @sd/ui → @spaceui/primitives +# Migrate @sd/ui → @spacedrive/primitives -Replace all imports from `@sd/ui` with `@spaceui/primitives` across the spacedrive codebase. The components are identical — same names, same props, same behavior. This is a pure import path swap. +Replace all imports from `@sd/ui` with `@spacedrive/primitives` across the spacedrive codebase. The components are identical — same names, same props, same behavior. This is a pure import path swap. ## Rules @@ -11,11 +11,11 @@ Replace all imports from `@sd/ui` with `@spaceui/primitives` across the spacedri ## Import Mapping -Every import from `'@sd/ui'` becomes an import from `'@spaceui/primitives'` with these exceptions: +Every import from `'@sd/ui'` becomes an import from `'@spacedrive/primitives'` with these exceptions: -### Form field wrappers → `@spaceui/forms` +### Form field wrappers → `@spacedrive/forms` -These imports come from `@spaceui/forms`, NOT `@spaceui/primitives`: +These imports come from `@spacedrive/forms`, NOT `@spacedrive/primitives`: - `FormField` - `CheckBoxField` @@ -30,9 +30,9 @@ These imports come from `@spaceui/forms`, NOT `@spaceui/primitives`: - `cva` → `import { cva } from 'class-variance-authority'` - `cx` → `import { cx } from 'class-variance-authority'` -### Everything else → `@spaceui/primitives` +### Everything else → `@spacedrive/primitives` -All of these come from `@spaceui/primitives`: +All of these come from `@spacedrive/primitives`: ``` Button, buttonStyles, buttonVariants, ButtonProps, LinkButtonProps @@ -83,10 +83,10 @@ export * as Dropdown from './Dropdown'; export * as RadioGroup from './RadioGroup'; export * as Tabs from './Tabs'; -// After — same namespace pattern from @spaceui/primitives: -import { Dropdown } from '@spaceui/primitives'; // if using the namespace re-export +// After — same namespace pattern from @spacedrive/primitives: +import { Dropdown } from '@spacedrive/primitives'; // if using the namespace re-export // OR -import * as Dropdown from '@spaceui/primitives/src/Dropdown'; // direct +import * as Dropdown from '@spacedrive/primitives/src/Dropdown'; // direct ``` Check each file's actual usage to determine the correct import style. @@ -115,8 +115,8 @@ Some files import both primitives AND form fields from `@sd/ui`. Split into two import { Button, Input, Dialog, useDialog, dialogManager, InputField, FormField } from '@sd/ui'; // After -import { Button, Input, Dialog, useDialog, dialogManager } from '@spaceui/primitives'; -import { InputField, FormField } from '@spaceui/forms'; +import { Button, Input, Dialog, useDialog, dialogManager } from '@spacedrive/primitives'; +import { InputField, FormField } from '@spacedrive/forms'; ``` ## How to Handle cva/cx @@ -127,7 +127,7 @@ import { cva, cx, Button } from '@sd/ui'; // After import { cva, cx } from 'class-variance-authority'; -import { Button } from '@spaceui/primitives'; +import { Button } from '@spacedrive/primitives'; ``` ## Verification diff --git a/docs/design/POPOVER-REFACTOR.md b/docs/design/POPOVER-REFACTOR.md index 450a15148..9e19393af 100644 --- a/docs/design/POPOVER-REFACTOR.md +++ b/docs/design/POPOVER-REFACTOR.md @@ -9,13 +9,13 @@ ``` -`Popover` is now a Radix composable object from `@spaceui/primitives`, not a function component. Every usage must be converted. +`Popover` is now a Radix composable object from `@spacedrive/primitives`, not a function component. Every usage must be converted. ## The Pattern **Before:** ```tsx -import { Popover, usePopover } from "@spaceui/primitives"; +import { Popover, usePopover } from "@spacedrive/primitives"; const popover = usePopover(); @@ -33,7 +33,7 @@ const popover = usePopover(); **After:** ```tsx -import { Popover, usePopover } from "@spaceui/primitives"; +import { Popover, usePopover } from "@spacedrive/primitives"; const popover = usePopover(); diff --git a/packages/interface/SHARED-UI-STRATEGY.md b/packages/interface/SHARED-UI-STRATEGY.md index 6eb28c0f7..bcad67811 100644 --- a/packages/interface/SHARED-UI-STRATEGY.md +++ b/packages/interface/SHARED-UI-STRATEGY.md @@ -34,7 +34,7 @@ The repo publishes multiple packages from a single monorepo. Domain-specific com ``` spacedriveapp/spaceui/ ├── packages/ -│ ├── primitives/ # @spaceui/primitives +│ ├── primitives/ # @spacedrive/primitives │ │ ├── src/ │ │ │ ├── Button.tsx │ │ │ ├── Input.tsx @@ -68,7 +68,7 @@ spacedriveapp/spaceui/ │ │ │ └── index.ts │ │ └── package.json │ │ -│ ├── forms/ # @spaceui/forms +│ ├── forms/ # @spacedrive/forms │ │ ├── src/ │ │ │ ├── Form.tsx │ │ │ ├── FormField.tsx @@ -79,9 +79,9 @@ spacedriveapp/spaceui/ │ │ │ ├── RadioGroupField.tsx │ │ │ ├── SwitchField.tsx │ │ │ └── index.ts -│ │ └── package.json # peer deps: @spaceui/primitives, react-hook-form, zod +│ │ └── package.json # peer deps: @spacedrive/primitives, react-hook-form, zod │ │ -│ ├── ai/ # @spaceui/ai +│ ├── ai/ # @spacedrive/ai │ │ ├── src/ │ │ │ ├── ToolCall.tsx │ │ │ ├── Markdown.tsx @@ -99,9 +99,9 @@ spacedriveapp/spaceui/ │ │ │ ├── AutonomyPanel.tsx │ │ │ ├── types.ts │ │ │ └── index.ts -│ │ └── package.json # peer deps: @spaceui/primitives, @spacebot/api-client +│ │ └── package.json # peer deps: @spacedrive/primitives, @spacebot/api-client │ │ -│ ├── explorer/ # @spaceui/explorer +│ ├── explorer/ # @spacedrive/explorer │ │ ├── src/ │ │ │ ├── FileGrid.tsx │ │ │ ├── FileList.tsx @@ -117,9 +117,9 @@ spacedriveapp/spaceui/ │ │ │ ├── RenameInput.tsx │ │ │ ├── types.ts │ │ │ └── index.ts -│ │ └── package.json # peer deps: @spaceui/primitives +│ │ └── package.json # peer deps: @spacedrive/primitives │ │ -│ └── tokens/ # @spaceui/tokens +│ └── tokens/ # @spacedrive/tokens │ ├── src/ │ │ ├── colors.ts # semantic color definitions │ │ ├── tailwind-preset.ts @@ -133,13 +133,13 @@ spacedriveapp/spaceui/ │ ├── turbo.json # or bun workspace config ├── tsconfig.base.json -├── tailwind.config.ts # base config using @spaceui/tokens +├── tailwind.config.ts # base config using @spacedrive/tokens └── package.json # workspace root ``` ### Package Responsibilities -#### `@spaceui/tokens` +#### `@spacedrive/tokens` Design tokens and Tailwind preset. The foundation everything else builds on. @@ -151,11 +151,11 @@ Design tokens and Tailwind preset. The foundation everything else builds on. Both app `tailwind.config.ts` files use: ```ts -import { spaceUiPreset } from '@spaceui/tokens'; +import { spaceUiPreset } from '@spacedrive/tokens'; export default { presets: [spaceUiPreset], /* app-specific overrides */ }; ``` -#### `@spaceui/primitives` +#### `@spacedrive/primitives` All interactive building blocks. No business logic. No data fetching. No product-specific concepts. @@ -179,16 +179,16 @@ All interactive building blocks. No business logic. No data fetching. No product - Typography — unify Spacedrive's set with spacebot's 6 heading/body variants - Shortcut/Kbd — evaluate and keep one -#### `@spaceui/forms` +#### `@spacedrive/forms` -Form field wrappers built on `react-hook-form` + `@spaceui/primitives`. Identical pattern in both apps today — Controller wrapper → Label → Primitive → ErrorMessage. +Form field wrappers built on `react-hook-form` + `@spacedrive/primitives`. Identical pattern in both apps today — Controller wrapper → Label → Primitive → ErrorMessage. - Form, FormField (base wrapper) - InputField, TextAreaField - SelectField, CheckboxField, RadioGroupField, SwitchField - Peer deps on `react-hook-form` and `zod` -#### `@spaceui/ai` +#### `@spacedrive/ai` Assembled components for AI agent interaction. These understand agent concepts — tool calls, workers, transcripts, tasks, memories, conversations — but are not tied to any specific agent runtime. Tailored to Spacebot today, generic enough that the component vocabulary applies to any agent surface. @@ -255,7 +255,7 @@ interface AgentInfo { id: string; name: string; detail: string; status?: string; interface ModelOption { id: string; name: string; provider: string; context_window?: number; capabilities?: string[]; } ``` -#### `@spaceui/explorer` +#### `@spacedrive/explorer` Assembled components for file browsing and management. These understand file system concepts — paths, thumbnails, kinds, tags, metadata, preview — but are not tied to Spacedrive's specific backend. The Spacedrive app wires them to its core queries; any other file-browsing surface could use them with different data sources. @@ -292,7 +292,7 @@ The explorer package starts smaller than ai — many of these components are dee ## Dependency Strategy -### `@spaceui/primitives` Dependencies +### `@spacedrive/primitives` Dependencies Direct: - `@radix-ui/*` (checkbox, dialog, dropdown-menu, popover, radio-group, select, slider, switch, tabs, tooltip) @@ -305,13 +305,13 @@ Peer: - `react`, `react-dom` - `tailwindcss` (build-time) -### `@spaceui/ai` Dependencies +### `@spacedrive/ai` Dependencies Direct: - `react-markdown`, `remark-gfm`, `rehype-raw` (for Markdown) Peer: -- `@spaceui/primitives` +- `@spacedrive/primitives` - `@spacebot/api-client` (for types) - `@tanstack/react-query` (consumers provide) - `@tanstack/react-virtual` (consumers provide) @@ -321,10 +321,10 @@ Optional / lazy-loaded: - `@react-sigma/core`, `sigma`, `graphology` (MemoryGraph — code-split) - `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities` (TaskBoard — code-split) -### `@spaceui/explorer` Dependencies +### `@spacedrive/explorer` Dependencies Peer: -- `@spaceui/primitives` +- `@spacedrive/primitives` - `@tanstack/react-virtual` (consumers provide) - `react`, `react-dom` @@ -366,7 +366,7 @@ App-specific layout, routing, Spacedrive integration, and anything that calls `u - Selection management - Platform-specific behavior (Tauri commands, native menus) -Spacedrive's `@sd/ui` package **goes away** — its contents migrate to `@spaceui/primitives`. During transition, `@sd/ui` becomes a thin re-export wrapper, then is removed. +Spacedrive's `@sd/ui` package **goes away** — its contents migrate to `@spacedrive/primitives`. During transition, `@sd/ui` becomes a thin re-export wrapper, then is removed. ### Spacebot Portal `spacebot/interface/src/` @@ -392,32 +392,32 @@ The portal's `/src/ui/` directory **is deleted entirely** once migration is comp ### Phase 0 — Bootstrap the Repo 1. Create `spacedriveapp/spaceui` repo with monorepo tooling (Turbo or Bun workspaces). -2. Set up `@spaceui/tokens` with the shared Tailwind preset, extracting color definitions from Spacedrive's current `styles.css` and tailwind config. -3. Set up `@spaceui/primitives`, `@spaceui/forms`, `@spaceui/ai`, `@spaceui/explorer` as empty packages with build config (tsup or unbuild, Tailwind, TypeScript). +2. Set up `@spacedrive/tokens` with the shared Tailwind preset, extracting color definitions from Spacedrive's current `styles.css` and tailwind config. +3. Set up `@spacedrive/primitives`, `@spacedrive/forms`, `@spacedrive/ai`, `@spacedrive/explorer` as empty packages with build config (tsup or unbuild, Tailwind, TypeScript). 4. Both app repos add spaceui as a workspace dependency (git submodule, npm link, or published packages — your call on linking strategy). ### Phase 1 — Stop the Bleeding (week 1) Move the actively-duplicated components first so no more copy-paste happens: -1. Move `ToolCall.tsx` + `pairTranscriptSteps` + types → `@spaceui/ai` -2. Move `Markdown.tsx` → `@spaceui/ai` +1. Move `ToolCall.tsx` + `pairTranscriptSteps` + types → `@spacedrive/ai` +2. Move `Markdown.tsx` → `@spacedrive/ai` 3. Both apps update imports. Delete the duplicates. ### Phase 2 — Primitives Migration (weeks 2–3) -Move all primitives out of both repos into `@spaceui/primitives`: +Move all primitives out of both repos into `@spacedrive/primitives`: 1. Start with the intersection — components that exist in both @sd/ui and spacebot `/src/ui/` with identical APIs: Button, Input, Checkbox, Switch, Slider, Dialog, Tabs, Tooltip, Popover, Select, RadioGroup, Dropdown, ProgressBar, Loader, Divider. 2. For each: take the better implementation, move to spaceui, update imports in both apps. 3. Add spacebot-only primitives that are genuinely reusable: Badge, Card, NumberStepper, FilterButton, ToggleGroup. 4. Merge divergent implementations: Banner/InfoBanner, Typography, Shortcut/Kbd. -5. Move form fields → `@spaceui/forms`. -6. Spacedrive's `@sd/ui` becomes a thin `index.ts` that re-exports from `@spaceui/primitives` (backwards compat shim). +5. Move form fields → `@spacedrive/forms`. +6. Spacedrive's `@sd/ui` becomes a thin `index.ts` that re-exports from `@spacedrive/primitives` (backwards compat shim). ### Phase 3 — AI Composite Extraction (weeks 3–5) -Extract shared AI composites into `@spaceui/ai`: +Extract shared AI composites into `@spacedrive/ai`: 1. `InlineWorkerCard` — extract from Spacedrive, parameterize the API calls (accept data via props, not internal fetching). 2. `ChatComposer` — extract from Spacedrive, make project/model selectors pluggable. @@ -428,7 +428,7 @@ Extract shared AI composites into `@spaceui/ai`: ### Phase 4 — New Shared Components (aligned with VISION) -Build new components directly in `@spaceui/ai`: +Build new components directly in `@spacedrive/ai`: 1. `TaskBoard` + `TaskCard` — refactor from portal's version, serve VISION Phase 2. 2. `MemoryGraph` + `MemoryList` — refactor from portal's MemoryGraph, add list view, serve VISION Phase 3. @@ -437,7 +437,7 @@ Build new components directly in `@spaceui/ai`: ### Phase 5 — Explorer Extraction (parallel track) -Extract file management components into `@spaceui/explorer` incrementally: +Extract file management components into `@spacedrive/explorer` incrementally: 1. Start with self-contained pieces: TagPill, KindIcon, FileThumb, PathBar. 2. Then stateful but bounded: RenameInput, DragOverlay, InspectorPanel. @@ -447,7 +447,7 @@ Extract file management components into `@spaceui/explorer` incrementally: ### Phase 6 — Cleanup 1. Delete spacebot portal's `/src/ui/` entirely. -2. Remove Spacedrive's `@sd/ui` re-export shim (update all imports to `@spaceui/primitives`). +2. Remove Spacedrive's `@sd/ui` re-export shim (update all imports to `@spacedrive/primitives`). 3. Audit both apps for any remaining duplicated UI code. 4. Portal's `/src/components/` should only contain portal-specific components (channels, cortex, orchestration, admin). @@ -474,7 +474,7 @@ Recommendation: **Hybrid.** During active development, both repos use workspace - **No business logic.** A Button doesn't know about agents or files. - **Styling via className + CVA variants.** Consumers can override or extend. -- **Semantic color classes only.** All components use `@spaceui/tokens` colors. No hardcoded hex, no `var()` references in className. +- **Semantic color classes only.** All components use `@spacedrive/tokens` colors. No hardcoded hex, no `var()` references in className. - **Radix for accessibility.** Every interactive primitive wraps a Radix component. - **Composable over configurable.** Card has Card.Header, Card.Content, Card.Footer — not a single Card with 15 props. @@ -504,7 +504,7 @@ Recommendation: **Hybrid.** During active development, both repos use workspace ## Audit: Full Component Inventory -### Primitives — Final Merged Set for `@spaceui/primitives` +### Primitives — Final Merged Set for `@spacedrive/primitives` | Component | Source | Notes | |-----------|--------|-------| @@ -541,7 +541,7 @@ Recommendation: **Hybrid.** During active development, both repos use workspace | TopBarButtonGroup | @sd/ui | Keep | | Icon | @sd/ui | Keep | -### AI Composites — Full Set for `@spaceui/ai` +### AI Composites — Full Set for `@spacedrive/ai` | Component | Source | Priority | |-----------|--------|----------| @@ -560,7 +560,7 @@ Recommendation: **Hybrid.** During active development, both repos use workspace | CronJobList | New | Phase 4 (VISION P3) | | AutonomyPanel | New | Phase 4 (VISION P4) | -### Explorer Composites — Initial Set for `@spaceui/explorer` +### Explorer Composites — Initial Set for `@spacedrive/explorer` | Component | Source | Priority | |-----------|--------|----------| diff --git a/packages/interface/package.json b/packages/interface/package.json index 20629bddc..fec35bca3 100644 --- a/packages/interface/package.json +++ b/packages/interface/package.json @@ -40,9 +40,9 @@ "@react-three/fiber": "^9.4.2", "@sd/assets": "workspace:*", "@sd/ts-client": "workspace:*", - "@spaceui/ai": "link:@spaceui/ai", - "@spaceui/primitives": "link:@spaceui/primitives", - "@spaceui/tokens": "link:@spaceui/tokens", + "@spacedrive/ai": "link:@spacedrive/ai", + "@spacedrive/primitives": "link:@spacedrive/primitives", + "@spacedrive/tokens": "link:@spacedrive/tokens", "openapi-fetch": "^0.17", "@tanstack/react-query": "^5.90.7", "@tanstack/react-query-devtools": "^5.90.2", diff --git a/packages/interface/src/Settings/pages/AboutSettings.tsx b/packages/interface/src/Settings/pages/AboutSettings.tsx index 84758f38e..fda209371 100644 --- a/packages/interface/src/Settings/pages/AboutSettings.tsx +++ b/packages/interface/src/Settings/pages/AboutSettings.tsx @@ -1,7 +1,7 @@ import { motion } from "framer-motion"; import { BallBlue } from "@sd/assets/images"; import Orb from "../../components/Orb"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import { GlobeHemisphereWest, GithubLogo, DiscordLogo } from "@phosphor-icons/react"; import contributors from "../../contributors.json"; diff --git a/packages/interface/src/Shell.tsx b/packages/interface/src/Shell.tsx index 2b06a303e..6f7df9aa5 100644 --- a/packages/interface/src/Shell.tsx +++ b/packages/interface/src/Shell.tsx @@ -2,7 +2,7 @@ import { SpacedriveProvider, type SpacedriveClient } from "./contexts/Spacedrive import { ServerProvider } from "./contexts/ServerContext"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { RouterProvider } from "react-router-dom"; -import { Dialogs, Toaster, TooltipProvider } from "@spaceui/primitives"; +import { Dialogs, Toaster, TooltipProvider } from "@spacedrive/primitives"; import { ShellLayout } from "./ShellLayout"; import { explorerRoutes } from "./router"; import { useDaemonStatus } from "./hooks/useDaemonStatus"; diff --git a/packages/interface/src/Spacebot/ChatComposer.tsx b/packages/interface/src/Spacebot/ChatComposer.tsx index f62704e57..cb7fe7d70 100644 --- a/packages/interface/src/Spacebot/ChatComposer.tsx +++ b/packages/interface/src/Spacebot/ChatComposer.tsx @@ -1,5 +1,5 @@ import {Microphone, Sparkle} from '@phosphor-icons/react'; -import {ModelSelector, type ModelOption} from '@spaceui/ai'; +import {ModelSelector, type ModelOption} from '@spacedrive/ai'; import { CircleButton, OptionList, @@ -7,7 +7,7 @@ import { Popover, SelectPill, usePopover -} from '@spaceui/primitives'; +} from '@spacedrive/primitives'; import {AnimatePresence, motion} from 'framer-motion'; import {useState} from 'react'; diff --git a/packages/interface/src/Spacebot/ConversationScreen.tsx b/packages/interface/src/Spacebot/ConversationScreen.tsx index b3e6c361f..9f25cee9f 100644 --- a/packages/interface/src/Spacebot/ConversationScreen.tsx +++ b/packages/interface/src/Spacebot/ConversationScreen.tsx @@ -7,7 +7,7 @@ import type { PortalConversationSummary, PortalHistoryMessage } from '@spacebot/api-client'; -import {MessageBubble} from '@spaceui/ai'; +import {MessageBubble} from '@spacedrive/ai'; import {useQuery} from '@tanstack/react-query'; import {useVirtualizer} from '@tanstack/react-virtual'; import {useEffect, useMemo, useRef} from 'react'; @@ -28,11 +28,11 @@ interface ConversationScreenProps { selectedProject: string; selectedModel: string; projectOptions: string[]; - models: import('@spaceui/ai').ModelOption[]; + models: import('@spacedrive/ai').ModelOption[]; onSelectProject(project: string): void; onSelectModel(model: string): void; projectSelector: ReturnType< - typeof import('@spaceui/primitives').usePopover + typeof import('@spacedrive/primitives').usePopover >; isSending?: boolean; } diff --git a/packages/interface/src/Spacebot/InlineWorkerCard.tsx b/packages/interface/src/Spacebot/InlineWorkerCard.tsx index c115f3a97..480ba709c 100644 --- a/packages/interface/src/Spacebot/InlineWorkerCard.tsx +++ b/packages/interface/src/Spacebot/InlineWorkerCard.tsx @@ -2,7 +2,7 @@ import {apiClient, type WorkerListItem} from '@spacebot/api-client'; import { InlineWorkerCard as InlineWorkerCardUI, type TranscriptStep -} from '@spaceui/ai'; +} from '@spacedrive/ai'; import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; export function InlineWorkerCard({ diff --git a/packages/interface/src/Spacebot/SpacebotContext.tsx b/packages/interface/src/Spacebot/SpacebotContext.tsx index cfc3d0e15..ff88af923 100644 --- a/packages/interface/src/Spacebot/SpacebotContext.tsx +++ b/packages/interface/src/Spacebot/SpacebotContext.tsx @@ -18,7 +18,7 @@ import { type PortalConversationSummary, type TypingStateEvent } from '@spacebot/api-client'; -import {SearchBar, usePopover} from '@spaceui/primitives'; +import {SearchBar, usePopover} from '@spacedrive/primitives'; import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; import { createContext, diff --git a/packages/interface/src/Spacebot/SpacebotLayout.tsx b/packages/interface/src/Spacebot/SpacebotLayout.tsx index 6defd61e6..5116d32de 100644 --- a/packages/interface/src/Spacebot/SpacebotLayout.tsx +++ b/packages/interface/src/Spacebot/SpacebotLayout.tsx @@ -14,7 +14,7 @@ import { SearchBar, SelectPill, usePopover -} from '@spaceui/primitives'; +} from '@spacedrive/primitives'; import {ReactQueryDevtools} from '@tanstack/react-query-devtools'; import {useEffect, useState} from 'react'; import {Outlet, useLocation, useNavigate} from 'react-router-dom'; diff --git a/packages/interface/src/Spacebot/routes/TasksRoute.tsx b/packages/interface/src/Spacebot/routes/TasksRoute.tsx index dca9c142d..19a331fbc 100644 --- a/packages/interface/src/Spacebot/routes/TasksRoute.tsx +++ b/packages/interface/src/Spacebot/routes/TasksRoute.tsx @@ -9,7 +9,7 @@ import { TaskList, type TaskPriority as UiTaskPriority, type TaskStatus as UiTaskStatus, -} from '@spaceui/ai'; +} from '@spacedrive/ai'; import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; import {useCallback, useState} from 'react'; import {agents, useSpacebot} from '../SpacebotContext'; diff --git a/packages/interface/src/TopBar/OverflowMenu.tsx b/packages/interface/src/TopBar/OverflowMenu.tsx index 3659ab491..7104edabf 100644 --- a/packages/interface/src/TopBar/OverflowMenu.tsx +++ b/packages/interface/src/TopBar/OverflowMenu.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; import { DotsThree } from "@phosphor-icons/react"; import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import { TopBarItem } from "./Context"; interface OverflowButtonProps { diff --git a/packages/interface/src/components/Inspector/variants/FileInspector.tsx b/packages/interface/src/components/Inspector/variants/FileInspector.tsx index f7399f16f..78f9d0d26 100644 --- a/packages/interface/src/components/Inspector/variants/FileInspector.tsx +++ b/packages/interface/src/components/Inspector/variants/FileInspector.tsx @@ -27,7 +27,7 @@ import { } from '@phosphor-icons/react'; import {getIcon} from '@sd/assets/util'; import type {File} from '@sd/ts-client'; -import {toast} from '@spaceui/primitives'; +import {toast} from '@spacedrive/primitives'; import clsx from 'clsx'; import {LocationMap} from '../LocationMap'; import {useState} from 'react'; diff --git a/packages/interface/src/components/Inspector/variants/LocationInspector.tsx b/packages/interface/src/components/Inspector/variants/LocationInspector.tsx index f079196df..e432496a9 100644 --- a/packages/interface/src/components/Inspector/variants/LocationInspector.tsx +++ b/packages/interface/src/components/Inspector/variants/LocationInspector.tsx @@ -33,7 +33,7 @@ import { } from "../Inspector"; import clsx from "clsx"; import type { Location } from "@sd/ts-client"; -import { Button, Dialog, dialogManager, useDialog, CircleButton, type UseDialogProps } from "@spaceui/primitives"; +import { Button, Dialog, dialogManager, useDialog, CircleButton, type UseDialogProps } from "@spacedrive/primitives"; import { useLibraryMutation } from "../../../contexts/SpacedriveContext"; import { useContextMenu } from "../../../hooks/useContextMenu"; import LocationIcon from "@sd/assets/icons/Location.png"; diff --git a/packages/interface/src/components/JobManager/JobManagerPopover.tsx b/packages/interface/src/components/JobManager/JobManagerPopover.tsx index 5a956e235..fa6cc52bd 100644 --- a/packages/interface/src/components/JobManager/JobManagerPopover.tsx +++ b/packages/interface/src/components/JobManager/JobManagerPopover.tsx @@ -1,5 +1,5 @@ import { ListBullets, CircleNotch, FunnelSimple, ArrowsOut } from "@phosphor-icons/react"; -import { Popover, usePopover, CircleButton } from "@spaceui/primitives"; +import { Popover, usePopover, CircleButton } from "@spacedrive/primitives"; import clsx from "clsx"; import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; diff --git a/packages/interface/src/components/JobManager/JobsScreen/index.tsx b/packages/interface/src/components/JobManager/JobsScreen/index.tsx index 062d4655a..db479ca2a 100644 --- a/packages/interface/src/components/JobManager/JobsScreen/index.tsx +++ b/packages/interface/src/components/JobManager/JobsScreen/index.tsx @@ -1,5 +1,5 @@ import { X, FunnelSimple } from "@phosphor-icons/react"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { useJobsContext } from "../hooks/JobsContext"; diff --git a/packages/interface/src/components/QuickPreview/ContentRenderer.tsx b/packages/interface/src/components/QuickPreview/ContentRenderer.tsx index 3d36f1d9b..9dd578042 100644 --- a/packages/interface/src/components/QuickPreview/ContentRenderer.tsx +++ b/packages/interface/src/components/QuickPreview/ContentRenderer.tsx @@ -29,7 +29,7 @@ import { TextViewer } from "./TextViewer"; import { WithPrismTheme } from "./prism"; import { SplatShimmerEffect } from "./SplatShimmerEffect"; import { sounds } from "@sd/assets/sounds"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import { DirectoryPreview } from "./DirectoryPreview"; const MeshViewer = lazy(() => diff --git a/packages/interface/src/components/QuickPreview/MeshViewer.tsx b/packages/interface/src/components/QuickPreview/MeshViewer.tsx index 42683c938..cd5e2be53 100644 --- a/packages/interface/src/components/QuickPreview/MeshViewer.tsx +++ b/packages/interface/src/components/QuickPreview/MeshViewer.tsx @@ -9,7 +9,7 @@ import { File as FileComponent } from "../../routes/explorer/File"; import { PLYLoader } from "three/examples/jsm/loaders/PLYLoader.js"; import * as GaussianSplats3D from "@mkkellogg/gaussian-splats-3d"; import * as THREE from "three"; -import { CircleButton, CircleButtonGroup } from "@spaceui/primitives"; +import { CircleButton, CircleButtonGroup } from "@spacedrive/primitives"; import { Play, Pause, diff --git a/packages/interface/src/components/SpacesSidebar/AddGroupModal.tsx b/packages/interface/src/components/SpacesSidebar/AddGroupModal.tsx index 72c7c74cf..879617e60 100644 --- a/packages/interface/src/components/SpacesSidebar/AddGroupModal.tsx +++ b/packages/interface/src/components/SpacesSidebar/AddGroupModal.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Input, Label, dialogManager, useDialog, Dialog } from '@spaceui/primitives'; +import { Input, Label, dialogManager, useDialog, Dialog } from '@spacedrive/primitives'; import { useLibraryMutation } from '@sd/ts-client'; import { useForm } from 'react-hook-form'; import type { GroupType } from '@sd/ts-client'; diff --git a/packages/interface/src/components/SpacesSidebar/CreateSpaceModal.tsx b/packages/interface/src/components/SpacesSidebar/CreateSpaceModal.tsx index 7de668a38..4ec01fc13 100644 --- a/packages/interface/src/components/SpacesSidebar/CreateSpaceModal.tsx +++ b/packages/interface/src/components/SpacesSidebar/CreateSpaceModal.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import clsx from 'clsx'; -import { Input, Label, dialogManager, useDialog, Dialog } from '@spaceui/primitives'; +import { Input, Label, dialogManager, useDialog, Dialog } from '@spacedrive/primitives'; import { useLibraryMutation } from '@sd/ts-client'; import { useForm } from 'react-hook-form'; diff --git a/packages/interface/src/components/SpacesSidebar/SpaceCustomizationPanel.tsx b/packages/interface/src/components/SpacesSidebar/SpaceCustomizationPanel.tsx index 058fe1aca..30cd44f75 100644 --- a/packages/interface/src/components/SpacesSidebar/SpaceCustomizationPanel.tsx +++ b/packages/interface/src/components/SpacesSidebar/SpaceCustomizationPanel.tsx @@ -7,7 +7,7 @@ import { SpaceItem } from "./SpaceItem"; import { createPortal } from "react-dom"; import { useState } from "react"; import { useLibraryMutation } from "../../contexts/SpacedriveContext"; -import { Input } from "@spaceui/primitives"; +import { Input } from "@spacedrive/primitives"; interface PaletteItem { type: ItemType; diff --git a/packages/interface/src/components/SpacesSidebar/SpaceSwitcher.tsx b/packages/interface/src/components/SpacesSidebar/SpaceSwitcher.tsx index 7414e7f42..5efb4eb1d 100644 --- a/packages/interface/src/components/SpacesSidebar/SpaceSwitcher.tsx +++ b/packages/interface/src/components/SpacesSidebar/SpaceSwitcher.tsx @@ -1,6 +1,6 @@ import {CaretDown, GearSix, Plus} from '@phosphor-icons/react'; import type {Space} from '@sd/ts-client'; -import {DropdownMenu, SelectPill} from '@spaceui/primitives'; +import {DropdownMenu, SelectPill} from '@spacedrive/primitives'; import clsx from 'clsx'; import {useCreateSpaceDialog} from './CreateSpaceModal'; diff --git a/packages/interface/src/components/SpacesSidebar/index.tsx b/packages/interface/src/components/SpacesSidebar/index.tsx index 169d0ecf4..416c4ba58 100644 --- a/packages/interface/src/components/SpacesSidebar/index.tsx +++ b/packages/interface/src/components/SpacesSidebar/index.tsx @@ -19,7 +19,7 @@ import type { SpaceGroup as SpaceGroupType, SpaceItem as SpaceItemType } from '@sd/ts-client'; -import {CircleButton, Popover, usePopover} from '@spaceui/primitives'; +import {CircleButton, Popover, usePopover} from '@spacedrive/primitives'; import clsx from 'clsx'; import {motion} from 'framer-motion'; import {memo, useEffect, useState} from 'react'; diff --git a/packages/interface/src/components/SyncMonitor/SyncMonitorPopover.tsx b/packages/interface/src/components/SyncMonitor/SyncMonitorPopover.tsx index f8c198910..4a199f4e7 100644 --- a/packages/interface/src/components/SyncMonitor/SyncMonitorPopover.tsx +++ b/packages/interface/src/components/SyncMonitor/SyncMonitorPopover.tsx @@ -4,7 +4,7 @@ import { ArrowsOut, FunnelSimple, } from "@phosphor-icons/react"; -import { Popover, usePopover, CircleButton } from "@spaceui/primitives"; +import { Popover, usePopover, CircleButton } from "@spacedrive/primitives"; import clsx from "clsx"; import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; diff --git a/packages/interface/src/components/TabManager/TabBar.tsx b/packages/interface/src/components/TabManager/TabBar.tsx index a03d4efa5..4fbfda9e3 100644 --- a/packages/interface/src/components/TabManager/TabBar.tsx +++ b/packages/interface/src/components/TabManager/TabBar.tsx @@ -5,7 +5,7 @@ import { } from '@dnd-kit/sortable'; import {CSS} from '@dnd-kit/utilities'; import {Plus, X} from '@phosphor-icons/react'; -import {TabBar as TabBarPrimitive, TabBarItem} from '@spaceui/primitives'; +import {TabBar as TabBarPrimitive, TabBarItem} from '@spacedrive/primitives'; import clsx from 'clsx'; import {useMemo} from 'react'; import type {Tab} from '.'; diff --git a/packages/interface/src/components/Tags/TagSelector.tsx b/packages/interface/src/components/Tags/TagSelector.tsx index 4b77ac6a4..74fdbb393 100644 --- a/packages/interface/src/components/Tags/TagSelector.tsx +++ b/packages/interface/src/components/Tags/TagSelector.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { MagnifyingGlass, Plus } from '@phosphor-icons/react'; import clsx from 'clsx'; -import { Popover, usePopover } from '@spaceui/primitives'; +import { Popover, usePopover } from '@spacedrive/primitives'; import { useNormalizedQuery, useLibraryMutation } from '../../contexts/SpacedriveContext'; import type { Tag } from '@sd/ts-client'; diff --git a/packages/interface/src/components/WrappedPopover.tsx b/packages/interface/src/components/WrappedPopover.tsx index 376995ec0..ae47e5521 100644 --- a/packages/interface/src/components/WrappedPopover.tsx +++ b/packages/interface/src/components/WrappedPopover.tsx @@ -2,7 +2,7 @@ /** * Spacedrive-specific Popover wrapper that preserves the usePopover + trigger prop API. - * Built on top of @spaceui/primitives Radix Popover. + * Built on top of @spacedrive/primitives Radix Popover. * * Usage: * const popover = usePopover(); @@ -11,7 +11,7 @@ * */ -import { Popover } from "@spaceui/primitives"; +import { Popover } from "@spacedrive/primitives"; import clsx from "clsx"; import React, { useEffect, useRef } from "react"; diff --git a/packages/interface/src/components/modals/CreateLibraryModal.tsx b/packages/interface/src/components/modals/CreateLibraryModal.tsx index 8f83b90c9..7e7a26b73 100644 --- a/packages/interface/src/components/modals/CreateLibraryModal.tsx +++ b/packages/interface/src/components/modals/CreateLibraryModal.tsx @@ -14,7 +14,7 @@ import { Dialog, dialogManager, useDialog, -} from "@spaceui/primitives"; +} from "@spacedrive/primitives"; import { queryClient } from "@sd/ts-client/hooks"; import type { Event } from "@sd/ts-client"; import { useCoreMutation, useSpacedriveClient } from "../../contexts/SpacedriveContext"; diff --git a/packages/interface/src/components/modals/FileOperationModal.tsx b/packages/interface/src/components/modals/FileOperationModal.tsx index 1a3a669ab..55b00e082 100644 --- a/packages/interface/src/components/modals/FileOperationModal.tsx +++ b/packages/interface/src/components/modals/FileOperationModal.tsx @@ -19,7 +19,7 @@ import { Dialog, dialogManager, useDialog, -} from "@spaceui/primitives"; +} from "@spacedrive/primitives"; import type { SdPath, File as FileType } from "@sd/ts-client"; import { useLibraryMutation, useLibraryQuery } from "../../contexts/SpacedriveContext"; import { File, FileStack } from "../../routes/explorer/File"; diff --git a/packages/interface/src/components/modals/SyncSetupModal.tsx b/packages/interface/src/components/modals/SyncSetupModal.tsx index c506ab696..b890733f7 100644 --- a/packages/interface/src/components/modals/SyncSetupModal.tsx +++ b/packages/interface/src/components/modals/SyncSetupModal.tsx @@ -13,7 +13,7 @@ import type { PairedDeviceInfo, RemoteLibraryInfo, } from "@sd/ts-client"; -import { Button, Dialog, dialogManager, useDialog } from "@spaceui/primitives"; +import { Button, Dialog, dialogManager, useDialog } from "@spacedrive/primitives"; import { useCoreQuery, useCoreMutation, useSpacedriveClient } from "../../contexts/SpacedriveContext"; interface SyncSetupDialogProps { diff --git a/packages/interface/src/components/overlays/DaemonDisconnectedOverlay.tsx b/packages/interface/src/components/overlays/DaemonDisconnectedOverlay.tsx index 394d73936..30e5b4b80 100644 --- a/packages/interface/src/components/overlays/DaemonDisconnectedOverlay.tsx +++ b/packages/interface/src/components/overlays/DaemonDisconnectedOverlay.tsx @@ -3,7 +3,7 @@ import { motion, AnimatePresence } from "framer-motion"; import { Copy } from "@phosphor-icons/react"; import { useDaemonStatus } from "../../hooks/useDaemonStatus"; import { usePlatform } from "../../contexts/PlatformContext"; -import { Button } from "@spaceui/primitives"; +import { Button } from "@spacedrive/primitives"; import folderIcon from "@sd/assets/icons/FolderNoSpace.png"; function CLICommand({ diff --git a/packages/interface/src/hooks/useOpenWith.ts b/packages/interface/src/hooks/useOpenWith.ts index 1d1c7dc7b..4075efdfa 100644 --- a/packages/interface/src/hooks/useOpenWith.ts +++ b/packages/interface/src/hooks/useOpenWith.ts @@ -1,6 +1,6 @@ import { useQuery } from "@tanstack/react-query"; import { usePlatform, type OpenResult } from "../contexts/PlatformContext"; -import { toast } from "@spaceui/primitives"; +import { toast } from "@spacedrive/primitives"; export function useOpenWith(paths: string[]) { const platform = usePlatform(); diff --git a/packages/interface/src/routes/explorer/ExplorerView.tsx b/packages/interface/src/routes/explorer/ExplorerView.tsx index 8d946f8e8..f0bbd131a 100644 --- a/packages/interface/src/routes/explorer/ExplorerView.tsx +++ b/packages/interface/src/routes/explorer/ExplorerView.tsx @@ -5,7 +5,7 @@ import { SidebarSimple, Tag as TagIcon } from '@phosphor-icons/react'; -import {CircleButton, CircleButtonGroup} from '@spaceui/primitives'; +import {CircleButton, CircleButtonGroup} from '@spacedrive/primitives'; import clsx from 'clsx'; import {useCallback, useEffect, useMemo, useState} from 'react'; import {TopBarItem, TopBarPortal} from '../../TopBar'; diff --git a/packages/interface/src/routes/explorer/SortMenu.tsx b/packages/interface/src/routes/explorer/SortMenu.tsx index 0aaaf799f..06a8cd27c 100644 --- a/packages/interface/src/routes/explorer/SortMenu.tsx +++ b/packages/interface/src/routes/explorer/SortMenu.tsx @@ -11,7 +11,7 @@ import { } from "@phosphor-icons/react"; import { motion, AnimatePresence } from "framer-motion"; import clsx from "clsx"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import type { DirectorySortBy, MediaSortBy } from "@sd/ts-client"; interface SortMenuPanelProps { diff --git a/packages/interface/src/routes/explorer/TagAssignmentMode.tsx b/packages/interface/src/routes/explorer/TagAssignmentMode.tsx index 6f357b338..5570f6208 100644 --- a/packages/interface/src/routes/explorer/TagAssignmentMode.tsx +++ b/packages/interface/src/routes/explorer/TagAssignmentMode.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Tag as TagIcon, X } from '@phosphor-icons/react'; import clsx from 'clsx'; -import { Button } from '@spaceui/primitives'; +import { Button } from '@spacedrive/primitives'; import { useNormalizedQuery, useLibraryMutation } from '../../contexts/SpacedriveContext'; import { useSelection } from './SelectionContext'; import { useKeybind } from '../../hooks/useKeybind'; diff --git a/packages/interface/src/routes/explorer/ViewModeMenu.tsx b/packages/interface/src/routes/explorer/ViewModeMenu.tsx index 8744f29e8..0aad7d7cf 100644 --- a/packages/interface/src/routes/explorer/ViewModeMenu.tsx +++ b/packages/interface/src/routes/explorer/ViewModeMenu.tsx @@ -8,7 +8,7 @@ import { Sparkle, SquaresFour } from '@phosphor-icons/react'; -import {CircleButton} from '@spaceui/primitives'; +import {CircleButton} from '@spacedrive/primitives'; import clsx from 'clsx'; import {AnimatePresence, motion} from 'framer-motion'; import {useEffect, useRef, useState} from 'react'; diff --git a/packages/interface/src/routes/explorer/ViewSettings.tsx b/packages/interface/src/routes/explorer/ViewSettings.tsx index d456e7a0f..85f65d000 100644 --- a/packages/interface/src/routes/explorer/ViewSettings.tsx +++ b/packages/interface/src/routes/explorer/ViewSettings.tsx @@ -4,7 +4,7 @@ import { Sliders } from "@phosphor-icons/react"; import { motion, AnimatePresence } from "framer-motion"; import clsx from "clsx"; import { useExplorer } from "./context"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; interface ViewSettingsPanelProps { viewSettings: any; diff --git a/packages/interface/src/routes/explorer/components/AddLocationModal.tsx b/packages/interface/src/routes/explorer/components/AddLocationModal.tsx index fd6e3bba5..aef9bf8a3 100644 --- a/packages/interface/src/routes/explorer/components/AddLocationModal.tsx +++ b/packages/interface/src/routes/explorer/components/AddLocationModal.tsx @@ -14,7 +14,7 @@ import { TabsList, TabsTrigger, TabsContent, -} from "@spaceui/primitives"; +} from "@spacedrive/primitives"; import type { IndexMode, LocationAddInput, diff --git a/packages/interface/src/routes/explorer/components/AddStorageModal.tsx b/packages/interface/src/routes/explorer/components/AddStorageModal.tsx index 60cf8d3bf..63609bf3d 100644 --- a/packages/interface/src/routes/explorer/components/AddStorageModal.tsx +++ b/packages/interface/src/routes/explorer/components/AddStorageModal.tsx @@ -18,7 +18,7 @@ import { TabsList, TabsTrigger, TabsContent, -} from "@spaceui/primitives"; +} from "@spacedrive/primitives"; import type { IndexMode, LocationAddInput, diff --git a/packages/interface/src/routes/explorer/components/ExpandableSearchButton.tsx b/packages/interface/src/routes/explorer/components/ExpandableSearchButton.tsx index 0b152fbc7..e0d6d3baa 100644 --- a/packages/interface/src/routes/explorer/components/ExpandableSearchButton.tsx +++ b/packages/interface/src/routes/explorer/components/ExpandableSearchButton.tsx @@ -1,7 +1,7 @@ import { useState, useRef, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { MagnifyingGlass } from "@phosphor-icons/react"; -import { CircleButton, SearchBar } from "@spaceui/primitives"; +import { CircleButton, SearchBar } from "@spacedrive/primitives"; interface ExpandableSearchButtonProps { value: string; diff --git a/packages/interface/src/routes/explorer/components/InlineNameEdit.tsx b/packages/interface/src/routes/explorer/components/InlineNameEdit.tsx index 280dc2136..4ca699fdf 100644 --- a/packages/interface/src/routes/explorer/components/InlineNameEdit.tsx +++ b/packages/interface/src/routes/explorer/components/InlineNameEdit.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef, useCallback } from "react"; -import { Input } from "@spaceui/primitives"; +import { Input } from "@spacedrive/primitives"; import type { File } from "@sd/ts-client"; import clsx from "clsx"; diff --git a/packages/interface/src/routes/explorer/components/PathBar.tsx b/packages/interface/src/routes/explorer/components/PathBar.tsx index 4d419b0f4..703fbc76b 100644 --- a/packages/interface/src/routes/explorer/components/PathBar.tsx +++ b/packages/interface/src/routes/explorer/components/PathBar.tsx @@ -13,7 +13,7 @@ import { useLibraryMutation, useNormalizedQuery } from '@sd/ts-client'; -import {Button, CircleButton, Popover, usePopover} from '@spaceui/primitives'; +import {Button, CircleButton, Popover, usePopover} from '@spacedrive/primitives'; import clsx from 'clsx'; import {motion} from 'framer-motion'; import {useEffect, useState} from 'react'; diff --git a/packages/interface/src/routes/explorer/views/SizeView/SizeView.tsx b/packages/interface/src/routes/explorer/views/SizeView/SizeView.tsx index decc51501..3abd45f5f 100644 --- a/packages/interface/src/routes/explorer/views/SizeView/SizeView.tsx +++ b/packages/interface/src/routes/explorer/views/SizeView/SizeView.tsx @@ -5,7 +5,7 @@ import { Plus } from '@phosphor-icons/react'; import type {DirectorySortBy, File} from '@sd/ts-client'; -import {CircleButton, CircleButtonGroup} from '@spaceui/primitives'; +import {CircleButton, CircleButtonGroup} from '@spacedrive/primitives'; import * as d3 from 'd3'; import {useEffect, useMemo, useRef, useState} from 'react'; import {createPortal} from 'react-dom'; diff --git a/packages/interface/src/routes/overview/DevicePanel.tsx b/packages/interface/src/routes/overview/DevicePanel.tsx index 41243059b..80a46dc31 100644 --- a/packages/interface/src/routes/overview/DevicePanel.tsx +++ b/packages/interface/src/routes/overview/DevicePanel.tsx @@ -26,7 +26,7 @@ import type { VolumeListOutput, VolumeListQueryInput } from '@sd/ts-client'; -import {Tooltip, CircleButton} from '@spaceui/primitives'; +import {Tooltip, CircleButton} from '@spacedrive/primitives'; import clsx from 'clsx'; import {useEffect, useRef, useState} from 'react'; import Masonry from 'react-masonry-css'; diff --git a/packages/interface/src/routes/overview/HeroStats.tsx b/packages/interface/src/routes/overview/HeroStats.tsx index 23e5db797..8d47cc622 100644 --- a/packages/interface/src/routes/overview/HeroStats.tsx +++ b/packages/interface/src/routes/overview/HeroStats.tsx @@ -7,7 +7,7 @@ import LocationIcon from '@sd/assets/icons/Location.png'; import MobileIcon from '@sd/assets/icons/Mobile.png'; import StorageIcon from '@sd/assets/icons/Storage.png'; import TagsIcon from '@sd/assets/icons/Tags.png'; -import {CircleButton} from '@spaceui/primitives'; +import {CircleButton} from '@spacedrive/primitives'; import {motion} from 'framer-motion'; import {useEffect, useRef, useState} from 'react'; diff --git a/packages/interface/src/routes/overview/OverviewTopBar.tsx b/packages/interface/src/routes/overview/OverviewTopBar.tsx index d9a359dbc..4c8b017be 100644 --- a/packages/interface/src/routes/overview/OverviewTopBar.tsx +++ b/packages/interface/src/routes/overview/OverviewTopBar.tsx @@ -9,7 +9,7 @@ import { GearSix, CloudArrowUp, } from "@phosphor-icons/react"; -import { Popover, usePopover, CircleButton } from "@spaceui/primitives"; +import { Popover, usePopover, CircleButton } from "@spacedrive/primitives"; import clsx from "clsx"; import { TopBarPortal, TopBarItem } from "../../TopBar"; import { PairingModal } from "../../components/modals/PairingModal"; diff --git a/packages/interface/src/routes/overview/VolumeBar.tsx b/packages/interface/src/routes/overview/VolumeBar.tsx index 6fb9c5b84..fb911e861 100644 --- a/packages/interface/src/routes/overview/VolumeBar.tsx +++ b/packages/interface/src/routes/overview/VolumeBar.tsx @@ -7,7 +7,7 @@ import DriveIcon from '@sd/assets/icons/Drive.png'; import HDDIcon from '@sd/assets/icons/HDD.png'; import ServerIcon from '@sd/assets/icons/Server.png'; import type {Device, Volume} from '@sd/ts-client'; -import {CircleButton} from '@spaceui/primitives'; +import {CircleButton} from '@spacedrive/primitives'; import {motion} from 'framer-motion'; import {useEffect, useState} from 'react'; import {useVolumeContextMenu} from '../../components/SpacesSidebar/hooks/useVolumeContextMenu'; diff --git a/packages/interface/src/routes/sources/Adapters.tsx b/packages/interface/src/routes/sources/Adapters.tsx index d6ae823aa..fa5d7dc0c 100644 --- a/packages/interface/src/routes/sources/Adapters.tsx +++ b/packages/interface/src/routes/sources/Adapters.tsx @@ -10,7 +10,7 @@ import { useLibraryMutation, } from "../../contexts/SpacedriveContext"; import { TopBarPortal, TopBarItem } from "../../TopBar"; -import { CircleButton } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; import { ExpandableSearchButton } from "../explorer/components/ExpandableSearchButton"; import { SourceTypeIcon } from "../../components/Sources/SourceTypeIcon"; diff --git a/packages/interface/src/routes/sources/SourceDetail.tsx b/packages/interface/src/routes/sources/SourceDetail.tsx index c6cf6c7ec..cc6447b96 100644 --- a/packages/interface/src/routes/sources/SourceDetail.tsx +++ b/packages/interface/src/routes/sources/SourceDetail.tsx @@ -14,7 +14,7 @@ import { } from "../../contexts/SpacedriveContext"; import { useTabManager } from "../../components/TabManager/useTabManager"; import { TopBarPortal, TopBarItem } from "../../TopBar"; -import { CircleButton, Popover, usePopover } from "@spaceui/primitives"; +import { CircleButton, Popover, usePopover } from "@spacedrive/primitives"; import { ExpandableSearchButton } from "../explorer/components/ExpandableSearchButton"; import { SourcePathBar } from "../../components/Sources/SourcePathBar"; import { SourceDataRow } from "../../components/Sources/SourceDataRow"; diff --git a/packages/interface/src/routes/sources/index.tsx b/packages/interface/src/routes/sources/index.tsx index 7477313f0..53dbe7656 100644 --- a/packages/interface/src/routes/sources/index.tsx +++ b/packages/interface/src/routes/sources/index.tsx @@ -4,8 +4,8 @@ import { useLibraryQuery } from "../../contexts/SpacedriveContext"; import { useTabManager } from "../../components/TabManager/useTabManager"; import { SourceCard } from "../../components/Sources/SourceCard"; import { TopBarPortal, TopBarItem } from "../../TopBar"; -import { CircleButton } from "@spaceui/primitives"; -import { SearchBar } from "@spaceui/primitives"; +import { CircleButton } from "@spacedrive/primitives"; +import { SearchBar } from "@spacedrive/primitives"; export function SourcesHome() { const navigate = useNavigate(); diff --git a/packages/interface/src/windows/DemoWindow.tsx b/packages/interface/src/windows/DemoWindow.tsx index 593da5232..c56da86dd 100644 --- a/packages/interface/src/windows/DemoWindow.tsx +++ b/packages/interface/src/windows/DemoWindow.tsx @@ -1,4 +1,4 @@ -import { ShinyButton } from "@spaceui/primitives"; +import { ShinyButton } from "@spacedrive/primitives"; import { SpacedriveProvider } from "../contexts/SpacedriveContext"; import { useLibraries } from "../hooks/useLibraries"; import { useAllEvents } from "../hooks/useEvent"; diff --git a/packages/interface/src/windows/Spacedrop.tsx b/packages/interface/src/windows/Spacedrop.tsx index a29228366..cb4627392 100644 --- a/packages/interface/src/windows/Spacedrop.tsx +++ b/packages/interface/src/windows/Spacedrop.tsx @@ -1,7 +1,7 @@ import { motion } from 'framer-motion'; import { X, ShareNetwork, Users } from '@phosphor-icons/react'; import { useState, useMemo } from 'react'; -import { CircleButton } from '@spaceui/primitives'; +import { CircleButton } from '@spacedrive/primitives'; interface Person { id: string; diff --git a/packages/interface/src/windows/VoiceOverlay.tsx b/packages/interface/src/windows/VoiceOverlay.tsx index c66503b5c..3ee83ad9d 100644 --- a/packages/interface/src/windows/VoiceOverlay.tsx +++ b/packages/interface/src/windows/VoiceOverlay.tsx @@ -5,7 +5,7 @@ import { Stop, } from "@phosphor-icons/react"; import { BallBlue } from "@sd/assets/images"; -import { Popover, usePopover } from "@spaceui/primitives"; +import { Popover, usePopover } from "@spacedrive/primitives"; import { apiClient, getEventsUrl,