@elench/shell 0.1.1 → 0.1.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.
Files changed (307) hide show
  1. package/README.md +46 -7
  2. package/dist/components/shell/activity-bar.d.ts +2 -0
  3. package/dist/components/shell/activity-bar.d.ts.map +1 -0
  4. package/dist/components/shell/activity-bar.js +19 -0
  5. package/dist/components/shell/activity-bar.js.map +1 -0
  6. package/dist/components/shell/app-shell.d.ts +11 -0
  7. package/dist/components/shell/app-shell.d.ts.map +1 -0
  8. package/dist/components/shell/app-shell.js +323 -0
  9. package/dist/components/shell/app-shell.js.map +1 -0
  10. package/dist/components/shell/context-action-menu.d.ts +7 -0
  11. package/dist/components/shell/context-action-menu.d.ts.map +1 -0
  12. package/dist/components/shell/context-action-menu.js +75 -0
  13. package/dist/components/shell/context-action-menu.js.map +1 -0
  14. package/dist/components/shell/default-layout.d.ts +3 -0
  15. package/dist/components/shell/default-layout.d.ts.map +1 -0
  16. package/dist/components/shell/default-layout.js +63 -0
  17. package/dist/components/shell/default-layout.js.map +1 -0
  18. package/dist/components/shell/left-sidebar.d.ts +2 -0
  19. package/dist/components/shell/left-sidebar.d.ts.map +1 -0
  20. package/dist/components/shell/left-sidebar.js +16 -0
  21. package/dist/components/shell/left-sidebar.js.map +1 -0
  22. package/dist/components/shell/primitives/activity-nav.d.ts +7 -0
  23. package/dist/components/shell/primitives/activity-nav.d.ts.map +1 -0
  24. package/dist/components/shell/primitives/activity-nav.js +12 -0
  25. package/dist/components/shell/primitives/activity-nav.js.map +1 -0
  26. package/dist/components/shell/primitives/inspector-panel.d.ts +25 -0
  27. package/dist/components/shell/primitives/inspector-panel.d.ts.map +1 -0
  28. package/dist/components/shell/primitives/inspector-panel.js +32 -0
  29. package/dist/components/shell/primitives/inspector-panel.js.map +1 -0
  30. package/dist/components/shell/primitives/instance-row.d.ts +20 -0
  31. package/dist/components/shell/primitives/instance-row.d.ts.map +1 -0
  32. package/dist/components/shell/primitives/instance-row.js +16 -0
  33. package/dist/components/shell/primitives/instance-row.js.map +1 -0
  34. package/dist/components/shell/primitives/search-bar-primitives.d.ts +21 -0
  35. package/dist/components/shell/primitives/search-bar-primitives.d.ts.map +1 -0
  36. package/dist/components/shell/primitives/search-bar-primitives.js +24 -0
  37. package/dist/components/shell/primitives/search-bar-primitives.js.map +1 -0
  38. package/dist/components/shell/primitives/shell-frame.d.ts +10 -0
  39. package/dist/components/shell/primitives/shell-frame.d.ts.map +1 -0
  40. package/dist/components/shell/primitives/shell-frame.js +26 -0
  41. package/dist/components/shell/primitives/shell-frame.js.map +1 -0
  42. package/dist/components/shell/primitives/shell-status-bar.d.ts +13 -0
  43. package/dist/components/shell/primitives/shell-status-bar.d.ts.map +1 -0
  44. package/dist/components/shell/primitives/shell-status-bar.js +18 -0
  45. package/dist/components/shell/primitives/shell-status-bar.js.map +1 -0
  46. package/dist/components/shell/primitives/shell-surface.d.ts +19 -0
  47. package/dist/components/shell/primitives/shell-surface.d.ts.map +1 -0
  48. package/dist/components/shell/primitives/shell-surface.js +73 -0
  49. package/dist/components/shell/primitives/shell-surface.js.map +1 -0
  50. package/dist/components/shell/primitives/shell-toolbar.d.ts +8 -0
  51. package/dist/components/shell/primitives/shell-toolbar.d.ts.map +1 -0
  52. package/dist/components/shell/primitives/shell-toolbar.js +22 -0
  53. package/dist/components/shell/primitives/shell-toolbar.js.map +1 -0
  54. package/dist/components/shell/primitives/sidebar-action-row.d.ts +14 -0
  55. package/dist/components/shell/primitives/sidebar-action-row.d.ts.map +1 -0
  56. package/dist/components/shell/primitives/sidebar-action-row.js +9 -0
  57. package/dist/components/shell/primitives/sidebar-action-row.js.map +1 -0
  58. package/dist/components/shell/primitives/sidebar-frame.d.ts +12 -0
  59. package/dist/components/shell/primitives/sidebar-frame.d.ts.map +1 -0
  60. package/dist/components/shell/primitives/sidebar-frame.js +19 -0
  61. package/dist/components/shell/primitives/sidebar-frame.js.map +1 -0
  62. package/dist/components/shell/primitives/sidebar-section.d.ts +15 -0
  63. package/dist/components/shell/primitives/sidebar-section.d.ts.map +1 -0
  64. package/dist/components/shell/primitives/sidebar-section.js +23 -0
  65. package/dist/components/shell/primitives/sidebar-section.js.map +1 -0
  66. package/dist/components/shell/primitives/workspace-page.d.ts +21 -0
  67. package/dist/components/shell/primitives/workspace-page.d.ts.map +1 -0
  68. package/dist/components/shell/primitives/workspace-page.js +18 -0
  69. package/dist/components/shell/primitives/workspace-page.js.map +1 -0
  70. package/dist/components/shell/right-inspector.d.ts +2 -0
  71. package/dist/components/shell/right-inspector.d.ts.map +1 -0
  72. package/dist/components/shell/right-inspector.js +32 -0
  73. package/dist/components/shell/right-inspector.js.map +1 -0
  74. package/dist/components/shell/search-action-groups.d.ts +6 -0
  75. package/dist/components/shell/search-action-groups.d.ts.map +1 -0
  76. package/dist/components/shell/search-action-groups.js +37 -0
  77. package/dist/components/shell/search-action-groups.js.map +1 -0
  78. package/dist/components/shell/search-bar.d.ts +2 -0
  79. package/dist/components/shell/search-bar.d.ts.map +1 -0
  80. package/dist/components/shell/search-bar.js +161 -0
  81. package/dist/components/shell/search-bar.js.map +1 -0
  82. package/dist/components/shell/shell-layout.d.ts +30 -0
  83. package/dist/components/shell/shell-layout.d.ts.map +1 -0
  84. package/dist/components/shell/shell-layout.js +176 -0
  85. package/dist/components/shell/shell-layout.js.map +1 -0
  86. package/dist/components/shell/shell-model.d.ts +14 -0
  87. package/dist/components/shell/shell-model.d.ts.map +1 -0
  88. package/dist/components/shell/shell-model.js +75 -0
  89. package/dist/components/shell/shell-model.js.map +1 -0
  90. package/dist/components/shell/status-bar.d.ts +2 -0
  91. package/dist/components/shell/status-bar.d.ts.map +1 -0
  92. package/dist/components/shell/status-bar.js +16 -0
  93. package/dist/components/shell/status-bar.js.map +1 -0
  94. package/dist/components/shell/tab-strip-bridge.d.ts +32 -0
  95. package/dist/components/shell/tab-strip-bridge.d.ts.map +1 -0
  96. package/dist/components/shell/tab-strip-bridge.js +46 -0
  97. package/dist/components/shell/tab-strip-bridge.js.map +1 -0
  98. package/dist/components/shell/top-bar.d.ts +2 -0
  99. package/dist/components/shell/top-bar.d.ts.map +1 -0
  100. package/dist/components/shell/top-bar.js +24 -0
  101. package/dist/components/shell/top-bar.js.map +1 -0
  102. package/dist/components/shell/use-shell-surface-action-groups.d.ts +16 -0
  103. package/dist/components/shell/use-shell-surface-action-groups.d.ts.map +1 -0
  104. package/dist/components/shell/use-shell-surface-action-groups.js +169 -0
  105. package/dist/components/shell/use-shell-surface-action-groups.js.map +1 -0
  106. package/dist/components/shell/workspace-surface-context-menu.d.ts +12 -0
  107. package/dist/components/shell/workspace-surface-context-menu.d.ts.map +1 -0
  108. package/dist/components/shell/workspace-surface-context-menu.js +27 -0
  109. package/dist/components/shell/workspace-surface-context-menu.js.map +1 -0
  110. package/dist/components/shell/workspace-tab-content.d.ts +7 -0
  111. package/dist/components/shell/workspace-tab-content.d.ts.map +1 -0
  112. package/dist/components/shell/workspace-tab-content.js +15 -0
  113. package/dist/components/shell/workspace-tab-content.js.map +1 -0
  114. package/dist/components/system/async-state.d.ts +22 -0
  115. package/dist/components/system/async-state.d.ts.map +1 -0
  116. package/dist/components/system/async-state.js +34 -0
  117. package/dist/components/system/async-state.js.map +1 -0
  118. package/dist/components/system/status.d.ts +16 -0
  119. package/dist/components/system/status.d.ts.map +1 -0
  120. package/dist/components/system/status.js +42 -0
  121. package/dist/components/system/status.js.map +1 -0
  122. package/dist/components/ui/badge.d.ts +10 -0
  123. package/dist/components/ui/badge.d.ts.map +1 -0
  124. package/dist/components/ui/badge.js +26 -0
  125. package/dist/components/ui/badge.js.map +1 -0
  126. package/dist/components/ui/button.d.ts +11 -0
  127. package/dist/components/ui/button.d.ts.map +1 -0
  128. package/dist/components/ui/button.js +37 -0
  129. package/dist/components/ui/button.js.map +1 -0
  130. package/dist/components/ui/card.d.ts +12 -0
  131. package/dist/components/ui/card.d.ts.map +1 -0
  132. package/dist/components/ui/card.js +26 -0
  133. package/dist/components/ui/card.js.map +1 -0
  134. package/dist/components/ui/checkbox.d.ts +5 -0
  135. package/dist/components/ui/checkbox.d.ts.map +1 -0
  136. package/dist/components/ui/checkbox.js +11 -0
  137. package/dist/components/ui/checkbox.js.map +1 -0
  138. package/dist/components/ui/context-menu.d.ts +31 -0
  139. package/dist/components/ui/context-menu.d.ts.map +1 -0
  140. package/dist/components/ui/context-menu.js +54 -0
  141. package/dist/components/ui/context-menu.js.map +1 -0
  142. package/dist/components/ui/dialog.d.ts +18 -0
  143. package/dist/components/ui/dialog.d.ts.map +1 -0
  144. package/dist/components/ui/dialog.js +39 -0
  145. package/dist/components/ui/dialog.js.map +1 -0
  146. package/dist/components/ui/dropdown-menu.d.ts +30 -0
  147. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  148. package/dist/components/ui/dropdown-menu.js +53 -0
  149. package/dist/components/ui/dropdown-menu.js.map +1 -0
  150. package/dist/components/ui/icon-button.d.ts +10 -0
  151. package/dist/components/ui/icon-button.d.ts.map +1 -0
  152. package/dist/components/ui/icon-button.js +7 -0
  153. package/dist/components/ui/icon-button.js.map +1 -0
  154. package/dist/components/ui/input.d.ts +4 -0
  155. package/dist/components/ui/input.d.ts.map +1 -0
  156. package/dist/components/ui/input.js +8 -0
  157. package/dist/components/ui/input.js.map +1 -0
  158. package/dist/components/ui/kbd.d.ts +3 -0
  159. package/dist/components/ui/kbd.d.ts.map +1 -0
  160. package/dist/components/ui/kbd.js +6 -0
  161. package/dist/components/ui/kbd.js.map +1 -0
  162. package/dist/components/ui/label.d.ts +5 -0
  163. package/dist/components/ui/label.d.ts.map +1 -0
  164. package/dist/components/ui/label.js +10 -0
  165. package/dist/components/ui/label.js.map +1 -0
  166. package/dist/components/ui/popover.d.ts +11 -0
  167. package/dist/components/ui/popover.d.ts.map +1 -0
  168. package/dist/components/ui/popover.js +28 -0
  169. package/dist/components/ui/popover.js.map +1 -0
  170. package/dist/components/ui/scroll-area.d.ts +6 -0
  171. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  172. package/dist/components/ui/scroll-area.js +13 -0
  173. package/dist/components/ui/scroll-area.js.map +1 -0
  174. package/dist/components/ui/search-field.d.ts +9 -0
  175. package/dist/components/ui/search-field.d.ts.map +1 -0
  176. package/dist/components/ui/search-field.js +9 -0
  177. package/dist/components/ui/search-field.js.map +1 -0
  178. package/dist/components/ui/select.d.ts +25 -0
  179. package/dist/components/ui/select.d.ts.map +1 -0
  180. package/dist/components/ui/select.js +35 -0
  181. package/dist/components/ui/select.js.map +1 -0
  182. package/dist/components/ui/separator.d.ts +5 -0
  183. package/dist/components/ui/separator.d.ts.map +1 -0
  184. package/dist/components/ui/separator.js +10 -0
  185. package/dist/components/ui/separator.js.map +1 -0
  186. package/dist/components/ui/skeleton.d.ts +3 -0
  187. package/dist/components/ui/skeleton.d.ts.map +1 -0
  188. package/dist/components/ui/skeleton.js +9 -0
  189. package/dist/components/ui/skeleton.js.map +1 -0
  190. package/dist/components/ui/switch.d.ts +7 -0
  191. package/dist/components/ui/switch.d.ts.map +1 -0
  192. package/dist/components/ui/switch.js +10 -0
  193. package/dist/components/ui/switch.js.map +1 -0
  194. package/dist/components/ui/tabs.d.ts +12 -0
  195. package/dist/components/ui/tabs.d.ts.map +1 -0
  196. package/dist/components/ui/tabs.js +31 -0
  197. package/dist/components/ui/tabs.js.map +1 -0
  198. package/dist/components/ui/textarea.d.ts +4 -0
  199. package/dist/components/ui/textarea.d.ts.map +1 -0
  200. package/dist/components/ui/textarea.js +8 -0
  201. package/dist/components/ui/textarea.js.map +1 -0
  202. package/dist/components/ui/tooltip.d.ts +8 -0
  203. package/dist/components/ui/tooltip.d.ts.map +1 -0
  204. package/dist/components/ui/tooltip.js +19 -0
  205. package/dist/components/ui/tooltip.js.map +1 -0
  206. package/dist/hooks/shell/shell-registry-provider.d.ts +20 -0
  207. package/dist/hooks/shell/shell-registry-provider.d.ts.map +1 -0
  208. package/dist/hooks/shell/shell-registry-provider.js +42 -0
  209. package/dist/hooks/shell/shell-registry-provider.js.map +1 -0
  210. package/dist/hooks/shell/use-shell-shortcuts.d.ts +2 -0
  211. package/dist/hooks/shell/use-shell-shortcuts.d.ts.map +1 -0
  212. package/dist/hooks/shell/use-shell-shortcuts.js +27 -0
  213. package/dist/hooks/shell/use-shell-shortcuts.js.map +1 -0
  214. package/dist/hooks/shell/use-shell-store.d.ts +40 -0
  215. package/dist/hooks/shell/use-shell-store.d.ts.map +1 -0
  216. package/dist/hooks/shell/use-shell-store.js +420 -0
  217. package/dist/hooks/shell/use-shell-store.js.map +1 -0
  218. package/dist/hooks/shell/use-shell-tab-strip-bridge.d.ts +7 -0
  219. package/dist/hooks/shell/use-shell-tab-strip-bridge.d.ts.map +1 -0
  220. package/dist/hooks/shell/use-shell-tab-strip-bridge.js +316 -0
  221. package/dist/hooks/shell/use-shell-tab-strip-bridge.js.map +1 -0
  222. package/dist/hooks/use-keyboard-shortcut.d.ts +10 -0
  223. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
  224. package/dist/hooks/use-keyboard-shortcut.js +35 -0
  225. package/dist/hooks/use-keyboard-shortcut.js.map +1 -0
  226. package/dist/hooks/use-media-query.d.ts +2 -0
  227. package/dist/hooks/use-media-query.d.ts.map +1 -0
  228. package/dist/hooks/use-media-query.js +14 -0
  229. package/dist/hooks/use-media-query.js.map +1 -0
  230. package/dist/hooks/use-theme.d.ts +14 -0
  231. package/dist/hooks/use-theme.d.ts.map +1 -0
  232. package/dist/hooks/use-theme.js +43 -0
  233. package/dist/hooks/use-theme.js.map +1 -0
  234. package/dist/hooks/workspace/use-workspace-draft-store.d.ts +45 -0
  235. package/dist/hooks/workspace/use-workspace-draft-store.d.ts.map +1 -0
  236. package/dist/hooks/workspace/use-workspace-draft-store.js +197 -0
  237. package/dist/hooks/workspace/use-workspace-draft-store.js.map +1 -0
  238. package/dist/index.d.ts +3 -28
  239. package/dist/index.d.ts.map +1 -1
  240. package/dist/index.js +1 -1
  241. package/dist/index.js.map +1 -1
  242. package/dist/lib/infra/logger.d.ts +10 -0
  243. package/dist/lib/infra/logger.d.ts.map +1 -0
  244. package/dist/lib/infra/logger.js +24 -0
  245. package/dist/lib/infra/logger.js.map +1 -0
  246. package/dist/lib/observe/event.d.ts +20 -0
  247. package/dist/lib/observe/event.d.ts.map +1 -0
  248. package/dist/lib/observe/event.js +60 -0
  249. package/dist/lib/observe/event.js.map +1 -0
  250. package/dist/lib/observe/ids.d.ts +3 -0
  251. package/dist/lib/observe/ids.d.ts.map +1 -0
  252. package/dist/lib/observe/ids.js +9 -0
  253. package/dist/lib/observe/ids.js.map +1 -0
  254. package/dist/lib/observe/index.d.ts +7 -0
  255. package/dist/lib/observe/index.d.ts.map +1 -0
  256. package/dist/lib/observe/index.js +6 -0
  257. package/dist/lib/observe/index.js.map +1 -0
  258. package/dist/lib/observe/logger.d.ts +25 -0
  259. package/dist/lib/observe/logger.d.ts.map +1 -0
  260. package/dist/lib/observe/logger.js +53 -0
  261. package/dist/lib/observe/logger.js.map +1 -0
  262. package/dist/lib/observe/nop.d.ts +3 -0
  263. package/dist/lib/observe/nop.d.ts.map +1 -0
  264. package/dist/lib/observe/nop.js +9 -0
  265. package/dist/lib/observe/nop.js.map +1 -0
  266. package/dist/lib/observe/shell.d.ts +19 -0
  267. package/dist/lib/observe/shell.d.ts.map +1 -0
  268. package/dist/lib/observe/shell.js +49 -0
  269. package/dist/lib/observe/shell.js.map +1 -0
  270. package/dist/lib/observe/stdout.d.ts +3 -0
  271. package/dist/lib/observe/stdout.d.ts.map +1 -0
  272. package/dist/lib/observe/stdout.js +6 -0
  273. package/dist/lib/observe/stdout.js.map +1 -0
  274. package/dist/lib/observe/types.d.ts +14 -0
  275. package/dist/lib/observe/types.d.ts.map +1 -0
  276. package/dist/lib/observe/types.js +2 -0
  277. package/dist/lib/observe/types.js.map +1 -0
  278. package/dist/lib/shell/actions.d.ts +33 -0
  279. package/dist/lib/shell/actions.d.ts.map +1 -0
  280. package/dist/lib/shell/actions.js +2 -0
  281. package/dist/lib/shell/actions.js.map +1 -0
  282. package/dist/lib/shell/persistence.d.ts +7 -0
  283. package/dist/lib/shell/persistence.d.ts.map +1 -0
  284. package/dist/lib/shell/persistence.js +18 -0
  285. package/dist/lib/shell/persistence.js.map +1 -0
  286. package/dist/lib/shell/status.d.ts +4 -0
  287. package/dist/lib/shell/status.d.ts.map +1 -0
  288. package/dist/lib/shell/status.js +31 -0
  289. package/dist/lib/shell/status.js.map +1 -0
  290. package/dist/lib/shell/types.d.ts +40 -0
  291. package/dist/lib/shell/types.d.ts.map +1 -0
  292. package/dist/lib/shell/types.js +2 -0
  293. package/dist/lib/shell/types.js.map +1 -0
  294. package/dist/lib/utils.d.ts +4 -0
  295. package/dist/lib/utils.d.ts.map +1 -0
  296. package/dist/lib/utils.js +11 -0
  297. package/dist/lib/utils.js.map +1 -0
  298. package/dist/public-api.d.ts +109 -0
  299. package/dist/public-api.d.ts.map +1 -0
  300. package/dist/public-api.js +145 -0
  301. package/dist/public-api.js.map +1 -0
  302. package/dist/styles.css +249 -379
  303. package/package.json +17 -11
  304. package/dist/shell.d.ts +0 -147
  305. package/dist/shell.d.ts.map +0 -1
  306. package/dist/shell.js +0 -339
  307. package/dist/shell.js.map +0 -1
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronDownIcon } from "lucide-react";
3
+ import { Badge } from "../../ui/badge.js";
4
+ import { cn } from "../../../lib/utils.js";
5
+ import { useShellSurface } from "./shell-surface.js";
6
+ export function SidebarSection({ children, className, ...props }) {
7
+ return (_jsx("section", { className: cn("mb-0.5", className), ...props, children: children }));
8
+ }
9
+ export function SidebarSectionHeader({ collapsed = false, count, onClick, title, }) {
10
+ const { isCompact, isNarrow } = useShellSurface();
11
+ return (_jsxs("button", { "data-collapsed": collapsed || undefined, className: cn("flex w-full items-center gap-1.5 rounded-md px-2 py-[7px] text-left transition-colors", isCompact && "gap-1 px-1.5 py-1.5", isNarrow && "px-1.5 py-1.25", "hover:bg-bg-hover active:bg-bg-active"), onClick: onClick, type: "button", children: [_jsx("span", { className: cn("flex items-center justify-center text-fg-tertiary transition-transform duration-200", isNarrow && "[&_svg]:size-3", collapsed && "-rotate-90"), children: _jsx(ChevronDownIcon, { className: "size-3.5" }) }), _jsx("span", { className: cn("min-w-0 flex-1 truncate text-[12px] font-semibold text-fg-secondary", isNarrow && "text-[11px]"), children: title }), count && !isNarrow ? (_jsx(Badge, { className: "h-[18px] rounded-full bg-bg-elevated px-1.5 py-0 font-mono text-[10px] text-fg-tertiary hover:bg-bg-elevated", variant: "ghost", children: count })) : null] }));
12
+ }
13
+ export function SidebarSectionContent({ children, collapsed = false, className, }) {
14
+ const { isNarrow } = useShellSurface();
15
+ return (_jsx("div", { "data-collapsed": collapsed || undefined, className: cn("grid pl-1 transition-[grid-template-rows,opacity] duration-200 ease-out", isNarrow && "pl-0.5", collapsed
16
+ ? "grid-rows-[0fr] opacity-0 pointer-events-none"
17
+ : "grid-rows-[1fr] opacity-100", className), children: _jsx("div", { className: "min-h-0 overflow-hidden", children: children }) }));
18
+ }
19
+ export function SidebarSectionLabel({ children, className, ...props }) {
20
+ const { isNarrow } = useShellSurface();
21
+ return (_jsx("div", { className: cn("px-2 py-1.5 text-[11px] font-semibold tracking-[0.06em] text-fg-tertiary uppercase", isNarrow && "px-1.5 py-1 text-[10px]", className), ...props, children: children }));
22
+ }
23
+ //# sourceMappingURL=sidebar-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-section.js","sourceRoot":"","sources":["../../../../src/components/shell/primitives/sidebar-section.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACkB;IAC1B,OAAO,CACL,kBAAS,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAM,KAAK,YACnD,QAAQ,GACD,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EACnC,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,OAAO,EACP,KAAK,GAMN;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IAElD,OAAO,CACL,oCACkB,SAAS,IAAI,SAAS,EACtC,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,SAAS,IAAI,qBAAqB,EAClC,QAAQ,IAAI,gBAAgB,EAC5B,uCAAuC,CACxC,EACD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,QAAQ,aAEb,eACE,SAAS,EAAE,EAAE,CACX,qFAAqF,EACrF,QAAQ,IAAI,gBAAgB,EAC5B,SAAS,IAAI,YAAY,CAC1B,YAED,KAAC,eAAe,IAAC,SAAS,EAAC,UAAU,GAAG,GACnC,EACP,eACE,SAAS,EAAE,EAAE,CACX,qEAAqE,EACrE,QAAQ,IAAI,aAAa,CAC1B,YAEA,KAAK,GACD,EACN,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpB,KAAC,KAAK,IACJ,SAAS,EAAC,8GAA8G,EACxH,OAAO,EAAC,OAAO,YAEd,KAAK,GACA,CACT,CAAC,CAAC,CAAC,IAAI,IACD,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,SAAS,GAKV;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IAEvC,OAAO,CACL,gCACkB,SAAS,IAAI,SAAS,EACtC,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,QAAQ,IAAI,QAAQ,EACpB,SAAS;YACP,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,6BAA6B,EACjC,SAAS,CACV,YAED,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,GACrD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IAEvC,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,oFAAoF,EACpF,QAAQ,IAAI,yBAAyB,EACrC,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ export declare function WorkspacePageFrame({ align, children, className, contentClassName, width, ...props }: ComponentProps<"div"> & {
3
+ align?: "center" | "start";
4
+ contentClassName?: string;
5
+ width?: "narrow" | "wide" | "full";
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function WorkspaceFormPage({ children, className, ...props }: ComponentProps<typeof WorkspacePageFrame>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function WorkspaceFormHeader({ actions, description, eyebrow, title, }: {
9
+ actions?: ReactNode;
10
+ description?: ReactNode;
11
+ eyebrow?: ReactNode;
12
+ title: ReactNode;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ export declare function WorkspaceFormBody({ children, className, ...props }: ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
15
+ export declare function WorkspaceFormSection({ children, className, description, title, }: {
16
+ children: ReactNode;
17
+ className?: string;
18
+ description?: ReactNode;
19
+ title?: ReactNode;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=workspace-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-page.d.ts","sourceRoot":"","sources":["../../../../src/components/shell/primitives/workspace-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,wBAAgB,kBAAkB,CAAC,EACjC,KAAe,EACf,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,KAAc,EACd,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG;IACzB,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CACpC,2CAsBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAAC,2CAU3C;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,WAAW,EACX,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;CAClB,2CAyBA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,2CAMvB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,SAAS,EACT,WAAW,EACX,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,2CAoBA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../../lib/utils.js";
3
+ export function WorkspacePageFrame({ align = "start", children, className, contentClassName, width = "wide", ...props }) {
4
+ return (_jsx("div", { className: cn("min-h-full overflow-y-auto bg-bg-surface px-6 pt-5 pb-8 xl:px-7", align === "center" && "flex items-start justify-center", className), ...props, children: _jsx("div", { className: cn("w-full", width === "narrow" && "max-w-[480px]", width === "wide" && "max-w-6xl", contentClassName), children: children }) }));
5
+ }
6
+ export function WorkspaceFormPage({ children, className, ...props }) {
7
+ return (_jsx(WorkspacePageFrame, { className: cn("space-y-7", className), width: "wide", ...props, children: children }));
8
+ }
9
+ export function WorkspaceFormHeader({ actions, description, eyebrow, title, }) {
10
+ return (_jsxs("header", { className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between", children: [_jsxs("div", { className: "min-w-0 max-w-3xl space-y-2", children: [eyebrow ? (_jsx("div", { className: "text-[11px] font-medium text-fg-tertiary", children: eyebrow })) : null, _jsxs("div", { className: "space-y-1", children: [_jsx("h1", { className: "text-[20px] leading-[1.3] font-semibold tracking-[-0.02em] text-fg", children: title }), description ? (_jsx("div", { className: "text-[13px] leading-6 text-fg-tertiary", children: description })) : null] })] }), actions ? (_jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions })) : null] }));
11
+ }
12
+ export function WorkspaceFormBody({ children, className, ...props }) {
13
+ return (_jsx("div", { className: cn("space-y-7", className), ...props, children: children }));
14
+ }
15
+ export function WorkspaceFormSection({ children, className, description, title, }) {
16
+ return (_jsxs("section", { className: cn("space-y-4", className), children: [title || description ? (_jsxs("div", { className: "max-w-3xl space-y-1", children: [title ? (_jsx("h2", { className: "text-[12px] font-semibold tracking-[0.06em] text-fg-secondary uppercase", children: title })) : null, description ? (_jsx("div", { className: "text-[12.5px] leading-6 text-fg-tertiary", children: description })) : null] })) : null, children] }));
17
+ }
18
+ //# sourceMappingURL=workspace-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-page.js","sourceRoot":"","sources":["../../../../src/components/shell/primitives/workspace-page.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,GAAG,OAAO,EACf,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,KAAK,GAAG,MAAM,EACd,GAAG,KAAK,EAKT;IACC,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,iEAAiE,EACjE,KAAK,KAAK,QAAQ,IAAI,iCAAiC,EACvD,SAAS,CACV,KACG,KAAK,YAET,cACE,SAAS,EAAE,EAAE,CACX,QAAQ,EACR,KAAK,KAAK,QAAQ,IAAI,eAAe,EACrC,KAAK,KAAK,MAAM,IAAI,WAAW,EAC/B,gBAAgB,CACjB,YAEA,QAAQ,GACL,GACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACkC;IAC1C,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,KAAK,EAAC,MAAM,KACR,KAAK,YAER,QAAQ,GACU,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,WAAW,EACX,OAAO,EACP,KAAK,GAMN;IACC,OAAO,CACL,kBAAQ,SAAS,EAAC,mEAAmE,aACnF,eAAK,SAAS,EAAC,6BAA6B,aACzC,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,0CAA0C,YACtD,OAAO,GACJ,CACP,CAAC,CAAC,CAAC,IAAI,EACR,eAAK,SAAS,EAAC,WAAW,aACxB,aAAI,SAAS,EAAC,oEAAoE,YAC/E,KAAK,GACH,EACJ,WAAW,CAAC,CAAC,CAAC,CACb,cAAK,SAAS,EAAC,wCAAwC,YACpD,WAAW,GACR,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,EACL,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,kCAAkC,YAAE,OAAO,GAAO,CAClE,CAAC,CAAC,CAAC,IAAI,IACD,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACc;IACtB,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,KAAM,KAAK,YAClD,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EACnC,QAAQ,EACR,SAAS,EACT,WAAW,EACX,KAAK,GAMN;IACC,OAAO,CACL,mBAAS,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAC3C,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CACtB,eAAK,SAAS,EAAC,qBAAqB,aACjC,KAAK,CAAC,CAAC,CAAC,CACP,aAAI,SAAS,EAAC,yEAAyE,YACpF,KAAK,GACH,CACN,CAAC,CAAC,CAAC,IAAI,EACP,WAAW,CAAC,CAAC,CAAC,CACb,cAAK,SAAS,EAAC,0CAA0C,YACtD,WAAW,GACR,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,IACD,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function RightInspector(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=right-inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"right-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/shell/right-inspector.tsx"],"names":[],"mappings":"AAeA,wBAAgB,cAAc,4CA4D7B"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from "react";
4
+ import { ContextActionMenu } from "./context-action-menu.js";
5
+ import { EmptyState, LoadingState } from "../system/async-state.js";
6
+ import { InspectorHeader, InspectorPanel, InspectorScroll, } from "./primitives/inspector-panel.js";
7
+ import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
8
+ import { useShellStore } from "../../hooks/shell/use-shell-store.js";
9
+ import { setShellTabFields, shellInspectorLogger } from "../../lib/observe/shell.js";
10
+ import { useShellSurfaceActionGroups } from "./use-shell-surface-action-groups.js";
11
+ export function RightInspector() {
12
+ const hasHydrated = useShellStore((state) => state.hasHydrated);
13
+ const { activeModeWorkspace, activeTab, activeTabWorkspace } = useShellRegistry();
14
+ const contextKeyRef = useRef("");
15
+ useEffect(() => {
16
+ const contextKey = `${activeModeWorkspace?.mode ?? "none"}:${activeTab?.id ?? "none"}:${activeTabWorkspace?.mode ?? "none"}`;
17
+ if (contextKeyRef.current === contextKey) {
18
+ return;
19
+ }
20
+ setShellTabFields(shellInspectorLogger
21
+ .event("shell.inspector.context.changed")
22
+ .set("workspace_mode", activeTabWorkspace?.mode ?? activeModeWorkspace?.mode ?? null), activeTab).send();
23
+ contextKeyRef.current = contextKey;
24
+ }, [activeModeWorkspace, activeTab, activeTabWorkspace]);
25
+ const Inspector = activeTabWorkspace?.Inspector ?? activeModeWorkspace?.Inspector ?? null;
26
+ const tab = activeTabWorkspace ? activeTab : null;
27
+ const contextMenuGroups = useShellSurfaceActionGroups({
28
+ includeAppearance: false,
29
+ });
30
+ return (_jsx(ContextActionMenu, { groups: contextMenuGroups, children: _jsx("div", { className: "h-full", children: _jsxs(InspectorPanel, { "aria-label": "Inspector", children: [_jsx(InspectorHeader, { title: "Inspector" }), _jsx(InspectorScroll, { className: "py-1", children: !hasHydrated ? (_jsx("div", { className: "p-3", children: _jsx(LoadingState, { className: "min-h-[14rem]", label: "Restoring inspector" }) })) : Inspector ? (_jsx(Inspector, { tab: tab })) : (_jsx("div", { className: "p-3", children: _jsx(EmptyState, { title: "Inspector unavailable", description: "The current workspace does not provide inspector content.", className: "min-h-[14rem]" }) })) })] }) }) }));
31
+ }
32
+ //# sourceMappingURL=right-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"right-inspector.js","sourceRoot":"","sources":["../../../src/components/shell/right-inspector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAC1D,gBAAgB,EAAE,CAAC;IACrB,MAAM,aAAa,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,GAAG,mBAAmB,EAAE,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE,EAAE,IAAI,MAAM,IAAI,kBAAkB,EAAE,IAAI,IAAI,MAAM,EAAE,CAAC;QAC7H,IAAI,aAAa,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,iBAAiB,CACf,oBAAoB;aACjB,KAAK,CAAC,iCAAiC,CAAC;aACxC,GAAG,CACF,gBAAgB,EAChB,kBAAkB,EAAE,IAAI,IAAI,mBAAmB,EAAE,IAAI,IAAI,IAAI,CAC9D,EACH,SAAS,CACV,CAAC,IAAI,EAAE,CAAC;QACT,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;IACrC,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEzD,MAAM,SAAS,GACb,kBAAkB,EAAE,SAAS,IAAI,mBAAmB,EAAE,SAAS,IAAI,IAAI,CAAC;IAC1E,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;QACpD,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,iBAAiB,IAAC,MAAM,EAAE,iBAAiB,YAC1C,cAAK,SAAS,EAAC,QAAQ,YACrB,MAAC,cAAc,kBAAY,WAAW,aACpC,KAAC,eAAe,IAAC,KAAK,EAAC,WAAW,GAAG,EACrC,KAAC,eAAe,IAAC,SAAS,EAAC,MAAM,YAC9B,CAAC,WAAW,CAAC,CAAC,CAAC,CACd,cAAK,SAAS,EAAC,KAAK,YAClB,KAAC,YAAY,IACX,SAAS,EAAC,eAAe,EACzB,KAAK,EAAC,qBAAqB,GAC3B,GACE,CACP,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,GAAI,CACxB,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,KAAK,YAClB,KAAC,UAAU,IACT,KAAK,EAAC,uBAAuB,EAC7B,WAAW,EAAC,2DAA2D,EACvE,SAAS,EAAC,eAAe,GACzB,GACE,CACP,GACe,IACH,GACb,GACY,CACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ShellActionGroup } from "../../lib/shell/actions.js";
2
+ export declare function SearchActionGroups({ groups, runCommand, }: {
3
+ groups: ShellActionGroup[];
4
+ runCommand: (command: () => void) => void;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=search-action-groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-action-groups.d.ts","sourceRoot":"","sources":["../../../src/components/shell/search-action-groups.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAgBzE,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,UAAU,GACX,EAAE;IACD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC3C,2CAoDA"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Command } from "cmdk";
4
+ import { SearchBarGroupHeading, SearchBarItem, } from "./primitives/search-bar-primitives.js";
5
+ import { shellSearchLogger } from "../../lib/observe/shell.js";
6
+ function logSearchAction(action) {
7
+ if (!action.searchLog)
8
+ return;
9
+ shellSearchLogger
10
+ .event("shell.search_bar.executed")
11
+ .setMany({
12
+ command_group: action.searchLog.commandGroup,
13
+ command_id: action.searchLog.commandId,
14
+ item_kind: action.searchLog.itemKind,
15
+ ...(action.searchLog.extra ?? {}),
16
+ })
17
+ .send();
18
+ }
19
+ export function SearchActionGroups({ groups, runCommand, }) {
20
+ const visibleGroups = groups
21
+ .map((group) => ({
22
+ ...group,
23
+ actions: group.actions.filter((action) => action.showInSearch !== false),
24
+ }))
25
+ .filter((group) => group.actions.length > 0);
26
+ return (_jsx(_Fragment, { children: visibleGroups.map((group) => (_jsxs(Command.Group, { children: [group.label ? (_jsx(SearchBarGroupHeading, { children: group.label })) : null, group.actions.map((action) => {
27
+ const execute = () => runCommand(() => {
28
+ logSearchAction(action);
29
+ action.run({ source: "search_bar" });
30
+ });
31
+ if (action.searchNode) {
32
+ return (_jsx(Command.Item, { className: "flex cursor-pointer items-center rounded-md px-0 py-0 text-[13px] outline-none data-[selected=true]:bg-primary/12", disabled: action.disabled, keywords: action.keywords, onSelect: execute, value: action.searchValue ?? action.label, children: action.searchNode }, action.id));
33
+ }
34
+ return (_jsx(SearchBarItem, { disabled: action.disabled, keywords: action.keywords, onSelect: execute, children: action.label }, action.id));
35
+ })] }, group.id))) }));
36
+ }
37
+ //# sourceMappingURL=search-action-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-action-groups.js","sourceRoot":"","sources":["../../../src/components/shell/search-action-groups.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,aAAa,GACd,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,SAAS,eAAe,CAAC,MAAmB;IAC1C,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO;IAE9B,iBAAiB;SACd,KAAK,CAAC,2BAA2B,CAAC;SAClC,OAAO,CAAC;QACP,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY;QAC5C,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;QACtC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ;QACpC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;KAClC,CAAC;SACD,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EACjC,MAAM,EACN,UAAU,GAIX;IACC,MAAM,aAAa,GAAG,MAAM;SACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,KAAK;QACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,KAAK,CAAC;KACzE,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/C,OAAO,CACL,4BACG,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B,MAAC,OAAO,CAAC,KAAK,eACX,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,KAAC,qBAAqB,cAAE,KAAK,CAAC,KAAK,GAAyB,CAC7D,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,UAAU,CAAC,GAAG,EAAE;wBACd,eAAe,CAAC,MAAM,CAAC,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;oBAEL,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACtB,OAAO,CACL,KAAC,OAAO,CAAC,IAAI,IACX,SAAS,EAAC,mHAAmH,EAC7H,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAEzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,YAExC,MAAM,CAAC,UAAU,IALb,MAAM,CAAC,EAAE,CAMD,CAChB,CAAC;oBACJ,CAAC;oBAED,OAAO,CACL,KAAC,aAAa,IACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAEzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,QAAQ,EAAE,OAAO,YAEhB,MAAM,CAAC,KAAK,IAJR,MAAM,CAAC,EAAE,CAKA,CACjB,CAAC;gBACJ,CAAC,CAAC,KApCgB,KAAK,CAAC,EAAE,CAqCZ,CACjB,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function SearchBar(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=search-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-bar.d.ts","sourceRoot":"","sources":["../../../src/components/shell/search-bar.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,SAAS,4CA8NxB"}
@@ -0,0 +1,161 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Command } from "cmdk";
4
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
+ import { CommandIcon, SearchIcon } from "lucide-react";
6
+ import { useShallow } from "zustand/react/shallow";
7
+ import { Kbd } from "../ui/kbd.js";
8
+ import { useShellLayout } from "./shell-layout.js";
9
+ import { useShellRegistry } from "../../hooks/shell/shell-registry-provider.js";
10
+ import { useShellStore } from "../../hooks/shell/use-shell-store.js";
11
+ import { shellSearchLogger } from "../../lib/observe/shell.js";
12
+ import { SearchActionGroups } from "./search-action-groups.js";
13
+ import { SearchBarEmpty, SearchBarList, } from "./primitives/search-bar-primitives.js";
14
+ export function SearchBar() {
15
+ const [query, setQuery] = useState("");
16
+ const { searchBarOpen, setActiveMode, setSearchBarOpen } = useShellStore(useShallow((state) => ({
17
+ searchBarOpen: state.searchBarOpen,
18
+ setSearchBarOpen: state.setSearchBarOpen,
19
+ setActiveMode: state.setActiveMode,
20
+ })));
21
+ const { workspaces } = useShellRegistry();
22
+ const { toggleLeftSidebar, toggleRightInspector } = useShellLayout();
23
+ const listRef = useRef(null);
24
+ const containerRef = useRef(null);
25
+ const inputRef = useRef(null);
26
+ const lastLoggedQueryRef = useRef("");
27
+ const close = useCallback(() => {
28
+ setQuery("");
29
+ lastLoggedQueryRef.current = "";
30
+ setSearchBarOpen(false, { source: "search_bar" });
31
+ inputRef.current?.blur();
32
+ }, [setSearchBarOpen]);
33
+ const runCommand = useCallback((command) => {
34
+ command();
35
+ close();
36
+ }, [close]);
37
+ const searchableItems = useMemo(() => [
38
+ ...workspaces.map((workspace) => ({
39
+ label: workspace.label,
40
+ searchText: `open ${workspace.label.toLowerCase()} navigate workspace`,
41
+ })),
42
+ {
43
+ label: "Toggle left sidebar",
44
+ searchText: "toggle left sidebar panels",
45
+ },
46
+ {
47
+ label: "Toggle inspector",
48
+ searchText: "toggle inspector panels",
49
+ },
50
+ ], [workspaces]);
51
+ const globalActionGroups = useMemo(() => [
52
+ {
53
+ id: "navigate",
54
+ label: "Navigate",
55
+ actions: workspaces.map((workspace) => ({
56
+ id: workspace.mode,
57
+ keywords: [workspace.label, "workspace", "navigate"],
58
+ label: `Open ${workspace.label.toLowerCase()}`,
59
+ searchLog: {
60
+ commandGroup: "navigate",
61
+ commandId: workspace.mode,
62
+ itemKind: "mode",
63
+ },
64
+ run: ({ source }) => {
65
+ setActiveMode(workspace.mode, { source });
66
+ },
67
+ })),
68
+ },
69
+ {
70
+ id: "panels",
71
+ label: "Panels",
72
+ actions: [
73
+ {
74
+ id: "toggle-left-sidebar",
75
+ keywords: ["toggle", "left", "sidebar", "panels"],
76
+ label: "Toggle left sidebar",
77
+ searchLog: {
78
+ commandGroup: "panels",
79
+ commandId: "toggle-left-sidebar",
80
+ itemKind: "panel",
81
+ },
82
+ run: ({ source }) => {
83
+ toggleLeftSidebar({ source });
84
+ },
85
+ },
86
+ {
87
+ id: "toggle-inspector",
88
+ keywords: ["toggle", "inspector", "panels"],
89
+ label: "Toggle inspector",
90
+ searchLog: {
91
+ commandGroup: "panels",
92
+ commandId: "toggle-inspector",
93
+ itemKind: "panel",
94
+ },
95
+ run: ({ source }) => {
96
+ toggleRightInspector({ source });
97
+ },
98
+ },
99
+ ],
100
+ },
101
+ ], [setActiveMode, toggleLeftSidebar, toggleRightInspector, workspaces]);
102
+ // Open dropdown when store state changes (e.g. via Cmd+K)
103
+ useEffect(() => {
104
+ if (searchBarOpen) {
105
+ inputRef.current?.focus();
106
+ }
107
+ }, [searchBarOpen]);
108
+ // Click-outside detection
109
+ useEffect(() => {
110
+ if (!searchBarOpen)
111
+ return;
112
+ function handlePointerDown(event) {
113
+ if (containerRef.current &&
114
+ !containerRef.current.contains(event.target)) {
115
+ close();
116
+ }
117
+ }
118
+ document.addEventListener("pointerdown", handlePointerDown);
119
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
120
+ }, [searchBarOpen, close]);
121
+ // Search logging
122
+ useEffect(() => {
123
+ if (!searchBarOpen) {
124
+ lastLoggedQueryRef.current = "";
125
+ return;
126
+ }
127
+ const trimmedQuery = query.trim().toLowerCase();
128
+ if (trimmedQuery.length < 2 ||
129
+ trimmedQuery === lastLoggedQueryRef.current) {
130
+ return;
131
+ }
132
+ const timer = setTimeout(() => {
133
+ const visibleCount = listRef.current?.querySelectorAll("[cmdk-item]:not([hidden])").length ??
134
+ searchableItems.filter((item) => item.searchText.includes(trimmedQuery))
135
+ .length;
136
+ shellSearchLogger
137
+ .event("shell.search_bar.search")
138
+ .setMany({
139
+ query_length: query.trim().length,
140
+ match_count: visibleCount,
141
+ })
142
+ .send();
143
+ if (visibleCount === 0) {
144
+ shellSearchLogger
145
+ .event("shell.search_bar.empty")
146
+ .set("query_length", query.trim().length)
147
+ .send();
148
+ }
149
+ lastLoggedQueryRef.current = trimmedQuery;
150
+ }, 250);
151
+ return () => clearTimeout(timer);
152
+ }, [searchBarOpen, query, searchableItems]);
153
+ return (_jsxs(Command, { className: "relative flex-1", ref: containerRef, label: "Search bar", shouldFilter: true, children: [_jsxs("div", { className: "flex h-[30px] w-[min(100%,420px)] min-w-[280px] flex-1 items-center gap-2 rounded-md border border-border bg-bg-card px-[10px] text-[12.5px] text-fg-tertiary transition-[border-color,background-color] hover:border-border-light hover:bg-bg-elevated max-[1180px]:min-w-0 max-[1180px]:w-auto max-[1180px]:flex-none focus-within:border-border-light focus-within:bg-bg-elevated", children: [_jsx(SearchIcon, { className: "size-4 shrink-0" }), _jsx(Command.Input, { ref: inputRef, className: "min-w-0 flex-1 truncate bg-transparent text-left text-fg outline-none! placeholder:text-fg-tertiary max-[1180px]:hidden", onFocus: () => {
154
+ if (!searchBarOpen) {
155
+ setSearchBarOpen(true, { source: "search_bar" });
156
+ }
157
+ }, onValueChange: setQuery, placeholder: searchBarOpen
158
+ ? undefined
159
+ : "Search workspaces, commands, and panels", value: query }), _jsxs(Kbd, { className: "border-border bg-secondary text-[10px] text-fg-tertiary max-[1180px]:hidden", children: [_jsx(CommandIcon, { className: "mr-1 size-3" }), "K"] })] }), searchBarOpen ? (_jsx("div", { className: "absolute top-[calc(100%+4px)] left-0 z-100 min-w-full max-w-[min(520px,90vw)] overflow-hidden rounded-[10px] border border-border-strong bg-bg-card shadow-[0_16px_40px_rgba(0,0,0,0.45),0_0_0_1px_rgba(255,255,255,0.03)]", children: _jsxs(SearchBarList, { ref: listRef, children: [_jsx(SearchBarEmpty, { children: "No matching commands." }), _jsx(SearchActionGroups, { groups: globalActionGroups, runCommand: runCommand }), workspaces.map((workspace) => workspace.SearchBarContent ? (_jsx(workspace.SearchBarContent, { runCommand: runCommand }, workspace.mode)) : null)] }) })) : null] }));
160
+ }
161
+ //# sourceMappingURL=search-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-bar.js","sourceRoot":"","sources":["../../../src/components/shell/search-bar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ReactNode } from "react";
2
+ import { type ShellEventSource } from "../../lib/observe/shell.js";
3
+ type ShellLayoutActionMeta = {
4
+ source?: ShellEventSource;
5
+ };
6
+ type PanelVisibility = {
7
+ leftSidebarOpen: boolean;
8
+ rightInspectorOpen: boolean;
9
+ };
10
+ type ShellLayoutContextValue = {
11
+ isCompact: boolean;
12
+ leftSidebarOpen: boolean;
13
+ rightInspectorOpen: boolean;
14
+ setPanelVisibility: (panels: PanelVisibility, meta?: ShellLayoutActionMeta) => void;
15
+ toggleLeftSidebar: (meta?: ShellLayoutActionMeta) => void;
16
+ toggleRightInspector: (meta?: ShellLayoutActionMeta) => void;
17
+ openLeftSidebar: (meta?: ShellLayoutActionMeta) => void;
18
+ openRightInspector: (meta?: ShellLayoutActionMeta) => void;
19
+ closeLeftSidebar: (meta?: ShellLayoutActionMeta) => void;
20
+ closeRightInspector: (meta?: ShellLayoutActionMeta) => void;
21
+ };
22
+ export declare const DEFAULT_PANEL_PIXELS: {
23
+ readonly activityRail: 52;
24
+ };
25
+ export declare function ShellLayoutProvider({ children }: {
26
+ children: ReactNode;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ export declare function useShellLayout(): ShellLayoutContextValue;
29
+ export {};
30
+ //# sourceMappingURL=shell-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-layout.d.ts","sourceRoot":"","sources":["../../../src/components/shell/shell-layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAG7B,KAAK,qBAAqB,GAAG;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,CAClB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,qBAAqB,KACzB,IAAI,CAAC;IACV,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC1D,oBAAoB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC7D,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACxD,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAIF,eAAO,MAAM,oBAAoB;;CAEvB,CAAC;AA2CX,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAyLxE;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD"}
@@ -0,0 +1,176 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useCallback, useContext, useMemo, useState, } from "react";
4
+ import { useMediaQuery } from "../../hooks/use-media-query.js";
5
+ import { setShellLayoutFields, setShellSource, shellLayoutLogger, } from "../../lib/observe/shell.js";
6
+ import { getShellModel, isBorderOpen, toggleBorder } from "./shell-model.js";
7
+ const ShellLayoutContext = createContext(null);
8
+ export const DEFAULT_PANEL_PIXELS = {
9
+ activityRail: 52,
10
+ };
11
+ function logPanelVisibilityChange(params) {
12
+ const { source, isCompact, previous, next } = params;
13
+ if (previous.leftSidebarOpen !== next.leftSidebarOpen) {
14
+ setShellSource(setShellLayoutFields(shellLayoutLogger
15
+ .event("shell.sidebar.toggled")
16
+ .set("previous_open", previous.leftSidebarOpen), {
17
+ isCompact,
18
+ leftSidebarOpen: next.leftSidebarOpen,
19
+ rightInspectorOpen: next.rightInspectorOpen,
20
+ }), source).send();
21
+ }
22
+ if (previous.rightInspectorOpen !== next.rightInspectorOpen) {
23
+ setShellSource(setShellLayoutFields(shellLayoutLogger
24
+ .event("shell.inspector.toggled")
25
+ .set("previous_open", previous.rightInspectorOpen), {
26
+ isCompact,
27
+ leftSidebarOpen: next.leftSidebarOpen,
28
+ rightInspectorOpen: next.rightInspectorOpen,
29
+ }), source).send();
30
+ }
31
+ }
32
+ export function ShellLayoutProvider({ children }) {
33
+ const isCompact = useMediaQuery("(max-width: 1180px)");
34
+ const [compactPanels, setCompactPanels] = useState({
35
+ leftSidebarOpen: false,
36
+ rightInspectorOpen: false,
37
+ });
38
+ // Desktop border state tracked here for reactivity; synced from FlexLayout via setPanelVisibility
39
+ const [desktopBorderState, setDesktopBorderState] = useState({
40
+ leftSidebarOpen: true,
41
+ rightInspectorOpen: true,
42
+ });
43
+ const leftSidebarOpen = isCompact
44
+ ? compactPanels.leftSidebarOpen
45
+ : desktopBorderState.leftSidebarOpen;
46
+ const rightInspectorOpen = isCompact
47
+ ? compactPanels.rightInspectorOpen
48
+ : desktopBorderState.rightInspectorOpen;
49
+ const setPanelVisibility = useCallback((panels, meta) => {
50
+ const previous = {
51
+ leftSidebarOpen,
52
+ rightInspectorOpen,
53
+ };
54
+ // Always log, regardless of compact/desktop
55
+ logPanelVisibilityChange({
56
+ source: meta?.source,
57
+ isCompact,
58
+ previous,
59
+ next: panels,
60
+ });
61
+ if (isCompact) {
62
+ setCompactPanels(panels);
63
+ }
64
+ else {
65
+ setDesktopBorderState(panels);
66
+ }
67
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen]);
68
+ const toggleLeftSidebar = useCallback((meta) => {
69
+ const nextPanels = {
70
+ leftSidebarOpen: !leftSidebarOpen,
71
+ rightInspectorOpen,
72
+ };
73
+ setPanelVisibility(nextPanels, meta);
74
+ if (!isCompact) {
75
+ const model = getShellModel();
76
+ if (model) {
77
+ const isOpen = isBorderOpen(model, "left");
78
+ if (nextPanels.leftSidebarOpen !== isOpen) {
79
+ toggleBorder(model, "left");
80
+ }
81
+ }
82
+ }
83
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
84
+ const toggleRightInspector = useCallback((meta) => {
85
+ const nextPanels = {
86
+ leftSidebarOpen,
87
+ rightInspectorOpen: !rightInspectorOpen,
88
+ };
89
+ setPanelVisibility(nextPanels, meta);
90
+ if (!isCompact) {
91
+ const model = getShellModel();
92
+ if (model) {
93
+ const isOpen = isBorderOpen(model, "right");
94
+ if (nextPanels.rightInspectorOpen !== isOpen) {
95
+ toggleBorder(model, "right");
96
+ }
97
+ }
98
+ }
99
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
100
+ const openLeftSidebar = useCallback((meta) => {
101
+ if (leftSidebarOpen)
102
+ return;
103
+ setPanelVisibility({ leftSidebarOpen: true, rightInspectorOpen }, meta);
104
+ if (!isCompact) {
105
+ const model = getShellModel();
106
+ if (model && !isBorderOpen(model, "left")) {
107
+ toggleBorder(model, "left");
108
+ }
109
+ }
110
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
111
+ const openRightInspector = useCallback((meta) => {
112
+ if (rightInspectorOpen)
113
+ return;
114
+ setPanelVisibility({ leftSidebarOpen, rightInspectorOpen: true }, meta);
115
+ if (!isCompact) {
116
+ const model = getShellModel();
117
+ if (model && !isBorderOpen(model, "right")) {
118
+ toggleBorder(model, "right");
119
+ }
120
+ }
121
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
122
+ const closeLeftSidebar = useCallback((meta) => {
123
+ if (!leftSidebarOpen)
124
+ return;
125
+ setPanelVisibility({ leftSidebarOpen: false, rightInspectorOpen }, meta);
126
+ if (!isCompact) {
127
+ const model = getShellModel();
128
+ if (model && isBorderOpen(model, "left")) {
129
+ toggleBorder(model, "left");
130
+ }
131
+ }
132
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
133
+ const closeRightInspector = useCallback((meta) => {
134
+ if (!rightInspectorOpen)
135
+ return;
136
+ setPanelVisibility({ leftSidebarOpen, rightInspectorOpen: false }, meta);
137
+ if (!isCompact) {
138
+ const model = getShellModel();
139
+ if (model && isBorderOpen(model, "right")) {
140
+ toggleBorder(model, "right");
141
+ }
142
+ }
143
+ }, [isCompact, leftSidebarOpen, rightInspectorOpen, setPanelVisibility]);
144
+ const value = useMemo(() => ({
145
+ isCompact,
146
+ leftSidebarOpen,
147
+ rightInspectorOpen,
148
+ setPanelVisibility,
149
+ toggleLeftSidebar,
150
+ toggleRightInspector,
151
+ openLeftSidebar,
152
+ openRightInspector,
153
+ closeLeftSidebar,
154
+ closeRightInspector,
155
+ }), [
156
+ closeLeftSidebar,
157
+ closeRightInspector,
158
+ isCompact,
159
+ leftSidebarOpen,
160
+ openLeftSidebar,
161
+ openRightInspector,
162
+ rightInspectorOpen,
163
+ setPanelVisibility,
164
+ toggleLeftSidebar,
165
+ toggleRightInspector,
166
+ ]);
167
+ return (_jsx(ShellLayoutContext.Provider, { value: value, children: children }));
168
+ }
169
+ export function useShellLayout() {
170
+ const context = useContext(ShellLayoutContext);
171
+ if (!context) {
172
+ throw new Error("useShellLayout must be used within ShellLayoutProvider");
173
+ }
174
+ return context;
175
+ }
176
+ //# sourceMappingURL=shell-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-layout.js","sourceRoot":"","sources":["../../../src/components/shell/shell-layout.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type Model, type TabNode } from "flexlayout-react";
2
+ import type { ShellTab } from "../../lib/shell/types.js";
3
+ export declare function getShellModel(): Model | null;
4
+ export declare function setShellModel(model: Model | null): void;
5
+ export declare function extractTabsFromModel(model: Model): ShellTab[];
6
+ export declare function extractActiveTabId(model: Model): string | null;
7
+ export declare function isBorderOpen(model: Model, location: "left" | "right"): boolean;
8
+ export declare function findPreviewTabNode(model: Model): {
9
+ node: TabNode;
10
+ index: number;
11
+ } | null;
12
+ export declare function getWorkspaceShellTab(nodeId: string): ShellTab | null;
13
+ export declare function toggleBorder(model: Model, location: "left" | "right"): void;
14
+ //# sourceMappingURL=shell-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-model.d.ts","sourceRoot":"","sources":["../../../src/components/shell/shell-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,KAAK,EAAa,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAgB,aAAa,IAAI,KAAK,GAAG,IAAI,CAE5C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAEvD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,EAAE,CAc7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAW9D;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,GAAG,OAAO,GACzB,OAAO,CAMT;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,GACX;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBzC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG3E"}