@setsquare/ui 0.1.0

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 (312) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +49 -0
  4. package/README.md +313 -0
  5. package/dist/index.d.ts +129 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +78 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/lib/cn.d.ts +4 -0
  10. package/dist/lib/cn.d.ts.map +1 -0
  11. package/dist/lib/cn.js +59 -0
  12. package/dist/lib/cn.js.map +1 -0
  13. package/dist/lib/tokens.d.ts +5 -0
  14. package/dist/lib/tokens.d.ts.map +1 -0
  15. package/dist/lib/tokens.js +22 -0
  16. package/dist/lib/tokens.js.map +1 -0
  17. package/dist/lib/use-element-width.d.ts +4 -0
  18. package/dist/lib/use-element-width.d.ts.map +1 -0
  19. package/dist/lib/use-element-width.js +17 -0
  20. package/dist/lib/use-element-width.js.map +1 -0
  21. package/dist/lint/index.d.ts +41 -0
  22. package/dist/lint/index.d.ts.map +1 -0
  23. package/dist/lint/index.js +648 -0
  24. package/dist/lint/index.js.map +1 -0
  25. package/dist/shell/app-header.d.ts +13 -0
  26. package/dist/shell/app-header.d.ts.map +1 -0
  27. package/dist/shell/app-header.js +11 -0
  28. package/dist/shell/app-header.js.map +1 -0
  29. package/dist/shell/dashboard-shell.d.ts +67 -0
  30. package/dist/shell/dashboard-shell.d.ts.map +1 -0
  31. package/dist/shell/dashboard-shell.js +168 -0
  32. package/dist/shell/dashboard-shell.js.map +1 -0
  33. package/dist/shell/page-header.d.ts +19 -0
  34. package/dist/shell/page-header.d.ts.map +1 -0
  35. package/dist/shell/page-header.js +11 -0
  36. package/dist/shell/page-header.js.map +1 -0
  37. package/dist/shell/right-panel.d.ts +25 -0
  38. package/dist/shell/right-panel.d.ts.map +1 -0
  39. package/dist/shell/right-panel.js +37 -0
  40. package/dist/shell/right-panel.js.map +1 -0
  41. package/dist/shell/sidebar.d.ts +68 -0
  42. package/dist/shell/sidebar.d.ts.map +1 -0
  43. package/dist/shell/sidebar.js +68 -0
  44. package/dist/shell/sidebar.js.map +1 -0
  45. package/dist/shell/site-footer.d.ts +28 -0
  46. package/dist/shell/site-footer.d.ts.map +1 -0
  47. package/dist/shell/site-footer.js +15 -0
  48. package/dist/shell/site-footer.js.map +1 -0
  49. package/dist/shell/site-header-padding.d.ts +7 -0
  50. package/dist/shell/site-header-padding.d.ts.map +1 -0
  51. package/dist/shell/site-header-padding.js +27 -0
  52. package/dist/shell/site-header-padding.js.map +1 -0
  53. package/dist/shell/site-header.d.ts +23 -0
  54. package/dist/shell/site-header.d.ts.map +1 -0
  55. package/dist/shell/site-header.js +13 -0
  56. package/dist/shell/site-header.js.map +1 -0
  57. package/dist/shell/site-menu.d.ts +27 -0
  58. package/dist/shell/site-menu.d.ts.map +1 -0
  59. package/dist/shell/site-menu.js +56 -0
  60. package/dist/shell/site-menu.js.map +1 -0
  61. package/dist/shell/site-nav-link.d.ts +24 -0
  62. package/dist/shell/site-nav-link.d.ts.map +1 -0
  63. package/dist/shell/site-nav-link.js +35 -0
  64. package/dist/shell/site-nav-link.js.map +1 -0
  65. package/dist/shell/site-nav.d.ts +12 -0
  66. package/dist/shell/site-nav.d.ts.map +1 -0
  67. package/dist/shell/site-nav.js +9 -0
  68. package/dist/shell/site-nav.js.map +1 -0
  69. package/dist/shell/site-path.d.ts +8 -0
  70. package/dist/shell/site-path.d.ts.map +1 -0
  71. package/dist/shell/site-path.js +11 -0
  72. package/dist/shell/site-path.js.map +1 -0
  73. package/dist/shell/site-shell.d.ts +25 -0
  74. package/dist/shell/site-shell.d.ts.map +1 -0
  75. package/dist/shell/site-shell.js +17 -0
  76. package/dist/shell/site-shell.js.map +1 -0
  77. package/dist/styles/styles.css +10 -0
  78. package/dist/styles/theme.css +579 -0
  79. package/dist/styles/tokens.css +295 -0
  80. package/dist/testing/index.d.ts +321 -0
  81. package/dist/testing/index.d.ts.map +1 -0
  82. package/dist/testing/index.js +1175 -0
  83. package/dist/testing/index.js.map +1 -0
  84. package/dist/tokens.json +982 -0
  85. package/dist/ui/alert.d.ts +35 -0
  86. package/dist/ui/alert.d.ts.map +1 -0
  87. package/dist/ui/alert.js +65 -0
  88. package/dist/ui/alert.js.map +1 -0
  89. package/dist/ui/avatar.d.ts +16 -0
  90. package/dist/ui/avatar.d.ts.map +1 -0
  91. package/dist/ui/avatar.js +13 -0
  92. package/dist/ui/avatar.js.map +1 -0
  93. package/dist/ui/badge.d.ts +13 -0
  94. package/dist/ui/badge.d.ts.map +1 -0
  95. package/dist/ui/badge.js +24 -0
  96. package/dist/ui/badge.js.map +1 -0
  97. package/dist/ui/breadcrumbs.d.ts +13 -0
  98. package/dist/ui/breadcrumbs.d.ts.map +1 -0
  99. package/dist/ui/breadcrumbs.js +12 -0
  100. package/dist/ui/breadcrumbs.js.map +1 -0
  101. package/dist/ui/button-styles.d.ts +24 -0
  102. package/dist/ui/button-styles.d.ts.map +1 -0
  103. package/dist/ui/button-styles.js +50 -0
  104. package/dist/ui/button-styles.js.map +1 -0
  105. package/dist/ui/button.d.ts +27 -0
  106. package/dist/ui/button.d.ts.map +1 -0
  107. package/dist/ui/button.js +30 -0
  108. package/dist/ui/button.js.map +1 -0
  109. package/dist/ui/calendar.d.ts +19 -0
  110. package/dist/ui/calendar.d.ts.map +1 -0
  111. package/dist/ui/calendar.js +52 -0
  112. package/dist/ui/calendar.js.map +1 -0
  113. package/dist/ui/card.d.ts +30 -0
  114. package/dist/ui/card.d.ts.map +1 -0
  115. package/dist/ui/card.js +18 -0
  116. package/dist/ui/card.js.map +1 -0
  117. package/dist/ui/checkbox.d.ts +36 -0
  118. package/dist/ui/checkbox.d.ts.map +1 -0
  119. package/dist/ui/checkbox.js +38 -0
  120. package/dist/ui/checkbox.js.map +1 -0
  121. package/dist/ui/code-block.d.ts +20 -0
  122. package/dist/ui/code-block.d.ts.map +1 -0
  123. package/dist/ui/code-block.js +22 -0
  124. package/dist/ui/code-block.js.map +1 -0
  125. package/dist/ui/combo-box.d.ts +17 -0
  126. package/dist/ui/combo-box.d.ts.map +1 -0
  127. package/dist/ui/combo-box.js +14 -0
  128. package/dist/ui/combo-box.js.map +1 -0
  129. package/dist/ui/copy-button.d.ts +14 -0
  130. package/dist/ui/copy-button.d.ts.map +1 -0
  131. package/dist/ui/copy-button.js +36 -0
  132. package/dist/ui/copy-button.js.map +1 -0
  133. package/dist/ui/date-field.d.ts +38 -0
  134. package/dist/ui/date-field.d.ts.map +1 -0
  135. package/dist/ui/date-field.js +78 -0
  136. package/dist/ui/date-field.js.map +1 -0
  137. package/dist/ui/dialog.d.ts +41 -0
  138. package/dist/ui/dialog.d.ts.map +1 -0
  139. package/dist/ui/dialog.js +69 -0
  140. package/dist/ui/dialog.js.map +1 -0
  141. package/dist/ui/disclosure.d.ts +18 -0
  142. package/dist/ui/disclosure.d.ts.map +1 -0
  143. package/dist/ui/disclosure.js +15 -0
  144. package/dist/ui/disclosure.js.map +1 -0
  145. package/dist/ui/empty-state.d.ts +17 -0
  146. package/dist/ui/empty-state.d.ts.map +1 -0
  147. package/dist/ui/empty-state.js +9 -0
  148. package/dist/ui/empty-state.js.map +1 -0
  149. package/dist/ui/error-state.d.ts +45 -0
  150. package/dist/ui/error-state.d.ts.map +1 -0
  151. package/dist/ui/error-state.js +88 -0
  152. package/dist/ui/error-state.js.map +1 -0
  153. package/dist/ui/field.d.ts +46 -0
  154. package/dist/ui/field.d.ts.map +1 -0
  155. package/dist/ui/field.js +79 -0
  156. package/dist/ui/field.js.map +1 -0
  157. package/dist/ui/file-upload.d.ts +54 -0
  158. package/dist/ui/file-upload.d.ts.map +1 -0
  159. package/dist/ui/file-upload.js +170 -0
  160. package/dist/ui/file-upload.js.map +1 -0
  161. package/dist/ui/form.d.ts +56 -0
  162. package/dist/ui/form.d.ts.map +1 -0
  163. package/dist/ui/form.js +137 -0
  164. package/dist/ui/form.js.map +1 -0
  165. package/dist/ui/grid-list.d.ts +24 -0
  166. package/dist/ui/grid-list.d.ts.map +1 -0
  167. package/dist/ui/grid-list.js +21 -0
  168. package/dist/ui/grid-list.js.map +1 -0
  169. package/dist/ui/hero.d.ts +36 -0
  170. package/dist/ui/hero.d.ts.map +1 -0
  171. package/dist/ui/hero.js +19 -0
  172. package/dist/ui/hero.js.map +1 -0
  173. package/dist/ui/icon-button.d.ts +18 -0
  174. package/dist/ui/icon-button.d.ts.map +1 -0
  175. package/dist/ui/icon-button.js +13 -0
  176. package/dist/ui/icon-button.js.map +1 -0
  177. package/dist/ui/icon.d.ts +20 -0
  178. package/dist/ui/icon.d.ts.map +1 -0
  179. package/dist/ui/icon.js +26 -0
  180. package/dist/ui/icon.js.map +1 -0
  181. package/dist/ui/kbd.d.ts +7 -0
  182. package/dist/ui/kbd.d.ts.map +1 -0
  183. package/dist/ui/kbd.js +7 -0
  184. package/dist/ui/kbd.js.map +1 -0
  185. package/dist/ui/link-card.d.ts +23 -0
  186. package/dist/ui/link-card.d.ts.map +1 -0
  187. package/dist/ui/link-card.js +19 -0
  188. package/dist/ui/link-card.js.map +1 -0
  189. package/dist/ui/list-box.d.ts +17 -0
  190. package/dist/ui/list-box.d.ts.map +1 -0
  191. package/dist/ui/list-box.js +18 -0
  192. package/dist/ui/list-box.js.map +1 -0
  193. package/dist/ui/menu.d.ts +31 -0
  194. package/dist/ui/menu.d.ts.map +1 -0
  195. package/dist/ui/menu.js +40 -0
  196. package/dist/ui/menu.js.map +1 -0
  197. package/dist/ui/number-field.d.ts +19 -0
  198. package/dist/ui/number-field.d.ts.map +1 -0
  199. package/dist/ui/number-field.js +19 -0
  200. package/dist/ui/number-field.js.map +1 -0
  201. package/dist/ui/prose.d.ts +12 -0
  202. package/dist/ui/prose.d.ts.map +1 -0
  203. package/dist/ui/prose.js +11 -0
  204. package/dist/ui/prose.js.map +1 -0
  205. package/dist/ui/radio-group.d.ts +20 -0
  206. package/dist/ui/radio-group.d.ts.map +1 -0
  207. package/dist/ui/radio-group.js +16 -0
  208. package/dist/ui/radio-group.js.map +1 -0
  209. package/dist/ui/scroll-region.d.ts +18 -0
  210. package/dist/ui/scroll-region.d.ts.map +1 -0
  211. package/dist/ui/scroll-region.js +29 -0
  212. package/dist/ui/scroll-region.js.map +1 -0
  213. package/dist/ui/search-field.d.ts +12 -0
  214. package/dist/ui/search-field.d.ts.map +1 -0
  215. package/dist/ui/search-field.js +12 -0
  216. package/dist/ui/search-field.js.map +1 -0
  217. package/dist/ui/search.d.ts +43 -0
  218. package/dist/ui/search.d.ts.map +1 -0
  219. package/dist/ui/search.js +45 -0
  220. package/dist/ui/search.js.map +1 -0
  221. package/dist/ui/section.d.ts +50 -0
  222. package/dist/ui/section.d.ts.map +1 -0
  223. package/dist/ui/section.js +25 -0
  224. package/dist/ui/section.js.map +1 -0
  225. package/dist/ui/segmented-control.d.ts +18 -0
  226. package/dist/ui/segmented-control.d.ts.map +1 -0
  227. package/dist/ui/segmented-control.js +17 -0
  228. package/dist/ui/segmented-control.js.map +1 -0
  229. package/dist/ui/select.d.ts +18 -0
  230. package/dist/ui/select.d.ts.map +1 -0
  231. package/dist/ui/select.js +13 -0
  232. package/dist/ui/select.js.map +1 -0
  233. package/dist/ui/selection-bar.d.ts +28 -0
  234. package/dist/ui/selection-bar.d.ts.map +1 -0
  235. package/dist/ui/selection-bar.js +35 -0
  236. package/dist/ui/selection-bar.js.map +1 -0
  237. package/dist/ui/sheet.d.ts +21 -0
  238. package/dist/ui/sheet.d.ts.map +1 -0
  239. package/dist/ui/sheet.js +16 -0
  240. package/dist/ui/sheet.js.map +1 -0
  241. package/dist/ui/skeleton.d.ts +31 -0
  242. package/dist/ui/skeleton.d.ts.map +1 -0
  243. package/dist/ui/skeleton.js +38 -0
  244. package/dist/ui/skeleton.js.map +1 -0
  245. package/dist/ui/slider.d.ts +31 -0
  246. package/dist/ui/slider.d.ts.map +1 -0
  247. package/dist/ui/slider.js +33 -0
  248. package/dist/ui/slider.js.map +1 -0
  249. package/dist/ui/spinner.d.ts +27 -0
  250. package/dist/ui/spinner.d.ts.map +1 -0
  251. package/dist/ui/spinner.js +21 -0
  252. package/dist/ui/spinner.js.map +1 -0
  253. package/dist/ui/split.d.ts +14 -0
  254. package/dist/ui/split.d.ts.map +1 -0
  255. package/dist/ui/split.js +11 -0
  256. package/dist/ui/split.js.map +1 -0
  257. package/dist/ui/stat-list.d.ts +25 -0
  258. package/dist/ui/stat-list.d.ts.map +1 -0
  259. package/dist/ui/stat-list.js +14 -0
  260. package/dist/ui/stat-list.js.map +1 -0
  261. package/dist/ui/steps.d.ts +23 -0
  262. package/dist/ui/steps.d.ts.map +1 -0
  263. package/dist/ui/steps.js +16 -0
  264. package/dist/ui/steps.js.map +1 -0
  265. package/dist/ui/switch.d.ts +13 -0
  266. package/dist/ui/switch.d.ts.map +1 -0
  267. package/dist/ui/switch.js +12 -0
  268. package/dist/ui/switch.js.map +1 -0
  269. package/dist/ui/table.d.ts +25 -0
  270. package/dist/ui/table.d.ts.map +1 -0
  271. package/dist/ui/table.js +29 -0
  272. package/dist/ui/table.js.map +1 -0
  273. package/dist/ui/tag.d.ts +14 -0
  274. package/dist/ui/tag.d.ts.map +1 -0
  275. package/dist/ui/tag.js +11 -0
  276. package/dist/ui/tag.js.map +1 -0
  277. package/dist/ui/text-field.d.ts +27 -0
  278. package/dist/ui/text-field.d.ts.map +1 -0
  279. package/dist/ui/text-field.js +17 -0
  280. package/dist/ui/text-field.js.map +1 -0
  281. package/dist/ui/text-link.d.ts +17 -0
  282. package/dist/ui/text-link.d.ts.map +1 -0
  283. package/dist/ui/text-link.js +15 -0
  284. package/dist/ui/text-link.js.map +1 -0
  285. package/dist/ui/theme-switcher.d.ts +26 -0
  286. package/dist/ui/theme-switcher.d.ts.map +1 -0
  287. package/dist/ui/theme-switcher.js +32 -0
  288. package/dist/ui/theme-switcher.js.map +1 -0
  289. package/dist/ui/theme.d.ts +54 -0
  290. package/dist/ui/theme.d.ts.map +1 -0
  291. package/dist/ui/theme.js +135 -0
  292. package/dist/ui/theme.js.map +1 -0
  293. package/dist/ui/toast.d.ts +34 -0
  294. package/dist/ui/toast.d.ts.map +1 -0
  295. package/dist/ui/toast.js +69 -0
  296. package/dist/ui/toast.js.map +1 -0
  297. package/dist/ui/tooltip.d.ts +10 -0
  298. package/dist/ui/tooltip.d.ts.map +1 -0
  299. package/dist/ui/tooltip.js +10 -0
  300. package/dist/ui/tooltip.js.map +1 -0
  301. package/package.json +123 -0
  302. package/templates/next/error.tsx +32 -0
  303. package/templates/next/loading.tsx +19 -0
  304. package/templates/next/not-found.tsx +18 -0
  305. package/templates/next/page-transition.tsx +33 -0
  306. package/templates/next/portal-layout.tsx +70 -0
  307. package/templates/next/prefetch-on-intent.ts +31 -0
  308. package/templates/next/root-layout.tsx +16 -0
  309. package/templates/next/site-layout.tsx +58 -0
  310. package/templates/next/site-nav.ts +16 -0
  311. package/templates/next/site-not-found.tsx +21 -0
  312. package/templates/next/site-router.tsx +17 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface AppHeaderProps {
3
+ /** Usually <Breadcrumbs>. On phones the product name shows instead. */
4
+ breadcrumbs?: ReactNode;
5
+ /** Usually <AppSearch>. */
6
+ search?: ReactNode;
7
+ /** Help, notifications — the same buttons in the same order on every page (help: 3.2.6; notifications: our rule). */
8
+ actions?: ReactNode;
9
+ className?: string;
10
+ }
11
+ /** The inset's top bar: sidebar trigger, where you are, search and the fixed actions. */
12
+ export declare function AppHeader({ breadcrumbs, search, actions, className }: AppHeaderProps): import("react").JSX.Element;
13
+ //# sourceMappingURL=app-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-header.d.ts","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qHAAqH;IACrH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,cAAc,+BAyBpF"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from '../lib/cn.js';
4
+ import { useShell } from './dashboard-shell.js';
5
+ import { SidebarTrigger } from './sidebar.js';
6
+ /** The inset's top bar: sidebar trigger, where you are, search and the fixed actions. */
7
+ export function AppHeader({ breadcrumbs, search, actions, className }) {
8
+ const { size, productName } = useShell();
9
+ return (_jsxs("header", { style: { viewTransitionName: 'shell-header' }, className: cn('flex h-header shrink-0 items-center gap-2 border-b border-border px-3 @min-[48rem]/shell:px-4', className), children: [_jsx(SidebarTrigger, {}), _jsx("span", { "aria-hidden": "true", className: "mx-1 h-6 w-px bg-border @max-[48rem]/shell:hidden" }), _jsx("div", { className: "flex min-w-0 flex-1 items-center", children: size === 'mobile' ? (_jsx("span", { className: "truncate text-base font-bold", children: productName })) : (breadcrumbs) }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [search, actions] })] }));
10
+ }
11
+ //# sourceMappingURL=app-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-header.js","sourceRoot":"","sources":["../../src/shell/app-header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAY9C,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAkB;IACnF,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzC,OAAO,CACL,kBACE,KAAK,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,EAC7C,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,SAAS,CACV,aAED,KAAC,cAAc,KAAG,EAClB,8BAAkB,MAAM,EAAC,SAAS,EAAC,mDAAmD,GAAG,EACzF,cAAK,SAAS,EAAC,kCAAkC,YAC9C,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACnB,eAAM,SAAS,EAAC,8BAA8B,YAAE,WAAW,GAAQ,CACpE,CAAC,CAAC,CAAC,CACF,WAAW,CACZ,GACG,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,MAAM,EACN,OAAO,IACJ,IACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { type CSSProperties, type ReactNode, type RefObject } from 'react';
2
+ export type ShellSize = 'mobile' | 'tablet' | 'laptop' | 'desktop';
3
+ export type PanelMode = 'inline' | 'sheet';
4
+ export interface ShellContextValue {
5
+ size: ShellSize;
6
+ sidebarCollapsed: boolean;
7
+ toggleSidebar: () => void;
8
+ mobileNavOpen: boolean;
9
+ setMobileNavOpen: (open: boolean) => void;
10
+ panelOpen: boolean;
11
+ setPanelOpen: (open: boolean) => void;
12
+ panelMode: PanelMode;
13
+ panelToggleRef: RefObject<HTMLButtonElement | null>;
14
+ productName: string;
15
+ /** True when `size` was forced, so container-query fallbacks stand down. */
16
+ isSizeForced: boolean;
17
+ }
18
+ export declare function useShell(): ShellContextValue;
19
+ /** Same as useShell, but null outside a shell (for parts that also work standalone). */
20
+ export declare function useOptionalShell(): ShellContextValue | null;
21
+ export interface DashboardShellProps {
22
+ children: ReactNode;
23
+ /** The product name, used to name the mobile navigation and in the header on phones. */
24
+ productName: string;
25
+ /** Leave unset: open when inline, closed when it would be a Sheet. true or false forces both. */
26
+ defaultPanelOpen?: boolean;
27
+ defaultMobileNavOpen?: boolean;
28
+ /** Start collapsed to icons regardless of size (until the size class changes). */
29
+ defaultSidebarCollapsed?: boolean;
30
+ /** Force a size instead of measuring (previews, tests, Storybook). */
31
+ size?: ShellSize;
32
+ skipLinkLabel?: string;
33
+ className?: string;
34
+ style?: CSSProperties;
35
+ }
36
+ /**
37
+ * Option B — the inset shell. Measures its own width and decides:
38
+ * desktop ≥ bp-xl: sidebar expanded, panel inline · laptop ≥ bp-lg: sidebar icons, panel inline ·
39
+ * tablet ≥ bp-md: sidebar icons, panel as a Sheet · mobile: sidebar and panel both Sheets.
40
+ * CSS container queries on `shell` do the first layout, so there is no flash before measuring.
41
+ */
42
+ export declare function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen, defaultSidebarCollapsed, size: forcedSize, skipLinkLabel, className, style, }: DashboardShellProps): import("react").JSX.Element;
43
+ /** The raised surface that holds the header, the page and the right panel. Edge to edge on phones. */
44
+ export declare function ShellInset({ children, className }: {
45
+ children: ReactNode;
46
+ className?: string;
47
+ }): import("react").JSX.Element;
48
+ /** The row below the header: main column and right panel. */
49
+ export declare function ShellBody({ children, className }: {
50
+ children: ReactNode;
51
+ className?: string;
52
+ }): import("react").JSX.Element;
53
+ /**
54
+ * The main landmark and scroll container; the skip link lands here. `relative` so anything absolutely positioned
55
+ * inside (sr-only text, React Aria's hidden inputs) scrolls with the page instead of being placed against the shell.
56
+ *
57
+ * `tabIndex` is -1, for the skip link, until the page scrolls and holds nothing a keyboard can reach — prose with
58
+ * no links, a changelog. Then it is 0, so Tab reaches it and the arrow keys scroll it, with the inset ring. That is
59
+ * what Chrome (132 and later) does for any scroller with no tabindex and no focusable children; an explicit -1
60
+ * opts out of it, so this puts it back, in every browser.
61
+ */
62
+ export declare function ShellMain({ children, className, 'aria-labelledby': labelledBy, }: {
63
+ children: ReactNode;
64
+ className?: string;
65
+ 'aria-labelledby'?: string;
66
+ }): import("react").JSX.Element;
67
+ //# sourceMappingURL=dashboard-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-shell.d.ts","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AACnE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C;AACD,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D;AAeD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,oBAA4B,EAC5B,uBAAuB,EACvB,IAAI,EAAE,UAAU,EAChB,aAAsC,EACtC,SAAS,EACT,KAAK,GACN,EAAE,mBAAmB,+BAiGrB;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAY9F;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE7F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,iBAAiB,EAAE,UAAU,GAC9B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,+BAsDA"}
@@ -0,0 +1,168 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
4
+ import { cn } from '../lib/cn.js';
5
+ const ShellContext = createContext(null);
6
+ export function useShell() {
7
+ const ctx = useContext(ShellContext);
8
+ if (!ctx)
9
+ throw new Error('useShell must be used inside <DashboardShell>');
10
+ return ctx;
11
+ }
12
+ /** Same as useShell, but null outside a shell (for parts that also work standalone). */
13
+ export function useOptionalShell() {
14
+ return useContext(ShellContext);
15
+ }
16
+ /** Breakpoints come from the bp-* tokens so the shell and Tailwind agree. */
17
+ function readBreakpoints(el) {
18
+ const cs = getComputedStyle(el);
19
+ const px = (name, fallback) => parseFloat(cs.getPropertyValue(name)) || fallback;
20
+ return { md: px('--bp-md', 768), lg: px('--bp-lg', 1024), xl: px('--bp-xl', 1280) };
21
+ }
22
+ function sizeFor(width, bp) {
23
+ if (width < bp.md)
24
+ return 'mobile';
25
+ if (width < bp.lg)
26
+ return 'tablet';
27
+ if (width < bp.xl)
28
+ return 'laptop';
29
+ return 'desktop';
30
+ }
31
+ /**
32
+ * Option B — the inset shell. Measures its own width and decides:
33
+ * desktop ≥ bp-xl: sidebar expanded, panel inline · laptop ≥ bp-lg: sidebar icons, panel inline ·
34
+ * tablet ≥ bp-md: sidebar icons, panel as a Sheet · mobile: sidebar and panel both Sheets.
35
+ * CSS container queries on `shell` do the first layout, so there is no flash before measuring.
36
+ */
37
+ export function DashboardShell({ children, productName, defaultPanelOpen, defaultMobileNavOpen = false, defaultSidebarCollapsed, size: forcedSize, skipLinkLabel = 'Skip to main content', className, style, }) {
38
+ const ref = useRef(null);
39
+ const [measured, setMeasured] = useState(null);
40
+ const size = forcedSize ?? measured ?? 'desktop';
41
+ useLayoutEffect(() => {
42
+ if (forcedSize)
43
+ return;
44
+ const el = ref.current;
45
+ if (!el)
46
+ return;
47
+ const bp = readBreakpoints(el);
48
+ const update = (w) => setMeasured(sizeFor(w, bp));
49
+ update(el.getBoundingClientRect().width);
50
+ const ro = new ResizeObserver(([entry]) => update(entry.contentRect.width));
51
+ ro.observe(el);
52
+ return () => ro.disconnect();
53
+ }, [forcedSize]);
54
+ // Sidebar: the user's toggle wins until the size class changes.
55
+ const [userCollapsed, setUserCollapsed] = useState(defaultSidebarCollapsed ?? null);
56
+ const prevSize = useRef(null);
57
+ useEffect(() => {
58
+ if (measured === null && !forcedSize)
59
+ return;
60
+ if (prevSize.current !== null && prevSize.current !== size)
61
+ setUserCollapsed(null);
62
+ prevSize.current = size;
63
+ }, [size, measured, forcedSize]);
64
+ const sidebarCollapsed = userCollapsed ?? (size === 'laptop' || size === 'tablet');
65
+ const toggleSidebar = useCallback(() => setUserCollapsed(!sidebarCollapsed), [sidebarCollapsed]);
66
+ const [mobileNavOpen, setMobileNavOpen] = useState(defaultMobileNavOpen);
67
+ // Panel: inline on wide shells, a Sheet on narrow ones. Crossing that line closes a Sheet
68
+ // rather than popping one open unasked.
69
+ const panelMode = size === 'desktop' || size === 'laptop' ? 'inline' : 'sheet';
70
+ const [panelOpen, setPanelOpen] = useState(defaultPanelOpen ?? true);
71
+ const prevMode = useRef(null);
72
+ useEffect(() => {
73
+ if (measured === null && !forcedSize)
74
+ return;
75
+ if (prevMode.current === null)
76
+ setPanelOpen(defaultPanelOpen ?? panelMode === 'inline');
77
+ else if (prevMode.current !== panelMode)
78
+ setPanelOpen(panelMode === 'inline');
79
+ prevMode.current = panelMode;
80
+ // eslint-disable-next-line react-hooks/exhaustive-deps
81
+ }, [panelMode, measured, forcedSize]);
82
+ const panelToggleRef = useRef(null);
83
+ const value = useMemo(() => ({
84
+ size,
85
+ sidebarCollapsed,
86
+ toggleSidebar,
87
+ mobileNavOpen,
88
+ setMobileNavOpen,
89
+ panelOpen,
90
+ setPanelOpen,
91
+ panelMode,
92
+ panelToggleRef,
93
+ productName,
94
+ isSizeForced: !!forcedSize,
95
+ }), [
96
+ size,
97
+ sidebarCollapsed,
98
+ toggleSidebar,
99
+ mobileNavOpen,
100
+ panelOpen,
101
+ panelMode,
102
+ productName,
103
+ forcedSize,
104
+ ]);
105
+ return (_jsx(ShellContext.Provider, { value: value, children: _jsxs("div", { ref: ref, "data-size": size, style: style, className: cn('@container/shell relative flex h-dvh min-h-0 w-full overflow-hidden bg-sidebar text-foreground', className), children: [_jsx("a", { href: "#main", className: "group/skip absolute top-2 left-4 z-(--z-popover) inline-flex min-h-target min-w-target -translate-y-[200%] cursor-pointer items-center no-underline outline-none focus:translate-y-0", children: _jsx("span", { className: "inline-flex min-h-control items-center rounded-md bg-primary px-(--control-pad-x) text-sm font-semibold text-primary-foreground group-focus-visible/skip:focus-ring", children: skipLinkLabel }) }), children] }) }));
106
+ }
107
+ /** The raised surface that holds the header, the page and the right panel. Edge to edge on phones. */
108
+ export function ShellInset({ children, className }) {
109
+ return (_jsx("div", { className: cn('my-2 mr-2 flex min-w-0 flex-1 flex-col overflow-hidden rounded-xl border border-border bg-background shadow-(--shadow-sm)', '@max-[48rem]/shell:m-0 @max-[48rem]/shell:rounded-none @max-[48rem]/shell:border-0', className), children: children }));
110
+ }
111
+ /** The row below the header: main column and right panel. */
112
+ export function ShellBody({ children, className }) {
113
+ return _jsx("div", { className: cn('flex min-h-0 flex-1', className), children: children });
114
+ }
115
+ /** Content a keyboard can already reach inside a scroller, which then needs no tab stop of its own. */
116
+ const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), summary, iframe, [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])';
117
+ /**
118
+ * The main landmark and scroll container; the skip link lands here. `relative` so anything absolutely positioned
119
+ * inside (sr-only text, React Aria's hidden inputs) scrolls with the page instead of being placed against the shell.
120
+ *
121
+ * `tabIndex` is -1, for the skip link, until the page scrolls and holds nothing a keyboard can reach — prose with
122
+ * no links, a changelog. Then it is 0, so Tab reaches it and the arrow keys scroll it, with the inset ring. That is
123
+ * what Chrome (132 and later) does for any scroller with no tabindex and no focusable children; an explicit -1
124
+ * opts out of it, so this puts it back, in every browser.
125
+ */
126
+ export function ShellMain({ children, className, 'aria-labelledby': labelledBy, }) {
127
+ const ref = useRef(null);
128
+ const [tabbable, setTabbable] = useState(false);
129
+ useEffect(() => {
130
+ const main = ref.current;
131
+ if (!main)
132
+ return;
133
+ let frame = 0;
134
+ const resize = new ResizeObserver(() => measure());
135
+ const measure = () => {
136
+ cancelAnimationFrame(frame);
137
+ frame = requestAnimationFrame(() => {
138
+ // The content can grow without main resizing, so watch what is in it too.
139
+ for (const child of main.children)
140
+ resize.observe(child);
141
+ const scrolls = main.scrollHeight > main.clientHeight + 1;
142
+ const reachable = [...main.querySelectorAll(FOCUSABLE)].some((el) => !el.closest('[inert]') && el.getClientRects().length > 0);
143
+ setTabbable(scrolls && !reachable);
144
+ });
145
+ };
146
+ measure();
147
+ resize.observe(main);
148
+ const mutation = new MutationObserver(measure);
149
+ mutation.observe(main, {
150
+ childList: true,
151
+ subtree: true,
152
+ attributes: true,
153
+ attributeFilter: ['href', 'disabled', 'tabindex', 'inert', 'hidden', 'contenteditable'],
154
+ });
155
+ return () => {
156
+ cancelAnimationFrame(frame);
157
+ resize.disconnect();
158
+ mutation.disconnect();
159
+ };
160
+ }, []);
161
+ return (_jsx("main", { ref: ref, id: "main",
162
+ // A scroller with nothing focusable in it has to take focus itself, or a keyboard can't scroll it.
163
+ // oxlint-disable-next-line jsx-a11y/no-noninteractive-tabindex
164
+ tabIndex: tabbable ? 0 : -1, "data-tabbable": tabbable || undefined, "aria-labelledby": labelledBy, className: cn('@container/main relative min-w-0 flex-1 overflow-y-auto outline-none data-tabbable:focus-visible:focus-ring-inset',
165
+ // Keep focus clear of toasts that stay: scroll padding, and room at the end to scroll into.
166
+ 'scroll-pb-[calc(var(--toast-region-height,0px)+var(--space-4))] pb-(--toast-region-height,0px)', className), children: children }));
167
+ }
168
+ //# sourceMappingURL=dashboard-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-shell.js","sourceRoot":"","sources":["../../src/shell/dashboard-shell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PageHeaderProps {
3
+ title: string;
4
+ description?: string;
5
+ /** Page actions: at most one primary. Wraps below the title when it runs out of room. */
6
+ actions?: ReactNode;
7
+ /** Shown above the title — use on phones, where the header shows the product name instead. */
8
+ breadcrumbs?: ReactNode;
9
+ titleId?: string;
10
+ className?: string;
11
+ }
12
+ /** The page's h1, one-line description and actions. */
13
+ export declare function PageHeader({ title, description, actions, breadcrumbs, titleId, className, }: PageHeaderProps): import("react").JSX.Element;
14
+ /** Padding for everything below the page header. */
15
+ export declare function PageContent({ children, className }: {
16
+ children: ReactNode;
17
+ className?: string;
18
+ }): import("react").JSX.Element;
19
+ //# sourceMappingURL=page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../src/shell/page-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,WAAW,EACX,OAAsB,EACtB,SAAS,GACV,EAAE,eAAe,+BAoBjB;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAM/F"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../lib/cn.js';
3
+ /** The page's h1, one-line description and actions. */
4
+ export function PageHeader({ title, description, actions, breadcrumbs, titleId = 'page-title', className, }) {
5
+ return (_jsxs("div", { className: cn('flex flex-wrap items-end justify-between gap-4 px-(--gutter) pt-5 pb-4 @max-[40rem]/main:px-4', className), children: [_jsxs("div", { className: "min-w-0 flex-[1_1_20rem]", children: [breadcrumbs && _jsx("div", { className: "mb-1", children: breadcrumbs }), _jsx("h1", { id: titleId, className: "text-title", children: title }), description && (_jsx("p", { className: "mt-1 max-w-(--measure) text-sm text-muted-foreground", children: description }))] }), actions && _jsx("div", { className: "flex flex-wrap items-center gap-(--control-gap)", children: actions })] }));
6
+ }
7
+ /** Padding for everything below the page header. */
8
+ export function PageContent({ children, className }) {
9
+ return (_jsx("div", { className: cn('px-(--gutter) pb-(--gutter) @max-[40rem]/main:px-4', className), children: children }));
10
+ }
11
+ //# sourceMappingURL=page-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.js","sourceRoot":"","sources":["../../src/shell/page-header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAalC,uDAAuD;AACvD,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,WAAW,EACX,OAAO,GAAG,YAAY,EACtB,SAAS,GACO;IAChB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,+FAA+F,EAC/F,SAAS,CACV,aAED,eAAK,SAAS,EAAC,0BAA0B,aACtC,WAAW,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,WAAW,GAAO,EACzD,aAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,YAAY,YACpC,KAAK,GACH,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,sDAAsD,YAAE,WAAW,GAAK,CACtF,IACG,EACL,OAAO,IAAI,cAAK,SAAS,EAAC,iDAAiD,YAAE,OAAO,GAAO,IACxF,CACP,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC9F,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,oDAAoD,EAAE,SAAS,CAAC,YAChF,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface RightPanelProps {
3
+ /** The panel's heading; also names the landmark or dialog. */
4
+ title: string;
5
+ children: ReactNode;
6
+ /** Actions pinned to the bottom. */
7
+ footer?: ReactNode;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Extra information about the current selection. An <aside> beside main on wide shells,
12
+ * a Sheet (modal dialog) on narrow ones. Closing returns focus to the PanelToggle.
13
+ */
14
+ export declare function RightPanel({ title, children, footer, className }: RightPanelProps): import("react").JSX.Element | null;
15
+ /** Shows and hides the right panel. Put it in the page actions. */
16
+ export declare function PanelToggle({ label }: {
17
+ label?: string;
18
+ }): import("react").JSX.Element;
19
+ /** A titled group inside the panel. */
20
+ export declare function PanelSection({ title, children, className, }: {
21
+ title?: string;
22
+ children: ReactNode;
23
+ className?: string;
24
+ }): import("react").JSX.Element;
25
+ //# sourceMappingURL=right-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"right-panel.d.ts","sourceRoot":"","sources":["../../src/shell/right-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AAO9D,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,oCAAoC;IACpC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,sCA0DjF;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,EAAE,KAAuB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAa1E;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAOA"}
@@ -0,0 +1,37 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId } from 'react';
4
+ import { PanelRight, X } from 'lucide-react';
5
+ import { cn } from '../lib/cn.js';
6
+ import { IconButton } from '../ui/icon-button.js';
7
+ import { Sheet } from '../ui/sheet.js';
8
+ import { useShell } from './dashboard-shell.js';
9
+ /**
10
+ * Extra information about the current selection. An <aside> beside main on wide shells,
11
+ * a Sheet (modal dialog) on narrow ones. Closing returns focus to the PanelToggle.
12
+ */
13
+ export function RightPanel({ title, children, footer, className }) {
14
+ const { panelOpen, setPanelOpen, panelMode, panelToggleRef, isSizeForced } = useShell();
15
+ const headingId = useId();
16
+ const foot = footer ? (_jsx("div", { className: "flex gap-(--control-gap) border-t border-border px-4 py-3 *:flex-1", children: footer })) : null;
17
+ const body = (_jsx("div", { className: "relative flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto p-4", children: children }));
18
+ if (panelMode === 'sheet') {
19
+ return (_jsx(Sheet, { side: "right", title: title, isOpen: panelOpen, onOpenChange: setPanelOpen, footer: foot, children: body }));
20
+ }
21
+ if (!panelOpen)
22
+ return null;
23
+ return (_jsxs("aside", { "aria-labelledby": headingId, style: { viewTransitionName: 'shell-panel' }, className: cn('flex w-panel shrink-0 flex-col border-l border-border bg-card text-card-foreground', !isSizeForced && '@max-[64rem]/shell:hidden', className), children: [_jsxs("div", { className: "flex min-h-[calc(var(--control-height)+1rem)] items-center justify-between gap-2 border-b border-border py-2 pr-2 pl-4", children: [_jsx("h2", { id: headingId, className: "text-subheading", children: title }), _jsx(IconButton, { label: `Close ${title.toLowerCase()}`, icon: X, visualSize: "icon-sm", tooltip: false, className: "justify-end", onPress: () => {
24
+ setPanelOpen(false);
25
+ requestAnimationFrame(() => panelToggleRef.current?.focus());
26
+ } })] }), body, foot] }));
27
+ }
28
+ /** Shows and hides the right panel. Put it in the page actions. */
29
+ export function PanelToggle({ label = 'Details panel' }) {
30
+ const { panelOpen, setPanelOpen, panelToggleRef, panelMode } = useShell();
31
+ return (_jsx(IconButton, { ref: panelToggleRef, label: label, icon: PanelRight, variant: "outline", "aria-expanded": panelMode === 'inline' ? panelOpen : undefined, "aria-haspopup": panelMode === 'sheet' ? 'dialog' : undefined, onPress: () => setPanelOpen(!panelOpen) }));
32
+ }
33
+ /** A titled group inside the panel. */
34
+ export function PanelSection({ title, children, className, }) {
35
+ return (_jsxs("section", { className: className, children: [title && _jsx("h3", { className: "mb-2 text-sm font-bold", children: title }), children] }));
36
+ }
37
+ //# sourceMappingURL=right-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"right-panel.js","sourceRoot":"","sources":["../../src/shell/right-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type Key } from 'react-aria-components';
3
+ import { type IconProp } from '../ui/icon.js';
4
+ /** True when the sidebar shows icons only (never inside the mobile Sheet). */
5
+ export declare const useSidebarCollapsed: () => boolean;
6
+ export interface SidebarProps {
7
+ children: ReactNode;
8
+ /** Names the navigation landmark. */
9
+ label?: string;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * The full-height sidebar. Expanded, collapsed to icons (labels stay in the accessibility tree
14
+ * and show as tooltips), or — on phones — a Sheet opened from the header.
15
+ */
16
+ export declare function Sidebar({ children, label, className }: SidebarProps): import("react").JSX.Element;
17
+ export declare function SidebarHeader({ children, className, }: {
18
+ children: ReactNode;
19
+ className?: string;
20
+ }): import("react").JSX.Element;
21
+ export declare function SidebarContent({ children, className, }: {
22
+ children: ReactNode;
23
+ className?: string;
24
+ }): import("react").JSX.Element;
25
+ export declare function SidebarFooter({ children, className, }: {
26
+ children: ReactNode;
27
+ className?: string;
28
+ }): import("react").JSX.Element;
29
+ /** A labelled section of nav items. The heading is visually hidden when collapsed. */
30
+ export declare function SidebarGroup({ label, children, className, }: {
31
+ label: string;
32
+ children: ReactNode;
33
+ className?: string;
34
+ }): import("react").JSX.Element;
35
+ export declare function SidebarList({ children, className }: {
36
+ children: ReactNode;
37
+ className?: string;
38
+ }): import("react").JSX.Element;
39
+ export interface SidebarItemProps {
40
+ href?: string;
41
+ icon: IconProp;
42
+ children: string;
43
+ /** Marks the current page: brand-subtle fill, marker bar and weight 700, plus aria-current. */
44
+ isCurrent?: boolean;
45
+ /** Shown beside the label and read as part of it: "Projects, 12". */
46
+ count?: number;
47
+ onPress?: () => void;
48
+ }
49
+ export declare function SidebarItem({ href, icon, children, isCurrent, count, onPress }: SidebarItemProps): import("react").JSX.Element;
50
+ export interface SidebarSwitcherProps {
51
+ /** The tile or avatar on the left. */
52
+ leading: ReactNode;
53
+ title: string;
54
+ subtitle?: string;
55
+ /** What the menu does, appended to the name: "switch workspace", "account menu". */
56
+ menuLabel: string;
57
+ children: ReactNode;
58
+ onAction?: (key: Key) => void;
59
+ selectedKey?: Key;
60
+ placement?: 'bottom start' | 'top start' | 'right top' | 'right bottom';
61
+ }
62
+ /** A sidebar row that opens a menu: the workspace switcher at the top, the account menu at the foot. */
63
+ export declare function SidebarSwitcher({ leading, title, subtitle, menuLabel, children, onAction, selectedKey, placement, }: SidebarSwitcherProps): import("react").JSX.Element;
64
+ /** Collapses the sidebar to icons, or opens it as a Sheet on phones. */
65
+ export declare function SidebarTrigger({ className }: {
66
+ className?: string;
67
+ }): import("react").JSX.Element;
68
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/shell/sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAI5E,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAO1D,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,eAA4C,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAiB,EAAE,SAAS,EAAE,EAAE,YAAY,+BAqC/E;AAMD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAEA;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAQA;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAYA;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,+BAoBA;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE/F;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,+BAmDhG;AAED,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CACzE;AAED,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAA0B,GAC3B,EAAE,oBAAoB,+BAuDtB;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAanE"}
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, useContext, useId } from 'react';
4
+ import { Button as RACButton, Link } from 'react-aria-components';
5
+ import { ChevronsUpDown, Menu as MenuIcon, PanelLeft } from 'lucide-react';
6
+ import { cn } from '../lib/cn.js';
7
+ import { IconButton } from '../ui/icon-button.js';
8
+ import { renderIcon } from '../ui/icon.js';
9
+ import { Menu, MenuTrigger, Popover } from '../ui/menu.js';
10
+ import { Sheet } from '../ui/sheet.js';
11
+ import { Tooltip, TooltipTrigger } from '../ui/tooltip.js';
12
+ import { useShell } from './dashboard-shell.js';
13
+ const SidebarCollapsedContext = createContext(false);
14
+ /** True when the sidebar shows icons only (never inside the mobile Sheet). */
15
+ export const useSidebarCollapsed = () => useContext(SidebarCollapsedContext);
16
+ /**
17
+ * The full-height sidebar. Expanded, collapsed to icons (labels stay in the accessibility tree
18
+ * and show as tooltips), or — on phones — a Sheet opened from the header.
19
+ */
20
+ export function Sidebar({ children, label = 'Primary', className }) {
21
+ const { size, sidebarCollapsed, mobileNavOpen, setMobileNavOpen, productName, isSizeForced } = useShell();
22
+ if (size === 'mobile') {
23
+ return (_jsx(Sheet, { side: "left", isOpen: mobileNavOpen, onOpenChange: setMobileNavOpen, "aria-label": `${productName} navigation`, children: _jsx(SidebarCollapsedContext.Provider, { value: false, children: _jsx("nav", { "aria-label": label, className: "flex h-full min-h-0 flex-col text-sidebar-foreground", children: children }) }) }));
24
+ }
25
+ return (_jsx(SidebarCollapsedContext.Provider, { value: sidebarCollapsed, children: _jsx("nav", { "aria-label": label, "data-collapsed": sidebarCollapsed || undefined, style: { viewTransitionName: 'shell-sidebar' }, className: cn('group/sidebar flex h-full min-h-0 w-sidebar shrink-0 flex-col text-sidebar-foreground', 'transition-[width] duration-(--duration-panel) ease-(--ease-standard) motion-reduce:transition-none aaa:transition-none', 'data-collapsed:w-sidebar-collapsed', !isSizeForced && '@max-[48rem]/shell:hidden', className), children: children }) }));
26
+ }
27
+ // Collapsed, the padding leaves exactly one target's width: the item's target (Layer 1), not its paint.
28
+ const collapsedPad = 'group-data-collapsed/sidebar:px-[calc((var(--sidebar-width-collapsed)-max(var(--target-min),var(--nav-item-height)))/2)]';
29
+ export function SidebarHeader({ children, className, }) {
30
+ return _jsx("div", { className: cn('px-3 pt-3', collapsedPad, className), children: children });
31
+ }
32
+ export function SidebarContent({ children, className, }) {
33
+ return (_jsx("div", { className: cn('relative min-h-0 flex-1 overflow-y-auto px-3 py-3', collapsedPad, className), children: children }));
34
+ }
35
+ export function SidebarFooter({ children, className, }) {
36
+ return (_jsx("div", { className: cn('flex flex-col gap-(--nav-item-gap) border-t border-sidebar-border p-3', collapsedPad, className), children: children }));
37
+ }
38
+ /** A labelled section of nav items. The heading is visually hidden when collapsed. */
39
+ export function SidebarGroup({ label, children, className, }) {
40
+ const id = useId();
41
+ return (_jsxs("div", { role: "group", "aria-labelledby": id, className: cn('not-first:mt-4 group-data-collapsed/sidebar:not-first:mt-3 group-data-collapsed/sidebar:not-first:border-t group-data-collapsed/sidebar:not-first:border-sidebar-border group-data-collapsed/sidebar:not-first:pt-3', className), children: [_jsx("h2", { id: id, className: "mb-1 px-3 text-[13px] leading-5 font-semibold text-muted-foreground group-data-collapsed/sidebar:sr-only", children: label }), _jsx(SidebarList, { children: children })] }));
42
+ }
43
+ export function SidebarList({ children, className }) {
44
+ return _jsx("ul", { className: cn('flex flex-col gap-(--nav-item-gap)', className), children: children });
45
+ }
46
+ export function SidebarItem({ href, icon, children, isCurrent, count, onPress }) {
47
+ const collapsed = useSidebarCollapsed();
48
+ const link = (_jsx(Link, { href: href, onPress: onPress, "aria-current": isCurrent ? 'page' : undefined, className: cn(
49
+ // Layer 1: the row is the target, full width and at least --target-min tall.
50
+ 'group/item relative flex min-h-target w-full cursor-pointer items-center text-sm font-medium text-sidebar-foreground no-underline outline-none', 'group-data-collapsed/sidebar:justify-center'), children: _jsxs("span", { className: cn('relative flex min-h-nav-item w-full min-w-0 items-center gap-3 rounded-md px-3', 'group-data-hovered/item:bg-sidebar-accent group-data-hovered/item:text-sidebar-accent-foreground group-data-focus-visible/item:focus-ring', 'group-aria-[current=page]/item:bg-brand-subtle group-aria-[current=page]/item:font-bold group-aria-[current=page]/item:text-foreground', 'group-aria-[current=page]/item:before:absolute group-aria-[current=page]/item:before:inset-y-2 group-aria-[current=page]/item:before:left-0 group-aria-[current=page]/item:before:w-[3px] group-aria-[current=page]/item:before:rounded-full group-aria-[current=page]/item:before:bg-sidebar-primary', 'group-data-collapsed/sidebar:w-nav-item group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0'), children: [renderIcon(icon, 'size-5 shrink-0 group-aria-[current=page]/item:text-brand'), _jsxs("span", { className: "min-w-0 flex-1 truncate group-data-collapsed/sidebar:sr-only", children: [children, count != null && _jsxs("span", { className: "sr-only", children: [", ", count] })] }), count != null && (_jsx("span", { "aria-hidden": "true", className: "text-[13px] font-medium text-muted-foreground tabular-nums group-data-collapsed/sidebar:hidden", children: count }))] }) }));
51
+ return (_jsx("li", { children: collapsed ? (_jsxs(TooltipTrigger, { delay: 300, children: [link, _jsx(Tooltip, { placement: "right", children: count != null ? `${children} (${count})` : children })] })) : (link) }));
52
+ }
53
+ /** A sidebar row that opens a menu: the workspace switcher at the top, the account menu at the foot. */
54
+ export function SidebarSwitcher({ leading, title, subtitle, menuLabel, children, onAction, selectedKey, placement = 'bottom start', }) {
55
+ const collapsed = useSidebarCollapsed();
56
+ const name = [title, subtitle, menuLabel].filter(Boolean).join(', ');
57
+ const button = (_jsx(RACButton, { "aria-label": name, className: cn(
58
+ // Layer 1: the target. Collapsed, it keeps at least --target-min across the rail.
59
+ 'group/switcher flex min-h-target w-full min-w-target cursor-pointer items-center text-left outline-none', 'group-data-collapsed/sidebar:justify-center'), children: _jsxs("span", { className: cn('flex min-h-[calc(var(--nav-item-height)+12px)] w-full min-w-0 items-center gap-3 rounded-md px-2', 'group-data-hovered/switcher:bg-sidebar-accent group-data-pressed/switcher:bg-sidebar-accent group-data-focus-visible/switcher:focus-ring', 'group-data-collapsed/sidebar:w-nav-item group-data-collapsed/sidebar:justify-center group-data-collapsed/sidebar:px-0'), children: [leading, _jsxs("span", { className: "flex min-w-0 flex-1 flex-col group-data-collapsed/sidebar:sr-only", children: [_jsx("span", { className: "truncate text-sm leading-5 font-bold", children: title }), subtitle && (_jsx("span", { className: "truncate text-[13px] leading-5 text-muted-foreground", children: subtitle }))] }), _jsx(ChevronsUpDown, { "aria-hidden": "true", className: "size-4 shrink-0 text-muted-foreground group-data-collapsed/sidebar:hidden" })] }) }));
60
+ return (_jsxs(MenuTrigger, { children: [collapsed ? (_jsxs(TooltipTrigger, { delay: 300, children: [button, _jsx(Tooltip, { placement: "right", children: title })] })) : (button), _jsx(Popover, { placement: collapsed ? 'right top' : placement, className: "min-w-64", children: _jsx(Menu, { onAction: onAction, selectionMode: selectedKey != null ? 'single' : undefined, selectedKeys: selectedKey != null ? [selectedKey] : undefined, children: children }) })] }));
61
+ }
62
+ /** Collapses the sidebar to icons, or opens it as a Sheet on phones. */
63
+ export function SidebarTrigger({ className }) {
64
+ const { size, sidebarCollapsed, toggleSidebar, mobileNavOpen, setMobileNavOpen } = useShell();
65
+ const mobile = size === 'mobile';
66
+ return (_jsx(IconButton, { className: className, label: mobile ? 'Open navigation' : 'Toggle sidebar', icon: mobile ? MenuIcon : PanelLeft, "aria-expanded": mobile ? mobileNavOpen : !sidebarCollapsed, "aria-haspopup": mobile ? 'dialog' : undefined, onPress: () => (mobile ? setMobileNavOpen(true) : toggleSidebar()) }));
67
+ }
68
+ //# sourceMappingURL=sidebar.js.map