@playfast/reform-better-hub-ui-primitives 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/dist/components/agent-icon.d.ts +7 -0
- package/dist/components/agent-icon.d.ts.map +1 -0
- package/dist/components/agent-icon.js +5 -0
- package/dist/components/agent-icon.js.map +1 -0
- package/dist/components/autocomplete.d.ts +20 -0
- package/dist/components/autocomplete.d.ts.map +1 -0
- package/dist/components/autocomplete.js +81 -0
- package/dist/components/autocomplete.js.map +1 -0
- package/dist/components/badge.d.ts +13 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +26 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +14 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +32 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/combobox.d.ts +28 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +58 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +20 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +34 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/dialog.d.ts +17 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +36 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +19 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +33 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/github-background.d.ts +3 -0
- package/dist/components/github-background.d.ts.map +1 -0
- package/dist/components/github-background.js +99 -0
- package/dist/components/github-background.js.map +1 -0
- package/dist/components/halftone-background.d.ts +3 -0
- package/dist/components/halftone-background.d.ts.map +1 -0
- package/dist/components/halftone-background.js +247 -0
- package/dist/components/halftone-background.js.map +1 -0
- package/dist/components/halftone-config.d.ts +12 -0
- package/dist/components/halftone-config.d.ts.map +1 -0
- package/dist/components/halftone-config.js +12 -0
- package/dist/components/halftone-config.js.map +1 -0
- package/dist/components/input-group.d.ts +21 -0
- package/dist/components/input-group.d.ts.map +1 -0
- package/dist/components/input-group.js +58 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input.d.ts +5 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +7 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/live-duration.d.ts +9 -0
- package/dist/components/live-duration.d.ts.map +1 -0
- package/dist/components/live-duration.js +64 -0
- package/dist/components/live-duration.js.map +1 -0
- package/dist/components/logo.d.ts +8 -0
- package/dist/components/logo.d.ts.map +1 -0
- package/dist/components/logo.js +9 -0
- package/dist/components/logo.js.map +1 -0
- package/dist/components/popover.d.ts +12 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +30 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/resize-handle.d.ts +12 -0
- package/dist/components/resize-handle.d.ts.map +1 -0
- package/dist/components/resize-handle.js +36 -0
- package/dist/components/resize-handle.js.map +1 -0
- package/dist/components/sheet.d.ts +18 -0
- package/dist/components/sheet.d.ts.map +1 -0
- package/dist/components/sheet.js +42 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +7 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/time-ago.d.ts +8 -0
- package/dist/components/time-ago.d.ts.map +1 -0
- package/dist/components/time-ago.js +56 -0
- package/dist/components/time-ago.js.map +1 -0
- package/dist/components/tooltip.d.ts +10 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +23 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/foundation/cn.d.ts +3 -0
- package/dist/foundation/cn.d.ts.map +1 -0
- package/dist/foundation/cn.js +5 -0
- package/dist/foundation/cn.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -27
- package/src/components/agent-icon.tsx +16 -16
- package/src/components/autocomplete.tsx +166 -162
- package/src/components/badge.tsx +46 -45
- package/src/components/button.tsx +56 -63
- package/src/components/combobox.tsx +233 -228
- package/src/components/command.tsx +135 -139
- package/src/components/dialog.tsx +106 -98
- package/src/components/dropdown-menu.tsx +118 -115
- package/src/components/github-background.tsx +214 -216
- package/src/components/halftone-background.tsx +164 -155
- package/src/components/halftone-config.ts +8 -8
- package/src/components/input-group.tsx +149 -147
- package/src/components/input.tsx +17 -17
- package/src/components/live-duration.tsx +70 -64
- package/src/components/logo.tsx +9 -13
- package/src/components/popover.tsx +60 -62
- package/src/components/resize-handle.tsx +73 -75
- package/src/components/sheet.tsx +120 -112
- package/src/components/textarea.tsx +15 -15
- package/src/components/time-ago.tsx +64 -62
- package/src/components/tooltip.tsx +48 -42
- package/src/foundation/styles.css +6 -4
- package/src/index.ts +21 -21
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
3
|
+
import { CheckIcon } from 'lucide-react';
|
|
4
|
+
import { cn } from '../foundation/cn.js';
|
|
5
|
+
function DropdownMenu({ ...props }) {
|
|
6
|
+
return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
7
|
+
}
|
|
8
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
9
|
+
return (_jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props, className: cn('rounded-sm', props.className) }));
|
|
10
|
+
}
|
|
11
|
+
function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
|
|
12
|
+
return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('bg-background text-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', className), ...props }) }));
|
|
13
|
+
}
|
|
14
|
+
function DropdownMenuGroup({ ...props }) {
|
|
15
|
+
return _jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
16
|
+
}
|
|
17
|
+
function DropdownMenuItem({ className, inset, ...props }) {
|
|
18
|
+
return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, className: cn("focus:bg-accent [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props }));
|
|
19
|
+
}
|
|
20
|
+
function DropdownMenuCheckboxItem({ className, children, ...props }) {
|
|
21
|
+
return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", className: cn("focus:bg-accent relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), children] }));
|
|
22
|
+
}
|
|
23
|
+
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
24
|
+
return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className), ...props }));
|
|
25
|
+
}
|
|
26
|
+
function DropdownMenuSeparator({ className, ...props }) {
|
|
27
|
+
return (_jsx(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn('bg-border -mx-1 my-1 h-px', className), ...props }));
|
|
28
|
+
}
|
|
29
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
30
|
+
return (_jsx("span", { "data-slot": "dropdown-menu-shortcut", className: cn('text-muted-foreground ml-auto text-xs tracking-widest', className), ...props }));
|
|
31
|
+
}
|
|
32
|
+
export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuSeparator, DropdownMenuShortcut, };
|
|
33
|
+
//# sourceMappingURL=dropdown-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","sourceRoot":"","sources":["../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-background.d.ts","sourceRoot":"","sources":["../../src/components/github-background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AA+EnC,wBAAgB,gBAAgB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAmKpD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
const RNG_MULTIPLIER = 16807;
|
|
4
|
+
const RNG_MODULUS = 2147483647;
|
|
5
|
+
const RNG_DIVISOR = 2147483646;
|
|
6
|
+
const RNG_SEED = 42;
|
|
7
|
+
const WEEKS = 52;
|
|
8
|
+
const DAYS_PER_WEEK = 7;
|
|
9
|
+
const CELL = 15;
|
|
10
|
+
const CELL_RECT_SIZE = 12;
|
|
11
|
+
const CELL_ANIM_WEEK_DELAY = 0.04;
|
|
12
|
+
const CELL_ANIM_DAY_DELAY = 0.015;
|
|
13
|
+
const LEVELS = [
|
|
14
|
+
'rgba(255,255,255,0.02)',
|
|
15
|
+
'rgba(255,255,255,0.10)',
|
|
16
|
+
'rgba(255,255,255,0.18)',
|
|
17
|
+
'rgba(255,255,255,0.28)',
|
|
18
|
+
'rgba(255,255,255,0.40)',
|
|
19
|
+
];
|
|
20
|
+
const LEVEL_THRESHOLDS = [0.3, 0.5, 0.7, 0.85];
|
|
21
|
+
const COMMIT_GROUPS = [
|
|
22
|
+
{
|
|
23
|
+
prefix: 'm',
|
|
24
|
+
cx: 200,
|
|
25
|
+
radius: 4,
|
|
26
|
+
fill: 'rgba(255,255,255,0.25)',
|
|
27
|
+
ys: [80, 150, 230, 300, 400, 480, 550, 620, 690, 770, 850],
|
|
28
|
+
animBase: 0.5,
|
|
29
|
+
animStep: 0.15,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
prefix: 'f1',
|
|
33
|
+
cx: 280,
|
|
34
|
+
radius: 3.5,
|
|
35
|
+
fill: 'rgba(255,255,255,0.20)',
|
|
36
|
+
ys: [230, 280, 330],
|
|
37
|
+
animBase: 1.0,
|
|
38
|
+
animStep: 0.2,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
prefix: 'f2',
|
|
42
|
+
cx: 130,
|
|
43
|
+
radius: 3.5,
|
|
44
|
+
fill: 'rgba(255,255,255,0.18)',
|
|
45
|
+
ys: [360, 420, 470],
|
|
46
|
+
animBase: 1.5,
|
|
47
|
+
animStep: 0.2,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
prefix: 'hf',
|
|
51
|
+
cx: 260,
|
|
52
|
+
radius: 3,
|
|
53
|
+
fill: 'rgba(255,255,255,0.15)',
|
|
54
|
+
ys: [600, 630, 660],
|
|
55
|
+
animBase: 2.0,
|
|
56
|
+
animStep: 0.2,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
prefix: 'f3',
|
|
60
|
+
cx: 110,
|
|
61
|
+
radius: 3,
|
|
62
|
+
fill: 'rgba(255,255,255,0.12)',
|
|
63
|
+
ys: [680, 730, 780],
|
|
64
|
+
animBase: 2.4,
|
|
65
|
+
animStep: 0.2,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
const nextSeed = (seed) => (seed * RNG_MULTIPLIER) % RNG_MODULUS;
|
|
69
|
+
const seedToUnit = (seed) => (seed - 1) / RNG_DIVISOR;
|
|
70
|
+
const levelForValue = (sample) => LEVEL_THRESHOLDS.filter((threshold) => sample >= threshold).length;
|
|
71
|
+
export function GitHubBackground() {
|
|
72
|
+
const grid = useMemo(() => Array.from({ length: WEEKS * DAYS_PER_WEEK }).reduce((acc, _slot, flatIndex) => {
|
|
73
|
+
const seed = nextSeed(acc.seed);
|
|
74
|
+
const level = levelForValue(seedToUnit(seed));
|
|
75
|
+
const week = Math.floor(flatIndex / DAYS_PER_WEEK);
|
|
76
|
+
const day = flatIndex % DAYS_PER_WEEK;
|
|
77
|
+
return { seed, cells: [...acc.cells, { week, day, level }] };
|
|
78
|
+
}, { seed: RNG_SEED, cells: [] }).cells, []);
|
|
79
|
+
return (_jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", style: { zIndex: 2 }, children: [_jsxs("div", { className: "absolute inset-0", style: {
|
|
80
|
+
maskImage: 'radial-gradient(ellipse 85% 75% at 45% 35%, black 15%, transparent 60%)',
|
|
81
|
+
WebkitMaskImage: 'radial-gradient(ellipse 85% 75% at 45% 35%, black 15%, transparent 60%)',
|
|
82
|
+
}, children: [_jsx("div", { className: "absolute", style: {
|
|
83
|
+
top: '8%',
|
|
84
|
+
left: '50%',
|
|
85
|
+
transform: 'translate(-50%, 0) perspective(500px) rotateX(30deg) rotateZ(-2deg) scale(1.3)',
|
|
86
|
+
transformOrigin: 'center top',
|
|
87
|
+
opacity: 0.4,
|
|
88
|
+
}, children: _jsx("svg", { width: WEEKS * CELL, height: DAYS_PER_WEEK * CELL, viewBox: `0 0 ${WEEKS * CELL} ${DAYS_PER_WEEK * CELL}`, children: grid.map((cell, index) => (_jsx("rect", { x: cell.week * CELL, y: cell.day * CELL, width: CELL_RECT_SIZE, height: CELL_RECT_SIZE, rx: 2, fill: LEVELS[cell.level], opacity: 0, children: _jsx("animate", { attributeName: "opacity", from: "0", to: "1", dur: "0.5s", begin: `${cell.week * CELL_ANIM_WEEK_DELAY + cell.day * CELL_ANIM_DAY_DELAY}s`, fill: "freeze" }) }, index))) }) }), _jsxs("svg", { className: "absolute inset-0 w-full h-full", viewBox: "0 0 400 900", preserveAspectRatio: "xMidYMid slice", style: { opacity: 0.45 }, children: [_jsx("line", { x1: "200", y1: "0", x2: "200", y2: "900", stroke: "rgba(255,255,255,0.15)", strokeWidth: "2", pathLength: 1, className: "git-line-anim", style: { animationDelay: '0.3s' } }), _jsx("path", { d: "M 200 150 C 200 180, 280 200, 280 230 L 280 350 C 280 380, 200 395, 200 400", stroke: "rgba(255,255,255,0.12)", strokeWidth: "2", fill: "none", pathLength: 1, className: "git-line-anim", style: { animationDelay: '0.8s' } }), _jsx("path", { d: "M 200 300 C 200 325, 130 340, 130 360 L 130 500 C 130 525, 200 540, 200 550", stroke: "rgba(255,255,255,0.10)", strokeWidth: "2", fill: "none", pathLength: 1, className: "git-line-anim", style: { animationDelay: '1.3s' } }), _jsx("path", { d: "M 200 550 C 200 570, 260 580, 260 600 L 260 650 C 260 670, 200 680, 200 690", stroke: "rgba(255,255,255,0.08)", strokeWidth: "2", fill: "none", pathLength: 1, className: "git-line-anim", style: { animationDelay: '1.8s' } }), _jsx("path", { d: "M 200 620 C 200 640, 110 660, 110 680 L 110 800 C 110 820, 200 835, 200 850", stroke: "rgba(255,255,255,0.07)", strokeWidth: "2", fill: "none", pathLength: 1, className: "git-line-anim", style: { animationDelay: '2.2s' } }), COMMIT_GROUPS.map((group) => group.ys.map((nodeY, index) => (_jsx("circle", { cx: group.cx, cy: nodeY, r: group.radius, fill: group.fill, opacity: 0, children: _jsx("animate", { attributeName: "opacity", from: "0", to: "1", dur: "0.3s", begin: `${group.animBase + index * group.animStep}s`, fill: "freeze" }) }, `${group.prefix}${index}`))))] })] }), _jsx("style", { children: `
|
|
89
|
+
.git-line-anim {
|
|
90
|
+
stroke-dasharray: 1;
|
|
91
|
+
stroke-dashoffset: 1;
|
|
92
|
+
animation: gitDraw 2.5s ease-out forwards;
|
|
93
|
+
}
|
|
94
|
+
@keyframes gitDraw {
|
|
95
|
+
to { stroke-dashoffset: 0; }
|
|
96
|
+
}
|
|
97
|
+
` })] }));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=github-background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-background.js","sourceRoot":"","sources":["../../src/components/github-background.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"halftone-background.d.ts","sourceRoot":"","sources":["../../src/components/halftone-background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AA8InC,wBAAgB,kBAAkB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAwJtD"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { CLICK_DECAY, FULLSCREEN_VERTEX_COUNT, MOUSE_LERP, MOUSE_LERP_IDLE, MS_PER_SECOND, RENDER_SCALE, VERTEX_SHADER, } from './halftone-config.js';
|
|
4
|
+
const FRAGMENT_SHADER = `
|
|
5
|
+
precision highp float;
|
|
6
|
+
|
|
7
|
+
uniform float u_time;
|
|
8
|
+
uniform vec2 u_resolution;
|
|
9
|
+
uniform vec2 u_mouse;
|
|
10
|
+
uniform float u_click;
|
|
11
|
+
uniform vec2 u_clickPos;
|
|
12
|
+
|
|
13
|
+
vec3 mod289(vec3 x) { return x - floor(x * (1.0/289.0)) * 289.0; }
|
|
14
|
+
vec2 mod289(vec2 x) { return x - floor(x * (1.0/289.0)) * 289.0; }
|
|
15
|
+
vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); }
|
|
16
|
+
|
|
17
|
+
float snoise(vec2 v) {
|
|
18
|
+
const vec4 C = vec4(
|
|
19
|
+
0.211324865405187,
|
|
20
|
+
0.366025403784439,
|
|
21
|
+
-0.577350269189626,
|
|
22
|
+
0.024390243902439
|
|
23
|
+
);
|
|
24
|
+
vec2 i = floor(v + dot(v, C.yy));
|
|
25
|
+
vec2 x0 = v - i + dot(i, C.xx);
|
|
26
|
+
vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
|
|
27
|
+
vec4 x12 = x0.xyxy + C.xxzz;
|
|
28
|
+
x12.xy -= i1;
|
|
29
|
+
i = mod289(i);
|
|
30
|
+
vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0));
|
|
31
|
+
vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
|
|
32
|
+
m = m*m;
|
|
33
|
+
m = m*m;
|
|
34
|
+
vec3 x = 2.0 * fract(p * C.www) - 1.0;
|
|
35
|
+
vec3 h = abs(x) - 0.5;
|
|
36
|
+
vec3 ox = floor(x + 0.5);
|
|
37
|
+
vec3 a0 = x - ox;
|
|
38
|
+
m *= 1.79284291400159 - 0.85373472095314 * (a0*a0 + h*h);
|
|
39
|
+
vec3 g;
|
|
40
|
+
g.x = a0.x * x0.x + h.x * x0.y;
|
|
41
|
+
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
|
42
|
+
return 130.0 * dot(m, g);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
float fbm(vec2 p) {
|
|
46
|
+
float value = 0.0;
|
|
47
|
+
float amp = 0.5;
|
|
48
|
+
float freq = 1.0;
|
|
49
|
+
for (int i = 0; i < 6; i++) {
|
|
50
|
+
value += amp * snoise(p * freq);
|
|
51
|
+
freq *= 2.0;
|
|
52
|
+
amp *= 0.5;
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
float hash21(vec2 p) {
|
|
58
|
+
p = fract(p * vec2(233.34, 851.73));
|
|
59
|
+
p += dot(p, p + 23.45);
|
|
60
|
+
return fract(p.x * p.y);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
void main() {
|
|
64
|
+
vec2 uv = gl_FragCoord.xy / u_resolution.xy;
|
|
65
|
+
float aspect = u_resolution.x / u_resolution.y;
|
|
66
|
+
float time = u_time;
|
|
67
|
+
float t = time * 0.04;
|
|
68
|
+
|
|
69
|
+
vec2 ap = vec2(uv.x * aspect, uv.y);
|
|
70
|
+
|
|
71
|
+
vec2 scaledP = ap * 2.5;
|
|
72
|
+
vec2 mUV = u_mouse;
|
|
73
|
+
mUV.x *= aspect;
|
|
74
|
+
mUV *= 2.5;
|
|
75
|
+
vec2 mDiff = scaledP - mUV;
|
|
76
|
+
float mDist = length(mDiff);
|
|
77
|
+
vec2 warp = vec2(0.0);
|
|
78
|
+
if (u_mouse.x > 0.0 && mDist < 0.5) {
|
|
79
|
+
warp = normalize(mDiff) * smoothstep(0.5, 0.0, mDist) * 0.2;
|
|
80
|
+
}
|
|
81
|
+
if (u_click > 0.01) {
|
|
82
|
+
vec2 cUV = u_clickPos;
|
|
83
|
+
cUV.x *= aspect;
|
|
84
|
+
cUV *= 2.5;
|
|
85
|
+
vec2 cD = scaledP - cUV;
|
|
86
|
+
float cDist = length(cD);
|
|
87
|
+
warp += normalize(cD + 0.001) * sin(cDist * 12.0 - time * 8.0) * u_click * 0.4 * exp(-cDist * 2.0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
vec2 np = scaledP + warp;
|
|
91
|
+
vec2 q = vec2(fbm(np + t * 0.3), fbm(np + vec2(5.2, 1.3) + t * 0.2));
|
|
92
|
+
vec2 r = vec2(
|
|
93
|
+
fbm(np + 4.0 * q + vec2(1.7, 9.2) + t * 0.15),
|
|
94
|
+
fbm(np + 4.0 * q + vec2(8.3, 2.8) + t * 0.12)
|
|
95
|
+
);
|
|
96
|
+
float f = fbm(np + 4.0 * r);
|
|
97
|
+
float noise = clamp(f*f*f + 0.6*f*f + 0.5*f, 0.0, 1.0) * 0.15;
|
|
98
|
+
|
|
99
|
+
vec2 gp = ap;
|
|
100
|
+
gp += vec2(snoise(ap * 3.0 + t), snoise(ap * 3.0 + t + 50.0)) * 0.004;
|
|
101
|
+
gp += warp * 0.04;
|
|
102
|
+
gp += vec2(t * 0.2, t * 0.12);
|
|
103
|
+
|
|
104
|
+
float cellTotal = 0.025;
|
|
105
|
+
vec2 cellId = floor(gp / cellTotal);
|
|
106
|
+
vec2 cellUV = fract(gp / cellTotal);
|
|
107
|
+
|
|
108
|
+
float pad = 0.10;
|
|
109
|
+
float edge = 0.04;
|
|
110
|
+
float inX = smoothstep(pad - edge, pad + edge, cellUV.x)
|
|
111
|
+
* (1.0 - smoothstep(1.0 - pad - edge, 1.0 - pad + edge, cellUV.x));
|
|
112
|
+
float inY = smoothstep(pad - edge, pad + edge, cellUV.y)
|
|
113
|
+
* (1.0 - smoothstep(1.0 - pad - edge, 1.0 - pad + edge, cellUV.y));
|
|
114
|
+
float inSquare = inX * inY;
|
|
115
|
+
|
|
116
|
+
float hVal = hash21(cellId);
|
|
117
|
+
float level = hVal < 0.35 ? 0.0 : (hVal - 0.35) / 0.65;
|
|
118
|
+
level *= level;
|
|
119
|
+
|
|
120
|
+
vec2 fp = uv - vec2(0.45, 0.55);
|
|
121
|
+
float gFade = max(1.0 - smoothstep(0.15, 0.45, length(fp * vec2(1.3, 1.6))), 0.0);
|
|
122
|
+
|
|
123
|
+
float gridReveal = smoothstep(0.5, 3.0, time);
|
|
124
|
+
float grid = inSquare * level * gFade * gridReveal * 0.10;
|
|
125
|
+
|
|
126
|
+
vec2 vc = uv - 0.5;
|
|
127
|
+
float vignette = 1.0 - dot(vc, vc) * 0.3;
|
|
128
|
+
|
|
129
|
+
float col = noise * vignette + grid;
|
|
130
|
+
gl_FragColor = vec4(vec3(col), 1.0);
|
|
131
|
+
}`;
|
|
132
|
+
export function HalftoneBackground() {
|
|
133
|
+
const canvasRef = useRef(null);
|
|
134
|
+
const wrapperRef = useRef(null);
|
|
135
|
+
const frameRef = useRef(0);
|
|
136
|
+
const mouseRef = useRef({ x: -1, y: -1 });
|
|
137
|
+
const smoothMouseRef = useRef({ x: -1, y: -1 });
|
|
138
|
+
const clickRef = useRef({ strength: 0, x: 0, y: 0 });
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
const canvas = canvasRef.current;
|
|
141
|
+
const wrapper = wrapperRef.current;
|
|
142
|
+
if (!canvas || !wrapper) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const glContext = canvas.getContext('webgl', {
|
|
146
|
+
alpha: false,
|
|
147
|
+
antialias: false,
|
|
148
|
+
preserveDrawingBuffer: false,
|
|
149
|
+
});
|
|
150
|
+
if (!glContext) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const createShader = ({ type, source }) => {
|
|
154
|
+
const shader = glContext.createShader(type);
|
|
155
|
+
glContext.shaderSource(shader, source);
|
|
156
|
+
glContext.compileShader(shader);
|
|
157
|
+
return shader;
|
|
158
|
+
};
|
|
159
|
+
const vertexShader = createShader({
|
|
160
|
+
type: glContext.VERTEX_SHADER,
|
|
161
|
+
source: VERTEX_SHADER,
|
|
162
|
+
});
|
|
163
|
+
const fragmentShader = createShader({
|
|
164
|
+
type: glContext.FRAGMENT_SHADER,
|
|
165
|
+
source: FRAGMENT_SHADER,
|
|
166
|
+
});
|
|
167
|
+
const program = glContext.createProgram();
|
|
168
|
+
glContext.attachShader(program, vertexShader);
|
|
169
|
+
glContext.attachShader(program, fragmentShader);
|
|
170
|
+
glContext.linkProgram(program);
|
|
171
|
+
glContext.useProgram(program);
|
|
172
|
+
const buffer = glContext.createBuffer();
|
|
173
|
+
glContext.bindBuffer(glContext.ARRAY_BUFFER, buffer);
|
|
174
|
+
glContext.bufferData(glContext.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), glContext.STATIC_DRAW);
|
|
175
|
+
const aPosition = glContext.getAttribLocation(program, 'a_position');
|
|
176
|
+
glContext.enableVertexAttribArray(aPosition);
|
|
177
|
+
glContext.vertexAttribPointer(aPosition, 2, glContext.FLOAT, false, 0, 0);
|
|
178
|
+
const uTime = glContext.getUniformLocation(program, 'u_time');
|
|
179
|
+
const uResolution = glContext.getUniformLocation(program, 'u_resolution');
|
|
180
|
+
const uMouse = glContext.getUniformLocation(program, 'u_mouse');
|
|
181
|
+
const uClick = glContext.getUniformLocation(program, 'u_click');
|
|
182
|
+
const uClickPos = glContext.getUniformLocation(program, 'u_clickPos');
|
|
183
|
+
const startTime = performance.now();
|
|
184
|
+
const resize = () => {
|
|
185
|
+
const dpr = Math.min(window.devicePixelRatio || 1, 2);
|
|
186
|
+
const scale = RENDER_SCALE * dpr;
|
|
187
|
+
canvas.width = canvas.offsetWidth * scale;
|
|
188
|
+
canvas.height = canvas.offsetHeight * scale;
|
|
189
|
+
glContext.viewport(0, 0, canvas.width, canvas.height);
|
|
190
|
+
};
|
|
191
|
+
resize();
|
|
192
|
+
window.addEventListener('resize', resize);
|
|
193
|
+
const onMouseMove = (event) => {
|
|
194
|
+
const rect = wrapper.getBoundingClientRect();
|
|
195
|
+
mouseRef.current.x = (event.clientX - rect.left) / rect.width;
|
|
196
|
+
mouseRef.current.y = 1.0 - (event.clientY - rect.top) / rect.height;
|
|
197
|
+
};
|
|
198
|
+
const onMouseLeave = () => {
|
|
199
|
+
mouseRef.current.x = -1;
|
|
200
|
+
mouseRef.current.y = -1;
|
|
201
|
+
};
|
|
202
|
+
const onClick = (event) => {
|
|
203
|
+
const rect = wrapper.getBoundingClientRect();
|
|
204
|
+
clickRef.current.x = (event.clientX - rect.left) / rect.width;
|
|
205
|
+
clickRef.current.y = 1.0 - (event.clientY - rect.top) / rect.height;
|
|
206
|
+
clickRef.current.strength = 1.0;
|
|
207
|
+
};
|
|
208
|
+
window.addEventListener('mousemove', onMouseMove, { passive: true });
|
|
209
|
+
wrapper.addEventListener('mouseleave', onMouseLeave);
|
|
210
|
+
wrapper.addEventListener('click', onClick);
|
|
211
|
+
const draw = () => {
|
|
212
|
+
const elapsed = (performance.now() - startTime) / MS_PER_SECOND;
|
|
213
|
+
const target = mouseRef.current;
|
|
214
|
+
const smooth = smoothMouseRef.current;
|
|
215
|
+
if (target.x < 0) {
|
|
216
|
+
smooth.x += (target.x - smooth.x) * MOUSE_LERP_IDLE;
|
|
217
|
+
smooth.y += (target.y - smooth.y) * MOUSE_LERP_IDLE;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
smooth.x += (target.x - smooth.x) * MOUSE_LERP;
|
|
221
|
+
smooth.y += (target.y - smooth.y) * MOUSE_LERP;
|
|
222
|
+
}
|
|
223
|
+
clickRef.current.strength *= CLICK_DECAY;
|
|
224
|
+
glContext.uniform1f(uTime, elapsed);
|
|
225
|
+
glContext.uniform2f(uResolution, canvas.width, canvas.height);
|
|
226
|
+
glContext.uniform2f(uMouse, smooth.x, smooth.y);
|
|
227
|
+
glContext.uniform1f(uClick, clickRef.current.strength);
|
|
228
|
+
glContext.uniform2f(uClickPos, clickRef.current.x, clickRef.current.y);
|
|
229
|
+
glContext.drawArrays(glContext.TRIANGLES, 0, FULLSCREEN_VERTEX_COUNT);
|
|
230
|
+
frameRef.current = requestAnimationFrame(draw);
|
|
231
|
+
};
|
|
232
|
+
frameRef.current = requestAnimationFrame(draw);
|
|
233
|
+
return () => {
|
|
234
|
+
cancelAnimationFrame(frameRef.current);
|
|
235
|
+
window.removeEventListener('resize', resize);
|
|
236
|
+
window.removeEventListener('mousemove', onMouseMove);
|
|
237
|
+
wrapper.removeEventListener('mouseleave', onMouseLeave);
|
|
238
|
+
wrapper.removeEventListener('click', onClick);
|
|
239
|
+
glContext.deleteProgram(program);
|
|
240
|
+
glContext.deleteShader(vertexShader);
|
|
241
|
+
glContext.deleteShader(fragmentShader);
|
|
242
|
+
glContext.deleteBuffer(buffer);
|
|
243
|
+
};
|
|
244
|
+
}, []);
|
|
245
|
+
return (_jsx("div", { ref: wrapperRef, className: "absolute inset-0 overflow-hidden", style: { background: 'var(--shader-bg)' }, "aria-hidden": "true", children: _jsx("canvas", { ref: canvasRef, className: "w-full h-full", style: { filter: 'var(--shader-filter)' } }) }));
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=halftone-background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"halftone-background.js","sourceRoot":"","sources":["../../src/components/halftone-background.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const VERTEX_SHADER = "\nattribute vec2 a_position;\nvoid main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n}";
|
|
2
|
+
export declare const RENDER_SCALE = 0.5;
|
|
3
|
+
export declare const MS_PER_SECOND = 1000;
|
|
4
|
+
export declare const MOUSE_LERP = 0.08;
|
|
5
|
+
export declare const MOUSE_LERP_IDLE = 0.02;
|
|
6
|
+
export declare const CLICK_DECAY = 0.96;
|
|
7
|
+
export declare const FULLSCREEN_VERTEX_COUNT = 6;
|
|
8
|
+
export type ShaderSpec = {
|
|
9
|
+
readonly type: number;
|
|
10
|
+
readonly source: string;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=halftone-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"halftone-config.d.ts","sourceRoot":"","sources":["../../src/components/halftone-config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,gGAIxB,CAAA;AAEF,eAAO,MAAM,YAAY,MAAM,CAAA;AAC/B,eAAO,MAAM,aAAa,OAAO,CAAA;AACjC,eAAO,MAAM,UAAU,OAAO,CAAA;AAC9B,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,WAAW,OAAO,CAAA;AAC/B,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const VERTEX_SHADER = `
|
|
2
|
+
attribute vec2 a_position;
|
|
3
|
+
void main() {
|
|
4
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
5
|
+
}`;
|
|
6
|
+
export const RENDER_SCALE = 0.5;
|
|
7
|
+
export const MS_PER_SECOND = 1000;
|
|
8
|
+
export const MOUSE_LERP = 0.08;
|
|
9
|
+
export const MOUSE_LERP_IDLE = 0.02;
|
|
10
|
+
export const CLICK_DECAY = 0.96;
|
|
11
|
+
export const FULLSCREEN_VERTEX_COUNT = 6;
|
|
12
|
+
//# sourceMappingURL=halftone-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"halftone-config.js","sourceRoot":"","sources":["../../src/components/halftone-config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;EAI3B,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAA;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA;AAC/B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
4
|
+
import type { ClassProp } from 'class-variance-authority/types';
|
|
5
|
+
import { Button } from './button.js';
|
|
6
|
+
declare function InputGroup({ className, ...props }: ComponentProps<'div'>): React.JSX.Element;
|
|
7
|
+
type InputGroupAddonVariantsExternalApi = (props?: ({
|
|
8
|
+
align?: 'inline-start' | 'inline-end' | 'block-start' | 'block-end' | undefined;
|
|
9
|
+
} & ClassProp) | undefined) => string;
|
|
10
|
+
declare const inputGroupAddonVariants: InputGroupAddonVariantsExternalApi;
|
|
11
|
+
declare function InputGroupAddon({ className, align, ...props }: ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>): React.JSX.Element;
|
|
12
|
+
type InputGroupButtonVariantsExternalApi = (props?: ({
|
|
13
|
+
size?: 'xs' | 'sm' | 'icon-xs' | 'icon-sm' | undefined;
|
|
14
|
+
} & ClassProp) | undefined) => string;
|
|
15
|
+
declare const inputGroupButtonVariants: InputGroupButtonVariantsExternalApi;
|
|
16
|
+
declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>): React.JSX.Element;
|
|
17
|
+
declare function InputGroupText({ className, ...props }: ComponentProps<'span'>): React.JSX.Element;
|
|
18
|
+
declare function InputGroupInput({ className, ...props }: ComponentProps<'input'>): React.JSX.Element;
|
|
19
|
+
declare function InputGroupTextarea({ className, ...props }: ComponentProps<'textarea'>): React.JSX.Element;
|
|
20
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
|
|
21
|
+
//# sourceMappingURL=input-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../src/components/input-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAIjC,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAoBrF;AAED,KAAK,kCAAkC,GAAG,CACxC,KAAK,CAAC,EACF,CAAC;IACC,KAAK,CAAC,EAAE,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAA;CAChF,GAAG,SAAS,CAAC,GACd,SAAS,KACV,MAAM,CAAA;AAEX,QAAA,MAAM,uBAAuB,EAAE,kCAiB9B,CAAA;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,KAAsB,EACtB,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiB1F;AAED,KAAK,mCAAmC,GAAG,CACzC,KAAK,CAAC,EACF,CAAC;IACC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;CACvD,GAAG,SAAS,CAAC,GACd,SAAS,KACV,MAAM,CAAA;AAEX,QAAA,MAAM,wBAAwB,EAAE,mCAe/B,CAAA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,IAAe,EACf,OAAiB,EACjB,IAAW,EACX,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,GAC5C,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUlE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAU1F;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAW5F;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWhD;AAED,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { cn } from '../foundation/cn.js';
|
|
4
|
+
import { Button } from './button.js';
|
|
5
|
+
import { Input } from './input.js';
|
|
6
|
+
import { Textarea } from './textarea.js';
|
|
7
|
+
function InputGroup({ className, ...props }) {
|
|
8
|
+
return (_jsx("div", { "data-slot": "input-group", role: "group", className: cn('group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none dark:bg-input/30', 'h-9 min-w-0 has-[>textarea]:h-auto', 'has-[>[data-align=inline-start]]:[&>input]:pl-2', 'has-[>[data-align=inline-end]]:[&>input]:pr-2', 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3', 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3', 'has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50', 'has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40', className), ...props }));
|
|
9
|
+
}
|
|
10
|
+
const inputGroupAddonVariants = cva("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
|
|
11
|
+
variants: {
|
|
12
|
+
align: {
|
|
13
|
+
'inline-start': 'order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]',
|
|
14
|
+
'inline-end': 'order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]',
|
|
15
|
+
'block-start': 'order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3',
|
|
16
|
+
'block-end': 'order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
align: 'inline-start',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
function InputGroupAddon({ className, align = 'inline-start', ...props }) {
|
|
24
|
+
return (_jsx("div", { role: "group", "data-slot": "input-group-addon", "data-align": align, className: cn(inputGroupAddonVariants({ align }), className), onClick: (event) => {
|
|
25
|
+
const target = event.target;
|
|
26
|
+
if (target instanceof HTMLElement && target.closest('button')) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
event.currentTarget.parentElement?.querySelector('input')?.focus();
|
|
30
|
+
}, ...props }));
|
|
31
|
+
}
|
|
32
|
+
const inputGroupButtonVariants = cva('flex items-center gap-2 text-sm shadow-none', {
|
|
33
|
+
variants: {
|
|
34
|
+
size: {
|
|
35
|
+
xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5",
|
|
36
|
+
sm: 'h-8 gap-1.5 rounded-md px-2.5 has-[>svg]:px-2.5',
|
|
37
|
+
'icon-xs': 'size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0',
|
|
38
|
+
'icon-sm': 'size-8 p-0 has-[>svg]:p-0',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
defaultVariants: {
|
|
42
|
+
size: 'xs',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
function InputGroupButton({ className, type = 'button', variant = 'ghost', size = 'xs', ...props }) {
|
|
46
|
+
return (_jsx(Button, { type: type, "data-size": size, variant: variant, className: cn(inputGroupButtonVariants({ size }), className), ...props }));
|
|
47
|
+
}
|
|
48
|
+
function InputGroupText({ className, ...props }) {
|
|
49
|
+
return (_jsx("span", { className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className), ...props }));
|
|
50
|
+
}
|
|
51
|
+
function InputGroupInput({ className, ...props }) {
|
|
52
|
+
return (_jsx(Input, { "data-slot": "input-group-control", className: cn('flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent', className), ...props }));
|
|
53
|
+
}
|
|
54
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
55
|
+
return (_jsx(Textarea, { "data-slot": "input-group-control", className: cn('flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent', className), ...props }));
|
|
56
|
+
}
|
|
57
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
|
|
58
|
+
//# sourceMappingURL=input-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.js","sourceRoot":"","sources":["../../src/components/input-group.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IAChE,OAAO,CACL,2BACY,aAAa,EACvB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,EAAE,CACX,0JAA0J,EAC1J,oCAAoC,EACpC,iDAAiD,EACjD,+CAA+C,EAC/C,gIAAgI,EAChI,0HAA0H,EAC1H,iMAAiM,EACjM,gLAAgL,EAEhL,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAUD,MAAM,uBAAuB,GAAuC,GAAG,CACrE,yPAAyP,EACzP;IACE,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,cAAc,EAAE,uEAAuE;YACvF,YAAY,EAAE,sEAAsE;YACpF,aAAa,EACX,mGAAmG;YACrG,WAAW,EACT,kGAAkG;SACrG;KACF;IACD,eAAe,EAAE;QACf,KAAK,EAAE,cAAc;KACtB;CACF,CACF,CAAA;AAED,SAAS,eAAe,CAAC,EACvB,SAAS,EACT,KAAK,GAAG,cAAc,EACtB,GAAG,KAAK,EAC6D;IACrE,OAAO,CACL,cACE,IAAI,EAAC,OAAO,eACF,mBAAmB,gBACjB,KAAK,EACjB,SAAS,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAC5D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAC3B,IAAI,MAAM,YAAY,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9D,OAAM;YACR,CAAC;YACD,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;QACpE,CAAC,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAUD,MAAM,wBAAwB,GAAwC,GAAG,CACvE,6CAA6C,EAC7C;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,yGAAyG;YAC7G,EAAE,EAAE,iDAAiD;YACrD,SAAS,EAAE,6DAA6D;YACxE,SAAS,EAAE,2BAA2B;SACvC;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAA;AAED,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,IAAI,GAAG,QAAQ,EACf,OAAO,GAAG,OAAO,EACjB,IAAI,GAAG,IAAI,EACX,GAAG,KAAK,EAEqC;IAC7C,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,IAAI,eACC,IAAI,EACf,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,KACxD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA0B;IACrE,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,wHAAwH,EACxH,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA2B;IACvE,OAAO,CACL,KAAC,KAAK,iBACM,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CACX,kGAAkG,EAClG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACmB;IAC3B,OAAO,CACL,KAAC,QAAQ,iBACG,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CACX,mHAAmH,EACnH,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAI3C,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAcxF;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../foundation/cn.js';
|
|
3
|
+
function Input({ className, type, ...props }) {
|
|
4
|
+
return (_jsx("input", { type: type, "data-slot": "input", className: cn('h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30', 'focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50', 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40', className), ...props }));
|
|
5
|
+
}
|
|
6
|
+
export { Input };
|
|
7
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAErC,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAA2B;IACnE,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,eACA,OAAO,EACjB,SAAS,EAAE,EAAE,CACX,4bAA4b,EAC5b,+EAA+E,EAC/E,wGAAwG,EACxG,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
interface LiveDurationPropsExternalApi {
|
|
3
|
+
startedAt: string | null;
|
|
4
|
+
completedAt?: string | null;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function LiveDuration({ startedAt, completedAt, className, }: LiveDurationPropsExternalApi): React.ReactNode;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=live-duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-duration.d.ts","sourceRoot":"","sources":["../../src/components/live-duration.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AA0DnC,UAAU,4BAA4B;IACpC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,WAAW,EACX,SAAS,GACV,EAAE,4BAA4B,GAAG,KAAK,CAAC,SAAS,CAsBhD"}
|