A CSS in JS micro-tool that's < 1kb (gzipped).
Usage:
const MyComponent = (props) => {
return (
// | |
// Graphic Novelist (graphic-novelist.js) | |
// Created by M@ McCray | |
// site: http://mattmccray.com | |
// email: matt at elucidata dot net | |
// | |
// API: | |
// | |
// GraphicNovelist.parse( text ) -> Parse text into array of script Nodes | |
// GraphicNovelist.renderNodes( nodes ) -> Renders array of script Nodes into HTML |
interface PathProvider { | |
getPath(): string | |
setPath(path: string): void | |
onPathChange(callback: (path: string) => void): void | |
} | |
interface CurrentMatch { | |
path: string | |
route: Route | null | |
params: Record<string, string> |
type LogEntry = { | |
messages: any[], | |
level: 'pass' | 'fail' | 'error' | |
} | |
class Logger { | |
messages: LogEntry[] = [] | |
get total() { | |
return this.messages.length |
import { createMemo, JSX, splitProps } from "solid-js" | |
import { Dynamic } from 'solid-js/web' | |
type CssComponent<T extends keyof JSX.IntrinsicElements> = (props: JSX.IntrinsicElements[T]) => JSX.Element | |
export function component(styles: string): (props: JSX.IntrinsicElements['div']) => JSX.Element | |
export function component<T extends keyof JSX.IntrinsicElements>(tag: T | string | CssComponent<any>, styles: string): (props: JSX.IntrinsicElements[T]) => JSX.Element | |
export function component<T extends keyof JSX.IntrinsicElements>(tag?: string | T | CssComponent<any>, styles?: string): CssComponent<any> { | |
let extraClassNames = '' | |
if (!styles) { |
import { JSX } from "solid-js" | |
import { Dynamic } from 'solid-js/web' | |
export interface ComponentProps { children?: any, className?: string, [attr: string]: any } | |
export type CssComponent = (props: ComponentProps) => JSX.Element | |
export function component(styles: string): CssComponent | |
export function component(tag: string | CssComponent, styles: string): CssComponent | |
export function component(tag?: string | CssComponent, styles?: string): CssComponent { | |
let extraClassNames = '' |
interface IConfiguration { | |
append: 'each' | 'batch' | |
debug: boolean | |
appendTo: Element | |
replaceRegExp: RegExp | |
} | |
let _namePrefix = 'css' | |
let _pendingStyles: string | null = null | |
let _config: IConfiguration = { |
.PHONY: compile | |
time=/usr/bin/time | |
compile: dart typescript coffeescript haxe jsx | |
dart: | |
$(time) dart2js -ooutput/dart.js source/simple.dart | |
typescript: |
import { useEffect, useMemo, useRef } from "preact/hooks" | |
type PropsChangeMode = 'notify' | 'recycle' | 'smart' | |
interface IControllerClass<T, P> { | |
new(props: P): T | |
dispose?: () => void | |
propsDidChange?: (props: P) => void | |
} | |
/** |
import { useEffect, useRef, useState } from "preact/hooks"; // Or 'react' | |
interface PromiseResult<T> { | |
isResolved: boolean | |
value?: T | |
error?: any | |
} | |
export function usePromise<T>(builder: (...params: any[]) => Promise<T>, params: any[] = []): PromiseResult<T> { |