airi/packages/stage-ui
Neko Ayaka b230e16b2e
Some checks are pending
CI / Build Test (ui-transitions) (push) Waiting to run
CI / Unit Test (push) Waiting to run
CI / Build Test (stage-tamagotchi-godot) (push) Waiting to run
CI / Build Test (stage-web) (push) Waiting to run
CI / Type Check (push) Waiting to run
CI / Check Provenance (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Build Test (stage-tamagotchi) (push) Waiting to run
CI / Build Test (ui-loading-screens) (push) Waiting to run
Cloudflare Pages (Auth UI) / Deploy - ui-server-auth (push) Waiting to run
Cloudflare Workers / Deploy - stage-web (push) Waiting to run
fix(stage-ui): mock for test
2026-08-10 18:33:24 +08:00
..
public docs(stage-ui): updated logo 2026-03-12 05:09:32 +08:00
src fix(stage-ui): mock for test 2026-08-10 18:33:24 +08:00
stories fix(stage-ui,ui): histoire wasn't configured correctly 2026-04-22 16:57:35 +08:00
.env feat(stage-*): experimental realtime transcription powered by Aliyun NLS 2025-11-02 04:20:27 +08:00
env.d.ts feat(stage-ui): integrate histoire storyboard (#70) 2025-03-12 10:32:05 +08:00
histoire.config.ts fix(stage-ui): configure Histoire to exclude node_modules from vendor chunking 2026-04-25 16:46:08 +08:00
package.json fix(stage-ui,stage-tamagotchi): should not flash messages, stream correctly, and sync tool call renderer 2026-08-10 14:32:42 +08:00
README.md feat(stage): add global button analytics directive (#2146) 2026-07-29 15:59:53 +08:00
tsconfig.json chore(ci): fix typecheck on navigator.gpu (#1700) 2026-04-21 20:27:17 +08:00
uno.config.ts feat: Refactor Font Configuration for Consistency and Correctness (#409) 2025-08-25 11:44:10 +08:00
vite.config.ts refactor(stage-web,stage-ui): replace warpdrive plugin with unplugin-basemove (#1818) 2026-05-13 12:03:30 +08:00
vitest.config.ts feat(stage-ui-mmd): add MMD support (#1997) 2026-07-20 16:13:55 +08:00

Stage UI

Shared core for stage

Button analytics

Register the shared plugin once in each Vue application:

import { trackButtonPlugin } from '@proj-airi/stage-ui/directives/track-button'

createApp(App)
  .use(trackButtonPlugin)
  .mount('#app')

Buttons that represent a product-analysis click intent can then declare a typed event without wrapping their business handler:

<Button
  v-track-button="{ name: 'update_check_clicked', channel: selectedChannel }"
  @click="checkForUpdates()"
/>

Keep async outcomes, confirmed state changes, impressions, and lifecycle events in their owning business flows instead of attaching them to the initial click.

Histoire (UI storyboard)

https://histoire.dev/

pnpm -F @proj-airi/stage-ui run story:dev

Project structure

  1. If a story is bound to a specific component, it can be placed beside the component in the src folder. e.g., MyComponent.story.vue
  2. If a story is not bound to a specific component, then it should be placed in the stories folder. e.g., MyStory.story.vue