Initial commit after recreate

This commit is contained in:
2026-04-11 09:21:22 +02:00
commit 02704133f4
378 changed files with 93091 additions and 0 deletions
Binary file not shown.
@@ -0,0 +1,2 @@
import type { GlitchComponentProps } from './types';
export default function AssumptionToggle({ config, onComplete, onProgress, theme, className, host }: GlitchComponentProps): import("react/jsx-runtime").JSX.Element;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import './dev-theme.css';
@@ -0,0 +1,8 @@
import type { GlitchHostBridge } from './types';
export type DevHostBridgeOptions = {
isMuted?: () => boolean;
onSound?: (id: string, payload?: Record<string, unknown>) => void;
onEmit?: (type: string, payload?: unknown) => void;
};
export declare function createDevHostBridge(options?: DevHostBridgeOptions): GlitchHostBridge;
export declare function attachWindowSoundBridge(host: GlitchHostBridge): () => void;
@@ -0,0 +1,14 @@
{
"componentId": "assumption-toggle",
"displayName": "Assumption Toggle",
"version": "1.0.0",
"folderName": "glitch_assumption_toggle",
"packageName": "@nommo/assumption-toggle",
"entry": "dist/assumption-toggle.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"crt",
"logic"
]
}
@@ -0,0 +1,17 @@
import type { GlitchHostBridge } from './types';
export declare const HOST_SOUND_EVENT = "glitch:play-sound";
export declare const HOST_STOP_SOUND_EVENT = "glitch:stop-sound";
export declare const HOST_EMIT_PREFIX = "glitch:host:";
export declare const SOUND_IDS: {
readonly click: "ui.button_click";
readonly hover: "ui.button_hover";
readonly computeStart: "machine.compute_start";
readonly computeStep: "machine.compute_step";
readonly computeDone: "machine.compute_done";
readonly verdictStable: "machine.verdict_stable";
readonly verdictAlert: "machine.verdict_alert";
};
export type SoundId = (typeof SOUND_IDS)[keyof typeof SOUND_IDS];
export declare function safePlaySound(host: GlitchHostBridge | undefined, id: string, payload?: Record<string, unknown>): void;
export declare function safeStopSound(host: GlitchHostBridge | undefined, id: string, payload?: Record<string, unknown>): void;
export declare function safeEmit(host: GlitchHostBridge | undefined, type: string, payload?: unknown): void;
@@ -0,0 +1,6 @@
import './styles.css';
import Component from './Component';
import type { GlitchComponentMetadata } from './types';
export default Component;
export declare const metadata: GlitchComponentMetadata;
export type { GlitchComponentProps, GlitchComponentConfig, GlitchComponentResult } from './types';
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+56
View File
@@ -0,0 +1,56 @@
export interface GlitchComponentConfig {
id: string;
name: string;
version: string;
params: Record<string, unknown>;
}
export interface GlitchHostBridge {
playSound?: (id: string, payload?: Record<string, unknown>) => void;
stopSound?: (id: string, payload?: Record<string, unknown>) => void;
emit?: (type: string, payload?: unknown) => void;
}
export interface GlitchComponentProps {
config: GlitchComponentConfig;
onComplete: (result: GlitchComponentResult) => void;
onProgress?: (percent: number) => void;
theme?: GlitchTheme;
className?: string;
host?: GlitchHostBridge;
}
export interface GlitchComponentResult {
success: boolean;
score?: number;
data?: unknown;
error?: string;
}
export interface GlitchTheme {
primary: string;
accent: string;
bg: string;
bgSecondary: string;
text: string;
textMuted: string;
border: string;
}
export interface GlitchComponentMetadata {
name: string;
displayName: string;
version: string;
paramSchema: ParamSchema;
defaultParams: Record<string, unknown>;
}
export interface ParamSchema {
[key: string]: {
type: 'number' | 'string' | 'boolean' | 'color' | 'select' | 'range';
label?: string;
description?: string;
default: unknown;
options?: {
value: string | number;
label: string;
}[];
min?: number;
max?: number;
step?: number;
};
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+14
View File
@@ -0,0 +1,14 @@
{
"componentId": "ccd",
"displayName": "CCD Photon Explorer",
"version": "0.1.0",
"folderName": "glitch_ccd",
"packageName": "@glitch-components/ccd",
"entry": "dist/index.html",
"source": "src/index.tsx",
"tags": [
"internal",
"visualization",
"tooling"
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

+13
View File
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Glitch CCD</title>
<script type="module" crossorigin src="/assets/index-D02Mu-Ij.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Da7gUXQx.css">
</head>
<body>
<div id="root"></div>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
{
"componentId": "chess_analogy",
"displayName": "Chess Move Set Lab",
"version": "1.0.0",
"folderName": "glitch_chess_analogy",
"packageName": "@glitch-components/chess-analogy",
"entry": "dist/chess_analogy.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"reference",
"2d",
"chess"
]
}
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{j as a,G as r}from"./index-CEeZxcxj.js";function l({className:e}){return a.jsx("div",{className:e,children:a.jsx(r,{})})}const s={name:"gallery",displayName:"Glitch Gallery",version:"0.1.0",paramSchema:{},defaultParams:{}};export{l as default,s as metadata};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
._wrapper_61dhl_1{--gc-bg: var(--color-bg, #0a0a0f);--gc-bg-secondary: var(--color-bg-secondary, #12121a);--gc-text: var(--color-text, #e8e8ec);--gc-text-muted: var(--color-text-muted, #9999a8);--gc-primary: var(--color-primary, #6366f1);--gc-accent: var(--color-accent, #22d3ee);--gc-border: var(--color-border, #2a2a3a);--gc-font-main: var(--font-main, "Iceland", -apple-system, BlinkMacSystemFont, sans-serif);--gc-font-display: var(--font-display, "Russo One", -apple-system, BlinkMacSystemFont, sans-serif);--gc-font-text: "VT323", var(--font-mono, monospace);width:100%}._frame_61dhl_15{position:relative;width:100%;height:100dvh;min-height:100vh;overflow:hidden;border:1px solid color-mix(in srgb,var(--gc-border) 60%,transparent);color:var(--gc-text);font-family:var(--gc-font-text);background:radial-gradient(circle at 18% 14%,color-mix(in srgb,var(--gc-accent) 18%,transparent),transparent 35%),radial-gradient(circle at 88% 2%,color-mix(in srgb,var(--gc-primary) 22%,transparent),transparent 30%),linear-gradient(165deg,var(--gc-bg),var(--gc-bg-secondary))}._scan_61dhl_30{position:absolute;inset:0;pointer-events:none;opacity:.18;mix-blend-mode:screen;background:repeating-linear-gradient(to bottom,rgba(255,255,255,.1) 0,rgba(255,255,255,.1) 1px,transparent 1px,transparent 3px);animation:_scanDrift_61dhl_1 8s linear infinite}._stack_61dhl_47{position:relative;z-index:1;height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:22px 16px 18px}._meta_61dhl_57{display:flex;justify-content:space-between;align-items:center;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--gc-text-muted);font-family:var(--gc-font-main)}._progressTrack_61dhl_68{margin-top:8px;width:100%;height:3px;border-radius:999px;overflow:hidden;background:color-mix(in srgb,var(--gc-accent) 20%,transparent)}._progressFill_61dhl_77{height:100%;transition:width .24s ease;background:linear-gradient(90deg,var(--gc-accent),color-mix(in srgb,var(--gc-primary) 45%,var(--gc-accent)))}._slide_61dhl_87{flex:1;display:flex;flex-direction:column;justify-content:center;gap:20px}._title_61dhl_95{margin:0;width:fit-content;font-family:var(--gc-font-display);text-transform:uppercase;letter-spacing:.02em;line-height:1.04;font-size:clamp(28px,8.5vw,46px)}._rgbGlitch_61dhl_105{position:relative;display:inline-block}._rgbBase_61dhl_110{position:relative;z-index:1;color:color-mix(in srgb,var(--gc-text) 38%,#000)}._rgbLayer_61dhl_116{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:.2}._layerR_61dhl_124{color:#ff3737bf;animation:_layerRShift_61dhl_1 2.4s infinite steps(2,end)}._layerG_61dhl_129{color:#37ff5fbf;animation:_layerGShift_61dhl_1 2.1s infinite steps(2,end)}._layerB_61dhl_134{color:#4182ffbf;animation:_layerBShift_61dhl_1 2.7s infinite steps(2,end)}._content_61dhl_139{display:flex;flex-direction:column;gap:10px;font-family:var(--gc-font-text);font-size:clamp(16px,4.2vw,22px);line-height:1.45}._line_61dhl_148{margin:0;color:var(--gc-text)}._spacer_61dhl_153{margin:0;min-height:.6em}._list_61dhl_158{margin:3px 0 0;padding-left:1.1em;display:flex;flex-direction:column;gap:7px}._warning_61dhl_166{list-style:none;padding-left:0}._warning_61dhl_166 li:before{content:"- ";color:var(--gc-accent)}._cta_61dhl_176{margin-top:10px;width:fit-content;border:1px solid var(--gc-accent);background:color-mix(in srgb,var(--gc-accent) 8%,transparent);color:var(--gc-accent);font:inherit;letter-spacing:.06em;text-transform:uppercase;padding:10px 14px;cursor:pointer;font-family:var(--gc-font-main);transition:transform .14s ease,background-color .14s ease}._cta_61dhl_176:active{transform:scale(.98)}._controls_61dhl_195{display:grid;grid-template-columns:1fr 1fr;gap:8px}._navButton_61dhl_201{border:1px solid color-mix(in srgb,var(--gc-border) 70%,transparent);background:color-mix(in srgb,var(--gc-bg-secondary) 75%,transparent);color:var(--gc-text);font:inherit;text-transform:uppercase;letter-spacing:.08em;padding:10px 12px;cursor:pointer;font-family:var(--gc-font-main)}._navButton_61dhl_201:disabled{opacity:.45;cursor:not-allowed}@keyframes _layerRShift_61dhl_1{0%,81%,to{transform:translate(0)}84%{transform:translate(-4px,2px)}88%{transform:translate(4px,-2px)}92%{transform:translate(2px)}96%{transform:translate(-2px,2px)}}@keyframes _layerGShift_61dhl_1{0%,79%,to{transform:translate(0)}83%{transform:translate(2px,-2px)}87%{transform:translate(-2px,4px)}91%{transform:translateY(-2px)}95%{transform:translate(2px)}}@keyframes _layerBShift_61dhl_1{0%,82%,to{transform:translate(0)}86%{transform:translate(4px)}90%{transform:translate(-4px,-2px)}94%{transform:translate(2px,2px)}98%{transform:translate(-2px)}}@keyframes _scanDrift_61dhl_1{0%{transform:translateY(-10px)}to{transform:translateY(10px)}}@media(min-width:600px){._frame_61dhl_15{max-width:420px;margin:0 auto}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{r as c,j as s}from"./index-CEeZxcxj.js";const w="_wrapper_61dhl_1",k="_frame_61dhl_15",v="_scan_61dhl_30",S="_stack_61dhl_47",B="_meta_61dhl_57",$="_progressTrack_61dhl_68",C="_progressFill_61dhl_77",E="_slide_61dhl_87",G="_title_61dhl_95",L="_rgbGlitch_61dhl_105",F="_rgbBase_61dhl_110",R="_rgbLayer_61dhl_116",Y="_layerR_61dhl_124",I="_layerG_61dhl_129",P="_layerB_61dhl_134",W="_content_61dhl_139",M="_line_61dhl_148",A="_spacer_61dhl_153",D="_list_61dhl_158",H="_warning_61dhl_166",O="_cta_61dhl_176",q="_controls_61dhl_195",U="_navButton_61dhl_201",e={wrapper:w,frame:k,scan:v,stack:S,meta:B,progressTrack:$,progressFill:C,slide:E,title:G,rgbGlitch:L,rgbBase:F,rgbLayer:R,layerR:Y,layerG:I,layerB:P,content:W,line:M,spacer:A,list:D,warning:H,cta:O,controls:q,navButton:U},z=40,i=[{title:"The Premise",lines:["This facility tests foundational assumptions.","","Not interpretations.","Assumptions."]},{title:"The method",lines:["This is math and philosophy.","Make assumption.","Pretend it's true.","Where does that lead?"]},{title:"The law",lines:["We make predictions.","If they fail, the idea fails."]},{title:"The way",lines:["You will:"],bullets:["Pass challenges","Collect paradoxes","Examine anomalies","Learn to think sharply"]},{title:"Warning",lines:["You may feel:"],bullets:["This is not a game!","Temporary confusion","The urge to defend existing physics!"],bulletStyle:"warning",after:"Good. This is not for everyone."},{title:"How This Works",lines:["Watch a short module","Pass the glitch gate","Unlock the next tech","That's it. For now."]},{title:"Proceed",lines:["You may proceed as an investigator.","Begin at the intersection","Get briefed"],cta:"[ ENTER FACILITY ]"}];function K({config:h,onComplete:u,onProgress:_,theme:n,className:p}){const[l,g]=c.useState(0),o=c.useRef(null),y=c.useMemo(()=>n?{"--gc-primary":n.primary,"--gc-accent":n.accent,"--gc-bg":n.bg,"--gc-bg-secondary":n.bgSecondary,"--gc-text":n.text,"--gc-text-muted":n.textMuted,"--gc-border":n.border}:{},[n]);c.useEffect(()=>{const t=(l+1)/i.length*100;_?.(Math.round(t))},[l,_]);const d=c.useCallback(t=>{if(t>0&&l===i.length-1){g(0);return}const r=l+t;r<0||r>=i.length||g(r)},[l]),b=c.useCallback(t=>{o.current=t.changedTouches[0]?.clientY??null},[]),x=c.useCallback(t=>{if(o.current==null)return;const r=t.changedTouches[0]?.clientY??o.current,m=o.current-r;Math.abs(m)>z&&d(m>0?1:-1),o.current=null},[d]),f=c.useCallback(()=>{u({success:!0,score:100,data:{sequence:"facility-slideshow",configId:h.id,completedAt:new Date().toISOString()}})},[h.id,u]),a=i[l],j=l===i.length-1,N=(l+1)/i.length*100,T=p?`${e.wrapper} ${p}`:e.wrapper;return s.jsx("div",{className:T,style:y,children:s.jsxs("section",{className:e.frame,"aria-label":"Facility onboarding slideshow",onTouchStart:b,onTouchEnd:x,children:[s.jsx("div",{className:e.scan,"aria-hidden":"true"}),s.jsxs("div",{className:e.stack,children:[s.jsxs("header",{children:[s.jsxs("div",{className:e.meta,children:[s.jsx("span",{children:"Glitch Facility"}),s.jsxs("span",{children:[l+1," / ",i.length]})]}),s.jsx("div",{className:e.progressTrack,children:s.jsx("div",{className:e.progressFill,style:{width:`${N}%`}})})]}),s.jsxs("article",{className:e.slide,"aria-live":"polite",children:[s.jsx("h2",{className:e.title,children:s.jsxs("span",{className:e.rgbGlitch,children:[s.jsx("span",{className:e.rgbBase,children:a.title}),s.jsx("span",{className:`${e.rgbLayer} ${e.layerR}`,"aria-hidden":"true",children:a.title}),s.jsx("span",{className:`${e.rgbLayer} ${e.layerG}`,"aria-hidden":"true",children:a.title}),s.jsx("span",{className:`${e.rgbLayer} ${e.layerB}`,"aria-hidden":"true",children:a.title})]})}),s.jsxs("div",{className:e.content,children:[a.lines.map((t,r)=>t===""?s.jsx("p",{className:e.spacer,"aria-hidden":"true"},`line-${r}`):s.jsx("p",{className:e.line,children:t},`line-${r}`)),a.bullets&&s.jsx("ul",{className:`${e.list} ${a.bulletStyle==="warning"?e.warning:""}`,children:a.bullets.map(t=>s.jsx("li",{children:t},t))}),a.after&&s.jsx("p",{className:e.line,children:a.after}),a.cta&&s.jsx("button",{type:"button",className:e.cta,onClick:f,children:a.cta})]})]}),s.jsxs("nav",{className:e.controls,"aria-label":"Slideshow controls",children:[s.jsx("button",{type:"button",className:e.navButton,onClick:()=>d(-1),disabled:l===0,children:"Previous"}),s.jsx("button",{type:"button",className:e.navButton,onClick:()=>d(1),children:j?"Restart":"Next"})]})]})]})})}const Q={name:"onboarding2",displayName:"Facility Slideshow",version:"1.0.0",paramSchema:{},defaultParams:{}};export{K as default,Q as metadata};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
._wrapper_1xs2z_1{--gc-paper: #f2f0ea;box-sizing:border-box;width:100%;height:100%;min-height:100%;margin:0;padding:0;border:1px solid color-mix(in srgb,var(--gc-border, #34516f) 72%,transparent);border-radius:24px;background:radial-gradient(circle at 12% 8%,color-mix(in srgb,var(--gc-primary, #45c4b0) 16%,transparent),transparent 34%),radial-gradient(circle at 88% 10%,color-mix(in srgb,var(--gc-accent, #ff7a59) 14%,transparent),transparent 28%),linear-gradient(160deg,var(--gc-bg, #0d1117),var(--gc-bg-secondary, #182237));color:var(--gc-text, #f1f4ef);box-shadow:0 24px 64px #00000047;display:grid;place-items:center}._wrapper_1xs2z_1,._wrapper_1xs2z_1 *,._wrapper_1xs2z_1 *:before,._wrapper_1xs2z_1 *:after{box-sizing:inherit}._canvasShell_1xs2z_28{position:relative;overflow:hidden;flex:none;border:1px solid rgb(0 0 0 / 22%);background:var(--gc-paper, #f2f0ea);box-shadow:inset 0 0 0 1px #ffffff1f}._canvas_1xs2z_28{width:100%;height:100%}._canvas_1xs2z_28 canvas{display:block;width:100%;height:100%}._viewportLabels_1xs2z_48{position:absolute;inset:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));pointer-events:none}._viewportLabels_1xs2z_48[data-layout=portrait]{grid-template-columns:1fr;grid-template-rows:repeat(2,minmax(0,1fr))}._splitLabel_1xs2z_61{display:grid;place-items:center;color:#111827d1;font-size:clamp(1.15rem,2.7vw,2.1rem);font-weight:700;font-family:IBM Plex Sans Condensed,Avenir Next Condensed,sans-serif;text-transform:uppercase;letter-spacing:.34em;text-shadow:0 2px 12px rgb(255 255 255 / 42%)}._controlOverlay_1xs2z_73{position:absolute;right:1rem;bottom:1rem;left:1rem;display:flex;justify-content:center;pointer-events:none}._resolutionCard_1xs2z_83{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:min(100%,26rem);padding:.75rem .9rem;border:1px solid color-mix(in srgb,var(--gc-border, #34516f) 72%,transparent);border-radius:16px;background:#070f199e;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 10px 30px #0000002e}._resolutionControl_1xs2z_97{display:flex;align-items:center;gap:.85rem;width:100%;min-width:0}._slider_1xs2z_105{width:100%;accent-color:var(--gc-primary, #45c4b0);cursor:pointer}._sliderValue_1xs2z_111{min-width:3.75rem;text-align:right;font-family:IBM Plex Mono,JetBrains Mono,monospace;font-size:.95rem}@media(max-width:900px){._resolutionControl_1xs2z_97{min-width:0}}@media(max-width:720px){._wrapper_1xs2z_1{padding:0}._splitLabel_1xs2z_61{font-size:clamp(.95rem,5vw,1.4rem);letter-spacing:.24em}._controlOverlay_1xs2z_73{right:0rem;bottom:0rem;left:0rem}}
Binary file not shown.

After

Width:  |  Height:  |  Size: 826 KiB

+14
View File
@@ -0,0 +1,14 @@
{
"componentId": "gallery",
"displayName": "Glitch Gallery",
"version": "0.1.0",
"folderName": "glitch_gallery",
"packageName": "@glitch-components/gallery",
"entry": "dist/index.html",
"source": "src/index.tsx",
"tags": [
"internal",
"tooling",
"preview"
]
}
+16
View File
@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Glitch Gallery</title>
<script type="module" crossorigin src="/assets/index-CEeZxcxj.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DczjPplt.css">
</head>
<body>
<div id="root"></div>
</body>
</html>
@@ -0,0 +1,14 @@
{
"componentId": "level-questions",
"displayName": "Level Questions",
"version": "1.0.0",
"folderName": "glitch_level_questions",
"packageName": "level-questions",
"entry": "dist/level-questions.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"quiz",
"role-mapping"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+14
View File
@@ -0,0 +1,14 @@
import { type GlitchComponentProps } from './types';
type ComponentDevUiOverrides = {
showNumericDiagnostics?: boolean;
compactNumericDiagnostics?: boolean;
onOpenHarness?: () => void;
onSetParam?: (name: 'complexity' | 'speedup', value: number) => void;
maxComplexity?: number;
maxSpeedup?: number;
};
type ComponentProps = GlitchComponentProps & {
devUi?: ComponentDevUiOverrides;
};
export default function Component(props: ComponentProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,10 @@
interface DiophantineVectorsProps {
complexity: number;
lightlanes?: boolean;
radius?: number;
distance?: number;
allSectors?: boolean;
cumulative?: boolean;
}
export declare function DiophantineVectors({ complexity, lightlanes, radius, distance, allSectors, cumulative }: DiophantineVectorsProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,22 @@
import type { GlitchHostBridge } from '../types';
interface FanoSweepPanelProps {
radius: number;
distance: number;
chandraDistance: number;
allSectors: boolean;
cumulative: boolean;
theta: number;
phi: number;
orbitSpeed: number;
thetaDrift: number;
thetaJitter: number;
phiJitter: number;
K: number;
speedup: number;
usePoisson: boolean;
bottomInset?: number;
onBack?: () => void;
host?: GlitchHostBridge;
}
export declare function FanoSweepPanel(props: FanoSweepPanelProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,12 @@
import { type MutableRefObject } from 'react';
interface OrbitingObjectProps {
radius: number;
theta: number;
phi: number;
orbitTime: MutableRefObject<number>;
simTime?: MutableRefObject<number>;
thetaDrift?: number;
paused?: boolean;
}
export declare function OrbitingObject({ radius, theta, phi, orbitTime, simTime, thetaDrift, paused }: OrbitingObjectProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,3 @@
export declare function PoissonShell({ radius }: {
radius: number;
}): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
interface PulsingSphereProps {
radius: number;
paused?: boolean;
}
export declare function PulsingSphere({ radius, paused }: PulsingSphereProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,29 @@
import type { GlitchHostBridge, SceneViewMode } from '../types';
interface SamplingSystemProps {
complexity: number;
radius: number;
distance: number;
theta: number;
phi: number;
observationMode: 'orbit' | 'randomSphere';
allSectors: boolean;
cumulative: boolean;
K: number;
orbitRadius: number;
orbitVelocity: number;
thetaDrift: number;
thetaJitter: number;
phiJitter: number;
usePoisson: boolean;
speedup: number;
paused: boolean;
sceneView: SceneViewMode;
bottomInset?: number;
showNumericDiagnostics?: boolean;
compactNumericDiagnostics?: boolean;
host?: GlitchHostBridge;
centerDistribution?: boolean;
hideFlyingBars?: boolean;
}
export declare function SamplingSystem({ complexity, radius, distance, theta, phi, observationMode, allSectors, cumulative, K, orbitRadius, orbitVelocity, thetaDrift, thetaJitter, phiJitter, usePoisson, speedup, paused, sceneView, bottomInset, showNumericDiagnostics, compactNumericDiagnostics, host, centerDistribution, hideFlyingBars }: SamplingSystemProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,6 @@
interface TargetDiscProps {
radius: number;
distance: number;
}
export declare function TargetDisc({ radius, distance }: TargetDiscProps): import("react/jsx-runtime").JSX.Element;
export {};
@@ -0,0 +1,7 @@
interface VectorArrowProps {
vector: [number, number, number];
origin?: [number, number, number];
color?: string;
}
export declare function VectorArrow({ vector, origin, color }: VectorArrowProps): import("react/jsx-runtime").JSX.Element;
export {};
+1
View File
@@ -0,0 +1 @@
import './dev-theme.css';
@@ -0,0 +1,8 @@
import type { GlitchHostBridge } from './types';
export type DevHostBridgeOptions = {
isMuted?: () => boolean;
onSound?: (id: string, payload?: Record<string, unknown>) => void;
onEmit?: (type: string, payload?: unknown) => void;
};
export declare function createDevHostBridge(options?: DevHostBridgeOptions): GlitchHostBridge;
export declare function attachWindowSoundBridge(host: GlitchHostBridge): () => void;
@@ -0,0 +1,14 @@
{
"componentId": "lightlane",
"displayName": "Lightlane Challenge",
"version": "0.1.0",
"folderName": "glitch_lightlane",
"packageName": "@nommo/lightlane",
"entry": "dist/lightlane.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"reference",
"3d"
]
}
+17
View File
@@ -0,0 +1,17 @@
import type { GlitchHostBridge } from './types';
export declare const HOST_SOUND_EVENT = "glitch:play-sound";
export declare const HOST_STOP_SOUND_EVENT = "glitch:stop-sound";
export declare const HOST_EMIT_PREFIX = "glitch:host:";
export declare const SOUND_IDS: {
readonly click: "ui.button_click";
readonly hover: "ui.button_hover";
readonly computeStart: "machine.compute_start";
readonly computeStep: "machine.compute_step";
readonly computeDone: "machine.compute_done";
readonly verdictStable: "machine.verdict_stable";
readonly verdictAlert: "machine.verdict_alert";
};
export type SoundId = (typeof SOUND_IDS)[keyof typeof SOUND_IDS];
export declare function safePlaySound(host: GlitchHostBridge | undefined, id: string, payload?: Record<string, unknown>): void;
export declare function safeStopSound(host: GlitchHostBridge | undefined, id: string, payload?: Record<string, unknown>): void;
export declare function safeEmit(host: GlitchHostBridge | undefined, type: string, payload?: unknown): void;
+5
View File
@@ -0,0 +1,5 @@
import Component from './Component';
import { type GlitchComponentMetadata } from './types';
export default Component;
export declare const metadata: GlitchComponentMetadata;
export type { GlitchComponentProps, GlitchComponentConfig, GlitchComponentResult, GlitchHostBridge } from './types';
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+94
View File
@@ -0,0 +1,94 @@
export interface Config {
complexity: number;
radius: number;
distance: number;
lightlanes: boolean;
allSectors: boolean;
cumulative: boolean;
phi: number;
theta: number;
orbitSpeed?: number;
usePoisson?: boolean;
}
export interface Preset {
name: string;
description: string;
duration: number;
start: Config;
end: Config;
}
export declare const presets: Preset[];
export declare const namedPresets: {
"Iso: High Complexity": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
"Iso: Fast Orbit": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
"Iso: Optimal": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
"Aniso: Low Complexity": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
"Aniso: Slow Speed": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
"Aniso: High Distance": {
complexity: number;
distance: number;
orbitSpeed: number;
lightlanes: boolean;
allSectors: boolean;
radius: number;
cumulative: boolean;
phi: number;
theta: number;
usePoisson?: boolean;
};
};
+82
View File
@@ -0,0 +1,82 @@
export type SceneViewMode = 'both' | 'poisson' | 'lightlane';
export interface LightlaneProps {
complexity?: number;
radius?: number;
distance?: number;
chandraDistance?: number;
showAxes?: boolean;
lightlanes?: boolean;
allSectors?: boolean;
cumulative?: boolean;
phi?: number;
theta?: number;
observationMode?: 'orbit' | 'randomSphere';
orbitSpeed?: number;
thetaDrift?: number;
thetaJitter?: number;
phiJitter?: number;
speedup?: number;
K?: number;
usePoisson?: boolean;
sceneView?: SceneViewMode;
hideScenePresentation?: boolean;
hideFlyingBars?: boolean;
hideDataBoxes?: boolean;
}
export declare const defaultProps: Required<LightlaneProps>;
export interface GlitchComponentConfig {
id: string;
name: string;
version: string;
params: Record<string, unknown>;
}
export interface GlitchHostBridge {
playSound?: (id: string, payload?: Record<string, unknown>) => void;
stopSound?: (id: string, payload?: Record<string, unknown>) => void;
emit?: (type: string, payload?: unknown) => void;
}
export interface GlitchTheme {
primary: string;
accent: string;
bg: string;
bgSecondary: string;
text: string;
textMuted: string;
border: string;
}
export interface GlitchComponentResult {
success: boolean;
score?: number;
data?: unknown;
error?: string;
}
export interface GlitchComponentProps {
config: GlitchComponentConfig;
onComplete: (result: GlitchComponentResult) => void;
onProgress?: (percent: number) => void;
theme?: GlitchTheme;
className?: string;
host?: GlitchHostBridge;
}
export interface ParamSchema {
[key: string]: {
type: 'number' | 'string' | 'boolean' | 'color' | 'select' | 'range';
label?: string;
description?: string;
default: unknown;
options?: {
value: string | number;
label: string;
}[];
min?: number;
max?: number;
step?: number;
};
}
export interface GlitchComponentMetadata {
name: string;
displayName: string;
version: string;
paramSchema: ParamSchema;
defaultParams: Record<string, unknown>;
}
+2
View File
@@ -0,0 +1,2 @@
export type Vector3Tuple = [number, number, number];
export declare function getVectors(complexity: number, allSectors?: boolean): Vector3Tuple[];
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,14 @@
{
"componentId": "migration-paradox",
"displayName": "The Migration Paradox",
"version": "1.0.0",
"folderName": "glitch_migration_paradox",
"packageName": "migration-paradox",
"entry": "dist/migration-paradox.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"paradox",
"narrative"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
{
"componentId": "onboarding",
"displayName": "Glitch University Onboarding",
"version": "1.0.0",
"folderName": "glitch_onboarding",
"packageName": "@glitch-components/onboarding",
"entry": "dist/onboarding.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"onboarding",
"narrative"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
{
"componentId": "onboarding2",
"displayName": "Facility Slideshow",
"version": "1.0.0",
"folderName": "glitch_onboarding2",
"packageName": "@glitch-components/onboarding2",
"entry": "dist/onboarding2.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"onboarding",
"slideshow"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
{
"componentId": "sphere-paradox",
"displayName": "Create a Perfect Sphere",
"version": "1.0.0",
"folderName": "glitch_sphere_paradox",
"packageName": "sphere-paradox",
"entry": "dist/sphere-paradox.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"3d",
"paradox"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
{
"componentId": "voxel-universe",
"displayName": "Voxel Universe",
"version": "1.0.0",
"folderName": "glitch_voxel_universe",
"packageName": "@glitch-components/voxel-universe",
"entry": "dist/voxel_universe.js",
"source": "src/index.tsx",
"tags": [
"glitch-component",
"voxel",
"geometry"
]
}
+29
View File
@@ -0,0 +1,29 @@
import React from "react";
import { createRoot } from "react-dom/client";
import VoxelUniverse, { metadata } from "./voxel_universe.js";
const rootElement = document.getElementById("root");
if (rootElement) {
createRoot(rootElement).render(
React.createElement(VoxelUniverse, {
config: {
id: "voxel-universe-hosted",
name: metadata?.name ?? "voxel_universe",
version: metadata?.version ?? "1.0.0",
params: metadata?.defaultParams ?? {}
},
theme: {
primary: "#45c4b0",
accent: "#ff7a59",
bg: "#0d1117",
bgSecondary: "#182237",
text: "#f1f4ef",
textMuted: "#b6c0d4",
border: "#34516f"
},
onProgress: () => {},
onComplete: () => {}
})
);
}
+34
View File
@@ -0,0 +1,34 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Voxel Universe</title>
<style>
html,
body,
#root {
width: 100%;
height: 100%;
margin: 0;
}
body {
background: #0d1117;
}
</style>
<script type="importmap">
{
"imports": {
"react": "https://esm.sh/react@18.3.1",
"react/jsx-runtime": "https://esm.sh/react@18.3.1/jsx-runtime",
"react-dom/client": "https://esm.sh/react-dom@18.3.1/client"
}
}
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="./host.js"></script>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long