@krizaka/ui 2.6.0 → 2.9.0
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.
- package/README.md +37 -4
- package/dist/achievement.d.ts +54 -0
- package/dist/achievement.js +73 -0
- package/dist/achievement.js.map +1 -0
- package/dist/app-shell.d.ts +203 -0
- package/dist/app-shell.js +137 -0
- package/dist/app-shell.js.map +1 -0
- package/dist/auth-layout.d.ts +136 -0
- package/dist/auth-layout.js +75 -0
- package/dist/auth-layout.js.map +1 -0
- package/dist/choice-grid.d.ts +84 -0
- package/dist/choice-grid.js +141 -0
- package/dist/choice-grid.js.map +1 -0
- package/dist/chunk-555LWYIN.js +11 -0
- package/dist/chunk-555LWYIN.js.map +1 -0
- package/dist/chunk-AZPKXP3O.js +36 -0
- package/dist/chunk-AZPKXP3O.js.map +1 -0
- package/dist/chunk-NOVUREEC.js +274 -0
- package/dist/chunk-NOVUREEC.js.map +1 -0
- package/dist/chunk-VCAAHCHL.js +17 -0
- package/dist/chunk-VCAAHCHL.js.map +1 -0
- package/dist/code-block.js +23 -44
- package/dist/code-block.js.map +1 -1
- package/dist/continue-prompt.d.ts +48 -0
- package/dist/continue-prompt.js +200 -0
- package/dist/continue-prompt.js.map +1 -0
- package/dist/dashboard-layout.d.ts +139 -0
- package/dist/dashboard-layout.js +68 -0
- package/dist/dashboard-layout.js.map +1 -0
- package/dist/detail-layout.d.ts +126 -0
- package/dist/detail-layout.js +48 -0
- package/dist/detail-layout.js.map +1 -0
- package/dist/docs-layout.d.ts +78 -0
- package/dist/docs-layout.js +60 -0
- package/dist/docs-layout.js.map +1 -0
- package/dist/geometry-CXrAW34x.d.ts +19 -0
- package/dist/goal-gauge.d.ts +38 -0
- package/dist/goal-gauge.js +53 -0
- package/dist/goal-gauge.js.map +1 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.js +89 -4
- package/dist/index.js.map +1 -1
- package/dist/landscape.d.ts +41 -0
- package/dist/landscape.js +836 -0
- package/dist/landscape.js.map +1 -0
- package/dist/marketing-layout.d.ts +60 -0
- package/dist/marketing-layout.js +25 -0
- package/dist/marketing-layout.js.map +1 -0
- package/dist/mascot-quote.d.ts +4 -3
- package/dist/mascot-quote.js +21 -1
- package/dist/mascot-quote.js.map +1 -1
- package/dist/mascot-state.d.ts +128 -0
- package/dist/mascot-state.js +95 -0
- package/dist/mascot-state.js.map +1 -0
- package/dist/mascots.d.ts +18 -20
- package/dist/mascots.js +65 -221
- package/dist/mascots.js.map +1 -1
- package/dist/native.d.ts +124 -7
- package/dist/native.js +641 -239
- package/dist/native.js.map +1 -1
- package/dist/profile-card.d.ts +85 -0
- package/dist/profile-card.js +87 -0
- package/dist/profile-card.js.map +1 -0
- package/dist/promise-card.d.ts +28 -0
- package/dist/promise-card.js +29 -0
- package/dist/promise-card.js.map +1 -0
- package/dist/scroll-stage.d.ts +603 -0
- package/dist/scroll-stage.js +59 -0
- package/dist/scroll-stage.js.map +1 -0
- package/dist/settings-layout.d.ts +154 -0
- package/dist/settings-layout.js +57 -0
- package/dist/settings-layout.js.map +1 -0
- package/dist/split-view.d.ts +106 -0
- package/dist/split-view.js +41 -0
- package/dist/split-view.js.map +1 -0
- package/dist/stage-banner.d.ts +34 -0
- package/dist/stage-banner.js +26 -0
- package/dist/stage-banner.js.map +1 -0
- package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
- package/dist/story.css +432 -0
- package/package.json +267 -10
- package/registry/achievement.json +322 -0
- package/registry/action-bar.json +1 -1
- package/registry/alert.json +1 -1
- package/registry/app-shell.json +451 -0
- package/registry/argument-card.json +1 -1
- package/registry/audio-player.json +1 -1
- package/registry/auth-layout.json +230 -0
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/button.json +5 -5
- package/registry/card-grid.json +5 -5
- package/registry/card.json +3 -3
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/choice-grid.json +318 -0
- package/registry/code-block.json +1 -1
- package/registry/combobox.json +1 -1
- package/registry/command.json +1 -1
- package/registry/confirm-button.json +3 -3
- package/registry/continue-prompt.json +312 -0
- package/registry/countdown.json +1 -1
- package/registry/cta-panel.json +1 -1
- package/registry/dashboard-layout.json +273 -0
- package/registry/data-table.json +1 -1
- package/registry/date-picker.json +1 -1
- package/registry/decision-list.json +1 -1
- package/registry/detail-layout.json +233 -0
- package/registry/dialog.json +1 -1
- package/registry/docs-layout.json +148 -0
- package/registry/dropdown-menu.json +3 -3
- package/registry/empty-state.json +1 -1
- package/registry/examples/achievement/arcade.d.ts +4 -0
- package/registry/examples/achievement/arcade.js +15 -0
- package/registry/examples/achievement/arcade.tsx +12 -0
- package/registry/examples/achievement/milestones.d.ts +4 -0
- package/registry/examples/achievement/milestones.js +15 -0
- package/registry/examples/achievement/milestones.tsx +12 -0
- package/registry/examples/app-shell/admin-console.d.ts +4 -0
- package/registry/examples/app-shell/admin-console.js +52 -0
- package/registry/examples/app-shell/admin-console.tsx +64 -0
- package/registry/examples/app-shell/basic.d.ts +4 -0
- package/registry/examples/app-shell/basic.js +37 -0
- package/registry/examples/app-shell/basic.tsx +31 -0
- package/registry/examples/app-shell/orochia-studio.d.ts +4 -0
- package/registry/examples/app-shell/orochia-studio.js +89 -0
- package/registry/examples/app-shell/orochia-studio.tsx +101 -0
- package/registry/examples/auth-layout/onboarding.d.ts +4 -0
- package/registry/examples/auth-layout/onboarding.js +56 -0
- package/registry/examples/auth-layout/onboarding.tsx +47 -0
- package/registry/examples/auth-layout/sign-in.d.ts +4 -0
- package/registry/examples/auth-layout/sign-in.js +55 -0
- package/registry/examples/auth-layout/sign-in.tsx +47 -0
- package/registry/examples/auth-layout/verify.d.ts +4 -0
- package/registry/examples/auth-layout/verify.js +23 -0
- package/registry/examples/auth-layout/verify.tsx +19 -0
- package/registry/examples/choice-grid/line-up.d.ts +4 -0
- package/registry/examples/choice-grid/line-up.js +37 -0
- package/registry/examples/choice-grid/line-up.tsx +32 -0
- package/registry/examples/choice-grid/plans.d.ts +4 -0
- package/registry/examples/choice-grid/plans.js +28 -0
- package/registry/examples/choice-grid/plans.tsx +24 -0
- package/registry/examples/continue-prompt/arcade.d.ts +4 -0
- package/registry/examples/continue-prompt/arcade.js +28 -0
- package/registry/examples/continue-prompt/arcade.tsx +25 -0
- package/registry/examples/continue-prompt/offer.d.ts +4 -0
- package/registry/examples/continue-prompt/offer.js +24 -0
- package/registry/examples/continue-prompt/offer.tsx +19 -0
- package/registry/examples/dashboard-layout/orazaka-eric.d.ts +4 -0
- package/registry/examples/dashboard-layout/orazaka-eric.js +58 -0
- package/registry/examples/dashboard-layout/orazaka-eric.tsx +80 -0
- package/registry/examples/dashboard-layout/widgets.d.ts +4 -0
- package/registry/examples/dashboard-layout/widgets.js +17 -0
- package/registry/examples/dashboard-layout/widgets.tsx +22 -0
- package/registry/examples/detail-layout/job.d.ts +4 -0
- package/registry/examples/detail-layout/job.js +25 -0
- package/registry/examples/detail-layout/job.tsx +20 -0
- package/registry/examples/detail-layout/video.d.ts +4 -0
- package/registry/examples/detail-layout/video.js +44 -0
- package/registry/examples/detail-layout/video.tsx +53 -0
- package/registry/examples/docs-layout/page.d.ts +4 -0
- package/registry/examples/docs-layout/page.js +26 -0
- package/registry/examples/docs-layout/page.tsx +30 -0
- package/registry/examples/goal-gauge/arcade.d.ts +4 -0
- package/registry/examples/goal-gauge/arcade.js +11 -0
- package/registry/examples/goal-gauge/arcade.tsx +10 -0
- package/registry/examples/goal-gauge/challenge.d.ts +4 -0
- package/registry/examples/goal-gauge/challenge.js +11 -0
- package/registry/examples/goal-gauge/challenge.tsx +10 -0
- package/registry/examples/goal-gauge/drain.d.ts +4 -0
- package/registry/examples/goal-gauge/drain.js +11 -0
- package/registry/examples/goal-gauge/drain.tsx +10 -0
- package/registry/examples/goal-gauge/native/default.d.ts +4 -0
- package/registry/examples/goal-gauge/native/default.dark.png +0 -0
- package/registry/examples/goal-gauge/native/default.js +15 -0
- package/registry/examples/goal-gauge/native/default.light.png +0 -0
- package/registry/examples/goal-gauge/native/default.tsx +12 -0
- package/registry/examples/landscape/backdrop.d.ts +4 -0
- package/registry/examples/landscape/backdrop.js +14 -0
- package/registry/examples/landscape/backdrop.tsx +11 -0
- package/registry/examples/landscape/brand.d.ts +4 -0
- package/registry/examples/landscape/brand.js +11 -0
- package/registry/examples/landscape/brand.tsx +10 -0
- package/registry/examples/marketing-layout/basic.d.ts +4 -0
- package/registry/examples/marketing-layout/basic.js +31 -0
- package/registry/examples/marketing-layout/basic.tsx +28 -0
- package/registry/examples/marketing-layout/docs-hub.d.ts +4 -0
- package/registry/examples/marketing-layout/docs-hub.js +37 -0
- package/registry/examples/marketing-layout/docs-hub.tsx +44 -0
- package/registry/examples/marketing-layout/pricing.d.ts +4 -0
- package/registry/examples/marketing-layout/pricing.js +45 -0
- package/registry/examples/marketing-layout/pricing.tsx +55 -0
- package/registry/examples/marketing-layout/product-page.d.ts +4 -0
- package/registry/examples/marketing-layout/product-page.js +79 -0
- package/registry/examples/marketing-layout/product-page.tsx +83 -0
- package/registry/examples/mascot-state/empty.d.ts +4 -0
- package/registry/examples/mascot-state/empty.js +22 -0
- package/registry/examples/mascot-state/empty.tsx +20 -0
- package/registry/examples/mascot-state/error.d.ts +4 -0
- package/registry/examples/mascot-state/error.js +23 -0
- package/registry/examples/mascot-state/error.tsx +21 -0
- package/registry/examples/mascot-state/loading.d.ts +4 -0
- package/registry/examples/mascot-state/loading.js +22 -0
- package/registry/examples/mascot-state/loading.tsx +16 -0
- package/registry/examples/mascot-state/native/default.d.ts +4 -0
- package/registry/examples/mascot-state/native/default.dark.png +0 -0
- package/registry/examples/mascot-state/native/default.js +25 -0
- package/registry/examples/mascot-state/native/default.light.png +0 -0
- package/registry/examples/mascot-state/native/default.tsx +19 -0
- package/registry/examples/mascot-state/success.d.ts +4 -0
- package/registry/examples/mascot-state/success.js +21 -0
- package/registry/examples/mascot-state/success.tsx +19 -0
- package/registry/examples/mascot-state/welcome.d.ts +4 -0
- package/registry/examples/mascot-state/welcome.js +21 -0
- package/registry/examples/mascot-state/welcome.tsx +19 -0
- package/registry/examples/mascots/flock.tsx +1 -1
- package/registry/examples/mascots/lovebird.d.ts +4 -0
- package/registry/examples/mascots/lovebird.js +19 -0
- package/registry/examples/mascots/lovebird.tsx +18 -0
- package/registry/examples/mascots/native/lovebird.d.ts +4 -0
- package/registry/examples/mascots/native/lovebird.dark.png +0 -0
- package/registry/examples/mascots/native/lovebird.js +21 -0
- package/registry/examples/mascots/native/lovebird.light.png +0 -0
- package/registry/examples/mascots/native/lovebird.tsx +18 -0
- package/registry/examples/mascots/native/phoenix.d.ts +4 -0
- package/registry/examples/mascots/native/phoenix.dark.png +0 -0
- package/registry/examples/mascots/native/phoenix.js +21 -0
- package/registry/examples/mascots/native/phoenix.light.png +0 -0
- package/registry/examples/mascots/native/phoenix.tsx +18 -0
- package/registry/examples/mascots/phoenix.d.ts +4 -0
- package/registry/examples/mascots/phoenix.js +14 -0
- package/registry/examples/mascots/phoenix.tsx +11 -0
- package/registry/examples/profile-card/arcade.d.ts +4 -0
- package/registry/examples/profile-card/arcade.js +25 -0
- package/registry/examples/profile-card/arcade.tsx +19 -0
- package/registry/examples/profile-card/creator.d.ts +4 -0
- package/registry/examples/profile-card/creator.js +31 -0
- package/registry/examples/profile-card/creator.tsx +26 -0
- package/registry/examples/profile-card/match.d.ts +4 -0
- package/registry/examples/profile-card/match.js +25 -0
- package/registry/examples/profile-card/match.tsx +19 -0
- package/registry/examples/profile-card/native/default.d.ts +4 -0
- package/registry/examples/profile-card/native/default.dark.png +0 -0
- package/registry/examples/profile-card/native/default.js +27 -0
- package/registry/examples/profile-card/native/default.light.png +0 -0
- package/registry/examples/profile-card/native/default.tsx +22 -0
- package/registry/examples/promise-card/arcade.d.ts +4 -0
- package/registry/examples/promise-card/arcade.js +25 -0
- package/registry/examples/promise-card/arcade.tsx +19 -0
- package/registry/examples/promise-card/guarantee.d.ts +4 -0
- package/registry/examples/promise-card/guarantee.js +23 -0
- package/registry/examples/promise-card/guarantee.tsx +17 -0
- package/registry/examples/scroll-stage/arcade.d.ts +4 -0
- package/registry/examples/scroll-stage/arcade.js +16 -0
- package/registry/examples/scroll-stage/arcade.tsx +15 -0
- package/registry/examples/scroll-stage/chapters.d.ts +4 -0
- package/registry/examples/scroll-stage/chapters.js +25 -0
- package/registry/examples/scroll-stage/chapters.tsx +22 -0
- package/registry/examples/settings-layout/account.d.ts +4 -0
- package/registry/examples/settings-layout/account.js +51 -0
- package/registry/examples/settings-layout/account.tsx +50 -0
- package/registry/examples/settings-layout/sections.d.ts +4 -0
- package/registry/examples/settings-layout/sections.js +27 -0
- package/registry/examples/settings-layout/sections.tsx +24 -0
- package/registry/examples/split-view/empty.d.ts +4 -0
- package/registry/examples/split-view/empty.js +19 -0
- package/registry/examples/split-view/empty.tsx +13 -0
- package/registry/examples/split-view/messages.d.ts +4 -0
- package/registry/examples/split-view/messages.js +49 -0
- package/registry/examples/split-view/messages.tsx +52 -0
- package/registry/examples/stage-banner/round.d.ts +4 -0
- package/registry/examples/stage-banner/round.js +14 -0
- package/registry/examples/stage-banner/round.tsx +11 -0
- package/registry/examples/stage-banner/steps.d.ts +4 -0
- package/registry/examples/stage-banner/steps.js +14 -0
- package/registry/examples/stage-banner/steps.tsx +11 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +322 -0
- package/registry/image-cropper.json +1 -1
- package/registry/index.json +337 -5
- package/registry/iso.json +1 -1
- package/registry/kbd.json +1 -1
- package/registry/landscape.json +189 -0
- package/registry/link-card.json +1 -1
- package/registry/loader.json +1 -1
- package/registry/marketing-layout.json +172 -0
- package/registry/marquee.json +1 -1
- package/registry/mascot-quote.json +6 -6
- package/registry/mascot-state.json +1249 -0
- package/registry/mascots.json +140 -23
- package/registry/media-capture.json +1 -1
- package/registry/meter.json +1 -1
- package/registry/nav-bar.json +1 -1
- package/registry/number-ticker.json +1 -1
- package/registry/page-header.json +1 -1
- package/registry/page-hero.json +3 -3
- package/registry/page.json +5 -5
- package/registry/pagination.json +1 -1
- package/registry/pointer-light.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/profile-card.json +501 -0
- package/registry/progress.json +1 -1
- package/registry/promise-card.json +228 -0
- package/registry/radio-group.json +1 -1
- package/registry/scroll-stage.json +197 -0
- package/registry/search-field.json +1 -1
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/settings-layout.json +231 -0
- package/registry/skeleton.json +1 -1
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/split-view.json +233 -0
- package/registry/stage-banner.json +221 -0
- package/registry/stat.json +1 -1
- package/registry/stepper.json +1 -1
- package/registry/switch.json +1 -1
- package/registry/tabs.json +1 -1
- package/registry/tag-input.json +1 -1
- package/registry/terminal-replay.json +1 -1
- package/registry/theme.json +1 -1
- package/registry/toast.json +1 -1
- package/registry/toc.json +1 -1
- package/registry/tooltip.json +1 -1
- package/registry/video-player.json +1 -1
- package/registry/video-trimmer.json +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
2
|
+
import { Button } from "@krizaka/ui/button";
|
|
3
|
+
import { GlowCard } from "@krizaka/ui/glow-card";
|
|
4
|
+
import { Meter } from "@krizaka/ui/meter";
|
|
5
|
+
import { Section } from "@krizaka/ui/page";
|
|
6
|
+
import { PageHero } from "@krizaka/ui/page-hero";
|
|
7
|
+
|
|
8
|
+
const PLANS = [
|
|
9
|
+
{ id: "community", name: "Community", price: "Free", unit: "self-hosted", points: ["Every feature", "Your hardware", "Community support"] },
|
|
10
|
+
{ id: "workspace", name: "Workspace", price: "€29", unit: "per month · 12,000 credits", points: ["Packs & Studios", "Shared workspaces", "Email support"], featured: true },
|
|
11
|
+
{ id: "sovereign", name: "Sovereign", price: "Custom", unit: "on your servers", points: ["Installation with you", "Law 25 review", "A named engineer"] },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
// TEMPLATE — pricing and credits: the plans side by side (the featured one lit by its turning ring), what a credit buys,
|
|
15
|
+
// and the credits left for a signed-in visitor. On a phone the plans stack, the featured one first in the reading order
|
|
16
|
+
// it already has; every action is the cut button, the featured one primary.
|
|
17
|
+
export default function MarketingLayoutPricing() {
|
|
18
|
+
return (
|
|
19
|
+
<div className="w-full">
|
|
20
|
+
<PageHero eyebrow="Pricing" title="Pay once for what was done" lead="Credits buy answers, images and minutes of video — never a seat you do not use." align="center" backdrop="plain" />
|
|
21
|
+
<Section aria-label="Plans" spacing="sm">
|
|
22
|
+
<ul className="grid gap-4 md:grid-cols-3">
|
|
23
|
+
{PLANS.map((p) => (
|
|
24
|
+
<li key={p.id} className="flex">
|
|
25
|
+
<GlowCard alive={p.featured} className="flex w-full flex-col gap-4">
|
|
26
|
+
<div className="flex items-center justify-between gap-2">
|
|
27
|
+
<h2 className="font-display text-lg font-bold text-fg">{p.name}</h2>
|
|
28
|
+
{p.featured && <Badge tone="accent">Most chosen</Badge>}
|
|
29
|
+
</div>
|
|
30
|
+
<p>
|
|
31
|
+
<span className="font-display text-4xl font-extrabold text-fg">{p.price}</span>
|
|
32
|
+
<span className="mt-1 block text-sm text-fg-secondary">{p.unit}</span>
|
|
33
|
+
</p>
|
|
34
|
+
<ul className="flex flex-col gap-2 text-sm text-fg-secondary">
|
|
35
|
+
{p.points.map((x) => (
|
|
36
|
+
<li key={x}>— {x}</li>
|
|
37
|
+
))}
|
|
38
|
+
</ul>
|
|
39
|
+
<Button variant={p.featured ? "primary" : "secondary"} shape="cut" className="mt-auto w-full">
|
|
40
|
+
Choose {p.name}
|
|
41
|
+
</Button>
|
|
42
|
+
</GlowCard>
|
|
43
|
+
</li>
|
|
44
|
+
))}
|
|
45
|
+
</ul>
|
|
46
|
+
</Section>
|
|
47
|
+
<Section id="credits" title="Your credits" headingSize="sm" spacing="sm" divider>
|
|
48
|
+
<div className="max-w-md">
|
|
49
|
+
<Meter label="Credits this month" value={3800} max={12000} valueText="3,800 of 12,000 used" thresholds={{ low: 0.7, high: 0.9 }} showLabel />
|
|
50
|
+
<p className="mt-3 text-sm text-fg-secondary">One credit ≈ one chat answer · 4 credits an image · 30 a minute of video.</p>
|
|
51
|
+
</div>
|
|
52
|
+
</Section>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/marketing-layout/product-page.tsx
|
|
4
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
5
|
+
import { ActionBar } from "@krizaka/ui/action-bar";
|
|
6
|
+
import { ArgumentCard } from "@krizaka/ui/argument-card";
|
|
7
|
+
import { Button } from "@krizaka/ui/button";
|
|
8
|
+
import { CardGrid } from "@krizaka/ui/card-grid";
|
|
9
|
+
import { CtaPanel } from "@krizaka/ui/cta-panel";
|
|
10
|
+
import { DecisionList } from "@krizaka/ui/decision-list";
|
|
11
|
+
import { MarketingLayout } from "@krizaka/ui/marketing-layout";
|
|
12
|
+
import { MascotQuote } from "@krizaka/ui/mascot-quote";
|
|
13
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
14
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
15
|
+
import { Facts, Section } from "@krizaka/ui/page";
|
|
16
|
+
import { PageHero } from "@krizaka/ui/page-hero";
|
|
17
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
var WHY = [
|
|
19
|
+
{ id: "local", title: "Local inference", hook: "Elsewhere, every prompt crosses the ocean.", bird: "falcon" },
|
|
20
|
+
{ id: "paid", title: "Paid once", hook: "Elsewhere, you pay per token, forever.", bird: "flamingo" },
|
|
21
|
+
{ id: "asked", title: "Agents that ask", hook: "Elsewhere, an agent acts first and apologises later.", bird: "pigeon" }
|
|
22
|
+
];
|
|
23
|
+
var DECISIONS = [
|
|
24
|
+
{ id: "local", chose: "Local models by default.", refused: "A hosted API as the default path.", because: "A prompt that never leaves cannot leak.", cost: "You need a GPU, or patience on a CPU." },
|
|
25
|
+
{ id: "telemetry", chose: "Zero telemetry.", refused: "Anonymous usage statistics.", because: "Anonymous rarely stays anonymous.", cost: "You tell us what breaks." }
|
|
26
|
+
];
|
|
27
|
+
var labels = { chose: "We chose", refused: "We refused", because: "Because", cost: "What it costs you" };
|
|
28
|
+
function MarketingLayoutProductPage() {
|
|
29
|
+
return /* @__PURE__ */ jsx("div", { className: "brand-orazaka", children: /* @__PURE__ */ jsxs(
|
|
30
|
+
MarketingLayout,
|
|
31
|
+
{
|
|
32
|
+
skipLabel: "Skip to content",
|
|
33
|
+
header: /* @__PURE__ */ jsxs(NavBar.Root, { label: "Main", compactAfter: false, className: "max-w-(--kz-page-max,72rem)", children: [
|
|
34
|
+
/* @__PURE__ */ jsxs(NavBar.Brand, { href: "#home", children: [
|
|
35
|
+
/* @__PURE__ */ jsx(ProductLogo, { id: "orazaka", size: 22, animated: false }),
|
|
36
|
+
" Orazaka"
|
|
37
|
+
] }),
|
|
38
|
+
/* @__PURE__ */ jsxs(NavBar.Items, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#why", active: true, children: "Why" }),
|
|
40
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#decisions", children: "Decisions" })
|
|
41
|
+
] })
|
|
42
|
+
] }),
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ jsxs(
|
|
45
|
+
PageHero,
|
|
46
|
+
{
|
|
47
|
+
eyebrow: "Sovereign AI \xB7 open source",
|
|
48
|
+
title: "The AI that never leaves home",
|
|
49
|
+
lead: "Chat, image, voice and video on your own server \u2014 one governed pipeline, nothing sent anywhere.",
|
|
50
|
+
aside: /* @__PURE__ */ jsx(Mascot, { bird: "owl", mood: "welcome", size: 112 }),
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsx(Facts, { items: [{ label: "Apache-2.0", tone: "ok" }, { label: "Law 25 \xB7 GDPR" }] }),
|
|
53
|
+
/* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", shape: "cut", shimmer: true, children: "Install in three commands" })
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
/* @__PURE__ */ jsx(Section, { id: "why", eyebrow: "Why", title: "Three traps it removes", children: /* @__PURE__ */ jsx(CardGrid, { min: 260, fit: "fit", reveal: false, children: WHY.map((w) => /* @__PURE__ */ jsx(
|
|
58
|
+
ArgumentCard,
|
|
59
|
+
{
|
|
60
|
+
id: `why-${w.id}`,
|
|
61
|
+
title: w.title,
|
|
62
|
+
mark: /* @__PURE__ */ jsx(Mascot, { bird: w.bird, size: 40, animated: false }),
|
|
63
|
+
hook: { label: "The trap", text: w.hook },
|
|
64
|
+
more: { href: `#${w.id}`, label: "Details" }
|
|
65
|
+
},
|
|
66
|
+
w.id
|
|
67
|
+
)) }) }),
|
|
68
|
+
/* @__PURE__ */ jsxs(Section, { id: "decisions", eyebrow: "Decisions", title: "What we chose, and what it costs you", divider: true, children: [
|
|
69
|
+
/* @__PURE__ */ jsx(DecisionList, { decisions: DECISIONS, labels, reveal: false }),
|
|
70
|
+
/* @__PURE__ */ jsx("div", { className: "mt-8", children: /* @__PURE__ */ jsx(MascotQuote, { variant: "callout", bird: "owl", label: "The owl's promise", children: "Every personal record stays in Qu\xE9bec, and you can read who touched it." }) })
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ jsx(Section, { spacing: "sm", "aria-labelledby": "product-cta", children: /* @__PURE__ */ jsx(CtaPanel, { id: "product-cta", title: "Ready to run it at home?", body: "Three commands, then your first private answer.", children: /* @__PURE__ */ jsx(ActionBar, { primaryFirst: true, size: "lg", label: "Get started", actions: [{ href: "#install", label: "Install" }, { href: "#contact", label: "Talk to us" }] }) }) })
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
) });
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
MarketingLayoutProductPage as default
|
|
79
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
2
|
+
import { ActionBar } from "@krizaka/ui/action-bar";
|
|
3
|
+
import { ArgumentCard } from "@krizaka/ui/argument-card";
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { CardGrid } from "@krizaka/ui/card-grid";
|
|
6
|
+
import { CtaPanel } from "@krizaka/ui/cta-panel";
|
|
7
|
+
import { DecisionList } from "@krizaka/ui/decision-list";
|
|
8
|
+
import { MarketingLayout } from "@krizaka/ui/marketing-layout";
|
|
9
|
+
import { MascotQuote } from "@krizaka/ui/mascot-quote";
|
|
10
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
11
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
12
|
+
import { Facts, Section } from "@krizaka/ui/page";
|
|
13
|
+
import { PageHero } from "@krizaka/ui/page-hero";
|
|
14
|
+
|
|
15
|
+
const WHY = [
|
|
16
|
+
{ id: "local", title: "Local inference", hook: "Elsewhere, every prompt crosses the ocean.", bird: "falcon" as const },
|
|
17
|
+
{ id: "paid", title: "Paid once", hook: "Elsewhere, you pay per token, forever.", bird: "flamingo" as const },
|
|
18
|
+
{ id: "asked", title: "Agents that ask", hook: "Elsewhere, an agent acts first and apologises later.", bird: "pigeon" as const },
|
|
19
|
+
];
|
|
20
|
+
const DECISIONS = [
|
|
21
|
+
{ id: "local", chose: "Local models by default.", refused: "A hosted API as the default path.", because: "A prompt that never leaves cannot leak.", cost: "You need a GPU, or patience on a CPU." },
|
|
22
|
+
{ id: "telemetry", chose: "Zero telemetry.", refused: "Anonymous usage statistics.", because: "Anonymous rarely stays anonymous.", cost: "You tell us what breaks." },
|
|
23
|
+
];
|
|
24
|
+
const labels = { chose: "We chose", refused: "We refused", because: "Because", cost: "What it costs you" };
|
|
25
|
+
|
|
26
|
+
// TEMPLATE — a product page (Orazaka): the hero with its facts and its main action (cut, shimmer), the reasons as compact
|
|
27
|
+
// argument cards (the bird in the corner), the decisions with their cost, the owl's promise, the closing call. On a
|
|
28
|
+
// phone the hero's bird goes above the title, the cards stack, the decisions' three parts stack under the choice.
|
|
29
|
+
export default function MarketingLayoutProductPage() {
|
|
30
|
+
return (
|
|
31
|
+
<div className="brand-orazaka">
|
|
32
|
+
<MarketingLayout
|
|
33
|
+
skipLabel="Skip to content"
|
|
34
|
+
header={
|
|
35
|
+
<NavBar.Root label="Main" compactAfter={false} className="max-w-(--kz-page-max,72rem)">
|
|
36
|
+
<NavBar.Brand href="#home"><ProductLogo id="orazaka" size={22} animated={false} /> Orazaka</NavBar.Brand>
|
|
37
|
+
<NavBar.Items>
|
|
38
|
+
<NavBar.Link href="#why" active>Why</NavBar.Link>
|
|
39
|
+
<NavBar.Link href="#decisions">Decisions</NavBar.Link>
|
|
40
|
+
</NavBar.Items>
|
|
41
|
+
</NavBar.Root>
|
|
42
|
+
}
|
|
43
|
+
>
|
|
44
|
+
<PageHero
|
|
45
|
+
eyebrow="Sovereign AI · open source"
|
|
46
|
+
title="The AI that never leaves home"
|
|
47
|
+
lead="Chat, image, voice and video on your own server — one governed pipeline, nothing sent anywhere."
|
|
48
|
+
aside={<Mascot bird="owl" mood="welcome" size={112} />}
|
|
49
|
+
>
|
|
50
|
+
<Facts items={[{ label: "Apache-2.0", tone: "ok" }, { label: "Law 25 · GDPR" }]} />
|
|
51
|
+
<Button variant="primary" size="lg" shape="cut" shimmer>Install in three commands</Button>
|
|
52
|
+
</PageHero>
|
|
53
|
+
<Section id="why" eyebrow="Why" title="Three traps it removes">
|
|
54
|
+
<CardGrid min={260} fit="fit" reveal={false}>
|
|
55
|
+
{WHY.map((w) => (
|
|
56
|
+
<ArgumentCard
|
|
57
|
+
key={w.id}
|
|
58
|
+
id={`why-${w.id}`}
|
|
59
|
+
title={w.title}
|
|
60
|
+
mark={<Mascot bird={w.bird} size={40} animated={false} />}
|
|
61
|
+
hook={{ label: "The trap", text: w.hook }}
|
|
62
|
+
more={{ href: `#${w.id}`, label: "Details" }}
|
|
63
|
+
/>
|
|
64
|
+
))}
|
|
65
|
+
</CardGrid>
|
|
66
|
+
</Section>
|
|
67
|
+
<Section id="decisions" eyebrow="Decisions" title="What we chose, and what it costs you" divider>
|
|
68
|
+
<DecisionList decisions={DECISIONS} labels={labels} reveal={false} />
|
|
69
|
+
<div className="mt-8">
|
|
70
|
+
<MascotQuote variant="callout" bird="owl" label="The owl's promise">
|
|
71
|
+
Every personal record stays in Québec, and you can read who touched it.
|
|
72
|
+
</MascotQuote>
|
|
73
|
+
</div>
|
|
74
|
+
</Section>
|
|
75
|
+
<Section spacing="sm" aria-labelledby="product-cta">
|
|
76
|
+
<CtaPanel id="product-cta" title="Ready to run it at home?" body="Three commands, then your first private answer.">
|
|
77
|
+
<ActionBar primaryFirst size="lg" label="Get started" actions={[{ href: "#install", label: "Install" }, { href: "#contact", label: "Talk to us" }]} />
|
|
78
|
+
</CtaPanel>
|
|
79
|
+
</Section>
|
|
80
|
+
</MarketingLayout>
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/empty.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { MascotState } from "@krizaka/ui/mascot-state";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function MascotStateEmpty() {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
MascotState,
|
|
10
|
+
{
|
|
11
|
+
bird: "pigeon",
|
|
12
|
+
framed: true,
|
|
13
|
+
className: "w-96",
|
|
14
|
+
title: "No messages yet",
|
|
15
|
+
description: "Answer a challenge or tip a creator to start a conversation.",
|
|
16
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", children: "Find creators" })
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
MascotStateEmpty as default
|
|
22
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { MascotState } from "@krizaka/ui/mascot-state";
|
|
3
|
+
|
|
4
|
+
// An empty inbox: the pigeon has nothing to deliver yet; the action fills it.
|
|
5
|
+
export default function MascotStateEmpty() {
|
|
6
|
+
return (
|
|
7
|
+
<MascotState
|
|
8
|
+
bird="pigeon"
|
|
9
|
+
framed
|
|
10
|
+
className="w-96"
|
|
11
|
+
title="No messages yet"
|
|
12
|
+
description="Answer a challenge or tip a creator to start a conversation."
|
|
13
|
+
action={
|
|
14
|
+
<Button variant="primary" size="sm">
|
|
15
|
+
Find creators
|
|
16
|
+
</Button>
|
|
17
|
+
}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/error.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { ErrorState } from "@krizaka/ui/mascot-state";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function MascotStateError() {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
ErrorState,
|
|
10
|
+
{
|
|
11
|
+
bird: "owl",
|
|
12
|
+
size: "lg",
|
|
13
|
+
titleAs: "h1",
|
|
14
|
+
className: "w-96",
|
|
15
|
+
title: "This page does not exist",
|
|
16
|
+
description: "The link may be old, or the page has moved.",
|
|
17
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", children: "Back to the home page" })
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
MascotStateError as default
|
|
23
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { ErrorState } from "@krizaka/ui/mascot-state";
|
|
3
|
+
|
|
4
|
+
// A page that does not exist: the owl read everywhere and did not find it; the way back is the action.
|
|
5
|
+
export default function MascotStateError() {
|
|
6
|
+
return (
|
|
7
|
+
<ErrorState
|
|
8
|
+
bird="owl"
|
|
9
|
+
size="lg"
|
|
10
|
+
titleAs="h1"
|
|
11
|
+
className="w-96"
|
|
12
|
+
title="This page does not exist"
|
|
13
|
+
description="The link may be old, or the page has moved."
|
|
14
|
+
action={
|
|
15
|
+
<Button variant="secondary" size="sm">
|
|
16
|
+
Back to the home page
|
|
17
|
+
</Button>
|
|
18
|
+
}
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/loading.tsx
|
|
4
|
+
import { LoadingState } from "@krizaka/ui/mascot-state";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function MascotStateLoading() {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
LoadingState,
|
|
9
|
+
{
|
|
10
|
+
bird: "duck",
|
|
11
|
+
size: "sm",
|
|
12
|
+
layout: "inline",
|
|
13
|
+
framed: true,
|
|
14
|
+
className: "w-96",
|
|
15
|
+
title: "Building the preview",
|
|
16
|
+
description: "About two minutes. You can leave this page."
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
MascotStateLoading as default
|
|
22
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LoadingState } from "@krizaka/ui/mascot-state";
|
|
2
|
+
|
|
3
|
+
// A job of a few minutes, in a card: the duck builds; the words say what runs.
|
|
4
|
+
export default function MascotStateLoading() {
|
|
5
|
+
return (
|
|
6
|
+
<LoadingState
|
|
7
|
+
bird="duck"
|
|
8
|
+
size="sm"
|
|
9
|
+
layout="inline"
|
|
10
|
+
framed
|
|
11
|
+
className="w-96"
|
|
12
|
+
title="Building the preview"
|
|
13
|
+
description="About two minutes. You can leave this page."
|
|
14
|
+
/>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/native/default.tsx
|
|
4
|
+
import { Button, ErrorState, SuccessState } from "@krizaka/ui/native";
|
|
5
|
+
import { View } from "react-native";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function NativeMascotStateDefault() {
|
|
8
|
+
return /* @__PURE__ */ jsxs(View, { style: { width: 320, gap: 8 }, children: [
|
|
9
|
+
/* @__PURE__ */ jsx(SuccessState, { bird: "flamingo", size: "sm", animated: false, title: "Payment received", description: "120 credits are on your balance." }),
|
|
10
|
+
/* @__PURE__ */ jsx(
|
|
11
|
+
ErrorState,
|
|
12
|
+
{
|
|
13
|
+
bird: "falcon",
|
|
14
|
+
size: "sm",
|
|
15
|
+
animated: false,
|
|
16
|
+
title: "We could not verify this code",
|
|
17
|
+
description: "It may have expired. Ask for a new one.",
|
|
18
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "secondary", label: "Send a new code" })
|
|
19
|
+
}
|
|
20
|
+
)
|
|
21
|
+
] });
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
NativeMascotStateDefault as default
|
|
25
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button, ErrorState, SuccessState } from "@krizaka/ui/native";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
|
|
4
|
+
// A payment received (the flamingo gets paid) and a verification that failed (the falcon watches).
|
|
5
|
+
export default function NativeMascotStateDefault() {
|
|
6
|
+
return (
|
|
7
|
+
<View style={{ width: 320, gap: 8 }}>
|
|
8
|
+
<SuccessState bird="flamingo" size="sm" animated={false} title="Payment received" description="120 credits are on your balance." />
|
|
9
|
+
<ErrorState
|
|
10
|
+
bird="falcon"
|
|
11
|
+
size="sm"
|
|
12
|
+
animated={false}
|
|
13
|
+
title="We could not verify this code"
|
|
14
|
+
description="It may have expired. Ask for a new one."
|
|
15
|
+
action={<Button variant="secondary" label="Send a new code" />}
|
|
16
|
+
/>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/success.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { SuccessState } from "@krizaka/ui/mascot-state";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function MascotStateSuccess() {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
SuccessState,
|
|
10
|
+
{
|
|
11
|
+
bird: "flamingo",
|
|
12
|
+
className: "w-96",
|
|
13
|
+
title: "Payment received",
|
|
14
|
+
description: "120 credits are on your balance. The receipt is in your email.",
|
|
15
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", children: "See the receipt" })
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
MascotStateSuccess as default
|
|
21
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { SuccessState } from "@krizaka/ui/mascot-state";
|
|
3
|
+
|
|
4
|
+
// A payment received: the flamingo gets paid and answers; the receipt is the next step.
|
|
5
|
+
export default function MascotStateSuccess() {
|
|
6
|
+
return (
|
|
7
|
+
<SuccessState
|
|
8
|
+
bird="flamingo"
|
|
9
|
+
className="w-96"
|
|
10
|
+
title="Payment received"
|
|
11
|
+
description="120 credits are on your balance. The receipt is in your email."
|
|
12
|
+
action={
|
|
13
|
+
<Button variant="secondary" size="sm">
|
|
14
|
+
See the receipt
|
|
15
|
+
</Button>
|
|
16
|
+
}
|
|
17
|
+
/>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascot-state/welcome.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { WelcomeState } from "@krizaka/ui/mascot-state";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
function MascotStateWelcome() {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
WelcomeState,
|
|
10
|
+
{
|
|
11
|
+
bird: "falcon",
|
|
12
|
+
className: "w-96",
|
|
13
|
+
title: "Welcome, Eric",
|
|
14
|
+
description: "First, protect your account with a second factor. It takes a minute.",
|
|
15
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", children: "Protect my account" })
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
MascotStateWelcome as default
|
|
21
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { WelcomeState } from "@krizaka/ui/mascot-state";
|
|
3
|
+
|
|
4
|
+
// The first step of an onboarding: the falcon keeps the account safe — the step is a second factor.
|
|
5
|
+
export default function MascotStateWelcome() {
|
|
6
|
+
return (
|
|
7
|
+
<WelcomeState
|
|
8
|
+
bird="falcon"
|
|
9
|
+
className="w-96"
|
|
10
|
+
title="Welcome, Eric"
|
|
11
|
+
description="First, protect your account with a second factor. It takes a minute."
|
|
12
|
+
action={
|
|
13
|
+
<Button variant="primary" size="sm">
|
|
14
|
+
Protect my account
|
|
15
|
+
</Button>
|
|
16
|
+
}
|
|
17
|
+
/>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Mascot,MASCOT_BIRDS } from "@krizaka/ui/mascots";
|
|
2
2
|
|
|
3
|
-
// The
|
|
3
|
+
// The six birds in the host's brand colours: blue on Krizaka, orange in Orazaka, violet in Orochia, turquoise in Yazakia.
|
|
4
4
|
export default function MascotFlock() {
|
|
5
5
|
return (
|
|
6
6
|
<div className="flex flex-wrap items-end gap-6">
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascots/lovebird.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function MascotLovebird() {
|
|
8
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-96 items-center gap-4 rounded-xl border border-border-default bg-surface-1 p-4", children: [
|
|
9
|
+
/* @__PURE__ */ jsx(Mascot, { bird: "lovebird", mood: "success", size: 88 }),
|
|
10
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
|
|
11
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-fg", children: "You are both interested" }),
|
|
12
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-fg-secondary", children: "Your introduction is open for seven days." }),
|
|
13
|
+
/* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", className: "mt-3", children: "Say hello" })
|
|
14
|
+
] })
|
|
15
|
+
] });
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
MascotLovebird as default
|
|
19
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
3
|
+
|
|
4
|
+
// The lovebird introduces: two people who chose each other meet — the words and the next step beside it.
|
|
5
|
+
export default function MascotLovebird() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="flex w-96 items-center gap-4 rounded-xl border border-border-default bg-surface-1 p-4">
|
|
8
|
+
<Mascot bird="lovebird" mood="success" size={88} />
|
|
9
|
+
<div className="flex-1">
|
|
10
|
+
<p className="text-sm font-medium text-fg">You are both interested</p>
|
|
11
|
+
<p className="mt-1 text-sm text-fg-secondary">Your introduction is open for seven days.</p>
|
|
12
|
+
<Button variant="primary" size="sm" className="mt-3">
|
|
13
|
+
Say hello
|
|
14
|
+
</Button>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/mascots/native/lovebird.tsx
|
|
4
|
+
import { Mascot, Txt } from "@krizaka/ui/native";
|
|
5
|
+
import { View } from "react-native";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function NativeMascotLovebird() {
|
|
8
|
+
return /* @__PURE__ */ jsxs(View, { style: { flexDirection: "row", gap: 16, alignItems: "flex-end" }, children: [
|
|
9
|
+
/* @__PURE__ */ jsxs(View, { style: { alignItems: "center", gap: 4 }, children: [
|
|
10
|
+
/* @__PURE__ */ jsx(Mascot, { bird: "lovebird", mood: "welcome", size: 80 }),
|
|
11
|
+
/* @__PURE__ */ jsx(Txt, { variant: "caption", children: "welcome" })
|
|
12
|
+
] }),
|
|
13
|
+
/* @__PURE__ */ jsxs(View, { style: { alignItems: "center", gap: 4 }, children: [
|
|
14
|
+
/* @__PURE__ */ jsx(Mascot, { bird: "lovebird", mood: "success", size: 80 }),
|
|
15
|
+
/* @__PURE__ */ jsx(Txt, { variant: "caption", children: "mutual" })
|
|
16
|
+
] })
|
|
17
|
+
] });
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
NativeMascotLovebird as default
|
|
21
|
+
};
|
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Mascot, Txt } from "@krizaka/ui/native";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
|
|
4
|
+
// The lovebird introduces two people: welcoming, then celebrating a mutual interest.
|
|
5
|
+
export default function NativeMascotLovebird() {
|
|
6
|
+
return (
|
|
7
|
+
<View style={{ flexDirection: "row", gap: 16, alignItems: "flex-end" }}>
|
|
8
|
+
<View style={{ alignItems: "center", gap: 4 }}>
|
|
9
|
+
<Mascot bird="lovebird" mood="welcome" size={80} />
|
|
10
|
+
<Txt variant="caption">welcome</Txt>
|
|
11
|
+
</View>
|
|
12
|
+
<View style={{ alignItems: "center", gap: 4 }}>
|
|
13
|
+
<Mascot bird="lovebird" mood="success" size={80} />
|
|
14
|
+
<Txt variant="caption">mutual</Txt>
|
|
15
|
+
</View>
|
|
16
|
+
</View>
|
|
17
|
+
);
|
|
18
|
+
}
|