@hanzo/ui 8.27.10 → 8.27.11

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 (303) 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/chat/Composer.cjs +10 -10
  286. package/dist/chat/Composer.d.ts +16 -17
  287. package/dist/chat/Composer.d.ts.map +1 -1
  288. package/dist/chat/Composer.js +11 -11
  289. package/dist/chat/Composer.js.map +1 -1
  290. package/dist/gallery.cjs +180 -1
  291. package/dist/gallery.d.ts.map +1 -1
  292. package/dist/gallery.html +391 -3
  293. package/dist/gallery.js +181 -2
  294. package/dist/gallery.js.map +1 -1
  295. package/dist/index.cjs +110 -1
  296. package/dist/index.d.ts +1 -1
  297. package/dist/index.d.ts.map +1 -1
  298. package/dist/index.js +1 -1
  299. package/dist/index.js.map +1 -1
  300. package/dist/index.node.cjs +110 -1
  301. package/dist/index.node.js +1 -1
  302. package/dist/styles.css +356 -0
  303. package/package.json +1 -1
@@ -0,0 +1,166 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * LimelightNav — a row of items with a glowing highlight that slides to
5
+ * whichever one is active, plus a small beam of light hanging above it, the
6
+ * way a spotlight follows a performer across a stage.
7
+ *
8
+ * The glow's position is a plain `getBoundingClientRect()` measurement of the
9
+ * active item relative to the rail, applied as a CSS `transform`/`width`
10
+ * transition — the same technique `AnimatedBeam` and `Dock` already use in
11
+ * this backend, so no animation library is pulled in for one moving pill. It
12
+ * remeasures on resize via `ResizeObserver` and whenever the active item
13
+ * changes.
14
+ *
15
+ * `variant="floating"` is a self-sizing rounded pill, the shape a command bar
16
+ * or a segmented control takes. `variant="bar"` spans the full width with a
17
+ * bottom hairline, the shape a page's primary navigation takes.
18
+ */
19
+ import { SizableText, XStack, YStack, styled } from '@hanzo/gui';
20
+ import * as React from 'react';
21
+ import { ink } from './ink.js';
22
+ import { slot } from './slot.js';
23
+ import { touch } from './gesture.js';
24
+ const ITEM_H = 40;
25
+ /** The DOM box behind a ref, if there is one; a native view has none. */
26
+ const box = (el) => typeof HTMLElement !== 'undefined' && el instanceof HTMLElement ? el : null;
27
+ const Rail = styled(XStack, {
28
+ name: 'LimelightNavRail',
29
+ position: 'relative',
30
+ items: 'center',
31
+ gap: '$1',
32
+ rounded: '$6',
33
+ bg: '$hover',
34
+ p: '$1',
35
+ self: 'flex-start',
36
+ variants: {
37
+ variant: {
38
+ floating: {},
39
+ bar: {
40
+ rounded: 0,
41
+ bg: 'transparent',
42
+ borderBottomWidth: 1,
43
+ borderColor: '$borderColor',
44
+ width: '100%',
45
+ self: 'stretch',
46
+ justify: 'flex-start',
47
+ gap: '$4',
48
+ px: '$4',
49
+ py: 0,
50
+ },
51
+ },
52
+ },
53
+ defaultVariants: { variant: 'floating' },
54
+ });
55
+ const Item = styled(XStack, {
56
+ name: 'LimelightNavItem',
57
+ items: 'center',
58
+ justify: 'center',
59
+ gap: '$1.5',
60
+ px: '$3',
61
+ height: ITEM_H,
62
+ rounded: '$5',
63
+ cursor: 'pointer',
64
+ hoverStyle: { opacity: 0.85 },
65
+ style: { zIndex: 1 },
66
+ });
67
+ const Glow = styled(YStack, {
68
+ name: 'LimelightNavGlow',
69
+ position: 'absolute',
70
+ l: 0,
71
+ rounded: '$5',
72
+ bg: '$accentBackground',
73
+ pointerEvents: 'none',
74
+ style: { zIndex: 0 },
75
+ variants: {
76
+ variant: {
77
+ floating: { t: '$1', b: '$1' },
78
+ bar: { t: 0, b: 0, rounded: 0, borderBottomWidth: 2, borderColor: '$accentColor', bg: 'transparent' },
79
+ },
80
+ },
81
+ defaultVariants: { variant: 'floating' },
82
+ });
83
+ /** A small beam of light hanging above the active item, floating variant only. */
84
+ const Beam = styled(YStack, {
85
+ name: 'LimelightNavBeam',
86
+ position: 'absolute',
87
+ l: 0,
88
+ height: 6,
89
+ rounded: 999,
90
+ bg: '$accentBackground',
91
+ pointerEvents: 'none',
92
+ style: { top: -10, zIndex: 0, filter: 'blur(4px)' },
93
+ });
94
+ export function LimelightNav({ items, value, defaultValue, onValueChange, variant = 'floating', ...props }) {
95
+ const [own, setOwn] = React.useState(defaultValue ?? items[0]?.id);
96
+ const active = value ?? own;
97
+ const railRef = React.useRef(null);
98
+ const itemRefs = React.useRef(new Map());
99
+ const [rect, setRect] = React.useState({ left: 0, width: 0 });
100
+ const measure = React.useCallback(() => {
101
+ const rail = box(railRef.current);
102
+ const el = active ? itemRefs.current.get(active) : undefined;
103
+ if (!rail || !el)
104
+ return;
105
+ const railBox = rail.getBoundingClientRect();
106
+ const itemBox = el.getBoundingClientRect();
107
+ setRect((prev) => {
108
+ const next = { left: itemBox.left - railBox.left, width: itemBox.width };
109
+ return prev.left === next.left && prev.width === next.width ? prev : next;
110
+ });
111
+ }, [active]);
112
+ React.useLayoutEffect(() => {
113
+ measure();
114
+ }, [measure, items.length, variant]);
115
+ React.useEffect(() => {
116
+ const rail = box(railRef.current);
117
+ if (!rail || typeof ResizeObserver === 'undefined') {
118
+ window.addEventListener('resize', measure);
119
+ return () => window.removeEventListener('resize', measure);
120
+ }
121
+ const observer = new ResizeObserver(measure);
122
+ observer.observe(rail);
123
+ return () => observer.disconnect();
124
+ }, [measure]);
125
+ const select = (id) => {
126
+ if (value === undefined)
127
+ setOwn(id);
128
+ onValueChange?.(id);
129
+ };
130
+ /** Roving-tabindex arrow/Home/End navigation, per the WAI-ARIA tabs pattern. */
131
+ const onKeyDown = (e) => {
132
+ const from = items.findIndex((item) => item.id === active);
133
+ if (from < 0)
134
+ return;
135
+ const to = e.key === 'ArrowRight' || e.key === 'ArrowDown'
136
+ ? (from + 1) % items.length
137
+ : e.key === 'ArrowLeft' || e.key === 'ArrowUp'
138
+ ? (from - 1 + items.length) % items.length
139
+ : e.key === 'Home'
140
+ ? 0
141
+ : e.key === 'End'
142
+ ? items.length - 1
143
+ : -1;
144
+ if (to < 0)
145
+ return;
146
+ e.preventDefault();
147
+ const next = items[to];
148
+ select(next.id);
149
+ itemRefs.current.get(next.id)?.focus();
150
+ };
151
+ return (_jsxs(Rail, { ref: railRef, ...slot('limelight-nav'), role: "tablist", "aria-label": props['aria-label'] ?? 'Navigation', variant: variant, children: [variant === 'floating' && (_jsx(Beam, { ...slot('limelight-nav-beam'), style: { transform: `translateX(${rect.left}px)`, width: rect.width, transition: 'transform 200ms ease, width 200ms ease' } })), _jsx(Glow, { ...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) => {
152
+ const isActive = item.id === active;
153
+ return (_jsxs(Item, { ref: (node) => {
154
+ const el = box(node);
155
+ if (el)
156
+ itemRefs.current.set(item.id, el);
157
+ else
158
+ itemRefs.current.delete(item.id);
159
+ }, ...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, ...touch(ITEM_H, 44, 'y'), children: [item.icon, ink(item.label, SizableText, {
160
+ size: '$2',
161
+ fontWeight: isActive ? '600' : '500',
162
+ color: isActive ? '$accentColor' : '$ink',
163
+ })] }, item.id));
164
+ })] }));
165
+ }
166
+ //# sourceMappingURL=limelight-nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limelight-nav.js","sourceRoot":"","sources":["../../../src/backends/gui/limelight-nav.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.List = List;
5
+ exports.ListItem = ListItem;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * List — a vertical group of rows: a real `<ul>` (`List`) whose rows are real
9
+ * `<li>`s (`ListItem`), spaced by gap rather than a margin hack so the first
10
+ * and last row carry no stray space.
11
+ */
12
+ const gui_1 = require("@hanzo/gui");
13
+ const slot_1 = require("./slot.cjs");
14
+ const ListFrame = (0, gui_1.styled)(gui_1.YStack, {
15
+ name: 'List',
16
+ gap: '$2',
17
+ });
18
+ const ListItemFrame = (0, gui_1.styled)(gui_1.YStack, {
19
+ name: 'ListItem',
20
+ });
21
+ function List({ children, ...props }) {
22
+ return ((0, jsx_runtime_1.jsx)(ListFrame, { ...(0, slot_1.slot)('list'), render: "ul", ...props, children: children }));
23
+ }
24
+ function ListItem({ children, ...props }) {
25
+ return ((0, jsx_runtime_1.jsx)(ListItemFrame, { ...(0, slot_1.slot)('list-item'), render: "li", ...props, children: children }));
26
+ }
@@ -0,0 +1,15 @@
1
+ import type * as React from 'react';
2
+ declare const ListFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
3
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
4
+ fullscreen?: boolean | undefined;
5
+ }, import("@hanzogui/web").StaticConfigPublic>;
6
+ declare const ListItemFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
7
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
8
+ fullscreen?: boolean | undefined;
9
+ }, import("@hanzogui/web").StaticConfigPublic>;
10
+ export type ListProps = React.ComponentProps<typeof ListFrame>;
11
+ export type ListItemProps = React.ComponentProps<typeof ListItemFrame>;
12
+ export declare function List({ children, ...props }: ListProps): React.JSX.Element;
13
+ export declare function ListItem({ children, ...props }: ListItemProps): React.JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/list.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,QAAA,MAAM,SAAS;;;8CAGb,CAAA;AAEF,QAAA,MAAM,aAAa;;;8CAEjB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAA;AAC9D,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,CAAA;AAEtE,wBAAgB,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,qBAMrD;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,qBAM7D"}
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * List — a vertical group of rows: a real `<ul>` (`List`) whose rows are real
5
+ * `<li>`s (`ListItem`), spaced by gap rather than a margin hack so the first
6
+ * and last row carry no stray space.
7
+ */
8
+ import { YStack, styled } from '@hanzo/gui';
9
+ import { slot } from './slot.js';
10
+ const ListFrame = styled(YStack, {
11
+ name: 'List',
12
+ gap: '$2',
13
+ });
14
+ const ListItemFrame = styled(YStack, {
15
+ name: 'ListItem',
16
+ });
17
+ export function List({ children, ...props }) {
18
+ return (_jsx(ListFrame, { ...slot('list'), render: "ul", ...props, children: children }));
19
+ }
20
+ export function ListItem({ children, ...props }) {
21
+ return (_jsx(ListItemFrame, { ...slot('list-item'), render: "li", ...props, children: children }));
22
+ }
23
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/backends/gui/list.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE;IAC/B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,IAAI;CACV,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IACnC,IAAI,EAAE,UAAU;CACjB,CAAC,CAAA;AAKF,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAa;IACpD,OAAO,CACL,KAAC,SAAS,OAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAC,IAAI,KAAK,KAAK,YAC/C,QAAQ,GACC,CACb,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiB;IAC5D,OAAO,CACL,KAAC,aAAa,OAAK,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAC,IAAI,KAAK,KAAK,YACxD,QAAQ,GACK,CACjB,CAAA;AACH,CAAC"}
@@ -0,0 +1,84 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.MacosDock = MacosDock;
5
+ exports.MacosDockItem = MacosDockItem;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * MacosDock — the floating icon shelf from macOS itself: real frosted glass
9
+ * (the same `glass()` material every menu and dialog in this library wears),
10
+ * a gradient sheen across the top, and items that grow as the pointer nears
11
+ * them, with a glass tooltip rising above the one you are on.
12
+ *
13
+ * `Dock`/`DockItem` in `./dock` already cover a plain icon shelf on any edge
14
+ * of the screen; this is the specific, always-bottom, always-glass macOS
15
+ * read, so the two live under different names rather than one file growing a
16
+ * `glass` toggle nobody asked for.
17
+ *
18
+ * Magnification is a pointer-distance calculation retargeting a CSS
19
+ * `width`/`height` transition per item — the same visual read as a spring
20
+ * without pulling in an animation library the workspace does not carry. Each
21
+ * item tracks its own pointer offset, so hovering one does not re-render its
22
+ * neighbours.
23
+ */
24
+ const gui_1 = require("@hanzo/gui");
25
+ const react_1 = require("react");
26
+ const sx_1 = require("../../sx.cjs");
27
+ const glass_1 = require("../../glass.cjs");
28
+ const ink_1 = require("./ink.cjs");
29
+ const slot_1 = require("./slot.cjs");
30
+ const gesture_1 = require("./gesture.cjs");
31
+ /** Resting size of an item, in px, before any magnification is applied. */
32
+ const BASE_SIZE = 48;
33
+ const MacosDockConfigContext = /* @__PURE__ */ (0, react_1.createContext)({
34
+ magnification: 60,
35
+ distance: 140,
36
+ });
37
+ const Frame = (0, gui_1.styled)(gui_1.XStack, {
38
+ name: 'MacosDock',
39
+ self: 'center',
40
+ items: 'flex-end',
41
+ gap: '$2',
42
+ px: '$3',
43
+ pb: '$2',
44
+ minH: 64,
45
+ rounded: '$6',
46
+ borderWidth: 1,
47
+ shadowColor: '$dim',
48
+ shadowRadius: 24,
49
+ shadowOpacity: 0.2,
50
+ });
51
+ /** The main container component for the macOS dock. */
52
+ function MacosDock({ className, magnification = 60, distance = 140, children, ...props }) {
53
+ return ((0, jsx_runtime_1.jsx)(MacosDockConfigContext.Provider, { value: { magnification, distance }, children: (0, jsx_runtime_1.jsx)(Frame, { ...(0, slot_1.slot)('macos-dock'), ...(0, glass_1.glass)(2), ...(0, sx_1.sx)(className), ...props, children: children }) }));
54
+ }
55
+ const ItemFrame = (0, gui_1.styled)(gui_1.XStack, {
56
+ name: 'MacosDockItem',
57
+ items: 'center',
58
+ justify: 'center',
59
+ rounded: '$4',
60
+ bg: '$hover',
61
+ cursor: 'pointer',
62
+ overflow: 'hidden',
63
+ hoverStyle: { bg: '$edge' },
64
+ focusStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' },
65
+ });
66
+ /** Individual dock item component: an icon that magnifies and can carry a tooltip. */
67
+ function MacosDockItem({ className, children, onClick, tooltip, ...props }) {
68
+ const { magnification, distance } = (0, react_1.useContext)(MacosDockConfigContext);
69
+ const [size, setSize] = (0, react_1.useState)(BASE_SIZE);
70
+ const [hovered, setHovered] = (0, react_1.useState)(false);
71
+ const handleMove = (e) => {
72
+ const rect = e.currentTarget.getBoundingClientRect();
73
+ if (distance <= 0)
74
+ return;
75
+ const centerX = rect.left + rect.width / 2;
76
+ const offset = Math.min(Math.abs(e.clientX - centerX), distance);
77
+ setSize(BASE_SIZE + magnification * (1 - offset / distance));
78
+ };
79
+ const handleLeave = () => {
80
+ setSize(BASE_SIZE);
81
+ setHovered(false);
82
+ };
83
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('macos-dock-item-wrap'), position: "relative", items: "center", children: [tooltip && hovered ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('macos-dock-tooltip'), position: "absolute", b: "100%", mb: "$2", self: "center", px: "$2", py: "$1", rounded: "$3", ...(0, glass_1.glass)(3), style: { whiteSpace: 'nowrap' }, children: (0, ink_1.ink)(tooltip) })) : null, (0, jsx_runtime_1.jsx)(ItemFrame, { ...(0, slot_1.slot)('macos-dock-item'), render: "button", ...{ type: 'button' }, onClick: onClick, onPointerEnter: () => setHovered(true), onPointerMove: handleMove, onPointerLeave: handleLeave, ...(tooltip ? (0, slot_1.tip)(tooltip) : null), ...(0, gesture_1.touch)(BASE_SIZE, 44), style: { width: size, height: size, transition: 'width 150ms ease-out, height 150ms ease-out' }, ...(0, sx_1.sx)(className), ...props, children: (0, ink_1.ink)(children) })] }));
84
+ }
@@ -0,0 +1,30 @@
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
+ declare const Frame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
3
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
4
+ fullscreen?: boolean | undefined;
5
+ }, import("@hanzogui/web").StaticConfigPublic>;
6
+ export type MacosDockProps = Omit<ComponentProps<typeof Frame>, 'className'> & {
7
+ className?: string;
8
+ /** Maximum magnification amount in pixels. */
9
+ magnification?: number;
10
+ /** Distance from the pointer, in pixels, where magnification starts. */
11
+ distance?: number;
12
+ children?: ReactNode;
13
+ };
14
+ /** The main container component for the macOS dock. */
15
+ declare function MacosDock({ className, magnification, distance, children, ...props }: MacosDockProps): import("react").JSX.Element;
16
+ declare const ItemFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
17
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
18
+ fullscreen?: boolean | undefined;
19
+ }, import("@hanzogui/web").StaticConfigPublic>;
20
+ export type MacosDockItemProps = Omit<ComponentProps<typeof ItemFrame>, 'className' | 'onClick'> & {
21
+ className?: string;
22
+ children?: ReactNode;
23
+ onClick?: () => void;
24
+ /** Tooltip text to show on hover. */
25
+ tooltip?: string;
26
+ };
27
+ /** Individual dock item component: an icon that magnifies and can carry a tooltip. */
28
+ declare function MacosDockItem({ className, children, onClick, tooltip, ...props }: MacosDockItemProps): import("react").JSX.Element;
29
+ export { MacosDock, MacosDockItem };
30
+ //# sourceMappingURL=macos-dock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos-dock.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/macos-dock.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAiBd,QAAA,MAAM,KAAK;;;8CAaT,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,WAAW,CAAC,GAAG;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,uDAAuD;AACvD,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,aAAkB,EAAE,QAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAQvG;AAED,QAAA,MAAM,SAAS;;;8CAUb,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,sFAAsF;AACtF,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,+BAsD7F;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,82 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * MacosDock — the floating icon shelf from macOS itself: real frosted glass
5
+ * (the same `glass()` material every menu and dialog in this library wears),
6
+ * a gradient sheen across the top, and items that grow as the pointer nears
7
+ * them, with a glass tooltip rising above the one you are on.
8
+ *
9
+ * `Dock`/`DockItem` in `./dock` already cover a plain icon shelf on any edge
10
+ * of the screen; this is the specific, always-bottom, always-glass macOS
11
+ * read, so the two live under different names rather than one file growing a
12
+ * `glass` toggle nobody asked for.
13
+ *
14
+ * Magnification is a pointer-distance calculation retargeting a CSS
15
+ * `width`/`height` transition per item — the same visual read as a spring
16
+ * without pulling in an animation library the workspace does not carry. Each
17
+ * item tracks its own pointer offset, so hovering one does not re-render its
18
+ * neighbours.
19
+ */
20
+ import { XStack, YStack, styled } from '@hanzo/gui';
21
+ import { createContext, useContext, useState, } from 'react';
22
+ import { sx } from '../../sx.js';
23
+ import { glass } from '../../glass.js';
24
+ import { ink } from './ink.js';
25
+ import { slot, tip } from './slot.js';
26
+ import { touch } from './gesture.js';
27
+ /** Resting size of an item, in px, before any magnification is applied. */
28
+ const BASE_SIZE = 48;
29
+ const MacosDockConfigContext = /* @__PURE__ */ createContext({
30
+ magnification: 60,
31
+ distance: 140,
32
+ });
33
+ const Frame = styled(XStack, {
34
+ name: 'MacosDock',
35
+ self: 'center',
36
+ items: 'flex-end',
37
+ gap: '$2',
38
+ px: '$3',
39
+ pb: '$2',
40
+ minH: 64,
41
+ rounded: '$6',
42
+ borderWidth: 1,
43
+ shadowColor: '$dim',
44
+ shadowRadius: 24,
45
+ shadowOpacity: 0.2,
46
+ });
47
+ /** The main container component for the macOS dock. */
48
+ function MacosDock({ className, magnification = 60, distance = 140, children, ...props }) {
49
+ return (_jsx(MacosDockConfigContext.Provider, { value: { magnification, distance }, children: _jsx(Frame, { ...slot('macos-dock'), ...glass(2), ...sx(className), ...props, children: children }) }));
50
+ }
51
+ const ItemFrame = styled(XStack, {
52
+ name: 'MacosDockItem',
53
+ items: 'center',
54
+ justify: 'center',
55
+ rounded: '$4',
56
+ bg: '$hover',
57
+ cursor: 'pointer',
58
+ overflow: 'hidden',
59
+ hoverStyle: { bg: '$edge' },
60
+ focusStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' },
61
+ });
62
+ /** Individual dock item component: an icon that magnifies and can carry a tooltip. */
63
+ function MacosDockItem({ className, children, onClick, tooltip, ...props }) {
64
+ const { magnification, distance } = useContext(MacosDockConfigContext);
65
+ const [size, setSize] = useState(BASE_SIZE);
66
+ const [hovered, setHovered] = useState(false);
67
+ const handleMove = (e) => {
68
+ const rect = e.currentTarget.getBoundingClientRect();
69
+ if (distance <= 0)
70
+ return;
71
+ const centerX = rect.left + rect.width / 2;
72
+ const offset = Math.min(Math.abs(e.clientX - centerX), distance);
73
+ setSize(BASE_SIZE + magnification * (1 - offset / distance));
74
+ };
75
+ const handleLeave = () => {
76
+ setSize(BASE_SIZE);
77
+ setHovered(false);
78
+ };
79
+ return (_jsxs(YStack, { ...slot('macos-dock-item-wrap'), position: "relative", items: "center", children: [tooltip && hovered ? (_jsx(XStack, { ...slot('macos-dock-tooltip'), position: "absolute", b: "100%", mb: "$2", self: "center", px: "$2", py: "$1", rounded: "$3", ...glass(3), style: { whiteSpace: 'nowrap' }, children: ink(tooltip) })) : null, _jsx(ItemFrame, { ...slot('macos-dock-item'), render: "button", ...{ type: 'button' }, onClick: onClick, onPointerEnter: () => setHovered(true), onPointerMove: handleMove, onPointerLeave: handleLeave, ...(tooltip ? tip(tooltip) : null), ...touch(BASE_SIZE, 44), style: { width: size, height: size, transition: 'width 150ms ease-out, height 150ms ease-out' }, ...sx(className), ...props, children: ink(children) })] }));
80
+ }
81
+ export { MacosDock, MacosDockItem };
82
+ //# sourceMappingURL=macos-dock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos-dock.js","sourceRoot":"","sources":["../../../src/backends/gui/macos-dock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Magnetic = Magnetic;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Magnetic — a wrapper that pulls its child toward the pointer.
8
+ *
9
+ * While the pointer is over the frame, the child translates by the distance
10
+ * from the frame's centre to the pointer, scaled by `strength`; it eases back
11
+ * to rest the moment the pointer leaves. Wrap a button or a card in it for a
12
+ * pull-toward-the-cursor affordance.
13
+ *
14
+ * The live offset is an inline style rather than a style prop: gui compiles a
15
+ * style prop to one class per distinct value, and the offset takes a new value
16
+ * on every pixel of travel.
17
+ */
18
+ const gui_1 = require("@hanzo/gui");
19
+ const react_1 = require("react");
20
+ const slot_1 = require("./slot.cjs");
21
+ const Frame = (0, gui_1.styled)(gui_1.YStack, {
22
+ name: 'Magnetic',
23
+ display: 'inline-flex',
24
+ self: 'flex-start',
25
+ });
26
+ const REST = { x: 0, y: 0 };
27
+ function Magnetic({ strength = 0.3, children, ...p }) {
28
+ const [at, setAt] = (0, react_1.useState)(REST);
29
+ const move = (e) => {
30
+ const r = e.currentTarget.getBoundingClientRect();
31
+ const cx = r.left + r.width / 2;
32
+ const cy = r.top + r.height / 2;
33
+ setAt({ x: (e.clientX - cx) * strength, y: (e.clientY - cy) * strength });
34
+ };
35
+ const rest = () => setAt(REST);
36
+ return ((0, jsx_runtime_1.jsx)(Frame, { ...(0, slot_1.slot)('magnetic'), "data-state": at.x === 0 && at.y === 0 ? 'idle' : 'hover', style: {
37
+ transform: `translate(${at.x}px, ${at.y}px)`,
38
+ transition: 'transform 150ms cubic-bezier(0.4, 0, 0.2, 1)',
39
+ }, onPointerMove: move, onPointerLeave: rest, ...p, children: children }));
40
+ }
@@ -0,0 +1,12 @@
1
+ import { type ComponentProps } from 'react';
2
+ declare const Frame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
3
+ elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
4
+ fullscreen?: boolean | undefined;
5
+ }, import("@hanzogui/web").StaticConfigPublic>;
6
+ export type MagneticProps = ComponentProps<typeof Frame> & {
7
+ /** Fraction of the pointer's distance from centre the child travels. */
8
+ strength?: number;
9
+ };
10
+ export declare function Magnetic({ strength, children, ...p }: MagneticProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=magnetic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnetic.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/magnetic.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAY,KAAK,cAAc,EAAqB,MAAM,OAAO,CAAA;AAGxE,QAAA,MAAM,KAAK;;;8CAIT,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,KAAK,CAAC,GAAG;IACzD,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAID,wBAAgB,QAAQ,CAAC,EAAE,QAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,aAAa,+BA0BzE"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ /**
4
+ * Magnetic — a wrapper that pulls its child toward the pointer.
5
+ *
6
+ * While the pointer is over the frame, the child translates by the distance
7
+ * from the frame's centre to the pointer, scaled by `strength`; it eases back
8
+ * to rest the moment the pointer leaves. Wrap a button or a card in it for a
9
+ * pull-toward-the-cursor affordance.
10
+ *
11
+ * The live offset is an inline style rather than a style prop: gui compiles a
12
+ * style prop to one class per distinct value, and the offset takes a new value
13
+ * on every pixel of travel.
14
+ */
15
+ import { YStack, styled } from '@hanzo/gui';
16
+ import { useState } from 'react';
17
+ import { slot } from './slot.js';
18
+ const Frame = styled(YStack, {
19
+ name: 'Magnetic',
20
+ display: 'inline-flex',
21
+ self: 'flex-start',
22
+ });
23
+ const REST = { x: 0, y: 0 };
24
+ export function Magnetic({ strength = 0.3, children, ...p }) {
25
+ const [at, setAt] = useState(REST);
26
+ const move = (e) => {
27
+ const r = e.currentTarget.getBoundingClientRect();
28
+ const cx = r.left + r.width / 2;
29
+ const cy = r.top + r.height / 2;
30
+ setAt({ x: (e.clientX - cx) * strength, y: (e.clientY - cy) * strength });
31
+ };
32
+ const rest = () => setAt(REST);
33
+ return (_jsx(Frame, { ...slot('magnetic'), "data-state": at.x === 0 && at.y === 0 ? 'idle' : 'hover', style: {
34
+ transform: `translate(${at.x}px, ${at.y}px)`,
35
+ transition: 'transform 150ms cubic-bezier(0.4, 0, 0.2, 1)',
36
+ }, onPointerMove: move, onPointerLeave: rest, ...p, children: children }));
37
+ }
38
+ //# sourceMappingURL=magnetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnetic.js","sourceRoot":"","sources":["../../../src/backends/gui/magnetic.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAA0C,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,YAAY;CACnB,CAAC,CAAA;AAOF,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAE3B,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAiB;IACxE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAElC,MAAM,IAAI,GAAG,CAAC,CAA+B,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAA;QACjD,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;QAC/B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAA;IAC3E,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE9B,OAAO,CACL,KAAC,KAAK,OACA,IAAI,CAAC,UAAU,CAAC,gBACR,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACvD,KAAK,EAAE;YACL,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;YAC5C,UAAU,EAAE,8CAA8C;SAC3D,EACD,aAAa,EAAE,IAAI,EACnB,cAAc,EAAE,IAAI,KAChB,CAAC,YAEJ,QAAQ,GACH,CACT,CAAA;AACH,CAAC"}