@hanzo/ui 8.27.10 → 8.27.12

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 (299) hide show
  1. package/dist/backends/gui/comparison.cjs +17 -21
  2. package/dist/backends/gui/comparison.d.ts +4 -5
  3. package/dist/backends/gui/comparison.d.ts.map +1 -1
  4. package/dist/backends/gui/comparison.js +18 -22
  5. package/dist/backends/gui/comparison.js.map +1 -1
  6. package/dist/backends/gui/crypto-screener.cjs +21 -31
  7. package/dist/backends/gui/crypto-screener.d.ts +20 -24
  8. package/dist/backends/gui/crypto-screener.d.ts.map +1 -1
  9. package/dist/backends/gui/crypto-screener.js +21 -31
  10. package/dist/backends/gui/crypto-screener.js.map +1 -1
  11. package/dist/backends/gui/cursor.cjs +15 -18
  12. package/dist/backends/gui/cursor.d.ts +4 -3
  13. package/dist/backends/gui/cursor.d.ts.map +1 -1
  14. package/dist/backends/gui/cursor.js +15 -18
  15. package/dist/backends/gui/cursor.js.map +1 -1
  16. package/dist/backends/gui/data-table.cjs +144 -184
  17. package/dist/backends/gui/data-table.d.ts +64 -44
  18. package/dist/backends/gui/data-table.d.ts.map +1 -1
  19. package/dist/backends/gui/data-table.js +146 -152
  20. package/dist/backends/gui/data-table.js.map +1 -1
  21. package/dist/backends/gui/dock.cjs +1 -1
  22. package/dist/backends/gui/dock.d.ts.map +1 -1
  23. package/dist/backends/gui/dock.js +1 -1
  24. package/dist/backends/gui/dock.js.map +1 -1
  25. package/dist/backends/gui/editor.cjs +35 -31
  26. package/dist/backends/gui/editor.d.ts +11 -11
  27. package/dist/backends/gui/editor.d.ts.map +1 -1
  28. package/dist/backends/gui/editor.js +35 -31
  29. package/dist/backends/gui/editor.js.map +1 -1
  30. package/dist/backends/gui/field.cjs +132 -0
  31. package/dist/backends/gui/field.d.ts +74 -0
  32. package/dist/backends/gui/field.d.ts.map +1 -0
  33. package/dist/backends/gui/field.js +121 -0
  34. package/dist/backends/gui/field.js.map +1 -0
  35. package/dist/backends/gui/gantt.cjs +17 -19
  36. package/dist/backends/gui/gantt.d.ts +4 -5
  37. package/dist/backends/gui/gantt.d.ts.map +1 -1
  38. package/dist/backends/gui/gantt.js +18 -21
  39. package/dist/backends/gui/gantt.js.map +1 -1
  40. package/dist/backends/gui/glimpse.cjs +88 -0
  41. package/dist/backends/gui/glimpse.d.ts +57 -0
  42. package/dist/backends/gui/glimpse.d.ts.map +1 -0
  43. package/dist/backends/gui/glimpse.js +81 -0
  44. package/dist/backends/gui/glimpse.js.map +1 -0
  45. package/dist/backends/gui/grid-pattern.cjs +119 -0
  46. package/dist/backends/gui/grid-pattern.d.ts +96 -0
  47. package/dist/backends/gui/grid-pattern.d.ts.map +1 -0
  48. package/dist/backends/gui/grid-pattern.js +84 -0
  49. package/dist/backends/gui/grid-pattern.js.map +1 -0
  50. package/dist/backends/gui/image-crop.cjs +35 -0
  51. package/dist/backends/gui/image-crop.d.ts +20 -0
  52. package/dist/backends/gui/image-crop.d.ts.map +1 -0
  53. package/dist/backends/gui/image-crop.js +33 -0
  54. package/dist/backends/gui/image-crop.js.map +1 -0
  55. package/dist/backends/gui/image-zoom.cjs +58 -0
  56. package/dist/backends/gui/image-zoom.d.ts +16 -0
  57. package/dist/backends/gui/image-zoom.d.ts.map +1 -0
  58. package/dist/backends/gui/image-zoom.js +56 -0
  59. package/dist/backends/gui/image-zoom.js.map +1 -0
  60. package/dist/backends/gui/index.cjs +159 -1
  61. package/dist/backends/gui/index.d.ts +49 -0
  62. package/dist/backends/gui/index.d.ts.map +1 -1
  63. package/dist/backends/gui/index.js +49 -0
  64. package/dist/backends/gui/index.js.map +1 -1
  65. package/dist/backends/gui/interactive-grid-pattern.cjs +61 -0
  66. package/dist/backends/gui/interactive-grid-pattern.d.ts +28 -0
  67. package/dist/backends/gui/interactive-grid-pattern.d.ts.map +1 -0
  68. package/dist/backends/gui/interactive-grid-pattern.js +26 -0
  69. package/dist/backends/gui/interactive-grid-pattern.js.map +1 -0
  70. package/dist/backends/gui/iphone-15-pro.cjs +83 -0
  71. package/dist/backends/gui/iphone-15-pro.d.ts +16 -0
  72. package/dist/backends/gui/iphone-15-pro.d.ts.map +1 -0
  73. package/dist/backends/gui/iphone-15-pro.js +81 -0
  74. package/dist/backends/gui/iphone-15-pro.js.map +1 -0
  75. package/dist/backends/gui/item.cjs +154 -0
  76. package/dist/backends/gui/item.d.ts +72 -0
  77. package/dist/backends/gui/item.d.ts.map +1 -0
  78. package/dist/backends/gui/item.js +143 -0
  79. package/dist/backends/gui/item.js.map +1 -0
  80. package/dist/backends/gui/kanban.cjs +247 -0
  81. package/dist/backends/gui/kanban.d.ts +37 -0
  82. package/dist/backends/gui/kanban.d.ts.map +1 -0
  83. package/dist/backends/gui/kanban.js +212 -0
  84. package/dist/backends/gui/kanban.js.map +1 -0
  85. package/dist/backends/gui/kbd.cjs +45 -0
  86. package/dist/backends/gui/kbd.d.ts +8 -0
  87. package/dist/backends/gui/kbd.d.ts.map +1 -0
  88. package/dist/backends/gui/kbd.js +42 -0
  89. package/dist/backends/gui/kbd.js.map +1 -0
  90. package/dist/backends/gui/limelight-nav.cjs +201 -0
  91. package/dist/backends/gui/limelight-nav.d.ts +20 -0
  92. package/dist/backends/gui/limelight-nav.d.ts.map +1 -0
  93. package/dist/backends/gui/limelight-nav.js +166 -0
  94. package/dist/backends/gui/limelight-nav.js.map +1 -0
  95. package/dist/backends/gui/list.cjs +26 -0
  96. package/dist/backends/gui/list.d.ts +15 -0
  97. package/dist/backends/gui/list.d.ts.map +1 -0
  98. package/dist/backends/gui/list.js +23 -0
  99. package/dist/backends/gui/list.js.map +1 -0
  100. package/dist/backends/gui/macos-dock.cjs +84 -0
  101. package/dist/backends/gui/macos-dock.d.ts +30 -0
  102. package/dist/backends/gui/macos-dock.d.ts.map +1 -0
  103. package/dist/backends/gui/macos-dock.js +82 -0
  104. package/dist/backends/gui/macos-dock.js.map +1 -0
  105. package/dist/backends/gui/magnetic.cjs +40 -0
  106. package/dist/backends/gui/magnetic.d.ts +12 -0
  107. package/dist/backends/gui/magnetic.d.ts.map +1 -0
  108. package/dist/backends/gui/magnetic.js +38 -0
  109. package/dist/backends/gui/magnetic.js.map +1 -0
  110. package/dist/backends/gui/marquee.cjs +110 -0
  111. package/dist/backends/gui/marquee.d.ts +44 -0
  112. package/dist/backends/gui/marquee.d.ts.map +1 -0
  113. package/dist/backends/gui/marquee.js +75 -0
  114. package/dist/backends/gui/marquee.js.map +1 -0
  115. package/dist/backends/gui/menu-dock.cjs +64 -0
  116. package/dist/backends/gui/menu-dock.d.ts +21 -0
  117. package/dist/backends/gui/menu-dock.d.ts.map +1 -0
  118. package/dist/backends/gui/menu-dock.js +62 -0
  119. package/dist/backends/gui/menu-dock.js.map +1 -0
  120. package/dist/backends/gui/menubar.cjs +227 -0
  121. package/dist/backends/gui/menubar.d.ts +106 -0
  122. package/dist/backends/gui/menubar.d.ts.map +1 -0
  123. package/dist/backends/gui/menubar.js +177 -0
  124. package/dist/backends/gui/menubar.js.map +1 -0
  125. package/dist/backends/gui/message-dock.cjs +111 -0
  126. package/dist/backends/gui/message-dock.d.ts +22 -0
  127. package/dist/backends/gui/message-dock.d.ts.map +1 -0
  128. package/dist/backends/gui/message-dock.js +110 -0
  129. package/dist/backends/gui/message-dock.js.map +1 -0
  130. package/dist/backends/gui/mini-calendar.cjs +25 -0
  131. package/dist/backends/gui/mini-calendar.d.ts +22 -0
  132. package/dist/backends/gui/mini-calendar.d.ts.map +1 -0
  133. package/dist/backends/gui/mini-calendar.js +24 -0
  134. package/dist/backends/gui/mini-calendar.js.map +1 -0
  135. package/dist/backends/gui/minimal-tiptap.cjs +56 -0
  136. package/dist/backends/gui/minimal-tiptap.d.ts +20 -0
  137. package/dist/backends/gui/minimal-tiptap.d.ts.map +1 -0
  138. package/dist/backends/gui/minimal-tiptap.js +21 -0
  139. package/dist/backends/gui/minimal-tiptap.js.map +1 -0
  140. package/dist/backends/gui/motion-highlight.cjs +83 -0
  141. package/dist/backends/gui/motion-highlight.d.ts +27 -0
  142. package/dist/backends/gui/motion-highlight.d.ts.map +1 -0
  143. package/dist/backends/gui/motion-highlight.js +48 -0
  144. package/dist/backends/gui/motion-highlight.js.map +1 -0
  145. package/dist/backends/gui/navigation-bar.cjs +47 -0
  146. package/dist/backends/gui/navigation-bar.d.ts +48 -0
  147. package/dist/backends/gui/navigation-bar.d.ts.map +1 -0
  148. package/dist/backends/gui/navigation-bar.js +45 -0
  149. package/dist/backends/gui/navigation-bar.js.map +1 -0
  150. package/dist/backends/gui/news-timeline.cjs +47 -0
  151. package/dist/backends/gui/news-timeline.d.ts +39 -0
  152. package/dist/backends/gui/news-timeline.d.ts.map +1 -0
  153. package/dist/backends/gui/news-timeline.js +45 -0
  154. package/dist/backends/gui/news-timeline.js.map +1 -0
  155. package/dist/backends/gui/order-entry.cjs +53 -0
  156. package/dist/backends/gui/order-entry.d.ts +21 -0
  157. package/dist/backends/gui/order-entry.d.ts.map +1 -0
  158. package/dist/backends/gui/order-entry.js +52 -0
  159. package/dist/backends/gui/order-entry.js.map +1 -0
  160. package/dist/backends/gui/orders-history.cjs +102 -0
  161. package/dist/backends/gui/orders-history.d.ts +24 -0
  162. package/dist/backends/gui/orders-history.d.ts.map +1 -0
  163. package/dist/backends/gui/orders-history.js +67 -0
  164. package/dist/backends/gui/orders-history.js.map +1 -0
  165. package/dist/backends/gui/pagination.cjs +51 -0
  166. package/dist/backends/gui/pagination.d.ts +52 -0
  167. package/dist/backends/gui/pagination.d.ts.map +1 -0
  168. package/dist/backends/gui/pagination.js +42 -0
  169. package/dist/backends/gui/pagination.js.map +1 -0
  170. package/dist/backends/gui/particles-background.cjs +135 -0
  171. package/dist/backends/gui/particles-background.d.ts +24 -0
  172. package/dist/backends/gui/particles-background.d.ts.map +1 -0
  173. package/dist/backends/gui/particles-background.js +133 -0
  174. package/dist/backends/gui/particles-background.js.map +1 -0
  175. package/dist/backends/gui/particles.cjs +145 -0
  176. package/dist/backends/gui/particles.d.ts +25 -0
  177. package/dist/backends/gui/particles.d.ts.map +1 -0
  178. package/dist/backends/gui/particles.js +143 -0
  179. package/dist/backends/gui/particles.js.map +1 -0
  180. package/dist/backends/gui/pill.cjs +82 -0
  181. package/dist/backends/gui/pill.d.ts +12 -0
  182. package/dist/backends/gui/pill.d.ts.map +1 -0
  183. package/dist/backends/gui/pill.js +78 -0
  184. package/dist/backends/gui/pill.js.map +1 -0
  185. package/dist/backends/gui/pin-list.cjs +82 -0
  186. package/dist/backends/gui/pin-list.d.ts +42 -0
  187. package/dist/backends/gui/pin-list.d.ts.map +1 -0
  188. package/dist/backends/gui/pin-list.js +80 -0
  189. package/dist/backends/gui/pin-list.js.map +1 -0
  190. package/dist/backends/gui/pixel-image.cjs +63 -0
  191. package/dist/backends/gui/pixel-image.d.ts +21 -0
  192. package/dist/backends/gui/pixel-image.d.ts.map +1 -0
  193. package/dist/backends/gui/pixel-image.js +61 -0
  194. package/dist/backends/gui/pixel-image.js.map +1 -0
  195. package/dist/backends/gui/positions-list.cjs +60 -0
  196. package/dist/backends/gui/positions-list.d.ts +14 -0
  197. package/dist/backends/gui/positions-list.d.ts.map +1 -0
  198. package/dist/backends/gui/positions-list.js +58 -0
  199. package/dist/backends/gui/positions-list.js.map +1 -0
  200. package/dist/backends/gui/qr-code.cjs +438 -0
  201. package/dist/backends/gui/qr-code.d.ts +42 -0
  202. package/dist/backends/gui/qr-code.d.ts.map +1 -0
  203. package/dist/backends/gui/qr-code.js +402 -0
  204. package/dist/backends/gui/qr-code.js.map +1 -0
  205. package/dist/backends/gui/relative-time.cjs +167 -0
  206. package/dist/backends/gui/relative-time.d.ts +10 -0
  207. package/dist/backends/gui/relative-time.d.ts.map +1 -0
  208. package/dist/backends/gui/relative-time.js +132 -0
  209. package/dist/backends/gui/relative-time.js.map +1 -0
  210. package/dist/backends/gui/safari.cjs +65 -0
  211. package/dist/backends/gui/safari.d.ts +23 -0
  212. package/dist/backends/gui/safari.d.ts.map +1 -0
  213. package/dist/backends/gui/safari.js +63 -0
  214. package/dist/backends/gui/safari.js.map +1 -0
  215. package/dist/backends/gui/snippet.cjs +144 -0
  216. package/dist/backends/gui/snippet.d.ts +38 -0
  217. package/dist/backends/gui/snippet.d.ts.map +1 -0
  218. package/dist/backends/gui/snippet.js +141 -0
  219. package/dist/backends/gui/snippet.js.map +1 -0
  220. package/dist/backends/gui/stars-scrolling-wheel.cjs +106 -0
  221. package/dist/backends/gui/stars-scrolling-wheel.d.ts +24 -0
  222. package/dist/backends/gui/stars-scrolling-wheel.d.ts.map +1 -0
  223. package/dist/backends/gui/stars-scrolling-wheel.js +104 -0
  224. package/dist/backends/gui/stars-scrolling-wheel.js.map +1 -0
  225. package/dist/backends/gui/status.cjs +79 -0
  226. package/dist/backends/gui/status.d.ts +15 -0
  227. package/dist/backends/gui/status.d.ts.map +1 -0
  228. package/dist/backends/gui/status.js +77 -0
  229. package/dist/backends/gui/status.js.map +1 -0
  230. package/dist/backends/gui/stock-market.cjs +21 -0
  231. package/dist/backends/gui/stock-market.d.ts +17 -0
  232. package/dist/backends/gui/stock-market.d.ts.map +1 -0
  233. package/dist/backends/gui/stock-market.js +19 -0
  234. package/dist/backends/gui/stock-market.js.map +1 -0
  235. package/dist/backends/gui/stock-screener.cjs +55 -0
  236. package/dist/backends/gui/stock-screener.d.ts +41 -0
  237. package/dist/backends/gui/stock-screener.d.ts.map +1 -0
  238. package/dist/backends/gui/stock-screener.js +53 -0
  239. package/dist/backends/gui/stock-screener.js.map +1 -0
  240. package/dist/backends/gui/symbol-info.cjs +46 -0
  241. package/dist/backends/gui/symbol-info.d.ts +36 -0
  242. package/dist/backends/gui/symbol-info.d.ts.map +1 -0
  243. package/dist/backends/gui/symbol-info.js +44 -0
  244. package/dist/backends/gui/symbol-info.js.map +1 -0
  245. package/dist/backends/gui/table.cjs +104 -0
  246. package/dist/backends/gui/table.d.ts +57 -0
  247. package/dist/backends/gui/table.d.ts.map +1 -0
  248. package/dist/backends/gui/table.js +95 -0
  249. package/dist/backends/gui/table.js.map +1 -0
  250. package/dist/backends/gui/tags.cjs +22 -0
  251. package/dist/backends/gui/tags.d.ts +22 -0
  252. package/dist/backends/gui/tags.d.ts.map +1 -0
  253. package/dist/backends/gui/tags.js +20 -0
  254. package/dist/backends/gui/tags.js.map +1 -0
  255. package/dist/backends/gui/technical-analysis.cjs +58 -0
  256. package/dist/backends/gui/technical-analysis.d.ts +41 -0
  257. package/dist/backends/gui/technical-analysis.d.ts.map +1 -0
  258. package/dist/backends/gui/technical-analysis.js +56 -0
  259. package/dist/backends/gui/technical-analysis.js.map +1 -0
  260. package/dist/backends/gui/terminal.cjs +266 -0
  261. package/dist/backends/gui/terminal.d.ts +38 -0
  262. package/dist/backends/gui/terminal.d.ts.map +1 -0
  263. package/dist/backends/gui/terminal.js +231 -0
  264. package/dist/backends/gui/terminal.js.map +1 -0
  265. package/dist/backends/gui/ticker.cjs +79 -0
  266. package/dist/backends/gui/ticker.d.ts +19 -0
  267. package/dist/backends/gui/ticker.d.ts.map +1 -0
  268. package/dist/backends/gui/ticker.js +44 -0
  269. package/dist/backends/gui/ticker.js.map +1 -0
  270. package/dist/backends/gui/timeline.cjs +154 -0
  271. package/dist/backends/gui/timeline.d.ts +42 -0
  272. package/dist/backends/gui/timeline.d.ts.map +1 -0
  273. package/dist/backends/gui/timeline.js +118 -0
  274. package/dist/backends/gui/timeline.js.map +1 -0
  275. package/dist/backends/gui/toggle.cjs +96 -0
  276. package/dist/backends/gui/toggle.d.ts +29 -0
  277. package/dist/backends/gui/toggle.d.ts.map +1 -0
  278. package/dist/backends/gui/toggle.js +95 -0
  279. package/dist/backends/gui/toggle.js.map +1 -0
  280. package/dist/backends/gui/video-player.cjs +383 -0
  281. package/dist/backends/gui/video-player.d.ts +54 -0
  282. package/dist/backends/gui/video-player.d.ts.map +1 -0
  283. package/dist/backends/gui/video-player.js +348 -0
  284. package/dist/backends/gui/video-player.js.map +1 -0
  285. package/dist/gallery.html +249 -249
  286. package/dist/gui-config.cjs +5 -0
  287. package/dist/gui-config.d.ts +18 -3
  288. package/dist/gui-config.d.ts.map +1 -1
  289. package/dist/gui-config.js +5 -0
  290. package/dist/gui-config.js.map +1 -1
  291. package/dist/index.cjs +110 -1
  292. package/dist/index.d.ts +1 -1
  293. package/dist/index.d.ts.map +1 -1
  294. package/dist/index.js +1 -1
  295. package/dist/index.js.map +1 -1
  296. package/dist/index.node.cjs +110 -1
  297. package/dist/index.node.js +1 -1
  298. package/dist/styles.css +124 -124
  299. package/package.json +1 -1
