@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.
Files changed (117) hide show
  1. package/README.md +9 -9
  2. package/dist/components/agent-icon.d.ts +7 -0
  3. package/dist/components/agent-icon.d.ts.map +1 -0
  4. package/dist/components/agent-icon.js +5 -0
  5. package/dist/components/agent-icon.js.map +1 -0
  6. package/dist/components/autocomplete.d.ts +20 -0
  7. package/dist/components/autocomplete.d.ts.map +1 -0
  8. package/dist/components/autocomplete.js +81 -0
  9. package/dist/components/autocomplete.js.map +1 -0
  10. package/dist/components/badge.d.ts +13 -0
  11. package/dist/components/badge.d.ts.map +1 -0
  12. package/dist/components/badge.js +26 -0
  13. package/dist/components/badge.js.map +1 -0
  14. package/dist/components/button.d.ts +14 -0
  15. package/dist/components/button.d.ts.map +1 -0
  16. package/dist/components/button.js +32 -0
  17. package/dist/components/button.js.map +1 -0
  18. package/dist/components/combobox.d.ts +28 -0
  19. package/dist/components/combobox.d.ts.map +1 -0
  20. package/dist/components/combobox.js +58 -0
  21. package/dist/components/combobox.js.map +1 -0
  22. package/dist/components/command.d.ts +20 -0
  23. package/dist/components/command.d.ts.map +1 -0
  24. package/dist/components/command.js +34 -0
  25. package/dist/components/command.js.map +1 -0
  26. package/dist/components/dialog.d.ts +17 -0
  27. package/dist/components/dialog.d.ts.map +1 -0
  28. package/dist/components/dialog.js +36 -0
  29. package/dist/components/dialog.js.map +1 -0
  30. package/dist/components/dropdown-menu.d.ts +19 -0
  31. package/dist/components/dropdown-menu.d.ts.map +1 -0
  32. package/dist/components/dropdown-menu.js +33 -0
  33. package/dist/components/dropdown-menu.js.map +1 -0
  34. package/dist/components/github-background.d.ts +3 -0
  35. package/dist/components/github-background.d.ts.map +1 -0
  36. package/dist/components/github-background.js +99 -0
  37. package/dist/components/github-background.js.map +1 -0
  38. package/dist/components/halftone-background.d.ts +3 -0
  39. package/dist/components/halftone-background.d.ts.map +1 -0
  40. package/dist/components/halftone-background.js +247 -0
  41. package/dist/components/halftone-background.js.map +1 -0
  42. package/dist/components/halftone-config.d.ts +12 -0
  43. package/dist/components/halftone-config.d.ts.map +1 -0
  44. package/dist/components/halftone-config.js +12 -0
  45. package/dist/components/halftone-config.js.map +1 -0
  46. package/dist/components/input-group.d.ts +21 -0
  47. package/dist/components/input-group.d.ts.map +1 -0
  48. package/dist/components/input-group.js +58 -0
  49. package/dist/components/input-group.js.map +1 -0
  50. package/dist/components/input.d.ts +5 -0
  51. package/dist/components/input.d.ts.map +1 -0
  52. package/dist/components/input.js +7 -0
  53. package/dist/components/input.js.map +1 -0
  54. package/dist/components/live-duration.d.ts +9 -0
  55. package/dist/components/live-duration.d.ts.map +1 -0
  56. package/dist/components/live-duration.js +64 -0
  57. package/dist/components/live-duration.js.map +1 -0
  58. package/dist/components/logo.d.ts +8 -0
  59. package/dist/components/logo.d.ts.map +1 -0
  60. package/dist/components/logo.js +9 -0
  61. package/dist/components/logo.js.map +1 -0
  62. package/dist/components/popover.d.ts +12 -0
  63. package/dist/components/popover.d.ts.map +1 -0
  64. package/dist/components/popover.js +30 -0
  65. package/dist/components/popover.js.map +1 -0
  66. package/dist/components/resize-handle.d.ts +12 -0
  67. package/dist/components/resize-handle.d.ts.map +1 -0
  68. package/dist/components/resize-handle.js +36 -0
  69. package/dist/components/resize-handle.js.map +1 -0
  70. package/dist/components/sheet.d.ts +18 -0
  71. package/dist/components/sheet.d.ts.map +1 -0
  72. package/dist/components/sheet.js +42 -0
  73. package/dist/components/sheet.js.map +1 -0
  74. package/dist/components/textarea.d.ts +5 -0
  75. package/dist/components/textarea.d.ts.map +1 -0
  76. package/dist/components/textarea.js +7 -0
  77. package/dist/components/textarea.js.map +1 -0
  78. package/dist/components/time-ago.d.ts +8 -0
  79. package/dist/components/time-ago.d.ts.map +1 -0
  80. package/dist/components/time-ago.js +56 -0
  81. package/dist/components/time-ago.js.map +1 -0
  82. package/dist/components/tooltip.d.ts +10 -0
  83. package/dist/components/tooltip.d.ts.map +1 -0
  84. package/dist/components/tooltip.js +23 -0
  85. package/dist/components/tooltip.js.map +1 -0
  86. package/dist/foundation/cn.d.ts +3 -0
  87. package/dist/foundation/cn.d.ts.map +1 -0
  88. package/dist/foundation/cn.js +5 -0
  89. package/dist/foundation/cn.js.map +1 -0
  90. package/dist/index.d.ts +22 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +22 -0
  93. package/dist/index.js.map +1 -0
  94. package/package.json +39 -27
  95. package/src/components/agent-icon.tsx +16 -16
  96. package/src/components/autocomplete.tsx +166 -162
  97. package/src/components/badge.tsx +46 -45
  98. package/src/components/button.tsx +56 -63
  99. package/src/components/combobox.tsx +233 -228
  100. package/src/components/command.tsx +135 -139
  101. package/src/components/dialog.tsx +106 -98
  102. package/src/components/dropdown-menu.tsx +118 -115
  103. package/src/components/github-background.tsx +214 -216
  104. package/src/components/halftone-background.tsx +164 -155
  105. package/src/components/halftone-config.ts +8 -8
  106. package/src/components/input-group.tsx +149 -147
  107. package/src/components/input.tsx +17 -17
  108. package/src/components/live-duration.tsx +70 -64
  109. package/src/components/logo.tsx +9 -13
  110. package/src/components/popover.tsx +60 -62
  111. package/src/components/resize-handle.tsx +73 -75
  112. package/src/components/sheet.tsx +120 -112
  113. package/src/components/textarea.tsx +15 -15
  114. package/src/components/time-ago.tsx +64 -62
  115. package/src/components/tooltip.tsx +48 -42
  116. package/src/foundation/styles.css +6 -4
  117. 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,3 @@
1
+ import type * as React from 'react';
2
+ export declare function GitHubBackground(): React.JSX.Element;
3
+ //# sourceMappingURL=github-background.d.ts.map
@@ -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,3 @@
1
+ import type * as React from 'react';
2
+ export declare function HalftoneBackground(): React.JSX.Element;
3
+ //# sourceMappingURL=halftone-background.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,5 @@
1
+ import type * as React from 'react';
2
+ import type { ComponentProps } from 'react';
3
+ declare function Input({ className, type, ...props }: ComponentProps<'input'>): React.JSX.Element;
4
+ export { Input };
5
+ //# sourceMappingURL=input.d.ts.map
@@ -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"}