@cascadetui/solid 0.1.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,51 @@
1
+ import { Renderable } from "@cascadetui/core"
2
+ import type {
3
+ AsciiFontProps,
4
+ BoxProps,
5
+ CodeProps,
6
+ ExtendedIntrinsicElements,
7
+ InputProps,
8
+ LinkProps,
9
+ MarkdownProps,
10
+ CascadeComponents,
11
+ ScrollBoxProps,
12
+ SelectProps,
13
+ SpanProps,
14
+ TabSelectProps,
15
+ TextareaProps,
16
+ TextProps,
17
+ } from "./src/types/elements"
18
+ import type { DomNode } from "./dist"
19
+
20
+ declare namespace JSX {
21
+ // Replace Node with Renderable
22
+ type Element = DomNode | ArrayElement | string | number | boolean | null | undefined
23
+
24
+ type ArrayElement = Array<Element>
25
+
26
+ interface IntrinsicElements extends ExtendedIntrinsicElements<CascadeComponents> {
27
+ box: BoxProps
28
+ text: TextProps
29
+ span: SpanProps
30
+ input: InputProps
31
+ select: SelectProps
32
+ ascii_font: AsciiFontProps
33
+ tab_select: TabSelectProps
34
+ scrollbox: ScrollBoxProps
35
+ code: CodeProps
36
+ textarea: TextareaProps
37
+ markdown: MarkdownProps
38
+
39
+ b: SpanProps
40
+ strong: SpanProps
41
+ i: SpanProps
42
+ em: SpanProps
43
+ u: SpanProps
44
+ br: {}
45
+ a: LinkProps
46
+ }
47
+
48
+ interface ElementChildrenAttribute {
49
+ children: {}
50
+ }
51
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@cascadetui/solid",
3
+ "module": "index.js",
4
+ "main": "index.js",
5
+ "types": "index.d.ts",
6
+ "type": "module",
7
+ "version": "0.1.1",
8
+ "description": "SolidJS renderer for Cascade",
9
+ "license": "MIT",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/kirosnn/cascade",
13
+ "directory": "packages/solid"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./index.d.ts",
18
+ "import": "./index.js",
19
+ "require": "./index.js"
20
+ },
21
+ "./preload": {
22
+ "import": "./scripts/preload.ts"
23
+ },
24
+ "./bun-plugin": {
25
+ "types": "./scripts/solid-plugin.d.ts",
26
+ "import": "./scripts/solid-plugin.ts"
27
+ },
28
+ "./jsx-runtime": "./jsx-runtime.d.ts",
29
+ "./jsx-dev-runtime": "./jsx-runtime.d.ts"
30
+ },
31
+ "dependencies": {
32
+ "@babel/core": "7.28.0",
33
+ "@babel/preset-typescript": "7.27.1",
34
+ "@cascadetui/core": "0.1.1",
35
+ "babel-plugin-module-resolver": "5.0.2",
36
+ "babel-preset-solid": "1.9.9",
37
+ "s-js": "^0.4.9"
38
+ },
39
+ "devDependencies": {
40
+ "@types/babel__core": "7.20.5",
41
+ "@types/bun": "latest",
42
+ "@types/node": "^24.0.0",
43
+ "typescript": "^5"
44
+ },
45
+ "peerDependencies": {
46
+ "solid-js": "1.9.9"
47
+ }
48
+ }
@@ -0,0 +1,4 @@
1
+ import solidTransformPlugin from "./solid-plugin"
2
+ import { plugin, type BunPlugin } from "bun"
3
+
4
+ plugin(solidTransformPlugin)
@@ -0,0 +1,3 @@
1
+ import { type BunPlugin } from "bun";
2
+ declare const solidTransformPlugin: BunPlugin;
3
+ export default solidTransformPlugin;
@@ -0,0 +1,53 @@
1
+ import { transformAsync } from "@babel/core"
2
+ // @ts-expect-error - Types not important.
3
+ import ts from "@babel/preset-typescript"
4
+ // @ts-expect-error - Types not important.
5
+ import solid from "babel-preset-solid"
6
+ import { type BunPlugin } from "bun"
7
+
8
+ const solidTransformPlugin: BunPlugin = {
9
+ name: "bun-plugin-solid",
10
+ setup: (build) => {
11
+ build.onLoad({ filter: /[\\/]node_modules[\\/]solid-js[\\/]dist[\\/]server\.js$/ }, async (args) => {
12
+ const path = args.path.replace(/server\.js$/, "solid.js")
13
+ const file = Bun.file(path)
14
+ const code = await file.text()
15
+ return { contents: code, loader: "js" }
16
+ })
17
+ build.onLoad({ filter: /[\\/]node_modules[\\/]solid-js[\\/]store[\\/]dist[\\/]server\.js$/ }, async (args) => {
18
+ const path = args.path.replace(/server\.js$/, "store.js")
19
+ const file = Bun.file(path)
20
+ const code = await file.text()
21
+ return { contents: code, loader: "js" }
22
+ })
23
+ build.onLoad({ filter: /\.(js|ts)x$/ }, async (args) => {
24
+ const file = Bun.file(args.path)
25
+ const code = await file.text()
26
+ const transforms = await transformAsync(code, {
27
+ filename: args.path,
28
+ // env: {
29
+ // development: {
30
+ // plugins: [["solid-refresh/babel", { "bundler": "esm" }]],
31
+ // },
32
+ // },
33
+ // plugins: [["solid-refresh/babel", { bundler: "esm" }]],
34
+ presets: [
35
+ [
36
+ solid,
37
+ {
38
+ moduleName: "@cascadetui/solid",
39
+ generate: "universal",
40
+ },
41
+ ],
42
+ [ts],
43
+ ],
44
+ })
45
+ return {
46
+ contents: transforms?.code ?? "",
47
+ loader: "js",
48
+ }
49
+ })
50
+ },
51
+ }
52
+
53
+ export default solidTransformPlugin
@@ -0,0 +1,41 @@
1
+ import { type DomNode } from "../reconciler";
2
+ import type { JSX } from "../../jsx-runtime";
3
+ import type { ValidComponent, ComponentProps } from "solid-js";
4
+ /**
5
+ * Renders components somewhere else in the DOM
6
+ *
7
+ * Useful for inserting modals and tooltips outside of an cropping layout. If no mount point is given, the portal is inserted on the root renderable; it is wrapped in a `<box>`
8
+ *
9
+ * @description https://docs.solidjs.com/reference/components/portal
10
+ */
11
+ export declare function Portal(props: {
12
+ mount?: DomNode;
13
+ ref?: (el: {}) => void;
14
+ children: JSX.Element;
15
+ }): DomNode;
16
+ export type DynamicProps<T extends ValidComponent, P = ComponentProps<T>> = {
17
+ [K in keyof P]: P[K];
18
+ } & {
19
+ component: T | undefined;
20
+ };
21
+ /**
22
+ * Renders an arbitrary component or element with the given props
23
+ *
24
+ * This is a lower level version of the `Dynamic` component, useful for
25
+ * performance optimizations in libraries. Do not use this unless you know
26
+ * what you are doing.
27
+ * ```typescript
28
+ * const element = () => multiline() ? 'textarea' : 'input';
29
+ * createDynamic(element, { value: value() });
30
+ * ```
31
+ * @description https://docs.solidjs.com/reference/components/dynamic
32
+ */
33
+ export declare function createDynamic<T extends ValidComponent>(component: () => T | undefined, props: ComponentProps<T>): JSX.Element;
34
+ /**
35
+ * Renders an arbitrary custom or native component and passes the other props
36
+ * ```typescript
37
+ * <Dynamic component={multiline() ? 'textarea' : 'input'} value={value()} />
38
+ * ```
39
+ * @description https://docs.solidjs.com/reference/components/dynamic
40
+ */
41
+ export declare function Dynamic<T extends ValidComponent>(props: DynamicProps<T>): JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { PasteEvent, Selection, Timeline, type CliRenderer, type KeyEvent, type TimelineOptions } from "@cascadetui/core";
2
+ export declare const RendererContext: import("solid-js").Context<CliRenderer | undefined>;
3
+ export declare const useRenderer: () => CliRenderer;
4
+ export declare const onResize: (callback: (width: number, height: number) => void) => void;
5
+ export declare const useTerminalDimensions: () => import("solid-js").Accessor<{
6
+ width: number;
7
+ height: number;
8
+ }>;
9
+ export interface UseKeyboardOptions {
10
+ /** Include release events - callback receives events with eventType: "release" */
11
+ release?: boolean;
12
+ }
13
+ /**
14
+ * Subscribe to keyboard events.
15
+ *
16
+ * By default, only receives press events (including key repeats with `repeated: true`).
17
+ * Use `options.release` to also receive release events.
18
+ *
19
+ * @example
20
+ * // Basic press handling (includes repeats)
21
+ * useKeyboard((e) => console.log(e.name, e.repeated ? "(repeat)" : ""))
22
+ *
23
+ * // With release events
24
+ * useKeyboard((e) => {
25
+ * if (e.eventType === "release") keys.delete(e.name)
26
+ * else keys.add(e.name)
27
+ * }, { release: true })
28
+ */
29
+ export declare const useKeyboard: (callback: (key: KeyEvent) => void, options?: UseKeyboardOptions) => void;
30
+ export declare const usePaste: (callback: (event: PasteEvent) => void) => void;
31
+ /**
32
+ * @deprecated renamed to useKeyboard
33
+ */
34
+ export declare const useKeyHandler: (callback: (key: KeyEvent) => void, options?: UseKeyboardOptions) => void;
35
+ export declare const useSelectionHandler: (callback: (selection: Selection) => void) => void;
36
+ export declare const useTimeline: (options?: TimelineOptions) => Timeline;
@@ -0,0 +1,72 @@
1
+ import { ASCIIFontRenderable, BoxRenderable, CodeRenderable, DiffRenderable, InputRenderable, LineNumberRenderable, MarkdownRenderable, ScrollBoxRenderable, SelectRenderable, TabSelectRenderable, TextareaRenderable, TextNodeRenderable, TextRenderable, type RenderContext, type TextNodeOptions } from "@cascadetui/core";
2
+ import type { RenderableConstructor } from "../types/elements";
3
+ export * from "./hooks";
4
+ export * from "./extras";
5
+ export * from "./slot";
6
+ declare class SpanRenderable extends TextNodeRenderable {
7
+ private readonly _ctx;
8
+ constructor(_ctx: RenderContext | null, options: TextNodeOptions);
9
+ }
10
+ export declare const textNodeKeys: readonly ["span", "b", "strong", "i", "em", "u", "a"];
11
+ export type TextNodeKey = (typeof textNodeKeys)[number];
12
+ declare class TextModifierRenderable extends SpanRenderable {
13
+ constructor(options: any, modifier?: TextNodeKey);
14
+ }
15
+ export declare class BoldSpanRenderable extends TextModifierRenderable {
16
+ constructor(options: any);
17
+ }
18
+ export declare class ItalicSpanRenderable extends TextModifierRenderable {
19
+ constructor(options: any);
20
+ }
21
+ export declare class UnderlineSpanRenderable extends TextModifierRenderable {
22
+ constructor(options: any);
23
+ }
24
+ export declare class LineBreakRenderable extends SpanRenderable {
25
+ constructor(_ctx: RenderContext | null, options: TextNodeOptions);
26
+ add(): number;
27
+ }
28
+ export interface LinkOptions extends TextNodeOptions {
29
+ href: string;
30
+ }
31
+ export declare class LinkRenderable extends SpanRenderable {
32
+ constructor(_ctx: RenderContext | null, options: LinkOptions);
33
+ }
34
+ export declare const baseComponents: {
35
+ box: typeof BoxRenderable;
36
+ text: typeof TextRenderable;
37
+ input: typeof InputRenderable;
38
+ select: typeof SelectRenderable;
39
+ textarea: typeof TextareaRenderable;
40
+ ascii_font: typeof ASCIIFontRenderable;
41
+ tab_select: typeof TabSelectRenderable;
42
+ scrollbox: typeof ScrollBoxRenderable;
43
+ code: typeof CodeRenderable;
44
+ diff: typeof DiffRenderable;
45
+ line_number: typeof LineNumberRenderable;
46
+ markdown: typeof MarkdownRenderable;
47
+ span: typeof SpanRenderable;
48
+ strong: typeof BoldSpanRenderable;
49
+ b: typeof BoldSpanRenderable;
50
+ em: typeof ItalicSpanRenderable;
51
+ i: typeof ItalicSpanRenderable;
52
+ u: typeof UnderlineSpanRenderable;
53
+ br: typeof LineBreakRenderable;
54
+ a: typeof LinkRenderable;
55
+ };
56
+ type ComponentCatalogue = Record<string, RenderableConstructor>;
57
+ export declare const componentCatalogue: ComponentCatalogue;
58
+ /**
59
+ * Extend the component catalogue with new renderable components
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * // Extend with an object of components
64
+ * extend({
65
+ * consoleButton: ConsoleButtonRenderable,
66
+ * customBox: CustomBoxRenderable
67
+ * })
68
+ * ```
69
+ */
70
+ export declare function extend<T extends ComponentCatalogue>(objects: T): void;
71
+ export declare function getComponentCatalogue(): ComponentCatalogue;
72
+ export type { ExtendedComponentProps, ExtendedIntrinsicElements, RenderableConstructor } from "../types/elements";
@@ -0,0 +1,38 @@
1
+ import { BaseRenderable, TextNodeRenderable, Yoga } from "@cascadetui/core";
2
+ declare class SlotBaseRenderable extends BaseRenderable {
3
+ constructor(id: string);
4
+ add(obj: BaseRenderable | unknown, index?: number): number;
5
+ getChildren(): BaseRenderable[];
6
+ remove(id: string): void;
7
+ insertBefore(obj: BaseRenderable | unknown, anchor: BaseRenderable | unknown): void;
8
+ getRenderable(id: string): BaseRenderable | undefined;
9
+ getChildrenCount(): number;
10
+ requestRender(): void;
11
+ findDescendantById(id: string): BaseRenderable | undefined;
12
+ }
13
+ export declare class TextSlotRenderable extends TextNodeRenderable {
14
+ protected slotParent?: SlotRenderable;
15
+ protected destroyed: boolean;
16
+ constructor(id: string, parent?: SlotRenderable);
17
+ destroy(): void;
18
+ }
19
+ export declare class LayoutSlotRenderable extends SlotBaseRenderable {
20
+ protected yogaNode: Yoga.Node;
21
+ protected slotParent?: SlotRenderable;
22
+ protected destroyed: boolean;
23
+ constructor(id: string, parent?: SlotRenderable);
24
+ getLayoutNode(): Yoga.Node;
25
+ updateFromLayout(): void;
26
+ updateLayout(): void;
27
+ onRemove(): void;
28
+ destroy(): void;
29
+ }
30
+ export declare class SlotRenderable extends SlotBaseRenderable {
31
+ layoutNode?: LayoutSlotRenderable;
32
+ textNode?: TextSlotRenderable;
33
+ protected destroyed: boolean;
34
+ constructor(id: string);
35
+ getSlotChild(parent: BaseRenderable): TextSlotRenderable | LayoutSlotRenderable;
36
+ destroy(): void;
37
+ }
38
+ export {};
@@ -0,0 +1,5 @@
1
+ import { BaseRenderable } from "@cascadetui/core";
2
+ import { SlotRenderable } from "./elements";
3
+ export type DomNode = BaseRenderable;
4
+ export declare function createSlotNode(): SlotRenderable;
5
+ export declare const _render: (code: () => BaseRenderable, node: BaseRenderable) => () => void, effect: <T>(fn: (prev?: T) => T, init?: T) => void, memo: <T>(fn: () => T, equal: boolean) => () => T, createComponent: <T>(Comp: (props: T) => BaseRenderable, props: T) => BaseRenderable, createElement: (tag: string) => BaseRenderable, createTextNode: (value: string) => BaseRenderable, insertNode: (parent: BaseRenderable, node: BaseRenderable, anchor?: BaseRenderable | undefined) => void, insert: <T>(parent: any, accessor: T | (() => T), marker?: any | null, initial?: any) => BaseRenderable, spread: <T>(node: any, accessor: (() => T) | T, skipChildren?: boolean) => void, setProp: <T>(node: BaseRenderable, name: string, value: T, prev?: T | undefined) => T, mergeProps: (...sources: unknown[]) => unknown, use: <A, T>(fn: (element: BaseRenderable, arg: A) => T, element: BaseRenderable, arg: A) => T;
@@ -0,0 +1,3 @@
1
+ import type { RendererOptions, Renderer } from "./universal.js";
2
+ export type { RendererOptions, Renderer } from "./universal.js";
3
+ export declare function createRenderer<NodeType>(options: RendererOptions<NodeType>): Renderer<NodeType>;
@@ -0,0 +1,29 @@
1
+ export function createRenderer({ createElement, createTextNode, createSlotNode, isTextNode, replaceText, insertNode, removeNode, setProperty, getParentNode, getFirstChild, getNextSibling, }: {
2
+ createElement: any;
3
+ createTextNode: any;
4
+ createSlotNode: any;
5
+ isTextNode: any;
6
+ replaceText: any;
7
+ insertNode: any;
8
+ removeNode: any;
9
+ setProperty: any;
10
+ getParentNode: any;
11
+ getFirstChild: any;
12
+ getNextSibling: any;
13
+ }): {
14
+ render(code: any, element: any): undefined;
15
+ insert: (parent: any, accessor: any, marker: any, initial: any) => any;
16
+ spread(node: any, accessor: any, skipChildren: any): void;
17
+ createElement: any;
18
+ createTextNode: any;
19
+ insertNode: any;
20
+ setProp(node: any, name: any, value: any, prev: any): any;
21
+ mergeProps: typeof mergeProps;
22
+ effect: typeof createRenderEffect;
23
+ memo: (fn: any) => import("solid-js").Accessor<any>;
24
+ createComponent: typeof createComponent;
25
+ use(fn: any, element: any, arg: any): any;
26
+ };
27
+ import { mergeProps } from "solid-js";
28
+ import { createRenderEffect } from "solid-js";
29
+ import { createComponent } from "solid-js";
@@ -0,0 +1,91 @@
1
+ import type { ASCIIFontOptions, ASCIIFontRenderable, BaseRenderable, BoxOptions, BoxRenderable, CodeOptions, CodeRenderable, InputRenderable, InputRenderableOptions, KeyEvent, MarkdownOptions, MarkdownRenderable, RenderableOptions, RenderContext, ScrollBoxOptions, ScrollBoxRenderable, SelectOption, SelectRenderable, SelectRenderableOptions, TabSelectOption, TabSelectRenderable, TabSelectRenderableOptions, TextareaOptions, TextareaRenderable, TextNodeRenderable, TextOptions, TextRenderable } from "@cascadetui/core";
2
+ import type { Ref } from "solid-js";
3
+ import type { JSX } from "../../jsx-runtime";
4
+ /** Properties that should not be included in the style prop */
5
+ export type NonStyledProps = "id" | "buffered" | "live" | "enableLayout" | "selectable" | "renderAfter" | "renderBefore" | `on${string}`;
6
+ /** Solid-specific props for all components */
7
+ export type ElementProps<TRenderable = unknown> = {
8
+ ref?: Ref<TRenderable>;
9
+ };
10
+ /** Base type for any renderable constructor */
11
+ export type RenderableConstructor<TRenderable extends BaseRenderable = BaseRenderable> = new (ctx: RenderContext, options: any) => TRenderable;
12
+ /** Extract the options type from a renderable constructor */
13
+ type ExtractRenderableOptions<TConstructor> = TConstructor extends new (ctx: RenderContext, options: infer TOptions) => any ? TOptions : never;
14
+ /** Extract the renderable type from a constructor */
15
+ type ExtractRenderable<TConstructor> = TConstructor extends new (ctx: RenderContext, options: any) => infer TRenderable ? TRenderable : never;
16
+ /** Determine which properties should be excluded from styling for different renderable types */
17
+ export type GetNonStyledProperties<TConstructor> = TConstructor extends RenderableConstructor<TextRenderable> ? NonStyledProps | "content" : TConstructor extends RenderableConstructor<BoxRenderable> ? NonStyledProps | "title" : TConstructor extends RenderableConstructor<ASCIIFontRenderable> ? NonStyledProps | "text" | "selectable" : TConstructor extends RenderableConstructor<InputRenderable> ? NonStyledProps | "placeholder" | "value" : TConstructor extends RenderableConstructor<CodeRenderable> ? NonStyledProps | "content" | "filetype" | "syntaxStyle" | "treeSitterClient" : TConstructor extends RenderableConstructor<MarkdownRenderable> ? NonStyledProps | "content" | "syntaxStyle" | "treeSitterClient" | "conceal" | "renderNode" : NonStyledProps;
18
+ /** Base props for container components that accept children */
19
+ type ContainerProps<TOptions> = TOptions & {
20
+ children?: JSX.Element;
21
+ };
22
+ /** Smart component props that automatically determine excluded properties */
23
+ type ComponentProps<TOptions extends RenderableOptions<TRenderable>, TRenderable extends BaseRenderable> = TOptions & {
24
+ style?: Partial<Omit<TOptions, GetNonStyledProperties<RenderableConstructor<TRenderable>>>>;
25
+ } & ElementProps<TRenderable>;
26
+ /** Valid text content types for Text component children */
27
+ type TextChildren = string | number | boolean | null | undefined | JSX.Element;
28
+ export type TextProps = ComponentProps<TextOptions, TextRenderable> & {
29
+ children?: TextChildren | Array<TextChildren>;
30
+ };
31
+ export type SpanProps = ComponentProps<{}, TextNodeRenderable> & {
32
+ children?: TextChildren | Array<TextChildren>;
33
+ };
34
+ export type LinkProps = SpanProps & {
35
+ href: string;
36
+ };
37
+ export type BoxProps = ComponentProps<ContainerProps<BoxOptions>, BoxRenderable> & {
38
+ focused?: boolean;
39
+ };
40
+ export type InputProps = ComponentProps<InputRenderableOptions, InputRenderable> & {
41
+ focused?: boolean;
42
+ onInput?: (value: string) => void;
43
+ onChange?: (value: string) => void;
44
+ onSubmit?: (value: string) => void;
45
+ };
46
+ export type TextareaProps = ComponentProps<TextareaOptions, TextareaRenderable> & {
47
+ focused?: boolean;
48
+ onSubmit?: () => void;
49
+ onContentChange?: (value: string) => void;
50
+ onCursorChange?: (value: {
51
+ line: number;
52
+ visualColumn: number;
53
+ }) => void;
54
+ onKeyDown?: (event: KeyEvent) => void;
55
+ onKeyPress?: (event: KeyEvent) => void;
56
+ };
57
+ export type SelectProps = ComponentProps<SelectRenderableOptions, SelectRenderable> & {
58
+ focused?: boolean;
59
+ onChange?: (index: number, option: SelectOption | null) => void;
60
+ onSelect?: (index: number, option: SelectOption | null) => void;
61
+ };
62
+ export type AsciiFontProps = ComponentProps<ASCIIFontOptions, ASCIIFontRenderable>;
63
+ export type TabSelectProps = ComponentProps<TabSelectRenderableOptions, TabSelectRenderable> & {
64
+ focused?: boolean;
65
+ onChange?: (index: number, option: TabSelectOption | null) => void;
66
+ onSelect?: (index: number, option: TabSelectOption | null) => void;
67
+ };
68
+ export type ScrollBoxProps = ComponentProps<ContainerProps<ScrollBoxOptions>, ScrollBoxRenderable> & {
69
+ focused?: boolean;
70
+ stickyScroll?: boolean;
71
+ stickyStart?: "bottom" | "top" | "left" | "right";
72
+ };
73
+ export type CodeProps = ComponentProps<CodeOptions, CodeRenderable>;
74
+ export type MarkdownProps = ComponentProps<MarkdownOptions, MarkdownRenderable>;
75
+ /** Convert renderable constructor to component props with proper style exclusions */
76
+ export type ExtendedComponentProps<TConstructor extends RenderableConstructor, TOptions = ExtractRenderableOptions<TConstructor>> = TOptions & {
77
+ children?: JSX.Element;
78
+ style?: Partial<Omit<TOptions, GetNonStyledProperties<TConstructor>>>;
79
+ } & ElementProps<ExtractRenderable<TConstructor>>;
80
+ /** Helper type to create JSX element properties from a component catalogue */
81
+ export type ExtendedIntrinsicElements<TComponentCatalogue extends Record<string, RenderableConstructor>> = {
82
+ [TComponentName in keyof TComponentCatalogue]: ExtendedComponentProps<TComponentCatalogue[TComponentName]>;
83
+ };
84
+ /**
85
+ * Global augmentation interface for extended components
86
+ * This will be augmented by user code using module augmentation
87
+ */
88
+ export interface CascadeComponents {
89
+ [componentName: string]: RenderableConstructor;
90
+ }
91
+ export {};
@@ -0,0 +1 @@
1
+ export declare function getNextId(elementType: string): string;
@@ -0,0 +1 @@
1
+ export declare const log: (...args: any[]) => void;