mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 17:11:17 +00:00
Compare commits
1 Commits
ci/waitlis
...
feat/butto
| Author | SHA1 | Date | |
|---|---|---|---|
|
7fc544732e
|
42
.github/workflows/build-waitlist-website.yml
vendored
42
.github/workflows/build-waitlist-website.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: Build waitlist website
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
paths:
|
||||
- apps/waitlist-website/**
|
||||
- .github/workflows/build-waitlist-website.yml
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
REGISTRY: cr.nym.sh
|
||||
IMAGE_NAME: aelis-waitlist-website
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Log in to container registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: apps/waitlist-website
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
10
bun.lock
10
bun.lock
@@ -110,14 +110,6 @@
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
},
|
||||
},
|
||||
"packages/aelis-components": {
|
||||
"name": "@aelis/components",
|
||||
"version": "0.0.0",
|
||||
"peerDependencies": {
|
||||
"@json-render/core": "*",
|
||||
"@nym.sh/jrx": "*",
|
||||
},
|
||||
},
|
||||
"packages/aelis-core": {
|
||||
"name": "@aelis/core",
|
||||
"version": "0.0.0",
|
||||
@@ -197,8 +189,6 @@
|
||||
|
||||
"@aelis/backend": ["@aelis/backend@workspace:apps/aelis-backend"],
|
||||
|
||||
"@aelis/components": ["@aelis/components@workspace:packages/aelis-components"],
|
||||
|
||||
"@aelis/core": ["@aelis/core@workspace:packages/aelis-core"],
|
||||
|
||||
"@aelis/data-source-weatherkit": ["@aelis/data-source-weatherkit@workspace:packages/aelis-data-source-weatherkit"],
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "@aelis/components",
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"scripts": {
|
||||
"test": "bun test ./src"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@json-render/core": "*",
|
||||
"@nym.sh/jrx": "*"
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
import type { JrxNode } from "@nym.sh/jrx"
|
||||
|
||||
import { jsx } from "@nym.sh/jrx/jsx-runtime"
|
||||
|
||||
export type ButtonProps = {
|
||||
label: string
|
||||
leadingIcon?: string
|
||||
trailingIcon?: string
|
||||
style?: string
|
||||
children?: JrxNode | JrxNode[]
|
||||
}
|
||||
|
||||
export function Button(props: ButtonProps): JrxNode {
|
||||
return jsx("Button", props)
|
||||
}
|
||||
@@ -1,155 +0,0 @@
|
||||
/** @jsxImportSource @nym.sh/jrx */
|
||||
|
||||
import { render } from "@nym.sh/jrx"
|
||||
import { describe, expect, test } from "bun:test"
|
||||
|
||||
import { Button } from "./button.ts"
|
||||
import { FeedCard } from "./feed-card.ts"
|
||||
import { MonospaceText } from "./monospace-text.ts"
|
||||
import { SansSerifText } from "./sans-serif-text.ts"
|
||||
import { SerifText } from "./serif-text.ts"
|
||||
|
||||
describe("Button", () => {
|
||||
test("renders with label", () => {
|
||||
const spec = render(<Button label="Press me" />)
|
||||
|
||||
expect(spec.root).toStartWith("button-")
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("Button")
|
||||
expect(root.props).toEqual({ label: "Press me" })
|
||||
})
|
||||
|
||||
test("renders with icon props", () => {
|
||||
const spec = render(<Button label="Add" leadingIcon="plus" trailingIcon="arrow-right" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("Button")
|
||||
expect(root.props).toEqual({
|
||||
label: "Add",
|
||||
leadingIcon: "plus",
|
||||
trailingIcon: "arrow-right",
|
||||
})
|
||||
})
|
||||
|
||||
test("passes style as string prop", () => {
|
||||
const spec = render(<Button label="Go" style="px-4 py-2" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.props.style).toBe("px-4 py-2")
|
||||
})
|
||||
})
|
||||
|
||||
describe("FeedCard", () => {
|
||||
test("renders as container", () => {
|
||||
const spec = render(<FeedCard />)
|
||||
|
||||
expect(spec.root).toStartWith("feedcard-")
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("FeedCard")
|
||||
})
|
||||
|
||||
test("renders with a single child", () => {
|
||||
const spec = render(
|
||||
<FeedCard>
|
||||
<SansSerifText content="Only child" />
|
||||
</FeedCard>,
|
||||
)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.children).toHaveLength(1)
|
||||
const child = spec.elements[root.children![0]!]!
|
||||
expect(child.type).toBe("SansSerifText")
|
||||
expect(child.props).toEqual({ content: "Only child" })
|
||||
})
|
||||
|
||||
test("passes style as string prop", () => {
|
||||
const spec = render(<FeedCard style="p-4 border rounded-lg" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.props.style).toBe("p-4 border rounded-lg")
|
||||
})
|
||||
})
|
||||
|
||||
describe("SansSerifText", () => {
|
||||
test("renders with content prop", () => {
|
||||
const spec = render(<SansSerifText content="Hello" />)
|
||||
|
||||
expect(spec.root).toStartWith("sansseriftext-")
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("SansSerifText")
|
||||
expect(root.props).toEqual({ content: "Hello" })
|
||||
})
|
||||
|
||||
test("passes style as string prop", () => {
|
||||
const spec = render(<SansSerifText content="Hello" style="text-sm text-stone-500" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.props.style).toBe("text-sm text-stone-500")
|
||||
})
|
||||
})
|
||||
|
||||
describe("SerifText", () => {
|
||||
test("renders with content prop", () => {
|
||||
const spec = render(<SerifText content="Title" />)
|
||||
|
||||
expect(spec.root).toStartWith("seriftext-")
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("SerifText")
|
||||
expect(root.props).toEqual({ content: "Title" })
|
||||
})
|
||||
|
||||
test("passes style as string prop", () => {
|
||||
const spec = render(<SerifText content="Title" style="text-xl" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.props.style).toBe("text-xl")
|
||||
})
|
||||
})
|
||||
|
||||
describe("MonospaceText", () => {
|
||||
test("renders with content prop", () => {
|
||||
const spec = render(<MonospaceText content="code()" />)
|
||||
|
||||
expect(spec.root).toStartWith("monospacetext-")
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("MonospaceText")
|
||||
expect(root.props).toEqual({ content: "code()" })
|
||||
})
|
||||
|
||||
test("passes style as string prop", () => {
|
||||
const spec = render(<MonospaceText content="code()" style="text-xs" />)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.props.style).toBe("text-xs")
|
||||
})
|
||||
})
|
||||
|
||||
describe("composite", () => {
|
||||
test("FeedCard with nested children", () => {
|
||||
const spec = render(
|
||||
<FeedCard>
|
||||
<SerifText content="Weather" />
|
||||
<SansSerifText content="Sunny, 22C" />
|
||||
<Button label="Details" />
|
||||
</FeedCard>,
|
||||
)
|
||||
|
||||
const root = spec.elements[spec.root]!
|
||||
expect(root.type).toBe("FeedCard")
|
||||
expect(root.children).toHaveLength(3)
|
||||
|
||||
const childKeys = root.children!
|
||||
const child0 = spec.elements[childKeys[0]!]!
|
||||
const child1 = spec.elements[childKeys[1]!]!
|
||||
const child2 = spec.elements[childKeys[2]!]!
|
||||
|
||||
expect(child0.type).toBe("SerifText")
|
||||
expect(child0.props).toEqual({ content: "Weather" })
|
||||
|
||||
expect(child1.type).toBe("SansSerifText")
|
||||
expect(child1.props).toEqual({ content: "Sunny, 22C" })
|
||||
|
||||
expect(child2.type).toBe("Button")
|
||||
expect(child2.props).toEqual({ label: "Details" })
|
||||
})
|
||||
})
|
||||
@@ -1,12 +0,0 @@
|
||||
import type { JrxNode } from "@nym.sh/jrx"
|
||||
|
||||
import { jsx } from "@nym.sh/jrx/jsx-runtime"
|
||||
|
||||
export type FeedCardProps = {
|
||||
style?: string
|
||||
children?: JrxNode | JrxNode[]
|
||||
}
|
||||
|
||||
export function FeedCard(props: FeedCardProps): JrxNode {
|
||||
return jsx("FeedCard", props)
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
export type { ButtonProps } from "./button.ts"
|
||||
export { Button } from "./button.ts"
|
||||
|
||||
export type { FeedCardProps } from "./feed-card.ts"
|
||||
export { FeedCard } from "./feed-card.ts"
|
||||
|
||||
export type { SansSerifTextProps } from "./sans-serif-text.ts"
|
||||
export { SansSerifText } from "./sans-serif-text.ts"
|
||||
|
||||
export type { SerifTextProps } from "./serif-text.ts"
|
||||
export { SerifText } from "./serif-text.ts"
|
||||
|
||||
export type { MonospaceTextProps } from "./monospace-text.ts"
|
||||
export { MonospaceText } from "./monospace-text.ts"
|
||||
@@ -1,13 +0,0 @@
|
||||
import type { JrxNode } from "@nym.sh/jrx"
|
||||
|
||||
import { jsx } from "@nym.sh/jrx/jsx-runtime"
|
||||
|
||||
export type MonospaceTextProps = {
|
||||
content?: string
|
||||
style?: string
|
||||
children?: JrxNode | JrxNode[]
|
||||
}
|
||||
|
||||
export function MonospaceText(props: MonospaceTextProps): JrxNode {
|
||||
return jsx("MonospaceText", props)
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import type { JrxNode } from "@nym.sh/jrx"
|
||||
|
||||
import { jsx } from "@nym.sh/jrx/jsx-runtime"
|
||||
|
||||
export type SansSerifTextProps = {
|
||||
content?: string
|
||||
style?: string
|
||||
children?: JrxNode | JrxNode[]
|
||||
}
|
||||
|
||||
export function SansSerifText(props: SansSerifTextProps): JrxNode {
|
||||
return jsx("SansSerifText", props)
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import type { JrxNode } from "@nym.sh/jrx"
|
||||
|
||||
import { jsx } from "@nym.sh/jrx/jsx-runtime"
|
||||
|
||||
export type SerifTextProps = {
|
||||
content?: string
|
||||
style?: string
|
||||
children?: JrxNode | JrxNode[]
|
||||
}
|
||||
|
||||
export function SerifText(props: SerifTextProps): JrxNode {
|
||||
return jsx("SerifText", props)
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"jsxImportSource": "@nym.sh/jrx"
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
||||
@@ -79,12 +79,6 @@ export interface FeedItem<
|
||||
slots?: Record<string, Slot>
|
||||
}
|
||||
|
||||
/** Takes a FeedItem and returns a JRX node tree for rendering. */
|
||||
export type FeedItemRenderer<
|
||||
TType extends string = string,
|
||||
TData extends Record<string, unknown> = Record<string, unknown>,
|
||||
> = (item: FeedItem<TType, TData>) => JrxNode
|
||||
|
||||
/** A FeedItem with a JRX UI tree attached for client-side rendering. */
|
||||
export interface RenderedFeedItem<
|
||||
TType extends string = string,
|
||||
|
||||
@@ -7,7 +7,7 @@ export type { ActionDefinition } from "./action"
|
||||
export { UnknownActionError } from "./action"
|
||||
|
||||
// Feed
|
||||
export type { FeedItem, FeedItemRenderer, FeedItemSignals, RenderedFeedItem, Slot } from "./feed"
|
||||
export type { FeedItem, FeedItemSignals, RenderedFeedItem, Slot } from "./feed"
|
||||
export { TimeRelevance } from "./feed"
|
||||
|
||||
// Feed Source
|
||||
|
||||
Reference in New Issue
Block a user