89 lines
1.9 KiB
Markdown
89 lines
1.9 KiB
Markdown
# WRNexusJS v0.6 language
|
|
|
|
## Imports
|
|
|
|
```wrn
|
|
import type { PublicUser } from "@/types/user.ts"
|
|
import PublicLayout from "@/layouts/PublicLayout.wrn"
|
|
import userStore from "@/stores/global/user.wrn"
|
|
import { Button, Modal } from "@wrnexus/ui"
|
|
```
|
|
|
|
Existing applications default to compatible import mode. Explicit mode requires component, layout, store, and non-global type imports.
|
|
|
|
## Typed props, state, functions, and outputs
|
|
|
|
```wrn
|
|
component ConfirmCard {
|
|
props {
|
|
title: string
|
|
open: boolean = false
|
|
user?: PublicUser
|
|
}
|
|
|
|
state count: number = 0
|
|
|
|
state {
|
|
loading: boolean = false
|
|
}
|
|
|
|
client state {
|
|
focused: boolean = false
|
|
}
|
|
|
|
server state {
|
|
internalSessionId: string | null = null
|
|
}
|
|
|
|
outputs {
|
|
confirm(payload: ConfirmPayload)
|
|
cancel()
|
|
}
|
|
|
|
functions {
|
|
client async function confirm(payload: ConfirmPayload): Promise<void> {
|
|
const result = await server.confirm(payload)
|
|
output.confirm(result)
|
|
}
|
|
|
|
server async function confirm(payload: ConfirmPayload): Promise<ConfirmResult> {
|
|
return await confirmationService.save(payload)
|
|
}
|
|
|
|
shared function normalize(value: string): string {
|
|
return value.trim()
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
`event` is reserved for native DOM events. `payload` is the component-output payload. `$emit` and `event.detail` are compatibility-only APIs in v0.6.
|
|
|
|
## Stores
|
|
|
|
```wrn
|
|
global store UserStore {
|
|
state {
|
|
user: PublicUser | null = null
|
|
}
|
|
|
|
computed {
|
|
authenticated: boolean = user !== null
|
|
}
|
|
|
|
persist {
|
|
storage = "local"
|
|
include = ["user"]
|
|
version = 1
|
|
}
|
|
|
|
functions {
|
|
client function clear(): void {
|
|
user = null
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Global stores survive CSR navigation and are request-scoped during SSR. Page stores are disposed on route leave. External state mutation is rejected; use store functions. `reset()` and `snapshot()` are built in.
|