imxc 0.5.4 → 0.6.1

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.
@@ -0,0 +1,16 @@
1
+ export interface TemplateInfo {
2
+ name: string;
3
+ description: string;
4
+ generate: (projectDir: string, projectName: string) => void;
5
+ }
6
+ export declare const TEMPLATES: TemplateInfo[];
7
+ export declare function registerTemplate(info: TemplateInfo): void;
8
+ export declare const GITIGNORE = "build/\nnode_modules/\n*.ini\n.cache/\n";
9
+ export declare const APP_TSX = "export default function App(props: AppState) {\n const [showAbout, setShowAbout] = useState(false);\n\n return (\n <DockSpace>\n <Window title=\"Controls\">\n <Column gap={8}>\n <Text>Count: {props.count}</Text>\n <Button title=\"Increment\" onPress={props.onIncrement} />\n <SliderFloat label=\"Speed\" value={props.speed} min={0} max={100} />\n <Separator />\n <Button title=\"About\" onPress={() => setShowAbout(!showAbout)} />\n </Column>\n </Window>\n {showAbout && <Window title=\"About\">\n <Text>Built with IMX</Text>\n <Button title=\"Close\" onPress={() => setShowAbout(false)} />\n </Window>}\n </DockSpace>\n );\n}\n";
10
+ export declare const IMX_DTS_PREFIX = "// imx.d.ts \u2014 Type definitions for IMX components\n\ninterface Style {\n padding?: number;\n paddingHorizontal?: number;\n paddingVertical?: number;\n gap?: number;\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n backgroundColor?: [number, number, number, number];\n textColor?: [number, number, number, number];\n fontSize?: number;\n}\n\ndeclare function useState(initial: [number, number]): [[number, number], (value: [number, number]) => void];\ndeclare function useState(initial: [number, number, number]): [[number, number, number], (value: [number, number, number]) => void];\ndeclare function useState(initial: [number, number, number, number]): [[number, number, number, number], (value: [number, number, number, number]) => void];\ndeclare function useState<T>(initial: T): [T, (value: T) => void];\n\ntype MouseCursor =\n | \"none\"\n | \"arrow\"\n | \"text\"\n | \"textInput\"\n | \"resizeAll\"\n | \"resizeNS\"\n | \"resizeEW\"\n | \"resizeNESW\"\n | \"resizeNWSE\"\n | \"hand\"\n | \"wait\"\n | \"progress\"\n | \"notAllowed\";\n\ninterface ItemInteractionProps {\n onHover?: () => void;\n onActive?: () => void;\n onFocused?: () => void;\n onClicked?: () => void;\n onDoubleClicked?: () => void;\n tooltip?: string;\n autoFocus?: boolean;\n scrollToHere?: boolean;\n cursor?: MouseCursor;\n}\n\n";
11
+ export declare const IMX_DTS_SUFFIX = "\ninterface WindowProps { title: string; open?: boolean; onClose?: () => void; noTitleBar?: boolean; noResize?: boolean; noMove?: boolean; noCollapse?: boolean; noDocking?: boolean; noScrollbar?: boolean; noBackground?: boolean; alwaysAutoResize?: boolean; noNavFocus?: boolean; noNav?: boolean; noDecoration?: boolean; noInputs?: boolean; noScrollWithMouse?: boolean; horizontalScrollbar?: boolean; alwaysVerticalScrollbar?: boolean; alwaysHorizontalScrollbar?: boolean; x?: number; y?: number; width?: number; height?: number; forcePosition?: boolean; forceSize?: boolean; minWidth?: number; minHeight?: number; maxWidth?: number; maxHeight?: number; bgAlpha?: number; noViewport?: boolean; viewportAlwaysOnTop?: boolean; style?: Style; children?: any; }\ninterface ViewProps { style?: Style; children?: any; }\ninterface IndentProps { width?: number; children?: any; }\ninterface TextWrapProps { width: number; children?: any; }\ninterface RowProps { gap?: number; style?: Style; children?: any; }\ninterface ColumnProps { gap?: number; style?: Style; children?: any; }\ninterface TextProps { color?: number[]; disabled?: boolean; wrapped?: boolean; style?: Style; children?: any; }\ninterface ButtonProps extends ItemInteractionProps { title: string; onPress: () => void; disabled?: boolean; style?: Style; }\ninterface SmallButtonProps extends ItemInteractionProps { label: string; onPress: () => void; }\ninterface ArrowButtonProps extends ItemInteractionProps { id: string; direction: \"left\" | \"right\" | \"up\" | \"down\"; onPress: () => void; }\ninterface InvisibleButtonProps extends ItemInteractionProps { id: string; width: number; height: number; onPress: () => void; }\ninterface ImageButtonProps extends ItemInteractionProps { id: string; src: string; width?: number; height?: number; onPress: () => void; }\ninterface TextInputProps extends ItemInteractionProps { value: string; onChange?: (v: string) => void; label?: string; placeholder?: string; width?: number; style?: Style; }\ninterface CheckboxProps extends ItemInteractionProps { value: boolean; onChange?: (v: boolean) => void; label?: string; style?: Style; }\ninterface SeparatorProps {}\ninterface PopupProps { id: string; style?: Style; children?: any; }\ninterface ContextMenuProps { id?: string; target?: \"item\" | \"window\"; mouseButton?: \"left\" | \"right\" | \"middle\"; children?: any; }\ninterface MultiSelectProps { singleSelect?: boolean; noSelectAll?: boolean; noRangeSelect?: boolean; noAutoSelect?: boolean; noAutoClear?: boolean; boxSelect?: boolean; boxSelect2d?: boolean; boxSelectNoScroll?: boolean; clearOnClickVoid?: boolean; selectionSize?: number; itemsCount?: number; onSelectionChange?: (io: any) => void; children?: any; }\ninterface DockSpaceProps { style?: Style; children?: any; }\ninterface DockLayoutProps { children?: any; }\ninterface DockSplitProps { direction: \"horizontal\" | \"vertical\"; size: number; children?: any; }\ninterface DockPanelProps { children?: any; }\ninterface ThemeProps {\n preset: string;\n accentColor?: [number, number, number, number];\n backgroundColor?: [number, number, number, number];\n textColor?: [number, number, number, number];\n borderColor?: [number, number, number, number];\n surfaceColor?: [number, number, number, number];\n rounding?: number;\n borderSize?: number;\n spacing?: number;\n children?: any;\n}\ninterface MainMenuBarProps { children?: any; }\ninterface MenuBarProps { children?: any; }\ninterface MenuProps { label: string; children?: any; }\ninterface MenuItemProps extends ItemInteractionProps { label: string; onPress?: () => void; shortcut?: string; }\ninterface ImGuiTableColumnSortSpecs { ColumnIndex: number; SortOrder: number; SortDirection: number; }\ninterface ImGuiTableSortSpecs { Specs: ImGuiTableColumnSortSpecs[]; SpecsCount: number; SpecsDirty: boolean; }\ninterface TableColumn { label: string; defaultHide?: boolean; preferSortAscending?: boolean; preferSortDescending?: boolean; noResize?: boolean; fixedWidth?: boolean; }\ninterface TableProps { columns: (string | TableColumn)[]; sortable?: boolean; onSort?: (specs: ImGuiTableSortSpecs) => void; hideable?: boolean; multiSortable?: boolean; noClip?: boolean; padOuterX?: boolean; scrollX?: boolean; scrollY?: boolean; noBorders?: boolean; noRowBg?: boolean; style?: Style; children?: any; }\ninterface TableRowProps { key?: number | string; bgColor?: [number, number, number, number]; children?: any; }\ninterface TableCellProps { columnIndex?: number; bgColor?: [number, number, number, number]; children?: any; }\ninterface TabBarProps { style?: Style; children?: any; }\ninterface TabItemProps { label: string; children?: any; }\ninterface TreeNodeProps extends ItemInteractionProps { label: string; defaultOpen?: boolean; forceOpen?: boolean; openOnArrow?: boolean; openOnDoubleClick?: boolean; leaf?: boolean; bullet?: boolean; noTreePushOnOpen?: boolean; children?: any; }\ninterface CollapsingHeaderProps extends ItemInteractionProps { label: string; defaultOpen?: boolean; forceOpen?: boolean; closable?: boolean; onClose?: () => void; children?: any; }\ninterface SliderFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min: number; max: number; width?: number; style?: Style; }\ninterface DragFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; speed?: number; width?: number; style?: Style; }\ninterface DragIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; speed?: number; width?: number; style?: Style; }\ninterface ComboProps extends ItemInteractionProps { label: string; value?: number; onChange?: (v: number) => void; items?: string[]; preview?: string; noArrowButton?: boolean; noPreview?: boolean; heightSmall?: boolean; heightLarge?: boolean; heightRegular?: boolean; width?: number; style?: Style; children?: any; }\ninterface InputIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width?: number; style?: Style; }\ninterface InputFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width?: number; style?: Style; }\ninterface InputFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; width?: number; style?: Style; }\ninterface InputFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }\ninterface InputFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; width?: number; style?: Style; }\ninterface InputInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; width?: number; style?: Style; }\ninterface InputInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }\ninterface InputInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; width?: number; style?: Style; }\ninterface DragFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface DragFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface DragFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface DragInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface DragInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface DragInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; speed?: number; width?: number; style?: Style; }\ninterface SliderFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface SliderInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }\ninterface VSliderFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width: number; height: number; min: number; max: number; style?: Style; }\ninterface VSliderIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width: number; height: number; min: number; max: number; style?: Style; }\ninterface SliderAngleProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min?: number; max?: number; width?: number; style?: Style; }\ninterface ColorEditProps extends ItemInteractionProps { label: string; value: number[]; onChange?: (v: number[]) => void; width?: number; style?: Style; }\ninterface ColorEdit3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }\ninterface ListBoxProps extends ItemInteractionProps { label: string; value?: number; onChange?: (v: number) => void; items?: string[]; width?: number; height?: number; style?: Style; children?: any; }\ninterface ProgressBarProps { value: number; overlay?: string; style?: Style; }\ninterface SpacingProps {}\ninterface DummyProps { width: number; height: number; }\ninterface SameLineProps { offset?: number; spacing?: number; }\ninterface NewLineProps {}\ninterface CursorProps { x: number; y: number; }\ninterface TooltipProps { text: string; }\ninterface ShortcutProps { keys: string; onPress: () => void; }\ninterface BulletTextProps { style?: Style; children?: any; }\ninterface BulletProps { style?: Style; }\ninterface LabelTextProps { label: string; value: string; }\ninterface SelectableProps extends ItemInteractionProps { label: string; selected?: boolean; onSelect?: () => void; selectionIndex?: number; spanAllColumns?: boolean; allowDoubleClick?: boolean; dontClosePopups?: boolean; style?: Style; }\ninterface RadioProps extends ItemInteractionProps { label: string; value: number; index: number; onChange?: (v: number) => void; style?: Style; }\ninterface InputTextMultilineProps extends ItemInteractionProps { label: string; value: string; width?: number; style?: Style; }\ninterface ColorPickerProps extends ItemInteractionProps { label: string; value: number[]; style?: Style; }\ninterface ColorPicker3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }\ninterface PlotLinesProps { label: string; values: number[]; overlay?: string; style?: Style; }\ninterface PlotHistogramProps { label: string; values: number[]; overlay?: string; style?: Style; }\ninterface ModalProps { title: string; open?: boolean; onClose?: () => void; noTitleBar?: boolean; noResize?: boolean; noMove?: boolean; noScrollbar?: boolean; noCollapse?: boolean; alwaysAutoResize?: boolean; noBackground?: boolean; horizontalScrollbar?: boolean; style?: Style; children?: any; }\ninterface ImageProps { src: string; embed?: boolean; width?: number; height?: number; }\ninterface GroupProps { style?: Style; children?: any; }\ninterface IDProps { scope: string | number; children?: any; }\ninterface DragDropSourceProps { type: string; payload: number | string; children?: any; }\ninterface DragDropTargetProps { type: string; onDrop: (payload: any) => void; children?: any; }\ninterface CanvasProps { width: number; height: number; style?: Style; children?: any; }\ninterface DrawLineProps { p1: [number, number]; p2: [number, number]; color: [number, number, number, number]; thickness?: number; }\ninterface DrawRectProps { min: [number, number]; max: [number, number]; color: [number, number, number, number]; filled?: boolean; thickness?: number; rounding?: number; }\ninterface DrawCircleProps { center: [number, number]; radius: number; color: [number, number, number, number]; filled?: boolean; thickness?: number; }\ninterface DrawTextProps { pos: [number, number]; text: string; color: [number, number, number, number]; }\ninterface StyleColorProps {\n text?: [number, number, number, number];\n textDisabled?: [number, number, number, number];\n windowBg?: [number, number, number, number];\n frameBg?: [number, number, number, number];\n frameBgHovered?: [number, number, number, number];\n frameBgActive?: [number, number, number, number];\n titleBg?: [number, number, number, number];\n titleBgActive?: [number, number, number, number];\n button?: [number, number, number, number];\n buttonHovered?: [number, number, number, number];\n buttonActive?: [number, number, number, number];\n header?: [number, number, number, number];\n headerHovered?: [number, number, number, number];\n headerActive?: [number, number, number, number];\n separator?: [number, number, number, number];\n checkMark?: [number, number, number, number];\n sliderGrab?: [number, number, number, number];\n border?: [number, number, number, number];\n popupBg?: [number, number, number, number];\n tab?: [number, number, number, number];\n children?: any;\n}\n\ndeclare function Window(props: WindowProps): any;\ndeclare function View(props: ViewProps): any;\ndeclare function Indent(props: IndentProps): any;\ndeclare function TextWrap(props: TextWrapProps): any;\ndeclare function Row(props: RowProps): any;\ndeclare function Column(props: ColumnProps): any;\ndeclare function Text(props: TextProps): any;\ndeclare function Button(props: ButtonProps): any;\ndeclare function SmallButton(props: SmallButtonProps): any;\ndeclare function ArrowButton(props: ArrowButtonProps): any;\ndeclare function InvisibleButton(props: InvisibleButtonProps): any;\ndeclare function ImageButton(props: ImageButtonProps): any;\ndeclare function TextInput(props: TextInputProps): any;\ndeclare function Checkbox(props: CheckboxProps): any;\ndeclare function Separator(props: SeparatorProps): any;\ndeclare function Popup(props: PopupProps): any;\ndeclare function ContextMenu(props: ContextMenuProps): any;\ndeclare function MultiSelect(props: MultiSelectProps): any;\ndeclare function DockSpace(props: DockSpaceProps): any;\ndeclare function DockLayout(props: DockLayoutProps): any;\ndeclare function DockSplit(props: DockSplitProps): any;\ndeclare function DockPanel(props: DockPanelProps): any;\ndeclare function Theme(props: ThemeProps): any;\ndeclare function MainMenuBar(props: MainMenuBarProps): any;\ndeclare function MenuBar(props: MenuBarProps): any;\ndeclare function Menu(props: MenuProps): any;\ndeclare function MenuItem(props: MenuItemProps): any;\ndeclare function Table(props: TableProps): any;\ndeclare function TableRow(props: TableRowProps): any;\ndeclare function TableCell(props: TableCellProps): any;\ndeclare function TabBar(props: TabBarProps): any;\ndeclare function TabItem(props: TabItemProps): any;\ndeclare function TreeNode(props: TreeNodeProps): any;\ndeclare function CollapsingHeader(props: CollapsingHeaderProps): any;\ndeclare function SliderFloat(props: SliderFloatProps): any;\ndeclare function SliderInt(props: SliderIntProps): any;\ndeclare function DragFloat(props: DragFloatProps): any;\ndeclare function DragInt(props: DragIntProps): any;\ndeclare function Combo(props: ComboProps): any;\ndeclare function InputInt(props: InputIntProps): any;\ndeclare function InputFloat(props: InputFloatProps): any;\ndeclare function InputFloat2(props: InputFloat2Props): any;\ndeclare function InputFloat3(props: InputFloat3Props): any;\ndeclare function InputFloat4(props: InputFloat4Props): any;\ndeclare function InputInt2(props: InputInt2Props): any;\ndeclare function InputInt3(props: InputInt3Props): any;\ndeclare function InputInt4(props: InputInt4Props): any;\ndeclare function DragFloat2(props: DragFloat2Props): any;\ndeclare function DragFloat3(props: DragFloat3Props): any;\ndeclare function DragFloat4(props: DragFloat4Props): any;\ndeclare function DragInt2(props: DragInt2Props): any;\ndeclare function DragInt3(props: DragInt3Props): any;\ndeclare function DragInt4(props: DragInt4Props): any;\ndeclare function SliderFloat2(props: SliderFloat2Props): any;\ndeclare function SliderFloat3(props: SliderFloat3Props): any;\ndeclare function SliderFloat4(props: SliderFloat4Props): any;\ndeclare function SliderInt2(props: SliderInt2Props): any;\ndeclare function SliderInt3(props: SliderInt3Props): any;\ndeclare function SliderInt4(props: SliderInt4Props): any;\ndeclare function VSliderFloat(props: VSliderFloatProps): any;\ndeclare function VSliderInt(props: VSliderIntProps): any;\ndeclare function SliderAngle(props: SliderAngleProps): any;\ndeclare function ColorEdit(props: ColorEditProps): any;\ndeclare function ColorEdit3(props: ColorEdit3Props): any;\ndeclare function ListBox(props: ListBoxProps): any;\ndeclare function ProgressBar(props: ProgressBarProps): any;\ndeclare function Spacing(props: SpacingProps): any;\ndeclare function Dummy(props: DummyProps): any;\ndeclare function SameLine(props: SameLineProps): any;\ndeclare function NewLine(props: NewLineProps): any;\ndeclare function Cursor(props: CursorProps): any;\ndeclare function Tooltip(props: TooltipProps): any;\ndeclare function Shortcut(props: ShortcutProps): any;\ndeclare function BulletText(props: BulletTextProps): any;\ndeclare function Bullet(props: BulletProps): any;\ndeclare function LabelText(props: LabelTextProps): any;\ndeclare function Selectable(props: SelectableProps): any;\ndeclare function Radio(props: RadioProps): any;\ndeclare function InputTextMultiline(props: InputTextMultilineProps): any;\ndeclare function ColorPicker(props: ColorPickerProps): any;\ndeclare function ColorPicker3(props: ColorPicker3Props): any;\ndeclare function PlotLines(props: PlotLinesProps): any;\ndeclare function PlotHistogram(props: PlotHistogramProps): any;\ndeclare function Modal(props: ModalProps): any;\ndeclare function Image(props: ImageProps): any;\ndeclare function Group(props: GroupProps): any;\ndeclare function ID(props: IDProps): any;\ndeclare function StyleColor(props: StyleColorProps): any;\ndeclare function Canvas(props: CanvasProps): any;\ndeclare function DrawLine(props: DrawLineProps): any;\ndeclare function DrawRect(props: DrawRectProps): any;\ndeclare function DrawCircle(props: DrawCircleProps): any;\ndeclare function DrawText(props: DrawTextProps): any;\ninterface DrawBezierCubicProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; p4: [number, number]; color: [number, number, number, number]; thickness?: number; segments?: number; }\ninterface DrawBezierQuadraticProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; color: [number, number, number, number]; thickness?: number; segments?: number; }\ninterface DrawPolylineProps { points: [number, number][]; color: [number, number, number, number]; thickness?: number; closed?: boolean; }\ninterface DrawConvexPolyFilledProps { points: [number, number][]; color: [number, number, number, number]; }\ninterface DrawNgonProps { center: [number, number]; radius: number; color: [number, number, number, number]; numSegments: number; thickness?: number; }\ninterface DrawNgonFilledProps { center: [number, number]; radius: number; color: [number, number, number, number]; numSegments: number; }\ninterface DrawTriangleProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; color: [number, number, number, number]; filled?: boolean; thickness?: number; }\ndeclare function DrawBezierCubic(props: DrawBezierCubicProps): any;\ndeclare function DrawBezierQuadratic(props: DrawBezierQuadraticProps): any;\ndeclare function DrawPolyline(props: DrawPolylineProps): any;\ndeclare function DrawConvexPolyFilled(props: DrawConvexPolyFilledProps): any;\ndeclare function DrawNgon(props: DrawNgonProps): any;\ndeclare function DrawNgonFilled(props: DrawNgonFilledProps): any;\ndeclare function DrawTriangle(props: DrawTriangleProps): any;\n\ninterface StyleVarProps {\n alpha?: number;\n windowPadding?: [number, number];\n windowRounding?: number;\n framePadding?: [number, number];\n frameRounding?: number;\n frameBorderSize?: number;\n itemSpacing?: [number, number];\n itemInnerSpacing?: [number, number];\n indentSpacing?: number;\n cellPadding?: [number, number];\n tabRounding?: number;\n children?: any;\n}\ndeclare function StyleVar(props: StyleVarProps): any;\ndeclare function DragDropSource(props: DragDropSourceProps): any;\ndeclare function DragDropTarget(props: DragDropTargetProps): any;\ninterface DisabledProps { disabled?: boolean; children?: any; }\ninterface ChildProps { id: string; width?: number; height?: number; border?: boolean; style?: Style; children?: any; }\ndeclare function Disabled(props: DisabledProps): any;\ndeclare function Child(props: ChildProps): any;\ninterface FontProps { name: string; src?: string; size?: number; embed?: boolean; children?: any; }\ndeclare function Font(props: FontProps): any;\n\ndeclare function resetLayout(): void;\n\n// --- Custom native widgets ---\n// Declare your C++ registered widgets here for type checking:\n//\n// interface KnobProps {\n// value: number;\n// onChange: (value: number) => void;\n// min: number;\n// max: number;\n// width?: number;\n// height?: number;\n// }\n// declare function Knob(props: KnobProps): any;\n\ndeclare module \"imx/jsx-runtime\" {\n export namespace JSX {\n type Element = any;\n interface IntrinsicElements { [tag: string]: any; }\n interface ElementChildrenAttribute { children: {}; }\n }\n export function jsx(type: any, props: any, key?: any): any;\n export function jsxs(type: any, props: any, key?: any): any;\n export function Fragment(props: any): any;\n}\n";
12
+ export declare function buildImxDts(appStateInterface: string): string;
13
+ export declare const TSCONFIG = "{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"lib\": [\"ES2022\"],\n \"module\": \"ES2022\",\n \"moduleResolution\": \"bundler\",\n \"jsx\": \"react-jsx\",\n \"jsxImportSource\": \"imx\",\n \"strict\": false,\n \"noEmit\": true,\n \"skipLibCheck\": true\n },\n \"include\": [\"src/**/*.tsx\", \"src/imx.d.ts\"]\n}\n";
14
+ export declare function cmakeTemplate(projectName: string, repoUrl: string): string;
15
+ export declare function promptProjectName(): Promise<string>;
16
+ export declare function promptTemplateName(): Promise<string>;
@@ -0,0 +1,553 @@
1
+ import * as readline from 'node:readline';
2
+ export const TEMPLATES = [];
3
+ export function registerTemplate(info) {
4
+ TEMPLATES.push(info);
5
+ }
6
+ // --- Shared template strings ---
7
+ export const GITIGNORE = `build/
8
+ node_modules/
9
+ *.ini
10
+ .cache/
11
+ `;
12
+ export const APP_TSX = `export default function App(props: AppState) {
13
+ const [showAbout, setShowAbout] = useState(false);
14
+
15
+ return (
16
+ <DockSpace>
17
+ <Window title="Controls">
18
+ <Column gap={8}>
19
+ <Text>Count: {props.count}</Text>
20
+ <Button title="Increment" onPress={props.onIncrement} />
21
+ <SliderFloat label="Speed" value={props.speed} min={0} max={100} />
22
+ <Separator />
23
+ <Button title="About" onPress={() => setShowAbout(!showAbout)} />
24
+ </Column>
25
+ </Window>
26
+ {showAbout && <Window title="About">
27
+ <Text>Built with IMX</Text>
28
+ <Button title="Close" onPress={() => setShowAbout(false)} />
29
+ </Window>}
30
+ </DockSpace>
31
+ );
32
+ }
33
+ `;
34
+ export const IMX_DTS_PREFIX = `// imx.d.ts — Type definitions for IMX components
35
+
36
+ interface Style {
37
+ padding?: number;
38
+ paddingHorizontal?: number;
39
+ paddingVertical?: number;
40
+ gap?: number;
41
+ width?: number;
42
+ height?: number;
43
+ minWidth?: number;
44
+ minHeight?: number;
45
+ backgroundColor?: [number, number, number, number];
46
+ textColor?: [number, number, number, number];
47
+ fontSize?: number;
48
+ }
49
+
50
+ declare function useState(initial: [number, number]): [[number, number], (value: [number, number]) => void];
51
+ declare function useState(initial: [number, number, number]): [[number, number, number], (value: [number, number, number]) => void];
52
+ declare function useState(initial: [number, number, number, number]): [[number, number, number, number], (value: [number, number, number, number]) => void];
53
+ declare function useState<T>(initial: T): [T, (value: T) => void];
54
+
55
+ type MouseCursor =
56
+ | "none"
57
+ | "arrow"
58
+ | "text"
59
+ | "textInput"
60
+ | "resizeAll"
61
+ | "resizeNS"
62
+ | "resizeEW"
63
+ | "resizeNESW"
64
+ | "resizeNWSE"
65
+ | "hand"
66
+ | "wait"
67
+ | "progress"
68
+ | "notAllowed";
69
+
70
+ interface ItemInteractionProps {
71
+ onHover?: () => void;
72
+ onActive?: () => void;
73
+ onFocused?: () => void;
74
+ onClicked?: () => void;
75
+ onDoubleClicked?: () => void;
76
+ tooltip?: string;
77
+ autoFocus?: boolean;
78
+ scrollToHere?: boolean;
79
+ cursor?: MouseCursor;
80
+ }
81
+
82
+ `;
83
+ export const IMX_DTS_SUFFIX = `
84
+ interface WindowProps { title: string; open?: boolean; onClose?: () => void; noTitleBar?: boolean; noResize?: boolean; noMove?: boolean; noCollapse?: boolean; noDocking?: boolean; noScrollbar?: boolean; noBackground?: boolean; alwaysAutoResize?: boolean; noNavFocus?: boolean; noNav?: boolean; noDecoration?: boolean; noInputs?: boolean; noScrollWithMouse?: boolean; horizontalScrollbar?: boolean; alwaysVerticalScrollbar?: boolean; alwaysHorizontalScrollbar?: boolean; x?: number; y?: number; width?: number; height?: number; forcePosition?: boolean; forceSize?: boolean; minWidth?: number; minHeight?: number; maxWidth?: number; maxHeight?: number; bgAlpha?: number; noViewport?: boolean; viewportAlwaysOnTop?: boolean; style?: Style; children?: any; }
85
+ interface ViewProps { style?: Style; children?: any; }
86
+ interface IndentProps { width?: number; children?: any; }
87
+ interface TextWrapProps { width: number; children?: any; }
88
+ interface RowProps { gap?: number; style?: Style; children?: any; }
89
+ interface ColumnProps { gap?: number; style?: Style; children?: any; }
90
+ interface TextProps { color?: number[]; disabled?: boolean; wrapped?: boolean; style?: Style; children?: any; }
91
+ interface ButtonProps extends ItemInteractionProps { title: string; onPress: () => void; disabled?: boolean; style?: Style; }
92
+ interface SmallButtonProps extends ItemInteractionProps { label: string; onPress: () => void; }
93
+ interface ArrowButtonProps extends ItemInteractionProps { id: string; direction: "left" | "right" | "up" | "down"; onPress: () => void; }
94
+ interface InvisibleButtonProps extends ItemInteractionProps { id: string; width: number; height: number; onPress: () => void; }
95
+ interface ImageButtonProps extends ItemInteractionProps { id: string; src: string; width?: number; height?: number; onPress: () => void; }
96
+ interface TextInputProps extends ItemInteractionProps { value: string; onChange?: (v: string) => void; label?: string; placeholder?: string; width?: number; style?: Style; }
97
+ interface CheckboxProps extends ItemInteractionProps { value: boolean; onChange?: (v: boolean) => void; label?: string; style?: Style; }
98
+ interface SeparatorProps {}
99
+ interface PopupProps { id: string; style?: Style; children?: any; }
100
+ interface ContextMenuProps { id?: string; target?: "item" | "window"; mouseButton?: "left" | "right" | "middle"; children?: any; }
101
+ interface MultiSelectProps { singleSelect?: boolean; noSelectAll?: boolean; noRangeSelect?: boolean; noAutoSelect?: boolean; noAutoClear?: boolean; boxSelect?: boolean; boxSelect2d?: boolean; boxSelectNoScroll?: boolean; clearOnClickVoid?: boolean; selectionSize?: number; itemsCount?: number; onSelectionChange?: (io: any) => void; children?: any; }
102
+ interface DockSpaceProps { style?: Style; children?: any; }
103
+ interface DockLayoutProps { children?: any; }
104
+ interface DockSplitProps { direction: "horizontal" | "vertical"; size: number; children?: any; }
105
+ interface DockPanelProps { children?: any; }
106
+ interface ThemeProps {
107
+ preset: string;
108
+ accentColor?: [number, number, number, number];
109
+ backgroundColor?: [number, number, number, number];
110
+ textColor?: [number, number, number, number];
111
+ borderColor?: [number, number, number, number];
112
+ surfaceColor?: [number, number, number, number];
113
+ rounding?: number;
114
+ borderSize?: number;
115
+ spacing?: number;
116
+ children?: any;
117
+ }
118
+ interface MainMenuBarProps { children?: any; }
119
+ interface MenuBarProps { children?: any; }
120
+ interface MenuProps { label: string; children?: any; }
121
+ interface MenuItemProps extends ItemInteractionProps { label: string; onPress?: () => void; shortcut?: string; }
122
+ interface ImGuiTableColumnSortSpecs { ColumnIndex: number; SortOrder: number; SortDirection: number; }
123
+ interface ImGuiTableSortSpecs { Specs: ImGuiTableColumnSortSpecs[]; SpecsCount: number; SpecsDirty: boolean; }
124
+ interface TableColumn { label: string; defaultHide?: boolean; preferSortAscending?: boolean; preferSortDescending?: boolean; noResize?: boolean; fixedWidth?: boolean; }
125
+ interface TableProps { columns: (string | TableColumn)[]; sortable?: boolean; onSort?: (specs: ImGuiTableSortSpecs) => void; hideable?: boolean; multiSortable?: boolean; noClip?: boolean; padOuterX?: boolean; scrollX?: boolean; scrollY?: boolean; noBorders?: boolean; noRowBg?: boolean; style?: Style; children?: any; }
126
+ interface TableRowProps { key?: number | string; bgColor?: [number, number, number, number]; children?: any; }
127
+ interface TableCellProps { columnIndex?: number; bgColor?: [number, number, number, number]; children?: any; }
128
+ interface TabBarProps { style?: Style; children?: any; }
129
+ interface TabItemProps { label: string; children?: any; }
130
+ interface TreeNodeProps extends ItemInteractionProps { label: string; defaultOpen?: boolean; forceOpen?: boolean; openOnArrow?: boolean; openOnDoubleClick?: boolean; leaf?: boolean; bullet?: boolean; noTreePushOnOpen?: boolean; children?: any; }
131
+ interface CollapsingHeaderProps extends ItemInteractionProps { label: string; defaultOpen?: boolean; forceOpen?: boolean; closable?: boolean; onClose?: () => void; children?: any; }
132
+ interface SliderFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min: number; max: number; width?: number; style?: Style; }
133
+ interface SliderIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min: number; max: number; width?: number; style?: Style; }
134
+ interface DragFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; speed?: number; width?: number; style?: Style; }
135
+ interface DragIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; speed?: number; width?: number; style?: Style; }
136
+ interface ComboProps extends ItemInteractionProps { label: string; value?: number; onChange?: (v: number) => void; items?: string[]; preview?: string; noArrowButton?: boolean; noPreview?: boolean; heightSmall?: boolean; heightLarge?: boolean; heightRegular?: boolean; width?: number; style?: Style; children?: any; }
137
+ interface InputIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width?: number; style?: Style; }
138
+ interface InputFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width?: number; style?: Style; }
139
+ interface InputFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; width?: number; style?: Style; }
140
+ interface InputFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }
141
+ interface InputFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; width?: number; style?: Style; }
142
+ interface InputInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; width?: number; style?: Style; }
143
+ interface InputInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }
144
+ interface InputInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; width?: number; style?: Style; }
145
+ interface DragFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; speed?: number; width?: number; style?: Style; }
146
+ interface DragFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; speed?: number; width?: number; style?: Style; }
147
+ interface DragFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; speed?: number; width?: number; style?: Style; }
148
+ interface DragInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; speed?: number; width?: number; style?: Style; }
149
+ interface DragInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; speed?: number; width?: number; style?: Style; }
150
+ interface DragInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; speed?: number; width?: number; style?: Style; }
151
+ interface SliderFloat2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; min: number; max: number; width?: number; style?: Style; }
152
+ interface SliderFloat3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }
153
+ interface SliderFloat4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }
154
+ interface SliderInt2Props extends ItemInteractionProps { label: string; value: [number, number]; onChange?: (v: [number, number]) => void; min: number; max: number; width?: number; style?: Style; }
155
+ interface SliderInt3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }
156
+ interface SliderInt4Props extends ItemInteractionProps { label: string; value: [number, number, number, number]; onChange?: (v: [number, number, number, number]) => void; min: number; max: number; width?: number; style?: Style; }
157
+ interface VSliderFloatProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width: number; height: number; min: number; max: number; style?: Style; }
158
+ interface VSliderIntProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; width: number; height: number; min: number; max: number; style?: Style; }
159
+ interface SliderAngleProps extends ItemInteractionProps { label: string; value: number; onChange?: (v: number) => void; min?: number; max?: number; width?: number; style?: Style; }
160
+ interface ColorEditProps extends ItemInteractionProps { label: string; value: number[]; onChange?: (v: number[]) => void; width?: number; style?: Style; }
161
+ interface ColorEdit3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }
162
+ interface ListBoxProps extends ItemInteractionProps { label: string; value?: number; onChange?: (v: number) => void; items?: string[]; width?: number; height?: number; style?: Style; children?: any; }
163
+ interface ProgressBarProps { value: number; overlay?: string; style?: Style; }
164
+ interface SpacingProps {}
165
+ interface DummyProps { width: number; height: number; }
166
+ interface SameLineProps { offset?: number; spacing?: number; }
167
+ interface NewLineProps {}
168
+ interface CursorProps { x: number; y: number; }
169
+ interface TooltipProps { text: string; }
170
+ interface ShortcutProps { keys: string; onPress: () => void; }
171
+ interface BulletTextProps { style?: Style; children?: any; }
172
+ interface BulletProps { style?: Style; }
173
+ interface LabelTextProps { label: string; value: string; }
174
+ interface SelectableProps extends ItemInteractionProps { label: string; selected?: boolean; onSelect?: () => void; selectionIndex?: number; spanAllColumns?: boolean; allowDoubleClick?: boolean; dontClosePopups?: boolean; style?: Style; }
175
+ interface RadioProps extends ItemInteractionProps { label: string; value: number; index: number; onChange?: (v: number) => void; style?: Style; }
176
+ interface InputTextMultilineProps extends ItemInteractionProps { label: string; value: string; width?: number; style?: Style; }
177
+ interface ColorPickerProps extends ItemInteractionProps { label: string; value: number[]; style?: Style; }
178
+ interface ColorPicker3Props extends ItemInteractionProps { label: string; value: [number, number, number]; onChange?: (v: [number, number, number]) => void; width?: number; style?: Style; }
179
+ interface PlotLinesProps { label: string; values: number[]; overlay?: string; style?: Style; }
180
+ interface PlotHistogramProps { label: string; values: number[]; overlay?: string; style?: Style; }
181
+ interface ModalProps { title: string; open?: boolean; onClose?: () => void; noTitleBar?: boolean; noResize?: boolean; noMove?: boolean; noScrollbar?: boolean; noCollapse?: boolean; alwaysAutoResize?: boolean; noBackground?: boolean; horizontalScrollbar?: boolean; style?: Style; children?: any; }
182
+ interface ImageProps { src: string; embed?: boolean; width?: number; height?: number; }
183
+ interface GroupProps { style?: Style; children?: any; }
184
+ interface IDProps { scope: string | number; children?: any; }
185
+ interface DragDropSourceProps { type: string; payload: number | string; children?: any; }
186
+ interface DragDropTargetProps { type: string; onDrop: (payload: any) => void; children?: any; }
187
+ interface CanvasProps { width: number; height: number; style?: Style; children?: any; }
188
+ interface DrawLineProps { p1: [number, number]; p2: [number, number]; color: [number, number, number, number]; thickness?: number; }
189
+ interface DrawRectProps { min: [number, number]; max: [number, number]; color: [number, number, number, number]; filled?: boolean; thickness?: number; rounding?: number; }
190
+ interface DrawCircleProps { center: [number, number]; radius: number; color: [number, number, number, number]; filled?: boolean; thickness?: number; }
191
+ interface DrawTextProps { pos: [number, number]; text: string; color: [number, number, number, number]; }
192
+ interface StyleColorProps {
193
+ text?: [number, number, number, number];
194
+ textDisabled?: [number, number, number, number];
195
+ windowBg?: [number, number, number, number];
196
+ frameBg?: [number, number, number, number];
197
+ frameBgHovered?: [number, number, number, number];
198
+ frameBgActive?: [number, number, number, number];
199
+ titleBg?: [number, number, number, number];
200
+ titleBgActive?: [number, number, number, number];
201
+ button?: [number, number, number, number];
202
+ buttonHovered?: [number, number, number, number];
203
+ buttonActive?: [number, number, number, number];
204
+ header?: [number, number, number, number];
205
+ headerHovered?: [number, number, number, number];
206
+ headerActive?: [number, number, number, number];
207
+ separator?: [number, number, number, number];
208
+ checkMark?: [number, number, number, number];
209
+ sliderGrab?: [number, number, number, number];
210
+ border?: [number, number, number, number];
211
+ popupBg?: [number, number, number, number];
212
+ tab?: [number, number, number, number];
213
+ children?: any;
214
+ }
215
+
216
+ declare function Window(props: WindowProps): any;
217
+ declare function View(props: ViewProps): any;
218
+ declare function Indent(props: IndentProps): any;
219
+ declare function TextWrap(props: TextWrapProps): any;
220
+ declare function Row(props: RowProps): any;
221
+ declare function Column(props: ColumnProps): any;
222
+ declare function Text(props: TextProps): any;
223
+ declare function Button(props: ButtonProps): any;
224
+ declare function SmallButton(props: SmallButtonProps): any;
225
+ declare function ArrowButton(props: ArrowButtonProps): any;
226
+ declare function InvisibleButton(props: InvisibleButtonProps): any;
227
+ declare function ImageButton(props: ImageButtonProps): any;
228
+ declare function TextInput(props: TextInputProps): any;
229
+ declare function Checkbox(props: CheckboxProps): any;
230
+ declare function Separator(props: SeparatorProps): any;
231
+ declare function Popup(props: PopupProps): any;
232
+ declare function ContextMenu(props: ContextMenuProps): any;
233
+ declare function MultiSelect(props: MultiSelectProps): any;
234
+ declare function DockSpace(props: DockSpaceProps): any;
235
+ declare function DockLayout(props: DockLayoutProps): any;
236
+ declare function DockSplit(props: DockSplitProps): any;
237
+ declare function DockPanel(props: DockPanelProps): any;
238
+ declare function Theme(props: ThemeProps): any;
239
+ declare function MainMenuBar(props: MainMenuBarProps): any;
240
+ declare function MenuBar(props: MenuBarProps): any;
241
+ declare function Menu(props: MenuProps): any;
242
+ declare function MenuItem(props: MenuItemProps): any;
243
+ declare function Table(props: TableProps): any;
244
+ declare function TableRow(props: TableRowProps): any;
245
+ declare function TableCell(props: TableCellProps): any;
246
+ declare function TabBar(props: TabBarProps): any;
247
+ declare function TabItem(props: TabItemProps): any;
248
+ declare function TreeNode(props: TreeNodeProps): any;
249
+ declare function CollapsingHeader(props: CollapsingHeaderProps): any;
250
+ declare function SliderFloat(props: SliderFloatProps): any;
251
+ declare function SliderInt(props: SliderIntProps): any;
252
+ declare function DragFloat(props: DragFloatProps): any;
253
+ declare function DragInt(props: DragIntProps): any;
254
+ declare function Combo(props: ComboProps): any;
255
+ declare function InputInt(props: InputIntProps): any;
256
+ declare function InputFloat(props: InputFloatProps): any;
257
+ declare function InputFloat2(props: InputFloat2Props): any;
258
+ declare function InputFloat3(props: InputFloat3Props): any;
259
+ declare function InputFloat4(props: InputFloat4Props): any;
260
+ declare function InputInt2(props: InputInt2Props): any;
261
+ declare function InputInt3(props: InputInt3Props): any;
262
+ declare function InputInt4(props: InputInt4Props): any;
263
+ declare function DragFloat2(props: DragFloat2Props): any;
264
+ declare function DragFloat3(props: DragFloat3Props): any;
265
+ declare function DragFloat4(props: DragFloat4Props): any;
266
+ declare function DragInt2(props: DragInt2Props): any;
267
+ declare function DragInt3(props: DragInt3Props): any;
268
+ declare function DragInt4(props: DragInt4Props): any;
269
+ declare function SliderFloat2(props: SliderFloat2Props): any;
270
+ declare function SliderFloat3(props: SliderFloat3Props): any;
271
+ declare function SliderFloat4(props: SliderFloat4Props): any;
272
+ declare function SliderInt2(props: SliderInt2Props): any;
273
+ declare function SliderInt3(props: SliderInt3Props): any;
274
+ declare function SliderInt4(props: SliderInt4Props): any;
275
+ declare function VSliderFloat(props: VSliderFloatProps): any;
276
+ declare function VSliderInt(props: VSliderIntProps): any;
277
+ declare function SliderAngle(props: SliderAngleProps): any;
278
+ declare function ColorEdit(props: ColorEditProps): any;
279
+ declare function ColorEdit3(props: ColorEdit3Props): any;
280
+ declare function ListBox(props: ListBoxProps): any;
281
+ declare function ProgressBar(props: ProgressBarProps): any;
282
+ declare function Spacing(props: SpacingProps): any;
283
+ declare function Dummy(props: DummyProps): any;
284
+ declare function SameLine(props: SameLineProps): any;
285
+ declare function NewLine(props: NewLineProps): any;
286
+ declare function Cursor(props: CursorProps): any;
287
+ declare function Tooltip(props: TooltipProps): any;
288
+ declare function Shortcut(props: ShortcutProps): any;
289
+ declare function BulletText(props: BulletTextProps): any;
290
+ declare function Bullet(props: BulletProps): any;
291
+ declare function LabelText(props: LabelTextProps): any;
292
+ declare function Selectable(props: SelectableProps): any;
293
+ declare function Radio(props: RadioProps): any;
294
+ declare function InputTextMultiline(props: InputTextMultilineProps): any;
295
+ declare function ColorPicker(props: ColorPickerProps): any;
296
+ declare function ColorPicker3(props: ColorPicker3Props): any;
297
+ declare function PlotLines(props: PlotLinesProps): any;
298
+ declare function PlotHistogram(props: PlotHistogramProps): any;
299
+ declare function Modal(props: ModalProps): any;
300
+ declare function Image(props: ImageProps): any;
301
+ declare function Group(props: GroupProps): any;
302
+ declare function ID(props: IDProps): any;
303
+ declare function StyleColor(props: StyleColorProps): any;
304
+ declare function Canvas(props: CanvasProps): any;
305
+ declare function DrawLine(props: DrawLineProps): any;
306
+ declare function DrawRect(props: DrawRectProps): any;
307
+ declare function DrawCircle(props: DrawCircleProps): any;
308
+ declare function DrawText(props: DrawTextProps): any;
309
+ interface DrawBezierCubicProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; p4: [number, number]; color: [number, number, number, number]; thickness?: number; segments?: number; }
310
+ interface DrawBezierQuadraticProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; color: [number, number, number, number]; thickness?: number; segments?: number; }
311
+ interface DrawPolylineProps { points: [number, number][]; color: [number, number, number, number]; thickness?: number; closed?: boolean; }
312
+ interface DrawConvexPolyFilledProps { points: [number, number][]; color: [number, number, number, number]; }
313
+ interface DrawNgonProps { center: [number, number]; radius: number; color: [number, number, number, number]; numSegments: number; thickness?: number; }
314
+ interface DrawNgonFilledProps { center: [number, number]; radius: number; color: [number, number, number, number]; numSegments: number; }
315
+ interface DrawTriangleProps { p1: [number, number]; p2: [number, number]; p3: [number, number]; color: [number, number, number, number]; filled?: boolean; thickness?: number; }
316
+ declare function DrawBezierCubic(props: DrawBezierCubicProps): any;
317
+ declare function DrawBezierQuadratic(props: DrawBezierQuadraticProps): any;
318
+ declare function DrawPolyline(props: DrawPolylineProps): any;
319
+ declare function DrawConvexPolyFilled(props: DrawConvexPolyFilledProps): any;
320
+ declare function DrawNgon(props: DrawNgonProps): any;
321
+ declare function DrawNgonFilled(props: DrawNgonFilledProps): any;
322
+ declare function DrawTriangle(props: DrawTriangleProps): any;
323
+
324
+ interface StyleVarProps {
325
+ alpha?: number;
326
+ windowPadding?: [number, number];
327
+ windowRounding?: number;
328
+ framePadding?: [number, number];
329
+ frameRounding?: number;
330
+ frameBorderSize?: number;
331
+ itemSpacing?: [number, number];
332
+ itemInnerSpacing?: [number, number];
333
+ indentSpacing?: number;
334
+ cellPadding?: [number, number];
335
+ tabRounding?: number;
336
+ children?: any;
337
+ }
338
+ declare function StyleVar(props: StyleVarProps): any;
339
+ declare function DragDropSource(props: DragDropSourceProps): any;
340
+ declare function DragDropTarget(props: DragDropTargetProps): any;
341
+ interface DisabledProps { disabled?: boolean; children?: any; }
342
+ interface ChildProps { id: string; width?: number; height?: number; border?: boolean; style?: Style; children?: any; }
343
+ declare function Disabled(props: DisabledProps): any;
344
+ declare function Child(props: ChildProps): any;
345
+ interface FontProps { name: string; src?: string; size?: number; embed?: boolean; children?: any; }
346
+ declare function Font(props: FontProps): any;
347
+
348
+ declare function resetLayout(): void;
349
+
350
+ // --- Custom native widgets ---
351
+ // Declare your C++ registered widgets here for type checking:
352
+ //
353
+ // interface KnobProps {
354
+ // value: number;
355
+ // onChange: (value: number) => void;
356
+ // min: number;
357
+ // max: number;
358
+ // width?: number;
359
+ // height?: number;
360
+ // }
361
+ // declare function Knob(props: KnobProps): any;
362
+
363
+ declare module "imx/jsx-runtime" {
364
+ export namespace JSX {
365
+ type Element = any;
366
+ interface IntrinsicElements { [tag: string]: any; }
367
+ interface ElementChildrenAttribute { children: {}; }
368
+ }
369
+ export function jsx(type: any, props: any, key?: any): any;
370
+ export function jsxs(type: any, props: any, key?: any): any;
371
+ export function Fragment(props: any): any;
372
+ }
373
+ `;
374
+ export function buildImxDts(appStateInterface) {
375
+ return IMX_DTS_PREFIX + appStateInterface + '\n' + IMX_DTS_SUFFIX;
376
+ }
377
+ export const TSCONFIG = `{
378
+ "compilerOptions": {
379
+ "target": "ES2022",
380
+ "lib": ["ES2022"],
381
+ "module": "ES2022",
382
+ "moduleResolution": "bundler",
383
+ "jsx": "react-jsx",
384
+ "jsxImportSource": "imx",
385
+ "strict": false,
386
+ "noEmit": true,
387
+ "skipLibCheck": true
388
+ },
389
+ "include": ["src/**/*.tsx", "src/imx.d.ts"]
390
+ }
391
+ `;
392
+ export function cmakeTemplate(projectName, repoUrl) {
393
+ return `cmake_minimum_required(VERSION 3.25)
394
+ project(${projectName} LANGUAGES CXX)
395
+
396
+ set(CMAKE_CXX_STANDARD 20)
397
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
398
+
399
+ include(FetchContent)
400
+ set(FETCHCONTENT_QUIET OFF)
401
+
402
+ FetchContent_Declare(
403
+ imx
404
+ GIT_REPOSITORY ${repoUrl}
405
+ GIT_TAG v0.6.1
406
+ GIT_SHALLOW TRUE
407
+ GIT_PROGRESS TRUE
408
+ )
409
+ message(STATUS "Fetching IMX (includes ImGui + GLFW)...")
410
+ FetchContent_MakeAvailable(imx)
411
+
412
+ include(ImxCompile)
413
+
414
+ imx_compile_tsx(GENERATED
415
+ SOURCES src/App.tsx
416
+ OUTPUT_DIR \${CMAKE_BINARY_DIR}/generated
417
+ )
418
+
419
+ add_executable(${projectName}
420
+ src/main.cpp
421
+ \${GENERATED}
422
+ )
423
+ set_target_properties(${projectName} PROPERTIES WIN32_EXECUTABLE $<CONFIG:Release>)
424
+ target_link_libraries(${projectName} PRIVATE imx::renderer)
425
+ target_include_directories(${projectName} PRIVATE \${CMAKE_BINARY_DIR}/generated \${CMAKE_CURRENT_SOURCE_DIR}/src)
426
+
427
+ # Copy public/ assets to output directory
428
+ add_custom_command(TARGET ${projectName} POST_BUILD
429
+ COMMAND \${CMAKE_COMMAND} -E copy_directory
430
+ \${CMAKE_CURRENT_SOURCE_DIR}/public
431
+ $<TARGET_FILE_DIR:${projectName}>
432
+ COMMENT "Copying public/ assets"
433
+ )
434
+ `;
435
+ }
436
+ export async function promptProjectName() {
437
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
438
+ let answered = false;
439
+ rl.on('close', () => { if (!answered)
440
+ process.exit(0); });
441
+ return new Promise((resolve) => {
442
+ rl.question('Project name: ', (answer) => {
443
+ answered = true;
444
+ rl.close();
445
+ const name = answer.trim();
446
+ if (!name) {
447
+ console.error('Error: project name cannot be empty.');
448
+ process.exit(1);
449
+ }
450
+ resolve(name);
451
+ });
452
+ });
453
+ }
454
+ export async function promptTemplateName() {
455
+ // Filter out minimal — it's the default when nothing is selected
456
+ const features = TEMPLATES.filter(t => t.name !== 'minimal');
457
+ return new Promise((resolve) => {
458
+ const selected = new Set();
459
+ let cursor = 0;
460
+ function render() {
461
+ // Move cursor up to redraw (except first render)
462
+ const lines = features.length + 4;
463
+ process.stdout.write(`\x1b[${lines}A\x1b[J`);
464
+ draw();
465
+ }
466
+ function draw() {
467
+ console.log('Select features (arrow keys, space to toggle, enter to confirm):');
468
+ console.log('Select nothing for minimal template.');
469
+ console.log('');
470
+ features.forEach((t, i) => {
471
+ const check = selected.has(i) ? 'x' : ' ';
472
+ const arrow = i === cursor ? '>' : ' ';
473
+ console.log(` ${arrow} [${check}] ${t.name} — ${t.description}`);
474
+ });
475
+ console.log('');
476
+ }
477
+ // Initial draw
478
+ draw();
479
+ // Raw mode for keypress handling
480
+ if (!process.stdin.isTTY) {
481
+ // Fallback for non-TTY (piped input) — use old text prompt
482
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
483
+ rl.question('Templates (comma-separated names): ', (answer) => {
484
+ rl.close();
485
+ resolve(answer.trim() || 'minimal');
486
+ });
487
+ return;
488
+ }
489
+ process.stdin.setRawMode(true);
490
+ process.stdin.resume();
491
+ process.stdin.setEncoding('utf8');
492
+ process.stdin.on('data', (key) => {
493
+ if (key === '\x03') {
494
+ // Ctrl+C
495
+ process.stdin.setRawMode(false);
496
+ console.log('');
497
+ process.exit(0);
498
+ }
499
+ if (key === '\r' || key === '\n') {
500
+ // Enter — confirm
501
+ process.stdin.setRawMode(false);
502
+ process.stdin.pause();
503
+ const names = features
504
+ .filter((_, i) => selected.has(i))
505
+ .map(t => t.name);
506
+ if (names.length === 0) {
507
+ resolve('minimal');
508
+ }
509
+ else if (names.length === 1) {
510
+ resolve(names[0]);
511
+ }
512
+ else {
513
+ resolve(names.join(','));
514
+ }
515
+ return;
516
+ }
517
+ if (key === ' ') {
518
+ // Space — toggle
519
+ if (selected.has(cursor)) {
520
+ selected.delete(cursor);
521
+ }
522
+ else {
523
+ selected.add(cursor);
524
+ }
525
+ // Auto-select dependencies (networking requires async)
526
+ const deps = { networking: ['async'] };
527
+ for (const [feat, reqs] of Object.entries(deps)) {
528
+ const featIdx = features.findIndex(f => f.name === feat);
529
+ if (selected.has(featIdx)) {
530
+ for (const req of reqs) {
531
+ const reqIdx = features.findIndex(f => f.name === req);
532
+ if (reqIdx >= 0)
533
+ selected.add(reqIdx);
534
+ }
535
+ }
536
+ }
537
+ render();
538
+ return;
539
+ }
540
+ // Arrow keys (escape sequences)
541
+ if (key === '\x1b[A' || key === 'k') {
542
+ // Up
543
+ cursor = (cursor - 1 + features.length) % features.length;
544
+ render();
545
+ }
546
+ else if (key === '\x1b[B' || key === 'j') {
547
+ // Down
548
+ cursor = (cursor + 1) % features.length;
549
+ render();
550
+ }
551
+ });
552
+ });
553
+ }
@@ -0,0 +1 @@
1
+ export {};