@steez-ui/ui 0.1.7 → 0.1.9

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 CHANGED
@@ -101,9 +101,9 @@ GitHub Actions mirror the same CI, npm publish, and Cloudflare Pages deploy path
101
101
 
102
102
  ## Current Packages
103
103
 
104
- - `@steez-ui/theme@0.1.7`
105
- - `@steez-ui/icons@0.1.7`
106
- - `@steez-ui/ui@0.1.7`
104
+ - `@steez-ui/theme@0.1.9`
105
+ - `@steez-ui/icons@0.1.9`
106
+ - `@steez-ui/ui@0.1.9`
107
107
 
108
108
  ## External Setup
109
109
 
@@ -0,0 +1,18 @@
1
+ export interface SignalTrailBackdropProps {
2
+ className?: string;
3
+ color?: string;
4
+ linesCount?: number;
5
+ segments?: number;
6
+ lineSpeed?: number;
7
+ signalDensity?: number;
8
+ trailLength?: number;
9
+ shapeSize?: number;
10
+ amplitude?: number;
11
+ tiltX?: number;
12
+ tiltY?: number;
13
+ baseOpacity?: number;
14
+ shapeOpacity?: number;
15
+ }
16
+ export declare function SignalTrailBackdrop({ className, color, linesCount, segments, lineSpeed, signalDensity, trailLength, shapeSize, amplitude, tiltX, tiltY, baseOpacity, shapeOpacity, }: SignalTrailBackdropProps): import("react/jsx-runtime").JSX.Element;
17
+ export default SignalTrailBackdrop;
18
+ //# sourceMappingURL=SignalTrailBackdrop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalTrailBackdrop.d.ts","sourceRoot":"","sources":["../../src/components/SignalTrailBackdrop.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0ID,wBAAgB,mBAAmB,CAAC,EAClC,SAAc,EACd,KAAiB,EACjB,UAAgB,EAChB,QAAc,EACd,SAAgB,EAChB,aAAoB,EACpB,WAAkB,EAClB,SAAe,EACf,SAAgB,EAChB,KAAY,EACZ,KAAa,EACb,WAAkB,EAClB,YAAkB,GACnB,EAAE,wBAAwB,2CAqG1B;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,211 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import * as THREE from "three";
4
+ import styles from "./SignalTrailBackdrop.module.css";
5
+ const VERTEX_SHADER = `
6
+ uniform float uTime;
7
+ uniform float uSize;
8
+ uniform float uAmplitude;
9
+ uniform float uRotZ;
10
+ uniform float uScaleX;
11
+
12
+ varying vec2 vUv;
13
+ varying float vZ;
14
+ varying float vLineIndex;
15
+ varying float vHeightNorm;
16
+
17
+ vec2 rotate2d(vec2 value, float angle) {
18
+ float s = sin(angle);
19
+ float c = cos(angle);
20
+ return mat2(c, -s, s, c) * value;
21
+ }
22
+
23
+ float ellipseHeight(vec2 point, vec2 radii, float weight) {
24
+ vec2 normalized = point / radii;
25
+ float q = dot(normalized, normalized);
26
+ if (q >= 1.0) return 0.0;
27
+ return sqrt(1.0 - q) * weight;
28
+ }
29
+
30
+ float getFigureHeight(vec2 point, float size) {
31
+ float head = ellipseHeight(point - vec2(0.0, size * 0.72), vec2(size * 0.16, size * 0.18), size * 0.34);
32
+ float shoulders = ellipseHeight(point - vec2(0.0, size * 0.34), vec2(size * 0.46, size * 0.14), size * 0.22);
33
+ float torso = ellipseHeight(point - vec2(0.0, size * 0.04), vec2(size * 0.28, size * 0.50), size * 0.64);
34
+ float hips = ellipseHeight(point - vec2(0.0, -size * 0.44), vec2(size * 0.24, size * 0.24), size * 0.36);
35
+ float legLeft = ellipseHeight(point - vec2(-size * 0.09, -size * 0.94), vec2(size * 0.11, size * 0.40), size * 0.22);
36
+ float legRight = ellipseHeight(point - vec2(size * 0.09, -size * 0.94), vec2(size * 0.11, size * 0.40), size * 0.22);
37
+ return max(max(max(head, shoulders), max(torso, hips)), max(legLeft, legRight));
38
+ }
39
+
40
+ void main() {
41
+ vUv = uv;
42
+ vLineIndex = uv.y;
43
+
44
+ vec3 positionNext = position;
45
+ vec2 point = positionNext.xy;
46
+ point.x /= uScaleX;
47
+ point = rotate2d(point, -uRotZ);
48
+
49
+ float height = getFigureHeight(point, uSize);
50
+ float transition = smoothstep(0.0, 0.08, abs(height) + 0.01);
51
+ positionNext.z += height * transition * uAmplitude;
52
+
53
+ vZ = positionNext.z;
54
+ vHeightNorm = smoothstep(0.0, uSize * 0.55 * uAmplitude, abs(height));
55
+
56
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(positionNext, 1.0);
57
+ }
58
+ `;
59
+ const FRAGMENT_SHADER = `
60
+ uniform float uTime;
61
+ uniform float uTrailLength;
62
+ uniform float uDensity;
63
+ uniform float uBaseOpacity;
64
+ uniform float uShapeOpacity;
65
+ uniform vec3 uColor;
66
+
67
+ varying vec2 vUv;
68
+ varying float vZ;
69
+ varying float vLineIndex;
70
+ varying float vHeightNorm;
71
+
72
+ float randomValue(vec2 value) {
73
+ return fract(sin(dot(value.xy, vec2(12.9898, 78.233))) * 43758.5453123);
74
+ }
75
+
76
+ void main() {
77
+ float seed = floor(vLineIndex * 3000.0);
78
+ float speed = 0.55 + randomValue(vec2(seed, 11.0)) * 0.95;
79
+ float offset = randomValue(vec2(seed, 21.0)) * 24.0;
80
+ float visibility = step(1.0 - uDensity, randomValue(vec2(seed, 31.0)));
81
+
82
+ float baseStrength = mix(uBaseOpacity, uShapeOpacity, vHeightNorm);
83
+ vec3 finalColor = uColor * baseStrength;
84
+
85
+ if (visibility > 0.5) {
86
+ float phase = fract(vUv.x * 4.75 - uTime * speed + offset);
87
+ float trailStart = 1.0 - max(uTrailLength, 0.002);
88
+ float trail = smoothstep(trailStart, 1.0, phase);
89
+ float brightness = pow(trail, 12.0) * 2.8;
90
+
91
+ if (phase < trailStart) {
92
+ brightness = 0.0;
93
+ }
94
+
95
+ finalColor += uColor * brightness;
96
+ }
97
+
98
+ float contour = smoothstep(0.12, 1.0, abs(vZ)) * 0.18;
99
+ finalColor += uColor * contour;
100
+
101
+ float alpha = clamp(baseStrength * 0.75 + contour, 0.0, 1.0);
102
+ gl_FragColor = vec4(finalColor, alpha);
103
+ }
104
+ `;
105
+ function createGeometry(linesCount, segments) {
106
+ const width = 32;
107
+ const height = 24;
108
+ const geometry = new THREE.BufferGeometry();
109
+ const positions = [];
110
+ const uvs = [];
111
+ const indices = [];
112
+ for (let lineIndex = 0; lineIndex < linesCount; lineIndex += 1) {
113
+ const y = (lineIndex / (linesCount - 1)) * height - height / 2;
114
+ for (let segmentIndex = 0; segmentIndex <= segments; segmentIndex += 1) {
115
+ const x = (segmentIndex / segments) * width - width / 2;
116
+ positions.push(x, y, 0);
117
+ uvs.push(segmentIndex / segments, lineIndex / Math.max(linesCount - 1, 1));
118
+ if (segmentIndex < segments) {
119
+ const index = lineIndex * (segments + 1) + segmentIndex;
120
+ indices.push(index, index + 1);
121
+ }
122
+ }
123
+ }
124
+ geometry.setAttribute("position", new THREE.Float32BufferAttribute(positions, 3));
125
+ geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
126
+ geometry.setIndex(indices);
127
+ return geometry;
128
+ }
129
+ export function SignalTrailBackdrop({ className = "", color = "#7ae4ff", linesCount = 110, segments = 800, lineSpeed = 0.22, signalDensity = 0.24, trailLength = 0.16, shapeSize = 4.1, amplitude = 1.05, tiltX = -0.2, tiltY = -0.28, baseOpacity = 0.12, shapeOpacity = 0.2, }) {
130
+ const containerRef = React.useRef(null);
131
+ React.useEffect(() => {
132
+ const container = containerRef.current;
133
+ if (!container) {
134
+ return undefined;
135
+ }
136
+ const scene = new THREE.Scene();
137
+ const camera = new THREE.PerspectiveCamera(45, 1, 0.1, 100);
138
+ camera.position.set(-10, 0, 15);
139
+ const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
140
+ renderer.setClearColor(0x000000, 0);
141
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));
142
+ renderer.domElement.className = styles.canvas;
143
+ container.appendChild(renderer.domElement);
144
+ const material = new THREE.ShaderMaterial({
145
+ vertexShader: VERTEX_SHADER,
146
+ fragmentShader: FRAGMENT_SHADER,
147
+ uniforms: {
148
+ uTime: { value: 0 },
149
+ uColor: { value: new THREE.Color(color) },
150
+ uSize: { value: shapeSize },
151
+ uAmplitude: { value: amplitude },
152
+ uRotZ: { value: 0 },
153
+ uScaleX: { value: 1.05 },
154
+ uTrailLength: { value: trailLength },
155
+ uDensity: { value: signalDensity },
156
+ uBaseOpacity: { value: baseOpacity },
157
+ uShapeOpacity: { value: shapeOpacity },
158
+ },
159
+ transparent: true,
160
+ depthTest: false,
161
+ blending: THREE.AdditiveBlending,
162
+ });
163
+ const mesh = new THREE.LineSegments(createGeometry(linesCount, segments), material);
164
+ mesh.rotation.x = tiltX;
165
+ mesh.rotation.y = tiltY;
166
+ scene.add(mesh);
167
+ const clock = new THREE.Clock();
168
+ let animationFrame = 0;
169
+ const resize = () => {
170
+ const width = Math.max(container.clientWidth, 1);
171
+ const height = Math.max(container.clientHeight, 1);
172
+ camera.aspect = width / height;
173
+ camera.updateProjectionMatrix();
174
+ renderer.setSize(width, height, false);
175
+ };
176
+ resize();
177
+ const resizeObserver = new ResizeObserver(resize);
178
+ resizeObserver.observe(container);
179
+ const animate = () => {
180
+ animationFrame = window.requestAnimationFrame(animate);
181
+ material.uniforms.uTime.value +=
182
+ clock.getDelta() * Math.max(lineSpeed, 0.01);
183
+ renderer.render(scene, camera);
184
+ };
185
+ animate();
186
+ return () => {
187
+ window.cancelAnimationFrame(animationFrame);
188
+ resizeObserver.disconnect();
189
+ mesh.geometry.dispose();
190
+ material.dispose();
191
+ renderer.dispose();
192
+ container.removeChild(renderer.domElement);
193
+ };
194
+ }, [
195
+ amplitude,
196
+ baseOpacity,
197
+ color,
198
+ lineSpeed,
199
+ linesCount,
200
+ segments,
201
+ shapeOpacity,
202
+ shapeSize,
203
+ signalDensity,
204
+ tiltX,
205
+ tiltY,
206
+ trailLength,
207
+ ]);
208
+ return (_jsx("div", { ref: containerRef, className: `${styles.root} ${className}`.trim(), "aria-hidden": "true" }));
209
+ }
210
+ export default SignalTrailBackdrop;
211
+ //# sourceMappingURL=SignalTrailBackdrop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignalTrailBackdrop.js","sourceRoot":"","sources":["../../src/components/SignalTrailBackdrop.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport * as THREE from \"three\";\n\nimport styles from \"./SignalTrailBackdrop.module.css\";\n\nexport interface SignalTrailBackdropProps {\n className?: string;\n color?: string;\n linesCount?: number;\n segments?: number;\n lineSpeed?: number;\n signalDensity?: number;\n trailLength?: number;\n shapeSize?: number;\n amplitude?: number;\n tiltX?: number;\n tiltY?: number;\n baseOpacity?: number;\n shapeOpacity?: number;\n}\n\nconst VERTEX_SHADER = `\n uniform float uTime;\n uniform float uSize;\n uniform float uAmplitude;\n uniform float uRotZ;\n uniform float uScaleX;\n\n varying vec2 vUv;\n varying float vZ;\n varying float vLineIndex;\n varying float vHeightNorm;\n\n vec2 rotate2d(vec2 value, float angle) {\n float s = sin(angle);\n float c = cos(angle);\n return mat2(c, -s, s, c) * value;\n }\n\n float ellipseHeight(vec2 point, vec2 radii, float weight) {\n vec2 normalized = point / radii;\n float q = dot(normalized, normalized);\n if (q >= 1.0) return 0.0;\n return sqrt(1.0 - q) * weight;\n }\n\n float getFigureHeight(vec2 point, float size) {\n float head = ellipseHeight(point - vec2(0.0, size * 0.72), vec2(size * 0.16, size * 0.18), size * 0.34);\n float shoulders = ellipseHeight(point - vec2(0.0, size * 0.34), vec2(size * 0.46, size * 0.14), size * 0.22);\n float torso = ellipseHeight(point - vec2(0.0, size * 0.04), vec2(size * 0.28, size * 0.50), size * 0.64);\n float hips = ellipseHeight(point - vec2(0.0, -size * 0.44), vec2(size * 0.24, size * 0.24), size * 0.36);\n float legLeft = ellipseHeight(point - vec2(-size * 0.09, -size * 0.94), vec2(size * 0.11, size * 0.40), size * 0.22);\n float legRight = ellipseHeight(point - vec2(size * 0.09, -size * 0.94), vec2(size * 0.11, size * 0.40), size * 0.22);\n return max(max(max(head, shoulders), max(torso, hips)), max(legLeft, legRight));\n }\n\n void main() {\n vUv = uv;\n vLineIndex = uv.y;\n\n vec3 positionNext = position;\n vec2 point = positionNext.xy;\n point.x /= uScaleX;\n point = rotate2d(point, -uRotZ);\n\n float height = getFigureHeight(point, uSize);\n float transition = smoothstep(0.0, 0.08, abs(height) + 0.01);\n positionNext.z += height * transition * uAmplitude;\n\n vZ = positionNext.z;\n vHeightNorm = smoothstep(0.0, uSize * 0.55 * uAmplitude, abs(height));\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(positionNext, 1.0);\n }\n`;\n\nconst FRAGMENT_SHADER = `\n uniform float uTime;\n uniform float uTrailLength;\n uniform float uDensity;\n uniform float uBaseOpacity;\n uniform float uShapeOpacity;\n uniform vec3 uColor;\n\n varying vec2 vUv;\n varying float vZ;\n varying float vLineIndex;\n varying float vHeightNorm;\n\n float randomValue(vec2 value) {\n return fract(sin(dot(value.xy, vec2(12.9898, 78.233))) * 43758.5453123);\n }\n\n void main() {\n float seed = floor(vLineIndex * 3000.0);\n float speed = 0.55 + randomValue(vec2(seed, 11.0)) * 0.95;\n float offset = randomValue(vec2(seed, 21.0)) * 24.0;\n float visibility = step(1.0 - uDensity, randomValue(vec2(seed, 31.0)));\n\n float baseStrength = mix(uBaseOpacity, uShapeOpacity, vHeightNorm);\n vec3 finalColor = uColor * baseStrength;\n\n if (visibility > 0.5) {\n float phase = fract(vUv.x * 4.75 - uTime * speed + offset);\n float trailStart = 1.0 - max(uTrailLength, 0.002);\n float trail = smoothstep(trailStart, 1.0, phase);\n float brightness = pow(trail, 12.0) * 2.8;\n\n if (phase < trailStart) {\n brightness = 0.0;\n }\n\n finalColor += uColor * brightness;\n }\n\n float contour = smoothstep(0.12, 1.0, abs(vZ)) * 0.18;\n finalColor += uColor * contour;\n\n float alpha = clamp(baseStrength * 0.75 + contour, 0.0, 1.0);\n gl_FragColor = vec4(finalColor, alpha);\n }\n`;\n\nfunction createGeometry(linesCount: number, segments: number): THREE.BufferGeometry {\n const width = 32;\n const height = 24;\n const geometry = new THREE.BufferGeometry();\n const positions: number[] = [];\n const uvs: number[] = [];\n const indices: number[] = [];\n\n for (let lineIndex = 0; lineIndex < linesCount; lineIndex += 1) {\n const y = (lineIndex / (linesCount - 1)) * height - height / 2;\n for (let segmentIndex = 0; segmentIndex <= segments; segmentIndex += 1) {\n const x = (segmentIndex / segments) * width - width / 2;\n positions.push(x, y, 0);\n uvs.push(\n segmentIndex / segments,\n lineIndex / Math.max(linesCount - 1, 1),\n );\n\n if (segmentIndex < segments) {\n const index = lineIndex * (segments + 1) + segmentIndex;\n indices.push(index, index + 1);\n }\n }\n }\n\n geometry.setAttribute(\n \"position\",\n new THREE.Float32BufferAttribute(positions, 3),\n );\n geometry.setAttribute(\"uv\", new THREE.Float32BufferAttribute(uvs, 2));\n geometry.setIndex(indices);\n return geometry;\n}\n\nexport function SignalTrailBackdrop({\n className = \"\",\n color = \"#7ae4ff\",\n linesCount = 110,\n segments = 800,\n lineSpeed = 0.22,\n signalDensity = 0.24,\n trailLength = 0.16,\n shapeSize = 4.1,\n amplitude = 1.05,\n tiltX = -0.2,\n tiltY = -0.28,\n baseOpacity = 0.12,\n shapeOpacity = 0.2,\n}: SignalTrailBackdropProps) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return undefined;\n }\n\n const scene = new THREE.Scene();\n const camera = new THREE.PerspectiveCamera(45, 1, 0.1, 100);\n camera.position.set(-10, 0, 15);\n\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setClearColor(0x000000, 0);\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));\n renderer.domElement.className = styles.canvas;\n container.appendChild(renderer.domElement);\n\n const material = new THREE.ShaderMaterial({\n vertexShader: VERTEX_SHADER,\n fragmentShader: FRAGMENT_SHADER,\n uniforms: {\n uTime: { value: 0 },\n uColor: { value: new THREE.Color(color) },\n uSize: { value: shapeSize },\n uAmplitude: { value: amplitude },\n uRotZ: { value: 0 },\n uScaleX: { value: 1.05 },\n uTrailLength: { value: trailLength },\n uDensity: { value: signalDensity },\n uBaseOpacity: { value: baseOpacity },\n uShapeOpacity: { value: shapeOpacity },\n },\n transparent: true,\n depthTest: false,\n blending: THREE.AdditiveBlending,\n });\n\n const mesh = new THREE.LineSegments(\n createGeometry(linesCount, segments),\n material,\n );\n mesh.rotation.x = tiltX;\n mesh.rotation.y = tiltY;\n scene.add(mesh);\n\n const clock = new THREE.Clock();\n let animationFrame = 0;\n\n const resize = () => {\n const width = Math.max(container.clientWidth, 1);\n const height = Math.max(container.clientHeight, 1);\n camera.aspect = width / height;\n camera.updateProjectionMatrix();\n renderer.setSize(width, height, false);\n };\n\n resize();\n const resizeObserver = new ResizeObserver(resize);\n resizeObserver.observe(container);\n\n const animate = () => {\n animationFrame = window.requestAnimationFrame(animate);\n material.uniforms.uTime.value +=\n clock.getDelta() * Math.max(lineSpeed, 0.01);\n renderer.render(scene, camera);\n };\n\n animate();\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n resizeObserver.disconnect();\n mesh.geometry.dispose();\n material.dispose();\n renderer.dispose();\n container.removeChild(renderer.domElement);\n };\n }, [\n amplitude,\n baseOpacity,\n color,\n lineSpeed,\n linesCount,\n segments,\n shapeOpacity,\n shapeSize,\n signalDensity,\n tiltX,\n tiltY,\n trailLength,\n ]);\n\n return (\n <div\n ref={containerRef}\n className={`${styles.root} ${className}`.trim()}\n aria-hidden=\"true\"\n />\n );\n}\n\nexport default SignalTrailBackdrop;\n"]}
@@ -0,0 +1,11 @@
1
+ .root {
2
+ position: absolute;
3
+ inset: 0;
4
+ pointer-events: none;
5
+ }
6
+
7
+ .canvas {
8
+ display: block;
9
+ width: 100%;
10
+ height: 100%;
11
+ }
package/dist/index.d.ts CHANGED
@@ -25,6 +25,7 @@ export { QuickInfoCard, type QuickInfoCardProps, type QuickInfoItem, type Storag
25
25
  export { RuntimeOrbitDiagram, type RuntimeOrbitDiagramProps, type RuntimeOrbitNode, } from "./components/RuntimeOrbitDiagram.js";
26
26
  export { Section, type SectionProps } from "./components/Section.js";
27
27
  export { SectionHeader, type SectionHeaderProps, } from "./components/SectionHeader.js";
28
+ export { SignalTrailBackdrop, type SignalTrailBackdropProps, } from "./components/SignalTrailBackdrop.js";
28
29
  export { SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, } from "./components/SegmentedControl.js";
29
30
  export { StatCard, type StatCardProps } from "./components/StatCard.js";
30
31
  export { StatusMessage, type StatusMessageProps } from "./components/StatusMessage.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ export { QuickInfoCard, } from "./components/QuickInfoCard.js";
25
25
  export { RuntimeOrbitDiagram, } from "./components/RuntimeOrbitDiagram.js";
26
26
  export { Section } from "./components/Section.js";
27
27
  export { SectionHeader, } from "./components/SectionHeader.js";
28
+ export { SignalTrailBackdrop, } from "./components/SignalTrailBackdrop.js";
28
29
  export { SegmentedControl, } from "./components/SegmentedControl.js";
29
30
  export { StatCard } from "./components/StatCard.js";
30
31
  export { StatusMessage } from "./components/StatusMessage.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAoB,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAC;AACnG,OAAO,EACL,cAAc,GAEf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,EACd,mBAAmB,GAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,eAAe,GAGhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,cAAc,GAGf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,GAEnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,aAAa,EAGb,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,aAAa,GAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,YAAY,GAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,GAId,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAqB,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,aAAa,GAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,GAGjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,WAAW,EAA8C,MAAM,6BAA6B,CAAC;AACtG,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,UAAU,EAAyC,MAAM,4BAA4B,CAAC","sourcesContent":["export { AvatarStage, type AvatarStageProps } from \"./components/AvatarStage.js\";\nexport { BlinkText, type BlinkTextProps } from \"./components/BlinkText.js\";\nexport { Button, type ButtonProps } from \"./components/Button.js\";\nexport { CopyButton, type CopyButtonProps } from \"./components/CopyButton.js\";\nexport { CyberpunkCheckbox, type CyberpunkCheckboxProps } from \"./components/CyberpunkCheckbox.js\";\nexport {\n CyberpunkInput,\n type CyberpunkInputProps,\n} from \"./components/CyberpunkInput.js\";\nexport {\n CyberpunkRadio,\n CyberpunkRadioGroup,\n type CyberpunkRadioGroupProps,\n type CyberpunkRadioProps,\n} from \"./components/CyberpunkRadio.js\";\nexport {\n CyberpunkSelect,\n type CyberpunkSelectOption,\n type CyberpunkSelectProps,\n} from \"./components/CyberpunkSelect.js\";\nexport {\n CyberpunkSlider,\n type CyberpunkSliderProps,\n} from \"./components/CyberpunkSlider.js\";\nexport {\n CyberpunkTextarea,\n type CyberpunkTextareaProps,\n} from \"./components/CyberpunkTextarea.js\";\nexport { CyberpunkTile, type CyberpunkTileProps } from \"./components/CyberpunkTile.js\";\nexport { CornerBracketCard, type CornerBracketCardProps } from \"./components/CornerBracketCard.js\";\nexport { ErrorMessage, type ErrorMessageProps } from \"./components/ErrorMessage.js\";\nexport {\n HeartbeatIndicator,\n HeartbeatPulse,\n type HeartbeatIndicatorProps,\n type HeartbeatPulseProps,\n} from \"./components/HeartbeatPulse.js\";\nexport { HexagonGrid, type HexagonGridProps } from \"./components/HexagonGrid.js\";\nexport {\n LoadingOverlayCrystalline,\n type LoadingOverlayCrystallineProps,\n} from \"./components/LoadingOverlayCrystalline.js\";\nexport {\n LOADING_PROGRESS_SEGMENT_COUNT,\n LoadingProgressBar,\n type LoadingProgressBarProps,\n} from \"./components/LoadingProgressBar.js\";\nexport {\n LoadingScreen,\n type LoadingScreenProps,\n type LoadingStage,\n useLoadingProgress,\n} from \"./components/LoadingScreen.js\";\nexport { MarqueeStrip, type MarqueeStripProps } from \"./components/MarqueeStrip.js\";\nexport {\n OverlayButton,\n type OverlayButtonProps,\n} from \"./components/OverlayButton.js\";\nexport { PageHeader, type PageHeaderProps } from \"./components/PageHeader.js\";\nexport { PageTemplate, type PageTemplateProps } from \"./components/PageTemplate.js\";\nexport {\n PixelTooltip,\n type PixelTooltipProps,\n} from \"./components/PixelTooltip.js\";\nexport {\n QuickInfoCard,\n type QuickInfoCardProps,\n type QuickInfoItem,\n type StorageProgress,\n} from \"./components/QuickInfoCard.js\";\nexport {\n RuntimeOrbitDiagram,\n type RuntimeOrbitDiagramProps,\n type RuntimeOrbitNode,\n} from \"./components/RuntimeOrbitDiagram.js\";\nexport { Section, type SectionProps } from \"./components/Section.js\";\nexport {\n SectionHeader,\n type SectionHeaderProps,\n} from \"./components/SectionHeader.js\";\nexport {\n SegmentedControl,\n type SegmentedControlOption,\n type SegmentedControlProps,\n} from \"./components/SegmentedControl.js\";\nexport { StatCard, type StatCardProps } from \"./components/StatCard.js\";\nexport { StatusMessage, type StatusMessageProps } from \"./components/StatusMessage.js\";\nexport { StrokedText, type StrokedTextProps } from \"./components/StrokedText.js\";\nexport { TabbedPanel, type TabbedPanelProps, type TabbedPanelTab } from \"./components/TabbedPanel.js\";\nexport { ThemedCard, type ThemedCardProps } from \"./components/ThemedCard.js\";\nexport { ThemeToggle, type ThemeToggleProps } from \"./components/ThemeToggle.js\";\nexport { WidgetCard, type WidgetCardProps, type WidgetSize } from \"./components/WidgetCard.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAoB,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAC;AACnG,OAAO,EACL,cAAc,GAEf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,cAAc,EACd,mBAAmB,GAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,eAAe,GAGhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,cAAc,GAGf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,yBAAyB,GAE1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,GAEnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,aAAa,EAGb,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,aAAa,GAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAC;AACpF,OAAO,EACL,YAAY,GAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,GAId,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAqB,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,aAAa,GAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,GAEpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,GAGjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,WAAW,EAA8C,MAAM,6BAA6B,CAAC;AACtG,OAAO,EAAE,UAAU,EAAwB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,UAAU,EAAyC,MAAM,4BAA4B,CAAC","sourcesContent":["export { AvatarStage, type AvatarStageProps } from \"./components/AvatarStage.js\";\nexport { BlinkText, type BlinkTextProps } from \"./components/BlinkText.js\";\nexport { Button, type ButtonProps } from \"./components/Button.js\";\nexport { CopyButton, type CopyButtonProps } from \"./components/CopyButton.js\";\nexport { CyberpunkCheckbox, type CyberpunkCheckboxProps } from \"./components/CyberpunkCheckbox.js\";\nexport {\n CyberpunkInput,\n type CyberpunkInputProps,\n} from \"./components/CyberpunkInput.js\";\nexport {\n CyberpunkRadio,\n CyberpunkRadioGroup,\n type CyberpunkRadioGroupProps,\n type CyberpunkRadioProps,\n} from \"./components/CyberpunkRadio.js\";\nexport {\n CyberpunkSelect,\n type CyberpunkSelectOption,\n type CyberpunkSelectProps,\n} from \"./components/CyberpunkSelect.js\";\nexport {\n CyberpunkSlider,\n type CyberpunkSliderProps,\n} from \"./components/CyberpunkSlider.js\";\nexport {\n CyberpunkTextarea,\n type CyberpunkTextareaProps,\n} from \"./components/CyberpunkTextarea.js\";\nexport { CyberpunkTile, type CyberpunkTileProps } from \"./components/CyberpunkTile.js\";\nexport { CornerBracketCard, type CornerBracketCardProps } from \"./components/CornerBracketCard.js\";\nexport { ErrorMessage, type ErrorMessageProps } from \"./components/ErrorMessage.js\";\nexport {\n HeartbeatIndicator,\n HeartbeatPulse,\n type HeartbeatIndicatorProps,\n type HeartbeatPulseProps,\n} from \"./components/HeartbeatPulse.js\";\nexport { HexagonGrid, type HexagonGridProps } from \"./components/HexagonGrid.js\";\nexport {\n LoadingOverlayCrystalline,\n type LoadingOverlayCrystallineProps,\n} from \"./components/LoadingOverlayCrystalline.js\";\nexport {\n LOADING_PROGRESS_SEGMENT_COUNT,\n LoadingProgressBar,\n type LoadingProgressBarProps,\n} from \"./components/LoadingProgressBar.js\";\nexport {\n LoadingScreen,\n type LoadingScreenProps,\n type LoadingStage,\n useLoadingProgress,\n} from \"./components/LoadingScreen.js\";\nexport { MarqueeStrip, type MarqueeStripProps } from \"./components/MarqueeStrip.js\";\nexport {\n OverlayButton,\n type OverlayButtonProps,\n} from \"./components/OverlayButton.js\";\nexport { PageHeader, type PageHeaderProps } from \"./components/PageHeader.js\";\nexport { PageTemplate, type PageTemplateProps } from \"./components/PageTemplate.js\";\nexport {\n PixelTooltip,\n type PixelTooltipProps,\n} from \"./components/PixelTooltip.js\";\nexport {\n QuickInfoCard,\n type QuickInfoCardProps,\n type QuickInfoItem,\n type StorageProgress,\n} from \"./components/QuickInfoCard.js\";\nexport {\n RuntimeOrbitDiagram,\n type RuntimeOrbitDiagramProps,\n type RuntimeOrbitNode,\n} from \"./components/RuntimeOrbitDiagram.js\";\nexport { Section, type SectionProps } from \"./components/Section.js\";\nexport {\n SectionHeader,\n type SectionHeaderProps,\n} from \"./components/SectionHeader.js\";\nexport {\n SignalTrailBackdrop,\n type SignalTrailBackdropProps,\n} from \"./components/SignalTrailBackdrop.js\";\nexport {\n SegmentedControl,\n type SegmentedControlOption,\n type SegmentedControlProps,\n} from \"./components/SegmentedControl.js\";\nexport { StatCard, type StatCardProps } from \"./components/StatCard.js\";\nexport { StatusMessage, type StatusMessageProps } from \"./components/StatusMessage.js\";\nexport { StrokedText, type StrokedTextProps } from \"./components/StrokedText.js\";\nexport { TabbedPanel, type TabbedPanelProps, type TabbedPanelTab } from \"./components/TabbedPanel.js\";\nexport { ThemedCard, type ThemedCardProps } from \"./components/ThemedCard.js\";\nexport { ThemeToggle, type ThemeToggleProps } from \"./components/ThemeToggle.js\";\nexport { WidgetCard, type WidgetCardProps, type WidgetSize } from \"./components/WidgetCard.js\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steez-ui/ui",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "React primitives authored with CSS modules for Steez UI.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,8 +12,9 @@
12
12
  "react-dom": ">=18"
13
13
  },
14
14
  "dependencies": {
15
- "@steez-ui/icons": "^0.1.7",
16
- "@steez-ui/theme": "^0.1.7"
15
+ "@steez-ui/icons": "^0.1.9",
16
+ "@steez-ui/theme": "^0.1.9",
17
+ "three": "^0.179.1"
17
18
  },
18
19
  "exports": {
19
20
  ".": {