@@ -0,0 +1,212 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Kanban — a board of columns holding draggable cards, with search, column
5
+ * limits, labels, priority, assignee and due date, and a create/edit dialog.
6
+ *
7
+ * The board is controlled: callers hold `KanbanBoardData` and pass it down
8
+ * with `onUpdateBoard`, so every mutation (drag, add, edit, delete) computes
9
+ * the next board and hands it back rather than mutating in place. Drag and
10
+ * drop is native HTML5 drag events (`draggable`, `dataTransfer`) gated by
11
+ * `isWeb`, the same split `dropzone.tsx` uses for file drops — there is no
12
+ * `@dnd-kit` in this workspace and none is needed for a same-tab reorder.
13
+ */
14
+ import { SizableText, XStack, YStack, isWeb, styled } from '@hanzo/gui';
15
+ import { Calendar, MoreHorizontal, Plus, Search, User, X } from '@hanzogui/lucide-icons-2';
16
+ import * as React from 'react';
17
+ import { Badge } from './badge.js';
18
+ import { Button } from './button.js';
19
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from './dialog.js';
20
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './dropdown-menu.js';
21
+ import { ink } from './ink.js';
22
+ import { Input } from './input.js';
23
+ import { Label } from './label.js';
24
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './select.js';
25
+ import { slot } from './slot.js';
26
+ import { Textarea } from './textarea.js';
27
+ import { sx } from '../../sx.js';
28
+ const PRIORITY_COLOR = {
29
+ low: '$blue9',
30
+ medium: '$yellow9',
31
+ high: '$orange9',
32
+ urgent: '$red9',
33
+ };
34
+ /** Move a card from its column to `toColumnId`, optionally before `beforeId`. */
35
+ const moveCard = (board, drag, toColumnId, beforeId) => {
36
+ const from = board.columns.find((col) => col.id === drag.columnId);
37
+ const card = from?.cards.find((c) => c.id === drag.cardId);
38
+ if (!from || !card)
39
+ return board;
40
+ const to = board.columns.find((col) => col.id === toColumnId);
41
+ if (!to)
42
+ return board;
43
+ if (from.id !== to.id && to.limit && to.cards.length >= to.limit)
44
+ return board;
45
+ return {
46
+ ...board,
47
+ columns: board.columns.map((col) => {
48
+ if (col.id === from.id && col.id === to.id) {
49
+ const rest = col.cards.filter((c) => c.id !== card.id);
50
+ const at = beforeId ? rest.findIndex((c) => c.id === beforeId) : rest.length;
51
+ const index = at < 0 ? rest.length : at;
52
+ return { ...col, cards: [...rest.slice(0, index), card, ...rest.slice(index)] };
53
+ }
54
+ if (col.id === from.id)
55
+ return { ...col, cards: col.cards.filter((c) => c.id !== card.id) };
56
+ if (col.id === to.id) {
57
+ const at = beforeId ? col.cards.findIndex((c) => c.id === beforeId) : col.cards.length;
58
+ const index = at < 0 ? col.cards.length : at;
59
+ return { ...col, cards: [...col.cards.slice(0, index), card, ...col.cards.slice(index)] };
60
+ }
61
+ return col;
62
+ }),
63
+ };
64
+ };
65
+ const matches = (card, query) => {
66
+ const q = query.toLowerCase();
67
+ return (card.title.toLowerCase().includes(q) ||
68
+ (card.description?.toLowerCase().includes(q) ?? false) ||
69
+ (card.labels?.some((label) => label.name.toLowerCase().includes(q)) ?? false));
70
+ };
71
+ const BoardFrame = styled(YStack, { name: 'Kanban', flex: 1, height: '100%' });
72
+ const ColumnFrame = styled(YStack, {
73
+ name: 'KanbanColumn',
74
+ bg: '$raised',
75
+ rounded: '$4',
76
+ p: '$4',
77
+ minW: 280,
78
+ maxW: 280,
79
+ gap: '$3',
80
+ variants: {
81
+ over: { true: { borderColor: '$borderColor', borderWidth: 1 } },
82
+ },
83
+ });
84
+ const CardFrame = styled(YStack, {
85
+ name: 'KanbanCard',
86
+ bg: '$background',
87
+ borderWidth: 1,
88
+ borderColor: '$borderColor',
89
+ rounded: '$4',
90
+ p: '$3',
91
+ gap: '$2',
92
+ cursor: 'grab',
93
+ variants: {
94
+ dragging: { true: { opacity: 0.5 } },
95
+ },
96
+ });
97
+ function KanbanCardView({ card, drag, onDragStart, onDragEnd, onDropBefore, onEdit, onDelete, }) {
98
+ return (_jsxs(CardFrame, { ...slot('kanban-card'), "data-card-id": card.id, dragging: drag?.cardId === card.id, ...(isWeb
99
+ ? {
100
+ draggable: true,
101
+ onDragStart,
102
+ onDragEnd,
103
+ onDragOver: (e) => e.preventDefault(),
104
+ onDrop: (e) => {
105
+ e.preventDefault();
106
+ e.stopPropagation();
107
+ onDropBefore(e);
108
+ },
109
+ }
110
+ : null), children: [_jsxs(XStack, { justify: "space-between", items: "flex-start", gap: "$2", children: [ink(card.title, SizableText, { fontWeight: '600', fontSize: '$3', flex: 1 }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { ...slot('kanban-card-menu'), variant: "ghost", size: "icon-sm", "aria-label": "Card actions", children: _jsx(MoreHorizontal, { size: 14 }) }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuItem, { onSelect: onEdit, children: "Edit" }), _jsx(DropdownMenuItem, { variant: "destructive", onSelect: onDelete, children: "Delete" })] })] })] }), card.description ? ink(card.description, SizableText, { fontSize: '$1', color: '$quiet' }) : null, card.labels && card.labels.length > 0 ? (_jsx(XStack, { gap: "$1", flexWrap: "wrap", children: card.labels.map((label) => (_jsx(Badge, { variant: "outline", style: { borderColor: label.color, color: label.color }, children: label.name }, label.id))) })) : null, _jsxs(XStack, { justify: "space-between", items: "center", children: [_jsxs(XStack, { gap: "$2", items: "center", children: [card.priority ? (_jsx(Badge, { ...slot('kanban-card-priority'), variant: "outline", style: { borderColor: PRIORITY_COLOR[card.priority], color: PRIORITY_COLOR[card.priority] }, children: card.priority })) : null, card.assignee ? (_jsxs(XStack, { gap: "$1", items: "center", children: [_jsx(User, { size: 12, color: "$quiet" }), ink(card.assignee, SizableText, { fontSize: '$1', color: '$quiet' })] })) : null] }), card.dueDate ? (_jsxs(XStack, { gap: "$1", items: "center", children: [_jsx(Calendar, { size: 12, color: "$quiet" }), ink(new Date(card.dueDate).toLocaleDateString(), SizableText, { fontSize: '$1', color: '$quiet' })] })) : null] })] }));
111
+ }
112
+ function KanbanColumnView({ column, drag, onDragStart, onDragEnd, onDropOn, onAddCard, onEditCard, onDeleteCard, }) {
113
+ const full = column.limit != null && column.cards.length >= column.limit;
114
+ return (_jsxs(ColumnFrame, { ...slot('kanban-column'), "data-column-id": column.id, ...(isWeb
115
+ ? {
116
+ onDragOver: (e) => e.preventDefault(),
117
+ onDrop: onDropOn(column.id),
118
+ }
119
+ : null), children: [_jsxs(XStack, { justify: "space-between", items: "center", children: [_jsxs(XStack, { gap: "$2", items: "center", children: [ink(column.title, SizableText, { fontWeight: '600', fontSize: '$3' }), _jsx(Badge, { variant: "secondary", children: column.limit != null ? `${column.cards.length}/${column.limit}` : column.cards.length })] }), _jsx(Button, { ...slot('kanban-add-card'), variant: "ghost", size: "icon-sm", "aria-label": `Add card to ${column.title}`, disabled: full, onPress: onAddCard, children: _jsx(Plus, { size: 14 }) })] }), _jsx(YStack, { gap: "$3", minH: 40, children: column.cards.map((card) => (_jsx(KanbanCardView, { card: card, drag: drag, onDragStart: onDragStart(card), onDragEnd: onDragEnd, onDropBefore: onDropOn(column.id, card.id), onEdit: () => onEditCard(card), onDelete: () => onDeleteCard(card.id) }, card.id))) })] }));
120
+ }
121
+ function KanbanCardDialog({ open, onOpenChange, card, labels, onSave, }) {
122
+ const [title, setTitle] = React.useState(card?.title ?? '');
123
+ const [description, setDescription] = React.useState(card?.description ?? '');
124
+ const [priority, setPriority] = React.useState(card?.priority ?? 'low');
125
+ const [assignee, setAssignee] = React.useState(card?.assignee ?? '');
126
+ const [dueDate, setDueDate] = React.useState(card?.dueDate ?? '');
127
+ React.useEffect(() => {
128
+ setTitle(card?.title ?? '');
129
+ setDescription(card?.description ?? '');
130
+ setPriority(card?.priority ?? 'low');
131
+ setAssignee(card?.assignee ?? '');
132
+ setDueDate(card?.dueDate ?? '');
133
+ }, [card, open]);
134
+ const submit = (e) => {
135
+ e.preventDefault();
136
+ if (!title.trim())
137
+ return;
138
+ onSave({ title, description, priority, assignee, dueDate, labels: card?.labels });
139
+ onOpenChange(false);
140
+ };
141
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { ...slot('kanban-card-dialog'), children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: card ? 'Edit Card' : 'Create Card' }), _jsx(DialogDescription, { children: card ? 'Update the card details below.' : 'Create a new card for your kanban board.' })] }), _jsxs("form", { onSubmit: submit, children: [_jsxs(YStack, { gap: "$3", children: [_jsxs(YStack, { gap: "$1", children: [_jsx(Label, { htmlFor: "kanban-title", children: "Title" }), _jsx(Input, { id: "kanban-title", value: title, onChangeText: setTitle, placeholder: "Card title" })] }), _jsxs(YStack, { gap: "$1", children: [_jsx(Label, { htmlFor: "kanban-description", children: "Description" }), _jsx(Textarea, { id: "kanban-description", value: description, onChangeText: setDescription, rows: 3 })] }), _jsxs(XStack, { gap: "$3", children: [_jsxs(YStack, { gap: "$1", flex: 1, children: [_jsx(Label, { children: "Priority" }), _jsxs(Select, { value: priority, onValueChange: (v) => setPriority(v), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "low", children: "Low" }), _jsx(SelectItem, { value: "medium", children: "Medium" }), _jsx(SelectItem, { value: "high", children: "High" }), _jsx(SelectItem, { value: "urgent", children: "Urgent" })] })] })] }), _jsxs(YStack, { gap: "$1", flex: 1, children: [_jsx(Label, { htmlFor: "kanban-assignee", children: "Assignee" }), _jsx(Input, { id: "kanban-assignee", value: assignee, onChangeText: setAssignee, placeholder: "Assign to..." })] })] }), _jsxs(YStack, { gap: "$1", children: [_jsx(Label, { htmlFor: "kanban-due", children: "Due date" }), _jsx(Input, { id: "kanban-due", type: "date", value: dueDate, onChangeText: setDueDate })] })] }), _jsxs(DialogFooter, { mt: "$4", children: [_jsx(Button, { type: "button", variant: "outline", onPress: () => onOpenChange(false), children: "Cancel" }), _jsxs(Button, { type: "submit", children: [card ? 'Update' : 'Create', " Card"] })] })] })] }) }));
142
+ }
143
+ export function KanbanBoard({ board, onUpdateBoard, className }) {
144
+ const [query, setQuery] = React.useState('');
145
+ const [drag, setDrag] = React.useState(null);
146
+ const [dialogOpen, setDialogOpen] = React.useState(false);
147
+ const [editingCard, setEditingCard] = React.useState(undefined);
148
+ const [targetColumnId, setTargetColumnId] = React.useState('');
149
+ const shown = React.useMemo(() => query.trim()
150
+ ? { ...board, columns: board.columns.map((col) => ({ ...col, cards: col.cards.filter((c) => matches(c, query)) })) }
151
+ : board, [board, query]);
152
+ const onDragStart = (card) => (e) => {
153
+ const columnId = board.columns.find((col) => col.cards.some((c) => c.id === card.id))?.id ?? '';
154
+ setDrag({ cardId: card.id, columnId });
155
+ e.dataTransfer.effectAllowed = 'move';
156
+ e.dataTransfer.setData('text/plain', card.id);
157
+ };
158
+ const onDragEnd = () => setDrag(null);
159
+ const onDropOn = (columnId, beforeId) => (e) => {
160
+ e.preventDefault();
161
+ if (!drag)
162
+ return;
163
+ const next = moveCard(board, drag, columnId, beforeId);
164
+ if (next !== board)
165
+ onUpdateBoard(next);
166
+ setDrag(null);
167
+ };
168
+ const openAdd = (columnId) => {
169
+ setTargetColumnId(columnId);
170
+ setEditingCard(undefined);
171
+ setDialogOpen(true);
172
+ };
173
+ const openEdit = (card) => {
174
+ setEditingCard(card);
175
+ setTargetColumnId('');
176
+ setDialogOpen(true);
177
+ };
178
+ const deleteCard = (cardId) => onUpdateBoard({
179
+ ...board,
180
+ columns: board.columns.map((col) => ({ ...col, cards: col.cards.filter((c) => c.id !== cardId) })),
181
+ });
182
+ const saveCard = (data) => {
183
+ const now = new Date().toISOString();
184
+ if (editingCard) {
185
+ onUpdateBoard({
186
+ ...board,
187
+ columns: board.columns.map((col) => ({
188
+ ...col,
189
+ cards: col.cards.map((c) => (c.id === editingCard.id ? { ...c, ...data, updatedAt: now } : c)),
190
+ })),
191
+ });
192
+ return;
193
+ }
194
+ const card = {
195
+ id: `card-${Date.now()}`,
196
+ title: data.title ?? '',
197
+ description: data.description,
198
+ priority: data.priority,
199
+ assignee: data.assignee,
200
+ dueDate: data.dueDate,
201
+ labels: data.labels,
202
+ createdAt: now,
203
+ updatedAt: now,
204
+ };
205
+ onUpdateBoard({
206
+ ...board,
207
+ columns: board.columns.map((col) => (col.id === targetColumnId ? { ...col, cards: [...col.cards, card] } : col)),
208
+ });
209
+ };
210
+ return (_jsxs(BoardFrame, { ...slot('kanban'), ...sx(className), children: [_jsxs(XStack, { ...slot('kanban-header'), justify: "space-between", items: "center", p: "$4", borderBottomWidth: 1, borderColor: "$borderColor", children: [ink(board.title, SizableText, { fontSize: '$6', fontWeight: '700' }), _jsxs(XStack, { position: "relative", width: 256, items: "center", children: [_jsx(XStack, { position: "absolute", l: "$2", pointerEvents: "none", children: _jsx(Search, { size: 14, color: "$quiet" }) }), _jsx(Input, { ...slot('kanban-search'), placeholder: "Search cards...", value: query, onChangeText: setQuery, pl: "$7" }), query ? (_jsx(XStack, { position: "absolute", r: "$2", cursor: "pointer", onPress: () => setQuery(''), "aria-label": "Clear search", children: _jsx(X, { size: 14 }) })) : null] })] }), _jsx(XStack, { ...slot('kanban-board'), gap: "$4", p: "$4", flex: 1, overflow: "scroll", children: shown.columns.map((column) => (_jsx(KanbanColumnView, { column: column, drag: drag, onDragStart: onDragStart, onDragEnd: onDragEnd, onDropOn: onDropOn, onAddCard: () => openAdd(column.id), onEditCard: openEdit, onDeleteCard: deleteCard }, column.id))) }), _jsx(KanbanCardDialog, { open: dialogOpen, onOpenChange: setDialogOpen, card: editingCard, labels: board.labels, onSave: saveCard })] }));
211
+ }
212
+ //# sourceMappingURL=kanban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban.js","sourceRoot":"","sources":["../../../src/backends/gui/kanban.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Kbd = Kbd;
5
+ exports.KbdGroup = KbdGroup;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * Kbd — a keyboard key rendered as text, for documenting a shortcut inline
9
+ * with a sentence, inside a `Button`, or inside a `Tooltip`.
10
+ *
11
+ * `KbdGroup` sets several keys side by side (`Ctrl` `B`) with a small gap and
12
+ * no separator glyph — the spacing alone reads as a chord.
13
+ */
14
+ const gui_1 = require("@hanzo/gui");
15
+ const ink_1 = require("./ink.cjs");
16
+ const HEIGHT = 20;
17
+ const KbdFrame = (0, gui_1.styled)(gui_1.XStack, {
18
+ name: 'Kbd',
19
+ render: 'kbd',
20
+ display: 'inline-flex',
21
+ pointerEvents: 'none',
22
+ style: { userSelect: 'none' },
23
+ items: 'center',
24
+ justify: 'center',
25
+ gap: '$1',
26
+ height: HEIGHT,
27
+ minW: HEIGHT,
28
+ px: '$1',
29
+ rounded: '$1',
30
+ bg: '$hover',
31
+ });
32
+ const KbdText = (0, gui_1.styled)(gui_1.SizableText, {
33
+ name: 'KbdText',
34
+ size: '$1',
35
+ fontWeight: '500',
36
+ color: '$quiet',
37
+ });
38
+ /** One keyboard key, e.g. `<Kbd>Ctrl</Kbd>`. */
39
+ function Kbd({ children, ...props }) {
40
+ return ((0, jsx_runtime_1.jsx)(KbdFrame, { "data-slot": "kbd", ...props, children: (0, ink_1.ink)(children, KbdText) }));
41
+ }
42
+ /** A chord: several `Kbd` keys laid out together, e.g. `Ctrl` + `B`. */
43
+ function KbdGroup({ children, ...props }) {
44
+ return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "kbd-group", render: "kbd", display: "inline-flex", items: "center", gap: "$1", ...props, children: children }));
45
+ }
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ export type KbdProps = React.ComponentProps<'kbd'>;
3
+ /** One keyboard key, e.g. `<Kbd>Ctrl</Kbd>`. */
4
+ export declare function Kbd({ children, ...props }: KbdProps): React.JSX.Element;
5
+ export type KbdGroupProps = React.ComponentProps<'kbd'>;
6
+ /** A chord: several `Kbd` keys laid out together, e.g. `Ctrl` + `B`. */
7
+ export declare function KbdGroup({ children, ...props }: KbdGroupProps): React.JSX.Element;
8
+ //# sourceMappingURL=kbd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/kbd.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA4B9B,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AAElD,gDAAgD;AAChD,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,qBAMnD;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;AAEvD,wEAAwE;AACxE,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAa7D"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Kbd — a keyboard key rendered as text, for documenting a shortcut inline
5
+ * with a sentence, inside a `Button`, or inside a `Tooltip`.
6
+ *
7
+ * `KbdGroup` sets several keys side by side (`Ctrl` `B`) with a small gap and
8
+ * no separator glyph — the spacing alone reads as a chord.
9
+ */
10
+ import { SizableText, XStack, styled } from '@hanzo/gui';
11
+ import { ink } from './ink.js';
12
+ const HEIGHT = 20;
13
+ const KbdFrame = styled(XStack, {
14
+ name: 'Kbd',
15
+ render: 'kbd',
16
+ display: 'inline-flex',
17
+ pointerEvents: 'none',
18
+ style: { userSelect: 'none' },
19
+ items: 'center',
20
+ justify: 'center',
21
+ gap: '$1',
22
+ height: HEIGHT,
23
+ minW: HEIGHT,
24
+ px: '$1',
25
+ rounded: '$1',
26
+ bg: '$hover',
27
+ });
28
+ const KbdText = styled(SizableText, {
29
+ name: 'KbdText',
30
+ size: '$1',
31
+ fontWeight: '500',
32
+ color: '$quiet',
33
+ });
34
+ /** One keyboard key, e.g. `<Kbd>Ctrl</Kbd>`. */
35
+ export function Kbd({ children, ...props }) {
36
+ return (_jsx(KbdFrame, { "data-slot": "kbd", ...props, children: ink(children, KbdText) }));
37
+ }
38
+ /** A chord: several `Kbd` keys laid out together, e.g. `Ctrl` + `B`. */
39
+ export function KbdGroup({ children, ...props }) {
40
+ return (_jsx(XStack, { "data-slot": "kbd-group", render: "kbd", display: "inline-flex", items: "center", gap: "$1", ...props, children: children }));
41
+ }
42
+ //# sourceMappingURL=kbd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.js","sourceRoot":"","sources":["../../../src/backends/gui/kbd.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE;IAC9B,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,MAAM;IACrB,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IAC7B,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;IACR,OAAO,EAAE,IAAI;IACb,EAAE,EAAE,QAAQ;CACb,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE;IAClC,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,QAAQ;CAChB,CAAC,CAAA;AAIF,gDAAgD;AAChD,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAY;IAClD,OAAO,CACL,KAAC,QAAQ,iBAAW,KAAK,KAAM,KAA+C,YAC3E,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GACd,CACZ,CAAA;AACH,CAAC;AAID,wEAAwE;AACxE,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiB;IAC5D,OAAO,CACL,KAAC,MAAM,iBACK,WAAW,EACrB,MAAM,EAAC,KAAK,EACZ,OAAO,EAAC,aAAa,EACrB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,KACH,KAA6C,YAEjD,QAAQ,GACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,201 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.LimelightNav = LimelightNav;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ /**
40
+ * LimelightNav — a row of items with a glowing highlight that slides to
41
+ * whichever one is active, plus a small beam of light hanging above it, the
42
+ * way a spotlight follows a performer across a stage.
43
+ *
44
+ * The glow's position is a plain `getBoundingClientRect()` measurement of the
45
+ * active item relative to the rail, applied as a CSS `transform`/`width`
46
+ * transition — the same technique `AnimatedBeam` and `Dock` already use in
47
+ * this backend, so no animation library is pulled in for one moving pill. It
48
+ * remeasures on resize via `ResizeObserver` and whenever the active item
49
+ * changes.
50
+ *
51
+ * `variant="floating"` is a self-sizing rounded pill, the shape a command bar
52
+ * or a segmented control takes. `variant="bar"` spans the full width with a
53
+ * bottom hairline, the shape a page's primary navigation takes.
54
+ */
55
+ const gui_1 = require("@hanzo/gui");
56
+ const React = __importStar(require("react"));
57
+ const ink_1 = require("./ink.cjs");
58
+ const slot_1 = require("./slot.cjs");
59
+ const gesture_1 = require("./gesture.cjs");
60
+ const ITEM_H = 40;
61
+ /** The DOM box behind a ref, if there is one; a native view has none. */
62
+ const box = (el) => typeof HTMLElement !== 'undefined' && el instanceof HTMLElement ? el : null;
63
+ const Rail = (0, gui_1.styled)(gui_1.XStack, {
64
+ name: 'LimelightNavRail',
65
+ position: 'relative',
66
+ items: 'center',
67
+ gap: '$1',
68
+ rounded: '$6',
69
+ bg: '$hover',
70
+ p: '$1',
71
+ self: 'flex-start',
72
+ variants: {
73
+ variant: {
74
+ floating: {},
75
+ bar: {
76
+ rounded: 0,
77
+ bg: 'transparent',
78
+ borderBottomWidth: 1,
79
+ borderColor: '$borderColor',
80
+ width: '100%',
81
+ self: 'stretch',
82
+ justify: 'flex-start',
83
+ gap: '$4',
84
+ px: '$4',
85
+ py: 0,
86
+ },
87
+ },
88
+ },
89
+ defaultVariants: { variant: 'floating' },
90
+ });
91
+ const Item = (0, gui_1.styled)(gui_1.XStack, {
92
+ name: 'LimelightNavItem',
93
+ items: 'center',
94
+ justify: 'center',
95
+ gap: '$1.5',
96
+ px: '$3',
97
+ height: ITEM_H,
98
+ rounded: '$5',
99
+ cursor: 'pointer',
100
+ hoverStyle: { opacity: 0.85 },
101
+ style: { zIndex: 1 },
102
+ });
103
+ const Glow = (0, gui_1.styled)(gui_1.YStack, {
104
+ name: 'LimelightNavGlow',
105
+ position: 'absolute',
106
+ l: 0,
107
+ rounded: '$5',
108
+ bg: '$accentBackground',
109
+ pointerEvents: 'none',
110
+ style: { zIndex: 0 },
111
+ variants: {
112
+ variant: {
113
+ floating: { t: '$1', b: '$1' },
114
+ bar: { t: 0, b: 0, rounded: 0, borderBottomWidth: 2, borderColor: '$accentColor', bg: 'transparent' },
115
+ },
116
+ },
117
+ defaultVariants: { variant: 'floating' },
118
+ });
119
+ /** A small beam of light hanging above the active item, floating variant only. */
120
+ const Beam = (0, gui_1.styled)(gui_1.YStack, {
121
+ name: 'LimelightNavBeam',
122
+ position: 'absolute',
123
+ l: 0,
124
+ height: 6,
125
+ rounded: 999,
126
+ bg: '$accentBackground',
127
+ pointerEvents: 'none',
128
+ style: { top: -10, zIndex: 0, filter: 'blur(4px)' },
129
+ });
130
+ function LimelightNav({ items, value, defaultValue, onValueChange, variant = 'floating', ...props }) {
131
+ const [own, setOwn] = React.useState(defaultValue ?? items[0]?.id);
132
+ const active = value ?? own;
133
+ const railRef = React.useRef(null);
134
+ const itemRefs = React.useRef(new Map());
135
+ const [rect, setRect] = React.useState({ left: 0, width: 0 });
136
+ const measure = React.useCallback(() => {
137
+ const rail = box(railRef.current);
138
+ const el = active ? itemRefs.current.get(active) : undefined;
139
+ if (!rail || !el)
140
+ return;
141
+ const railBox = rail.getBoundingClientRect();
142
+ const itemBox = el.getBoundingClientRect();
143
+ setRect((prev) => {
144
+ const next = { left: itemBox.left - railBox.left, width: itemBox.width };
145
+ return prev.left === next.left && prev.width === next.width ? prev : next;
146
+ });
147
+ }, [active]);
148
+ React.useLayoutEffect(() => {
149
+ measure();
150
+ }, [measure, items.length, variant]);
151
+ React.useEffect(() => {
152
+ const rail = box(railRef.current);
153
+ if (!rail || typeof ResizeObserver === 'undefined') {
154
+ window.addEventListener('resize', measure);
155
+ return () => window.removeEventListener('resize', measure);
156
+ }
157
+ const observer = new ResizeObserver(measure);
158
+ observer.observe(rail);
159
+ return () => observer.disconnect();
160
+ }, [measure]);
161
+ const select = (id) => {
162
+ if (value === undefined)
163
+ setOwn(id);
164
+ onValueChange?.(id);
165
+ };
166
+ /** Roving-tabindex arrow/Home/End navigation, per the WAI-ARIA tabs pattern. */
167
+ const onKeyDown = (e) => {
168
+ const from = items.findIndex((item) => item.id === active);
169
+ if (from < 0)
170
+ return;
171
+ const to = e.key === 'ArrowRight' || e.key === 'ArrowDown'
172
+ ? (from + 1) % items.length
173
+ : e.key === 'ArrowLeft' || e.key === 'ArrowUp'
174
+ ? (from - 1 + items.length) % items.length
175
+ : e.key === 'Home'
176
+ ? 0
177
+ : e.key === 'End'
178
+ ? items.length - 1
179
+ : -1;
180
+ if (to < 0)
181
+ return;
182
+ e.preventDefault();
183
+ const next = items[to];
184
+ select(next.id);
185
+ itemRefs.current.get(next.id)?.focus();
186
+ };
187
+ return ((0, jsx_runtime_1.jsxs)(Rail, { ref: railRef, ...(0, slot_1.slot)('limelight-nav'), role: "tablist", "aria-label": props['aria-label'] ?? 'Navigation', variant: variant, children: [variant === 'floating' && ((0, jsx_runtime_1.jsx)(Beam, { ...(0, slot_1.slot)('limelight-nav-beam'), style: { transform: `translateX(${rect.left}px)`, width: rect.width, transition: 'transform 200ms ease, width 200ms ease' } })), (0, jsx_runtime_1.jsx)(Glow, { ...(0, slot_1.slot)('limelight-nav-glow'), variant: variant, style: { transform: `translateX(${rect.left}px)`, width: rect.width, transition: 'transform 200ms ease, width 200ms ease' } }), items.map((item) => {
188
+ const isActive = item.id === active;
189
+ return ((0, jsx_runtime_1.jsxs)(Item, { ref: (node) => {
190
+ const el = box(node);
191
+ if (el)
192
+ itemRefs.current.set(item.id, el);
193
+ else
194
+ itemRefs.current.delete(item.id);
195
+ }, ...(0, slot_1.slot)('limelight-nav-item'), render: item.href ? 'a' : 'button', ...(item.href ? { href: item.href } : { type: 'button' }), role: "tab", "aria-selected": isActive, "aria-current": isActive ? 'page' : undefined, tabIndex: isActive ? 0 : -1, onClick: () => select(item.id), onKeyDown: onKeyDown, ...(0, gesture_1.touch)(ITEM_H, 44, 'y'), children: [item.icon, (0, ink_1.ink)(item.label, gui_1.SizableText, {
196
+ size: '$2',
197
+ fontWeight: isActive ? '600' : '500',
198
+ color: isActive ? '$accentColor' : '$ink',
199
+ })] }, item.id));
200
+ })] }));
201
+ }
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ export type LimelightNavItem = {
3
+ id: string;
4
+ label: string;
5
+ icon?: React.ReactNode;
6
+ href?: string;
7
+ };
8
+ export type LimelightNavVariant = 'floating' | 'bar';
9
+ export type LimelightNavProps = {
10
+ items: LimelightNavItem[];
11
+ /** Controlled active item id. */
12
+ value?: string;
13
+ /** Uncontrolled initial active item id; defaults to the first item. */
14
+ defaultValue?: string;
15
+ onValueChange?: (id: string) => void;
16
+ variant?: LimelightNavVariant;
17
+ 'aria-label'?: string;
18
+ };
19
+ export declare function LimelightNav({ items, value, defaultValue, onValueChange, variant, ...props }: LimelightNavProps): React.JSX.Element;
20
+ //# sourceMappingURL=limelight-nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limelight-nav.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/limelight-nav.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,KAAK,CAAA;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAmFD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,OAAoB,EACpB,GAAG,KAAK,EACT,EAAE,iBAAiB,qBA0GnB"}