@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
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/auth-layout/sign-in.tsx
|
|
4
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
5
|
+
import { AuthLayout } from "@krizaka/ui/auth-layout";
|
|
6
|
+
import { Button } from "@krizaka/ui/button";
|
|
7
|
+
import { Field, Input } from "@krizaka/ui/field";
|
|
8
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
9
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
function AuthLayoutSignIn() {
|
|
11
|
+
return /* @__PURE__ */ jsx("div", { className: "brand-orochia", children: /* @__PURE__ */ jsx(
|
|
12
|
+
AuthLayout,
|
|
13
|
+
{
|
|
14
|
+
brand: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15
|
+
/* @__PURE__ */ jsx(ProductLogo, { id: "orochia", size: 28, animated: false }),
|
|
16
|
+
" Orochia"
|
|
17
|
+
] }),
|
|
18
|
+
promise: "Your fans pay you, not an algorithm.",
|
|
19
|
+
aside: /* @__PURE__ */ jsxs("div", { className: "flex items-end gap-3", children: [
|
|
20
|
+
/* @__PURE__ */ jsx(Mascot, { bird: "flamingo", mood: "welcome", size: 64 }),
|
|
21
|
+
/* @__PURE__ */ jsx("p", { children: "\u201C90 % of every tip, unlock and auction reaches me \u2014 on Monday.\u201D \u2014 Elena, creator" })
|
|
22
|
+
] }),
|
|
23
|
+
asideFooter: "\xA9 Krizaka \xB7 Montr\xE9al",
|
|
24
|
+
title: "Welcome back",
|
|
25
|
+
description: "Sign in to your studio.",
|
|
26
|
+
footer: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
"No account yet? ",
|
|
28
|
+
/* @__PURE__ */ jsx("a", { className: "font-semibold text-fg-accent", href: "#sign-up", children: "Create one" })
|
|
29
|
+
] }),
|
|
30
|
+
legal: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
31
|
+
"By signing in you accept the ",
|
|
32
|
+
/* @__PURE__ */ jsx("a", { className: "underline", href: "#terms", children: "terms" }),
|
|
33
|
+
" and the ",
|
|
34
|
+
/* @__PURE__ */ jsx("a", { className: "underline", href: "#privacy", children: "privacy policy" }),
|
|
35
|
+
"."
|
|
36
|
+
] }),
|
|
37
|
+
children: /* @__PURE__ */ jsxs("form", { className: "flex flex-col gap-4", children: [
|
|
38
|
+
/* @__PURE__ */ jsxs(Field.Root, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx(Field.Label, { htmlFor: "sign-in-email", children: "Email" }),
|
|
40
|
+
/* @__PURE__ */ jsx(Input, { id: "sign-in-email", type: "email", autoComplete: "email", placeholder: "you@example.com" })
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsxs(Field.Root, { children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Field.Label, { htmlFor: "sign-in-password", children: "Password" }),
|
|
44
|
+
/* @__PURE__ */ jsx(Input, { id: "sign-in-password", type: "password", autoComplete: "current-password" }),
|
|
45
|
+
/* @__PURE__ */ jsx(Field.Hint, { children: /* @__PURE__ */ jsx("a", { className: "text-fg-accent", href: "#reset", children: "Forgot it?" }) })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "lg", shape: "cut", shimmer: true, className: "w-full", children: "Sign in" }),
|
|
48
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", size: "lg", shape: "cut", className: "w-full", children: "Use a passkey" })
|
|
49
|
+
] })
|
|
50
|
+
}
|
|
51
|
+
) });
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
AuthLayoutSignIn as default
|
|
55
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
2
|
+
import { AuthLayout } from "@krizaka/ui/auth-layout";
|
|
3
|
+
import { Button } from "@krizaka/ui/button";
|
|
4
|
+
import { Field, Input } from "@krizaka/ui/field";
|
|
5
|
+
import { Mascot } from "@krizaka/ui/mascots";
|
|
6
|
+
|
|
7
|
+
// TEMPLATE — Orochia's sign-in: the brand panel (its gradient, the promise, a creator's sentence) beside a calm form;
|
|
8
|
+
// on a phone one column, the mark above the form, the fields at full width with 44 px targets.
|
|
9
|
+
export default function AuthLayoutSignIn() {
|
|
10
|
+
return (
|
|
11
|
+
<div className="brand-orochia">
|
|
12
|
+
<AuthLayout
|
|
13
|
+
brand={<><ProductLogo id="orochia" size={28} animated={false} /> Orochia</>}
|
|
14
|
+
promise="Your fans pay you, not an algorithm."
|
|
15
|
+
aside={
|
|
16
|
+
<div className="flex items-end gap-3">
|
|
17
|
+
<Mascot bird="flamingo" mood="welcome" size={64} />
|
|
18
|
+
<p>“90 % of every tip, unlock and auction reaches me — on Monday.” — Elena, creator</p>
|
|
19
|
+
</div>
|
|
20
|
+
}
|
|
21
|
+
asideFooter="© Krizaka · Montréal"
|
|
22
|
+
title="Welcome back"
|
|
23
|
+
description="Sign in to your studio."
|
|
24
|
+
footer={<>No account yet? <a className="font-semibold text-fg-accent" href="#sign-up">Create one</a></>}
|
|
25
|
+
legal={<>By signing in you accept the <a className="underline" href="#terms">terms</a> and the <a className="underline" href="#privacy">privacy policy</a>.</>}
|
|
26
|
+
>
|
|
27
|
+
<form className="flex flex-col gap-4">
|
|
28
|
+
<Field.Root>
|
|
29
|
+
<Field.Label htmlFor="sign-in-email">Email</Field.Label>
|
|
30
|
+
<Input id="sign-in-email" type="email" autoComplete="email" placeholder="you@example.com" />
|
|
31
|
+
</Field.Root>
|
|
32
|
+
<Field.Root>
|
|
33
|
+
<Field.Label htmlFor="sign-in-password">Password</Field.Label>
|
|
34
|
+
<Input id="sign-in-password" type="password" autoComplete="current-password" />
|
|
35
|
+
<Field.Hint><a className="text-fg-accent" href="#reset">Forgot it?</a></Field.Hint>
|
|
36
|
+
</Field.Root>
|
|
37
|
+
<Button type="submit" variant="primary" size="lg" shape="cut" shimmer className="w-full">
|
|
38
|
+
Sign in
|
|
39
|
+
</Button>
|
|
40
|
+
<Button type="button" variant="secondary" size="lg" shape="cut" className="w-full">
|
|
41
|
+
Use a passkey
|
|
42
|
+
</Button>
|
|
43
|
+
</form>
|
|
44
|
+
</AuthLayout>
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/auth-layout/verify.tsx
|
|
4
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
5
|
+
import { AuthLayout } from "@krizaka/ui/auth-layout";
|
|
6
|
+
import { Button } from "@krizaka/ui/button";
|
|
7
|
+
import { Field, Input } from "@krizaka/ui/field";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
function AuthLayoutVerify() {
|
|
10
|
+
return /* @__PURE__ */ jsx(AuthLayout, { brand: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
11
|
+
/* @__PURE__ */ jsx(ProductLogo, { id: "krizaka", size: 28, animated: false }),
|
|
12
|
+
" Krizaka"
|
|
13
|
+
] }), title: "Check your email", description: "We sent a 6-digit code to eric@tremblay.ca.", children: /* @__PURE__ */ jsxs("form", { className: "flex flex-col gap-4", children: [
|
|
14
|
+
/* @__PURE__ */ jsxs(Field.Root, { children: [
|
|
15
|
+
/* @__PURE__ */ jsx(Field.Label, { htmlFor: "verify-code", children: "Code" }),
|
|
16
|
+
/* @__PURE__ */ jsx(Input, { id: "verify-code", inputMode: "numeric", autoComplete: "one-time-code", maxLength: 6 })
|
|
17
|
+
] }),
|
|
18
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", size: "lg", shape: "cut", className: "w-full", children: "Verify" })
|
|
19
|
+
] }) });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
AuthLayoutVerify as default
|
|
23
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
2
|
+
import { AuthLayout } from "@krizaka/ui/auth-layout";
|
|
3
|
+
import { Button } from "@krizaka/ui/button";
|
|
4
|
+
import { Field, Input } from "@krizaka/ui/field";
|
|
5
|
+
|
|
6
|
+
// The smallest entry screen: no promise, the brand panel still carries the product's gradient on a desktop.
|
|
7
|
+
export default function AuthLayoutVerify() {
|
|
8
|
+
return (
|
|
9
|
+
<AuthLayout brand={<><ProductLogo id="krizaka" size={28} animated={false} /> Krizaka</>} title="Check your email" description="We sent a 6-digit code to eric@tremblay.ca.">
|
|
10
|
+
<form className="flex flex-col gap-4">
|
|
11
|
+
<Field.Root>
|
|
12
|
+
<Field.Label htmlFor="verify-code">Code</Field.Label>
|
|
13
|
+
<Input id="verify-code" inputMode="numeric" autoComplete="one-time-code" maxLength={6} />
|
|
14
|
+
</Field.Root>
|
|
15
|
+
<Button type="submit" variant="primary" size="lg" shape="cut" className="w-full">Verify</Button>
|
|
16
|
+
</form>
|
|
17
|
+
</AuthLayout>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/choice-grid/line-up.tsx
|
|
4
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
5
|
+
import { ChoiceGrid } from "@krizaka/ui/choice-grid";
|
|
6
|
+
import { StatGauge } from "@krizaka/ui/profile-card";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
var LINE_UP = [
|
|
9
|
+
{ id: "orazaka", name: "Orazaka", title: "Sovereign AI", stat: "Data kept at home", value: 100 },
|
|
10
|
+
{ id: "orochia", name: "Orochia", title: "Creator video", stat: "Creator share", value: 90 }
|
|
11
|
+
];
|
|
12
|
+
function ChoiceGridLineUp() {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
ChoiceGrid,
|
|
15
|
+
{
|
|
16
|
+
variant: "arcade",
|
|
17
|
+
label: "The products",
|
|
18
|
+
tag: "Team select",
|
|
19
|
+
caption: "One studio",
|
|
20
|
+
prompt: "Choose your fighter",
|
|
21
|
+
items: LINE_UP.map((p, i) => ({
|
|
22
|
+
id: p.id,
|
|
23
|
+
brand: p.id,
|
|
24
|
+
badge: `P${i + 1}`,
|
|
25
|
+
visual: /* @__PURE__ */ jsx(ProductLogo, { id: p.id, size: 84, animated: false }),
|
|
26
|
+
name: p.name,
|
|
27
|
+
title: p.title,
|
|
28
|
+
extra: /* @__PURE__ */ jsx(StatGauge, { label: p.stat, value: p.value }),
|
|
29
|
+
meta: `Stage 0${i + 1} \u2193`,
|
|
30
|
+
href: `#${p.id}`
|
|
31
|
+
}))
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
ChoiceGridLineUp as default
|
|
37
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ProductLogo } from "@krizaka/ui";
|
|
2
|
+
import { ChoiceGrid } from "@krizaka/ui/choice-grid";
|
|
3
|
+
import { StatGauge } from "@krizaka/ui/profile-card";
|
|
4
|
+
|
|
5
|
+
const LINE_UP = [
|
|
6
|
+
{ id: "orazaka", name: "Orazaka", title: "Sovereign AI", stat: "Data kept at home", value: 100 },
|
|
7
|
+
{ id: "orochia", name: "Orochia", title: "Creator video", stat: "Creator share", value: 90 },
|
|
8
|
+
] as const;
|
|
9
|
+
|
|
10
|
+
// The select screen of a told page: each card in its brand, a gauge, and a link to its chapter.
|
|
11
|
+
export default function ChoiceGridLineUp() {
|
|
12
|
+
return (
|
|
13
|
+
<ChoiceGrid
|
|
14
|
+
variant="arcade"
|
|
15
|
+
label="The products"
|
|
16
|
+
tag="Team select"
|
|
17
|
+
caption="One studio"
|
|
18
|
+
prompt="Choose your fighter"
|
|
19
|
+
items={LINE_UP.map((p, i) => ({
|
|
20
|
+
id: p.id,
|
|
21
|
+
brand: p.id,
|
|
22
|
+
badge: `P${i + 1}`,
|
|
23
|
+
visual: <ProductLogo id={p.id} size={84} animated={false} />,
|
|
24
|
+
name: p.name,
|
|
25
|
+
title: p.title,
|
|
26
|
+
extra: <StatGauge label={p.stat} value={p.value} />,
|
|
27
|
+
meta: `Stage 0${i + 1} ↓`,
|
|
28
|
+
href: `#${p.id}`,
|
|
29
|
+
}))}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/choice-grid/plans.tsx
|
|
4
|
+
import { Emblem } from "@krizaka/ui/achievement";
|
|
5
|
+
import { ChoiceGrid } from "@krizaka/ui/choice-grid";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
function ChoiceGridPlans() {
|
|
9
|
+
const [plan, setPlan] = useState("creator");
|
|
10
|
+
return /* @__PURE__ */ jsx(
|
|
11
|
+
ChoiceGrid,
|
|
12
|
+
{
|
|
13
|
+
label: "Choose your plan",
|
|
14
|
+
tag: "Step 1 of 3",
|
|
15
|
+
caption: "You can change it at any time.",
|
|
16
|
+
value: plan,
|
|
17
|
+
onValueChange: setPlan,
|
|
18
|
+
items: [
|
|
19
|
+
{ id: "starter", visual: /* @__PURE__ */ jsx(Emblem, { kind: "sword", size: 34 }), name: "Starter", title: "Publish and get paid" },
|
|
20
|
+
{ id: "creator", visual: /* @__PURE__ */ jsx(Emblem, { kind: "jewel", size: 34 }), name: "Creator", title: "Challenges and auctions" },
|
|
21
|
+
{ id: "studio", visual: /* @__PURE__ */ jsx(Emblem, { kind: "mirror", size: 34 }), name: "Studio", title: "A team, shared earnings" }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
ChoiceGridPlans as default
|
|
28
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Emblem } from "@krizaka/ui/achievement";
|
|
4
|
+
import { ChoiceGrid } from "@krizaka/ui/choice-grid";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
|
|
7
|
+
// Selectable: a radio group — one tab stop, the arrow keys move and choose.
|
|
8
|
+
export default function ChoiceGridPlans() {
|
|
9
|
+
const [plan, setPlan] = useState("creator");
|
|
10
|
+
return (
|
|
11
|
+
<ChoiceGrid
|
|
12
|
+
label="Choose your plan"
|
|
13
|
+
tag="Step 1 of 3"
|
|
14
|
+
caption="You can change it at any time."
|
|
15
|
+
value={plan}
|
|
16
|
+
onValueChange={setPlan}
|
|
17
|
+
items={[
|
|
18
|
+
{ id: "starter", visual: <Emblem kind="sword" size={34} />, name: "Starter", title: "Publish and get paid" },
|
|
19
|
+
{ id: "creator", visual: <Emblem kind="jewel" size={34} />, name: "Creator", title: "Challenges and auctions" },
|
|
20
|
+
{ id: "studio", visual: <Emblem kind="mirror" size={34} />, name: "Studio", title: "A team, shared earnings" },
|
|
21
|
+
]}
|
|
22
|
+
/>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/continue-prompt/arcade.tsx
|
|
4
|
+
import { ContinuePrompt } from "@krizaka/ui/continue-prompt";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function ContinuePromptArcade() {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
ContinuePrompt,
|
|
9
|
+
{
|
|
10
|
+
variant: "arcade",
|
|
11
|
+
brand: "krizaka",
|
|
12
|
+
className: "w-[36rem] max-w-full",
|
|
13
|
+
caption: "Krizaka \xB7 Cabinet 01",
|
|
14
|
+
highlight: "Insert coin",
|
|
15
|
+
hint: "1 credit = 1 story",
|
|
16
|
+
status: "Credit 01",
|
|
17
|
+
title: "Continue?",
|
|
18
|
+
countdown: { from: 9, to: 7 },
|
|
19
|
+
actionKey: "1P Start",
|
|
20
|
+
actionLabel: "Back to the top",
|
|
21
|
+
onAction: () => window.scrollTo({ top: 0, behavior: "smooth" }),
|
|
22
|
+
children: /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold", children: "Round one is over." })
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
ContinuePromptArcade as default
|
|
28
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { ContinuePrompt } from "@krizaka/ui/continue-prompt";
|
|
4
|
+
|
|
5
|
+
// The cabinet at the end of a told page: the closing call on a CRT that switches on, 9 → 7 once, back to the top.
|
|
6
|
+
export default function ContinuePromptArcade() {
|
|
7
|
+
return (
|
|
8
|
+
<ContinuePrompt
|
|
9
|
+
variant="arcade"
|
|
10
|
+
brand="krizaka"
|
|
11
|
+
className="w-[36rem] max-w-full"
|
|
12
|
+
caption="Krizaka · Cabinet 01"
|
|
13
|
+
highlight="Insert coin"
|
|
14
|
+
hint="1 credit = 1 story"
|
|
15
|
+
status="Credit 01"
|
|
16
|
+
title="Continue?"
|
|
17
|
+
countdown={{ from: 9, to: 7 }}
|
|
18
|
+
actionKey="1P Start"
|
|
19
|
+
actionLabel="Back to the top"
|
|
20
|
+
onAction={() => window.scrollTo({ top: 0, behavior: "smooth" })}
|
|
21
|
+
>
|
|
22
|
+
<p className="text-lg font-semibold">Round one is over.</p>
|
|
23
|
+
</ContinuePrompt>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/continue-prompt/offer.tsx
|
|
4
|
+
import { ContinuePrompt } from "@krizaka/ui/continue-prompt";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function ContinuePromptOffer() {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
ContinuePrompt,
|
|
9
|
+
{
|
|
10
|
+
className: "w-[28rem] max-w-full",
|
|
11
|
+
caption: "Your trial",
|
|
12
|
+
highlight: "3 days left",
|
|
13
|
+
status: "All features on",
|
|
14
|
+
title: "Keep your studio?",
|
|
15
|
+
count: "3",
|
|
16
|
+
actionLabel: "Continue with Creator",
|
|
17
|
+
href: "#plans",
|
|
18
|
+
children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "Your videos, challenges and earnings stay exactly where they are." })
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
ContinuePromptOffer as default
|
|
24
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ContinuePrompt } from "@krizaka/ui/continue-prompt";
|
|
2
|
+
|
|
3
|
+
// The end of a trial: the question, what counts, a line, and the one action that continues (a link with `href`).
|
|
4
|
+
export default function ContinuePromptOffer() {
|
|
5
|
+
return (
|
|
6
|
+
<ContinuePrompt
|
|
7
|
+
className="w-[28rem] max-w-full"
|
|
8
|
+
caption="Your trial"
|
|
9
|
+
highlight="3 days left"
|
|
10
|
+
status="All features on"
|
|
11
|
+
title="Keep your studio?"
|
|
12
|
+
count="3"
|
|
13
|
+
actionLabel="Continue with Creator"
|
|
14
|
+
href="#plans"
|
|
15
|
+
>
|
|
16
|
+
<p className="text-sm text-fg-secondary">Your videos, challenges and earnings stay exactly where they are.</p>
|
|
17
|
+
</ContinuePrompt>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/dashboard-layout/orazaka-eric.tsx
|
|
4
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
5
|
+
import { Button } from "@krizaka/ui/button";
|
|
6
|
+
import { Chip } from "@krizaka/ui/chip";
|
|
7
|
+
import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
|
|
8
|
+
import { Meter } from "@krizaka/ui/meter";
|
|
9
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
10
|
+
import { Stat } from "@krizaka/ui/stat";
|
|
11
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
var JOBS = [
|
|
13
|
+
{ name: "Catalogue summaries", studio: "Writing studio", value: 72, eta: "about 2 min" },
|
|
14
|
+
{ name: "Product shots, autumn", studio: "Image studio", value: 35, eta: "about 6 min" }
|
|
15
|
+
];
|
|
16
|
+
var PACKS = [
|
|
17
|
+
{ name: "Customer support", runs: "412 answers this week" },
|
|
18
|
+
{ name: "Law 25 review", runs: "38 documents checked" }
|
|
19
|
+
];
|
|
20
|
+
function DashboardLayoutOrazakaEric() {
|
|
21
|
+
return /* @__PURE__ */ jsx("div", { className: "brand-orazaka w-full", children: /* @__PURE__ */ jsxs(
|
|
22
|
+
DashboardLayout,
|
|
23
|
+
{
|
|
24
|
+
eyebrow: "Tremblay & associ\xE9s \xB7 on-premise",
|
|
25
|
+
title: "Good morning, Eric",
|
|
26
|
+
description: "Nothing left your server this week: 1,284 requests, all answered locally.",
|
|
27
|
+
actions: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
28
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", shape: "cut", children: "Add a pack" }),
|
|
29
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", shape: "cut", children: "New job" })
|
|
30
|
+
] }),
|
|
31
|
+
toolbar: /* @__PURE__ */ jsxs(Chip.Group, { type: "single", label: "Period", defaultValue: "7d", required: true, children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Chip, { value: "today", children: "Today" }),
|
|
33
|
+
/* @__PURE__ */ jsx(Chip, { value: "7d", children: "7 days" }),
|
|
34
|
+
/* @__PURE__ */ jsx(Chip, { value: "30d", children: "30 days" })
|
|
35
|
+
] }),
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Widget, { title: "Requests", children: /* @__PURE__ */ jsx(Stat, { label: "7 days", value: "1,284", trend: "up", trendLabel: "+6 %" }) }),
|
|
38
|
+
/* @__PURE__ */ jsx(Widget, { title: "Answered locally", children: /* @__PURE__ */ jsx(Stat, { label: "No cloud call", value: "100 %", hint: "sovereign mode" }) }),
|
|
39
|
+
/* @__PURE__ */ jsx(Widget, { title: "Median answer", children: /* @__PURE__ */ jsx(Stat, { label: "Chat", value: "1.8 s", trend: "down", trendLabel: "\u22120.3 s" }) }),
|
|
40
|
+
/* @__PURE__ */ jsx(Widget, { title: "Credits", description: "Workspace plan", children: /* @__PURE__ */ jsx(Meter, { label: "Credits used", value: 3800, max: 12e3, valueText: "3,800 of 12,000", showLabel: true }) }),
|
|
41
|
+
/* @__PURE__ */ jsx(Widget, { title: "Running now", span: 2, action: /* @__PURE__ */ jsx(Badge, { tone: "accent", dot: true, children: "2 jobs" }), children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-4", children: JOBS.map((j) => /* @__PURE__ */ jsxs("li", { className: "flex flex-col gap-1.5", children: [
|
|
42
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-baseline justify-between gap-2 text-sm", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-fg", children: j.name }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-fg-secondary", children: j.studio })
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ jsx(Progress, { value: j.value, label: j.name, eta: j.eta, size: "sm" })
|
|
47
|
+
] }, j.name)) }) }),
|
|
48
|
+
/* @__PURE__ */ jsx(Widget, { title: "Packs at work", span: 2, action: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", children: "All packs" }), children: /* @__PURE__ */ jsx("ul", { className: "divide-y divide-border-subtle", children: PACKS.map((p) => /* @__PURE__ */ jsxs("li", { className: "flex items-center justify-between gap-3 py-2.5 text-sm", children: [
|
|
49
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium text-fg", children: p.name }),
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "text-fg-secondary", children: p.runs })
|
|
51
|
+
] }, p.name)) }) })
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
) });
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
DashboardLayoutOrazakaEric as default
|
|
58
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
2
|
+
import { Button } from "@krizaka/ui/button";
|
|
3
|
+
import { Chip } from "@krizaka/ui/chip";
|
|
4
|
+
import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
|
|
5
|
+
import { Meter } from "@krizaka/ui/meter";
|
|
6
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
7
|
+
import { Stat } from "@krizaka/ui/stat";
|
|
8
|
+
|
|
9
|
+
const JOBS = [
|
|
10
|
+
{ name: "Catalogue summaries", studio: "Writing studio", value: 72, eta: "about 2 min" },
|
|
11
|
+
{ name: "Product shots, autumn", studio: "Image studio", value: 35, eta: "about 6 min" },
|
|
12
|
+
];
|
|
13
|
+
const PACKS = [
|
|
14
|
+
{ name: "Customer support", runs: "412 answers this week" },
|
|
15
|
+
{ name: "Law 25 review", runs: "38 documents checked" },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
// TEMPLATE — Orazaka's console, Eric's morning (an accountant who runs his firm's AI on its own server): what the
|
|
19
|
+
// engine did, what is running now, the credits left, the packs at work. The period is a single-choice chip group above the grid;
|
|
20
|
+
// on a phone everything stacks in reading order, the running jobs first after the figures.
|
|
21
|
+
export default function DashboardLayoutOrazakaEric() {
|
|
22
|
+
return (
|
|
23
|
+
<div className="brand-orazaka w-full">
|
|
24
|
+
<DashboardLayout
|
|
25
|
+
eyebrow="Tremblay & associés · on-premise"
|
|
26
|
+
title="Good morning, Eric"
|
|
27
|
+
description="Nothing left your server this week: 1,284 requests, all answered locally."
|
|
28
|
+
actions={
|
|
29
|
+
<>
|
|
30
|
+
<Button size="sm" variant="secondary" shape="cut">Add a pack</Button>
|
|
31
|
+
<Button size="sm" variant="primary" shape="cut">New job</Button>
|
|
32
|
+
</>
|
|
33
|
+
}
|
|
34
|
+
toolbar={
|
|
35
|
+
<Chip.Group type="single" label="Period" defaultValue="7d" required>
|
|
36
|
+
<Chip value="today">Today</Chip>
|
|
37
|
+
<Chip value="7d">7 days</Chip>
|
|
38
|
+
<Chip value="30d">30 days</Chip>
|
|
39
|
+
</Chip.Group>
|
|
40
|
+
}
|
|
41
|
+
>
|
|
42
|
+
<Widget title="Requests">
|
|
43
|
+
<Stat label="7 days" value="1,284" trend="up" trendLabel="+6 %" />
|
|
44
|
+
</Widget>
|
|
45
|
+
<Widget title="Answered locally">
|
|
46
|
+
<Stat label="No cloud call" value="100 %" hint="sovereign mode" />
|
|
47
|
+
</Widget>
|
|
48
|
+
<Widget title="Median answer">
|
|
49
|
+
<Stat label="Chat" value="1.8 s" trend="down" trendLabel="−0.3 s" />
|
|
50
|
+
</Widget>
|
|
51
|
+
<Widget title="Credits" description="Workspace plan">
|
|
52
|
+
<Meter label="Credits used" value={3800} max={12000} valueText="3,800 of 12,000" showLabel />
|
|
53
|
+
</Widget>
|
|
54
|
+
<Widget title="Running now" span={2} action={<Badge tone="accent" dot>2 jobs</Badge>}>
|
|
55
|
+
<ul className="flex flex-col gap-4">
|
|
56
|
+
{JOBS.map((j) => (
|
|
57
|
+
<li key={j.name} className="flex flex-col gap-1.5">
|
|
58
|
+
<span className="flex items-baseline justify-between gap-2 text-sm">
|
|
59
|
+
<span className="font-medium text-fg">{j.name}</span>
|
|
60
|
+
<span className="text-xs text-fg-secondary">{j.studio}</span>
|
|
61
|
+
</span>
|
|
62
|
+
<Progress value={j.value} label={j.name} eta={j.eta} size="sm" />
|
|
63
|
+
</li>
|
|
64
|
+
))}
|
|
65
|
+
</ul>
|
|
66
|
+
</Widget>
|
|
67
|
+
<Widget title="Packs at work" span={2} action={<Button size="sm" variant="ghost">All packs</Button>}>
|
|
68
|
+
<ul className="divide-y divide-border-subtle">
|
|
69
|
+
{PACKS.map((p) => (
|
|
70
|
+
<li key={p.name} className="flex items-center justify-between gap-3 py-2.5 text-sm">
|
|
71
|
+
<span className="font-medium text-fg">{p.name}</span>
|
|
72
|
+
<span className="text-fg-secondary">{p.runs}</span>
|
|
73
|
+
</li>
|
|
74
|
+
))}
|
|
75
|
+
</ul>
|
|
76
|
+
</Widget>
|
|
77
|
+
</DashboardLayout>
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/dashboard-layout/widgets.tsx
|
|
4
|
+
import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
|
|
5
|
+
import { Stat } from "@krizaka/ui/stat";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function DashboardLayoutWidgets() {
|
|
8
|
+
return /* @__PURE__ */ jsxs(DashboardLayout, { className: "w-full", title: "Overview", description: "The last 7 days.", children: [
|
|
9
|
+
/* @__PURE__ */ jsx(Widget, { title: "Requests", children: /* @__PURE__ */ jsx(Stat, { label: "Today", value: "1,284", trend: "up", trendLabel: "+6 %" }) }),
|
|
10
|
+
/* @__PURE__ */ jsx(Widget, { title: "Credits left", children: /* @__PURE__ */ jsx(Stat, { label: "Workspace", value: "8,200" }) }),
|
|
11
|
+
/* @__PURE__ */ jsx(Widget, { title: "Usage", span: 2, children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "A chart of @krizaka/charts goes here." }) }),
|
|
12
|
+
/* @__PURE__ */ jsx(Widget, { title: "Recent jobs", span: "full", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "A DataTable goes here." }) })
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
DashboardLayoutWidgets as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DashboardLayout, Widget } from "@krizaka/ui/dashboard-layout";
|
|
2
|
+
import { Stat } from "@krizaka/ui/stat";
|
|
3
|
+
|
|
4
|
+
// The grid: one column on a phone, two from `sm`, four from `xl`; `span` makes a widget wider (it keeps its order).
|
|
5
|
+
export default function DashboardLayoutWidgets() {
|
|
6
|
+
return (
|
|
7
|
+
<DashboardLayout className="w-full" title="Overview" description="The last 7 days.">
|
|
8
|
+
<Widget title="Requests">
|
|
9
|
+
<Stat label="Today" value="1,284" trend="up" trendLabel="+6 %" />
|
|
10
|
+
</Widget>
|
|
11
|
+
<Widget title="Credits left">
|
|
12
|
+
<Stat label="Workspace" value="8,200" />
|
|
13
|
+
</Widget>
|
|
14
|
+
<Widget title="Usage" span={2}>
|
|
15
|
+
<p className="text-sm text-fg-secondary">A chart of @krizaka/charts goes here.</p>
|
|
16
|
+
</Widget>
|
|
17
|
+
<Widget title="Recent jobs" span="full">
|
|
18
|
+
<p className="text-sm text-fg-secondary">A DataTable goes here.</p>
|
|
19
|
+
</Widget>
|
|
20
|
+
</DashboardLayout>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/detail-layout/job.tsx
|
|
4
|
+
import { Badge } from "@krizaka/ui/badge";
|
|
5
|
+
import { Button } from "@krizaka/ui/button";
|
|
6
|
+
import { DetailLayout } from "@krizaka/ui/detail-layout";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
function DetailLayoutJob() {
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
DetailLayout,
|
|
11
|
+
{
|
|
12
|
+
className: "w-full",
|
|
13
|
+
back: /* @__PURE__ */ jsx("a", { href: "#jobs", children: "\u2190 Jobs" }),
|
|
14
|
+
eyebrow: "Job \xB7 job-4822",
|
|
15
|
+
title: "Podcast transcript",
|
|
16
|
+
status: /* @__PURE__ */ jsx(Badge, { tone: "accent", dot: true, children: "Running" }),
|
|
17
|
+
meta: "Whisper large \xB7 started 5 min ago",
|
|
18
|
+
actions: /* @__PURE__ */ jsx(Button, { size: "sm", variant: "danger", shape: "cut", children: "Cancel" }),
|
|
19
|
+
children: /* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: "The transcript appears here as it is written." })
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
DetailLayoutJob as default
|
|
25
|
+
};
|