@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.
- package/dist/backends/gui/comparison.cjs +17 -21
- package/dist/backends/gui/comparison.d.ts +4 -5
- package/dist/backends/gui/comparison.d.ts.map +1 -1
- package/dist/backends/gui/comparison.js +18 -22
- package/dist/backends/gui/comparison.js.map +1 -1
- package/dist/backends/gui/crypto-screener.cjs +21 -31
- package/dist/backends/gui/crypto-screener.d.ts +20 -24
- package/dist/backends/gui/crypto-screener.d.ts.map +1 -1
- package/dist/backends/gui/crypto-screener.js +21 -31
- package/dist/backends/gui/crypto-screener.js.map +1 -1
- package/dist/backends/gui/cursor.cjs +15 -18
- package/dist/backends/gui/cursor.d.ts +4 -3
- package/dist/backends/gui/cursor.d.ts.map +1 -1
- package/dist/backends/gui/cursor.js +15 -18
- package/dist/backends/gui/cursor.js.map +1 -1
- package/dist/backends/gui/data-table.cjs +144 -184
- package/dist/backends/gui/data-table.d.ts +64 -44
- package/dist/backends/gui/data-table.d.ts.map +1 -1
- package/dist/backends/gui/data-table.js +146 -152
- package/dist/backends/gui/data-table.js.map +1 -1
- package/dist/backends/gui/dock.cjs +1 -1
- package/dist/backends/gui/dock.d.ts.map +1 -1
- package/dist/backends/gui/dock.js +1 -1
- package/dist/backends/gui/dock.js.map +1 -1
- package/dist/backends/gui/editor.cjs +35 -31
- package/dist/backends/gui/editor.d.ts +11 -11
- package/dist/backends/gui/editor.d.ts.map +1 -1
- package/dist/backends/gui/editor.js +35 -31
- package/dist/backends/gui/editor.js.map +1 -1
- package/dist/backends/gui/field.cjs +132 -0
- package/dist/backends/gui/field.d.ts +74 -0
- package/dist/backends/gui/field.d.ts.map +1 -0
- package/dist/backends/gui/field.js +121 -0
- package/dist/backends/gui/field.js.map +1 -0
- package/dist/backends/gui/gantt.cjs +17 -19
- package/dist/backends/gui/gantt.d.ts +4 -5
- package/dist/backends/gui/gantt.d.ts.map +1 -1
- package/dist/backends/gui/gantt.js +18 -21
- package/dist/backends/gui/gantt.js.map +1 -1
- package/dist/backends/gui/glimpse.cjs +88 -0
- package/dist/backends/gui/glimpse.d.ts +57 -0
- package/dist/backends/gui/glimpse.d.ts.map +1 -0
- package/dist/backends/gui/glimpse.js +81 -0
- package/dist/backends/gui/glimpse.js.map +1 -0
- package/dist/backends/gui/grid-pattern.cjs +119 -0
- package/dist/backends/gui/grid-pattern.d.ts +96 -0
- package/dist/backends/gui/grid-pattern.d.ts.map +1 -0
- package/dist/backends/gui/grid-pattern.js +84 -0
- package/dist/backends/gui/grid-pattern.js.map +1 -0
- package/dist/backends/gui/image-crop.cjs +35 -0
- package/dist/backends/gui/image-crop.d.ts +20 -0
- package/dist/backends/gui/image-crop.d.ts.map +1 -0
- package/dist/backends/gui/image-crop.js +33 -0
- package/dist/backends/gui/image-crop.js.map +1 -0
- package/dist/backends/gui/image-zoom.cjs +58 -0
- package/dist/backends/gui/image-zoom.d.ts +16 -0
- package/dist/backends/gui/image-zoom.d.ts.map +1 -0
- package/dist/backends/gui/image-zoom.js +56 -0
- package/dist/backends/gui/image-zoom.js.map +1 -0
- package/dist/backends/gui/index.cjs +159 -1
- package/dist/backends/gui/index.d.ts +49 -0
- package/dist/backends/gui/index.d.ts.map +1 -1
- package/dist/backends/gui/index.js +49 -0
- package/dist/backends/gui/index.js.map +1 -1
- package/dist/backends/gui/interactive-grid-pattern.cjs +61 -0
- package/dist/backends/gui/interactive-grid-pattern.d.ts +28 -0
- package/dist/backends/gui/interactive-grid-pattern.d.ts.map +1 -0
- package/dist/backends/gui/interactive-grid-pattern.js +26 -0
- package/dist/backends/gui/interactive-grid-pattern.js.map +1 -0
- package/dist/backends/gui/iphone-15-pro.cjs +83 -0
- package/dist/backends/gui/iphone-15-pro.d.ts +16 -0
- package/dist/backends/gui/iphone-15-pro.d.ts.map +1 -0
- package/dist/backends/gui/iphone-15-pro.js +81 -0
- package/dist/backends/gui/iphone-15-pro.js.map +1 -0
- package/dist/backends/gui/item.cjs +154 -0
- package/dist/backends/gui/item.d.ts +72 -0
- package/dist/backends/gui/item.d.ts.map +1 -0
- package/dist/backends/gui/item.js +143 -0
- package/dist/backends/gui/item.js.map +1 -0
- package/dist/backends/gui/kanban.cjs +247 -0
- package/dist/backends/gui/kanban.d.ts +37 -0
- package/dist/backends/gui/kanban.d.ts.map +1 -0
- package/dist/backends/gui/kanban.js +212 -0
- package/dist/backends/gui/kanban.js.map +1 -0
- package/dist/backends/gui/kbd.cjs +45 -0
- package/dist/backends/gui/kbd.d.ts +8 -0
- package/dist/backends/gui/kbd.d.ts.map +1 -0
- package/dist/backends/gui/kbd.js +42 -0
- package/dist/backends/gui/kbd.js.map +1 -0
- package/dist/backends/gui/limelight-nav.cjs +201 -0
- package/dist/backends/gui/limelight-nav.d.ts +20 -0
- package/dist/backends/gui/limelight-nav.d.ts.map +1 -0
- package/dist/backends/gui/limelight-nav.js +166 -0
- package/dist/backends/gui/limelight-nav.js.map +1 -0
- package/dist/backends/gui/list.cjs +26 -0
- package/dist/backends/gui/list.d.ts +15 -0
- package/dist/backends/gui/list.d.ts.map +1 -0
- package/dist/backends/gui/list.js +23 -0
- package/dist/backends/gui/list.js.map +1 -0
- package/dist/backends/gui/macos-dock.cjs +84 -0
- package/dist/backends/gui/macos-dock.d.ts +30 -0
- package/dist/backends/gui/macos-dock.d.ts.map +1 -0
- package/dist/backends/gui/macos-dock.js +82 -0
- package/dist/backends/gui/macos-dock.js.map +1 -0
- package/dist/backends/gui/magnetic.cjs +40 -0
- package/dist/backends/gui/magnetic.d.ts +12 -0
- package/dist/backends/gui/magnetic.d.ts.map +1 -0
- package/dist/backends/gui/magnetic.js +38 -0
- package/dist/backends/gui/magnetic.js.map +1 -0
- package/dist/backends/gui/marquee.cjs +110 -0
- package/dist/backends/gui/marquee.d.ts +44 -0
- package/dist/backends/gui/marquee.d.ts.map +1 -0
- package/dist/backends/gui/marquee.js +75 -0
- package/dist/backends/gui/marquee.js.map +1 -0
- package/dist/backends/gui/menu-dock.cjs +64 -0
- package/dist/backends/gui/menu-dock.d.ts +21 -0
- package/dist/backends/gui/menu-dock.d.ts.map +1 -0
- package/dist/backends/gui/menu-dock.js +62 -0
- package/dist/backends/gui/menu-dock.js.map +1 -0
- package/dist/backends/gui/menubar.cjs +227 -0
- package/dist/backends/gui/menubar.d.ts +106 -0
- package/dist/backends/gui/menubar.d.ts.map +1 -0
- package/dist/backends/gui/menubar.js +177 -0
- package/dist/backends/gui/menubar.js.map +1 -0
- package/dist/backends/gui/message-dock.cjs +111 -0
- package/dist/backends/gui/message-dock.d.ts +22 -0
- package/dist/backends/gui/message-dock.d.ts.map +1 -0
- package/dist/backends/gui/message-dock.js +110 -0
- package/dist/backends/gui/message-dock.js.map +1 -0
- package/dist/backends/gui/mini-calendar.cjs +25 -0
- package/dist/backends/gui/mini-calendar.d.ts +22 -0
- package/dist/backends/gui/mini-calendar.d.ts.map +1 -0
- package/dist/backends/gui/mini-calendar.js +24 -0
- package/dist/backends/gui/mini-calendar.js.map +1 -0
- package/dist/backends/gui/minimal-tiptap.cjs +56 -0
- package/dist/backends/gui/minimal-tiptap.d.ts +20 -0
- package/dist/backends/gui/minimal-tiptap.d.ts.map +1 -0
- package/dist/backends/gui/minimal-tiptap.js +21 -0
- package/dist/backends/gui/minimal-tiptap.js.map +1 -0
- package/dist/backends/gui/motion-highlight.cjs +83 -0
- package/dist/backends/gui/motion-highlight.d.ts +27 -0
- package/dist/backends/gui/motion-highlight.d.ts.map +1 -0
- package/dist/backends/gui/motion-highlight.js +48 -0
- package/dist/backends/gui/motion-highlight.js.map +1 -0
- package/dist/backends/gui/navigation-bar.cjs +47 -0
- package/dist/backends/gui/navigation-bar.d.ts +48 -0
- package/dist/backends/gui/navigation-bar.d.ts.map +1 -0
- package/dist/backends/gui/navigation-bar.js +45 -0
- package/dist/backends/gui/navigation-bar.js.map +1 -0
- package/dist/backends/gui/news-timeline.cjs +47 -0
- package/dist/backends/gui/news-timeline.d.ts +39 -0
- package/dist/backends/gui/news-timeline.d.ts.map +1 -0
- package/dist/backends/gui/news-timeline.js +45 -0
- package/dist/backends/gui/news-timeline.js.map +1 -0
- package/dist/backends/gui/order-entry.cjs +53 -0
- package/dist/backends/gui/order-entry.d.ts +21 -0
- package/dist/backends/gui/order-entry.d.ts.map +1 -0
- package/dist/backends/gui/order-entry.js +52 -0
- package/dist/backends/gui/order-entry.js.map +1 -0
- package/dist/backends/gui/orders-history.cjs +102 -0
- package/dist/backends/gui/orders-history.d.ts +24 -0
- package/dist/backends/gui/orders-history.d.ts.map +1 -0
- package/dist/backends/gui/orders-history.js +67 -0
- package/dist/backends/gui/orders-history.js.map +1 -0
- package/dist/backends/gui/pagination.cjs +51 -0
- package/dist/backends/gui/pagination.d.ts +52 -0
- package/dist/backends/gui/pagination.d.ts.map +1 -0
- package/dist/backends/gui/pagination.js +42 -0
- package/dist/backends/gui/pagination.js.map +1 -0
- package/dist/backends/gui/particles-background.cjs +135 -0
- package/dist/backends/gui/particles-background.d.ts +24 -0
- package/dist/backends/gui/particles-background.d.ts.map +1 -0
- package/dist/backends/gui/particles-background.js +133 -0
- package/dist/backends/gui/particles-background.js.map +1 -0
- package/dist/backends/gui/particles.cjs +145 -0
- package/dist/backends/gui/particles.d.ts +25 -0
- package/dist/backends/gui/particles.d.ts.map +1 -0
- package/dist/backends/gui/particles.js +143 -0
- package/dist/backends/gui/particles.js.map +1 -0
- package/dist/backends/gui/pill.cjs +82 -0
- package/dist/backends/gui/pill.d.ts +12 -0
- package/dist/backends/gui/pill.d.ts.map +1 -0
- package/dist/backends/gui/pill.js +78 -0
- package/dist/backends/gui/pill.js.map +1 -0
- package/dist/backends/gui/pin-list.cjs +82 -0
- package/dist/backends/gui/pin-list.d.ts +42 -0
- package/dist/backends/gui/pin-list.d.ts.map +1 -0
- package/dist/backends/gui/pin-list.js +80 -0
- package/dist/backends/gui/pin-list.js.map +1 -0
- package/dist/backends/gui/pixel-image.cjs +63 -0
- package/dist/backends/gui/pixel-image.d.ts +21 -0
- package/dist/backends/gui/pixel-image.d.ts.map +1 -0
- package/dist/backends/gui/pixel-image.js +61 -0
- package/dist/backends/gui/pixel-image.js.map +1 -0
- package/dist/backends/gui/positions-list.cjs +60 -0
- package/dist/backends/gui/positions-list.d.ts +14 -0
- package/dist/backends/gui/positions-list.d.ts.map +1 -0
- package/dist/backends/gui/positions-list.js +58 -0
- package/dist/backends/gui/positions-list.js.map +1 -0
- package/dist/backends/gui/qr-code.cjs +438 -0
- package/dist/backends/gui/qr-code.d.ts +42 -0
- package/dist/backends/gui/qr-code.d.ts.map +1 -0
- package/dist/backends/gui/qr-code.js +402 -0
- package/dist/backends/gui/qr-code.js.map +1 -0
- package/dist/backends/gui/relative-time.cjs +167 -0
- package/dist/backends/gui/relative-time.d.ts +10 -0
- package/dist/backends/gui/relative-time.d.ts.map +1 -0
- package/dist/backends/gui/relative-time.js +132 -0
- package/dist/backends/gui/relative-time.js.map +1 -0
- package/dist/backends/gui/safari.cjs +65 -0
- package/dist/backends/gui/safari.d.ts +23 -0
- package/dist/backends/gui/safari.d.ts.map +1 -0
- package/dist/backends/gui/safari.js +63 -0
- package/dist/backends/gui/safari.js.map +1 -0
- package/dist/backends/gui/snippet.cjs +144 -0
- package/dist/backends/gui/snippet.d.ts +38 -0
- package/dist/backends/gui/snippet.d.ts.map +1 -0
- package/dist/backends/gui/snippet.js +141 -0
- package/dist/backends/gui/snippet.js.map +1 -0
- package/dist/backends/gui/stars-scrolling-wheel.cjs +106 -0
- package/dist/backends/gui/stars-scrolling-wheel.d.ts +24 -0
- package/dist/backends/gui/stars-scrolling-wheel.d.ts.map +1 -0
- package/dist/backends/gui/stars-scrolling-wheel.js +104 -0
- package/dist/backends/gui/stars-scrolling-wheel.js.map +1 -0
- package/dist/backends/gui/status.cjs +79 -0
- package/dist/backends/gui/status.d.ts +15 -0
- package/dist/backends/gui/status.d.ts.map +1 -0
- package/dist/backends/gui/status.js +77 -0
- package/dist/backends/gui/status.js.map +1 -0
- package/dist/backends/gui/stock-market.cjs +21 -0
- package/dist/backends/gui/stock-market.d.ts +17 -0
- package/dist/backends/gui/stock-market.d.ts.map +1 -0
- package/dist/backends/gui/stock-market.js +19 -0
- package/dist/backends/gui/stock-market.js.map +1 -0
- package/dist/backends/gui/stock-screener.cjs +55 -0
- package/dist/backends/gui/stock-screener.d.ts +41 -0
- package/dist/backends/gui/stock-screener.d.ts.map +1 -0
- package/dist/backends/gui/stock-screener.js +53 -0
- package/dist/backends/gui/stock-screener.js.map +1 -0
- package/dist/backends/gui/symbol-info.cjs +46 -0
- package/dist/backends/gui/symbol-info.d.ts +36 -0
- package/dist/backends/gui/symbol-info.d.ts.map +1 -0
- package/dist/backends/gui/symbol-info.js +44 -0
- package/dist/backends/gui/symbol-info.js.map +1 -0
- package/dist/backends/gui/table.cjs +104 -0
- package/dist/backends/gui/table.d.ts +57 -0
- package/dist/backends/gui/table.d.ts.map +1 -0
- package/dist/backends/gui/table.js +95 -0
- package/dist/backends/gui/table.js.map +1 -0
- package/dist/backends/gui/tags.cjs +22 -0
- package/dist/backends/gui/tags.d.ts +22 -0
- package/dist/backends/gui/tags.d.ts.map +1 -0
- package/dist/backends/gui/tags.js +20 -0
- package/dist/backends/gui/tags.js.map +1 -0
- package/dist/backends/gui/technical-analysis.cjs +58 -0
- package/dist/backends/gui/technical-analysis.d.ts +41 -0
- package/dist/backends/gui/technical-analysis.d.ts.map +1 -0
- package/dist/backends/gui/technical-analysis.js +56 -0
- package/dist/backends/gui/technical-analysis.js.map +1 -0
- package/dist/backends/gui/terminal.cjs +266 -0
- package/dist/backends/gui/terminal.d.ts +38 -0
- package/dist/backends/gui/terminal.d.ts.map +1 -0
- package/dist/backends/gui/terminal.js +231 -0
- package/dist/backends/gui/terminal.js.map +1 -0
- package/dist/backends/gui/ticker.cjs +79 -0
- package/dist/backends/gui/ticker.d.ts +19 -0
- package/dist/backends/gui/ticker.d.ts.map +1 -0
- package/dist/backends/gui/ticker.js +44 -0
- package/dist/backends/gui/ticker.js.map +1 -0
- package/dist/backends/gui/timeline.cjs +154 -0
- package/dist/backends/gui/timeline.d.ts +42 -0
- package/dist/backends/gui/timeline.d.ts.map +1 -0
- package/dist/backends/gui/timeline.js +118 -0
- package/dist/backends/gui/timeline.js.map +1 -0
- package/dist/backends/gui/toggle.cjs +96 -0
- package/dist/backends/gui/toggle.d.ts +29 -0
- package/dist/backends/gui/toggle.d.ts.map +1 -0
- package/dist/backends/gui/toggle.js +95 -0
- package/dist/backends/gui/toggle.js.map +1 -0
- package/dist/backends/gui/video-player.cjs +383 -0
- package/dist/backends/gui/video-player.d.ts +54 -0
- package/dist/backends/gui/video-player.d.ts.map +1 -0
- package/dist/backends/gui/video-player.js +348 -0
- package/dist/backends/gui/video-player.js.map +1 -0
- package/dist/chat/Composer.cjs +10 -10
- package/dist/chat/Composer.d.ts +16 -17
- package/dist/chat/Composer.d.ts.map +1 -1
- package/dist/chat/Composer.js +11 -11
- package/dist/chat/Composer.js.map +1 -1
- package/dist/gallery.cjs +180 -1
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +391 -3
- package/dist/gallery.js +181 -2
- package/dist/gallery.js.map +1 -1
- package/dist/index.cjs +110 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +110 -1
- package/dist/index.node.js +1 -1
- package/dist/styles.css +356 -0
- 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"}
|