@krizaka/ui 2.2.0 → 2.3.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 +17 -7
- package/dist/{button-Cgfkg_3y.d.ts → button-BMAO7dKF.d.ts} +29 -2
- package/dist/button.d.ts +32 -5
- package/dist/button.js +62 -9
- package/dist/button.js.map +1 -1
- package/dist/chip-link.d.ts +53 -0
- package/dist/chip-link.js +32 -0
- package/dist/chip-link.js.map +1 -0
- package/dist/chunk-43PTCDTL.js +31 -0
- package/dist/chunk-43PTCDTL.js.map +1 -0
- package/dist/chunk-6ISW63JI.js +11 -0
- package/dist/chunk-6ISW63JI.js.map +1 -0
- package/dist/chunk-HAQWKORZ.js +117 -0
- package/dist/chunk-HAQWKORZ.js.map +1 -0
- package/dist/{chunk-FHYZSO2S.js → chunk-R6SDS7JM.js} +5 -3
- package/dist/chunk-R6SDS7JM.js.map +1 -0
- package/dist/chunk-RUPNPMP3.js +103 -0
- package/dist/chunk-RUPNPMP3.js.map +1 -0
- package/dist/chunk-VDR2EP6K.js +49 -0
- package/dist/chunk-VDR2EP6K.js.map +1 -0
- package/dist/chunk-WEVYKZIF.js +33 -0
- package/dist/chunk-WEVYKZIF.js.map +1 -0
- package/dist/command.d.ts +7 -7
- package/dist/command.js +3 -2
- package/dist/command.js.map +1 -1
- package/dist/confirm-button.d.ts +1 -1
- package/dist/confirm-button.js +2 -1
- package/dist/confirm-button.js.map +1 -1
- package/dist/{dialog-GQ4Nvuyf.d.ts → dialog-D42QwYb_.d.ts} +11 -1
- package/dist/dialog.d.ts +1 -1
- package/dist/dialog.js +3 -2
- package/dist/dialog.js.map +1 -1
- package/dist/glow-card.d.ts +20 -0
- package/dist/glow-card.js +30 -0
- package/dist/glow-card.js.map +1 -0
- package/dist/index.d.ts +2 -20
- package/dist/index.js +7 -64
- package/dist/index.js.map +1 -1
- package/dist/iso.d.ts +400 -0
- package/dist/iso.js +363 -0
- package/dist/iso.js.map +1 -0
- package/dist/loader.d.ts +206 -0
- package/dist/loader.js +138 -0
- package/dist/loader.js.map +1 -0
- package/dist/marquee.d.ts +33 -0
- package/dist/marquee.js +52 -0
- package/dist/marquee.js.map +1 -0
- package/dist/meter.d.ts +146 -0
- package/dist/meter.js +107 -0
- package/dist/meter.js.map +1 -0
- package/dist/motion.css +394 -3
- package/dist/motion.d.ts +46 -0
- package/dist/motion.js +10 -0
- package/dist/motion.js.map +1 -0
- package/dist/nav-bar.d.ts +178 -0
- package/dist/nav-bar.js +157 -0
- package/dist/nav-bar.js.map +1 -0
- package/dist/number-ticker.d.ts +32 -0
- package/dist/number-ticker.js +61 -0
- package/dist/number-ticker.js.map +1 -0
- package/dist/progress.d.ts +56 -1
- package/dist/progress.js +72 -25
- package/dist/progress.js.map +1 -1
- package/dist/skeleton.d.ts +18 -3
- package/dist/skeleton.js +9 -1
- package/dist/skeleton.js.map +1 -1
- package/dist/spinner.d.ts +21 -5
- package/dist/spinner.js +13 -12
- package/dist/spinner.js.map +1 -1
- package/dist/stepper.d.ts +112 -0
- package/dist/stepper.js +67 -0
- package/dist/stepper.js.map +1 -0
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.js +14 -8
- package/dist/tabs.js.map +1 -1
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +2 -1
- package/dist/theme.js.map +1 -1
- package/dist/toast.d.ts +39 -4
- package/dist/toast.js +81 -7
- package/dist/toast.js.map +1 -1
- package/package.json +148 -8
- package/registry/alert.json +1 -1
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/button.json +232 -26
- package/registry/card.json +1 -1
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +158 -0
- package/registry/chip.json +1 -1
- package/registry/command.json +1 -1
- package/registry/confirm-button.json +91 -7
- package/registry/countdown.json +1 -1
- package/registry/dialog.json +15 -7
- package/registry/dropdown-menu.json +1 -1
- package/registry/empty-state.json +1 -1
- package/registry/examples/button/error.js +11 -0
- package/registry/examples/button/error.tsx +10 -0
- package/registry/examples/button/loading.tsx +1 -1
- package/registry/examples/button/save-flow.d.ts +4 -0
- package/registry/examples/button/save-flow.js +28 -0
- package/registry/examples/button/save-flow.tsx +24 -0
- package/registry/examples/button/signature.d.ts +4 -0
- package/registry/examples/button/signature.js +17 -0
- package/registry/examples/button/signature.tsx +19 -0
- package/registry/examples/button/upload-progress.d.ts +4 -0
- package/registry/examples/button/upload-progress.js +23 -0
- package/registry/examples/button/upload-progress.tsx +26 -0
- package/registry/examples/chip-link/filters.d.ts +4 -0
- package/registry/examples/chip-link/filters.js +12 -0
- package/registry/examples/chip-link/filters.tsx +17 -0
- package/registry/examples/dialog/left.d.ts +4 -0
- package/registry/examples/dialog/left.js +22 -0
- package/registry/examples/dialog/left.tsx +32 -0
- package/registry/examples/glow-card/link-card.d.ts +4 -0
- package/registry/examples/glow-card/link-card.js +14 -0
- package/registry/examples/glow-card/link-card.tsx +13 -0
- package/registry/examples/glow-card/plans.d.ts +4 -0
- package/registry/examples/glow-card/plans.js +25 -0
- package/registry/examples/glow-card/plans.tsx +26 -0
- package/registry/examples/glow-card/spotlight.d.ts +4 -0
- package/registry/examples/glow-card/spotlight.js +14 -0
- package/registry/examples/glow-card/spotlight.tsx +15 -0
- package/registry/examples/iso/compose.d.ts +4 -0
- package/registry/examples/iso/compose.js +22 -0
- package/registry/examples/iso/compose.tsx +19 -0
- package/registry/examples/iso/orazaka-hero.d.ts +4 -0
- package/registry/examples/iso/orazaka-hero.js +26 -0
- package/registry/examples/iso/orazaka-hero.tsx +21 -0
- package/registry/examples/iso/orochia-hero.d.ts +4 -0
- package/registry/examples/iso/orochia-hero.js +29 -0
- package/registry/examples/iso/orochia-hero.tsx +23 -0
- package/registry/examples/iso/still.d.ts +4 -0
- package/registry/examples/iso/still.js +21 -0
- package/registry/examples/iso/still.tsx +15 -0
- package/registry/examples/loader/endings.d.ts +4 -0
- package/registry/examples/loader/endings.js +14 -0
- package/registry/examples/loader/endings.tsx +11 -0
- package/registry/examples/loader/fetch-flow.d.ts +4 -0
- package/registry/examples/loader/fetch-flow.js +24 -0
- package/registry/examples/loader/fetch-flow.tsx +24 -0
- package/registry/examples/loader/minimal.d.ts +4 -0
- package/registry/examples/loader/minimal.js +11 -0
- package/registry/examples/loader/minimal.tsx +6 -0
- package/registry/examples/loader/overlay.d.ts +4 -0
- package/registry/examples/loader/overlay.js +16 -0
- package/registry/examples/loader/overlay.tsx +13 -0
- package/registry/examples/loader/region-handover.d.ts +4 -0
- package/registry/examples/loader/region-handover.js +42 -0
- package/registry/examples/loader/region-handover.tsx +29 -0
- package/registry/examples/loader/upload-eta.d.ts +4 -0
- package/registry/examples/loader/upload-eta.js +11 -0
- package/registry/examples/loader/upload-eta.tsx +10 -0
- package/registry/examples/marquee/cards.d.ts +4 -0
- package/registry/examples/marquee/cards.js +23 -0
- package/registry/examples/marquee/cards.tsx +21 -0
- package/registry/examples/marquee/logos.d.ts +4 -0
- package/registry/examples/marquee/logos.js +12 -0
- package/registry/examples/marquee/logos.tsx +17 -0
- package/registry/examples/meter/balance.d.ts +4 -0
- package/registry/examples/meter/balance.js +14 -0
- package/registry/examples/meter/balance.tsx +15 -0
- package/registry/examples/meter/quota.d.ts +4 -0
- package/registry/examples/meter/quota.js +15 -0
- package/registry/examples/meter/quota.tsx +12 -0
- package/registry/examples/meter/split.d.ts +4 -0
- package/registry/examples/meter/split.js +18 -0
- package/registry/examples/meter/split.tsx +18 -0
- package/registry/examples/nav-bar/app-bar.d.ts +4 -0
- package/registry/examples/nav-bar/app-bar.js +22 -0
- package/registry/examples/nav-bar/app-bar.tsx +21 -0
- package/registry/examples/nav-bar/menu-open.d.ts +4 -0
- package/registry/examples/nav-bar/menu-open.js +26 -0
- package/registry/examples/nav-bar/menu-open.tsx +26 -0
- package/registry/examples/nav-bar/site.d.ts +4 -0
- package/registry/examples/nav-bar/site.js +31 -0
- package/registry/examples/nav-bar/site.tsx +36 -0
- package/registry/examples/number-ticker/gradient.d.ts +4 -0
- package/registry/examples/number-ticker/gradient.js +11 -0
- package/registry/examples/number-ticker/gradient.tsx +10 -0
- package/registry/examples/number-ticker/live-total.d.ts +4 -0
- package/registry/examples/number-ticker/live-total.js +17 -0
- package/registry/examples/number-ticker/live-total.tsx +21 -0
- package/registry/examples/number-ticker/stats.d.ts +4 -0
- package/registry/examples/number-ticker/stats.js +19 -0
- package/registry/examples/number-ticker/stats.tsx +23 -0
- package/registry/examples/progress/buffer.d.ts +4 -0
- package/registry/examples/progress/buffer.js +11 -0
- package/registry/examples/progress/buffer.tsx +10 -0
- package/registry/examples/progress/statuses.d.ts +4 -0
- package/registry/examples/progress/statuses.js +14 -0
- package/registry/examples/progress/statuses.tsx +11 -0
- package/registry/examples/progress/steps.d.ts +4 -0
- package/registry/examples/progress/steps.js +14 -0
- package/registry/examples/progress/steps.tsx +13 -0
- package/registry/examples/progress/upload.d.ts +4 -0
- package/registry/examples/progress/upload.js +11 -0
- package/registry/examples/progress/upload.tsx +10 -0
- package/registry/examples/skeleton/paragraph.d.ts +4 -0
- package/registry/examples/skeleton/paragraph.js +14 -0
- package/registry/examples/skeleton/paragraph.tsx +12 -0
- package/registry/examples/skeleton/shape-of-content.d.ts +4 -0
- package/registry/examples/skeleton/shape-of-content.js +23 -0
- package/registry/examples/skeleton/shape-of-content.tsx +26 -0
- package/registry/examples/spinner/default.js +5 -2
- package/registry/examples/spinner/default.tsx +7 -1
- package/registry/examples/spinner/sizes.js +2 -1
- package/registry/examples/spinner/sizes.tsx +2 -0
- package/registry/examples/spinner/value.d.ts +4 -0
- package/registry/examples/spinner/value.js +11 -0
- package/registry/examples/spinner/value.tsx +12 -0
- package/registry/examples/stepper/checkout.d.ts +4 -0
- package/registry/examples/stepper/checkout.js +22 -0
- package/registry/examples/stepper/checkout.tsx +17 -0
- package/registry/examples/stepper/failed.d.ts +4 -0
- package/registry/examples/stepper/failed.js +26 -0
- package/registry/examples/stepper/failed.tsx +21 -0
- package/registry/examples/stepper/job.d.ts +4 -0
- package/registry/examples/stepper/job.js +32 -0
- package/registry/examples/stepper/job.tsx +28 -0
- package/registry/examples/toast/grouped.d.ts +4 -0
- package/registry/examples/toast/grouped.js +21 -0
- package/registry/examples/toast/grouped.tsx +23 -0
- package/registry/examples/toast/undo.d.ts +4 -0
- package/registry/examples/toast/undo.js +29 -0
- package/registry/examples/toast/undo.tsx +30 -0
- package/registry/examples/toast/upload-progress.d.ts +4 -0
- package/registry/examples/toast/upload-progress.js +29 -0
- package/registry/examples/toast/upload-progress.tsx +31 -0
- package/registry/field.json +1 -1
- package/registry/glow-card.json +162 -0
- package/registry/index.json +191 -20
- package/registry/iso.json +1355 -0
- package/registry/kbd.json +1 -1
- package/registry/loader.json +399 -0
- package/registry/marquee.json +225 -0
- package/registry/mascots.json +3 -3
- package/registry/meter.json +324 -0
- package/registry/nav-bar.json +480 -0
- package/registry/number-ticker.json +219 -0
- package/registry/page-header.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/progress.json +116 -11
- package/registry/radio-group.json +1 -1
- package/registry/section-backdrop.json +1 -1
- package/registry/separator.json +1 -1
- package/registry/skeleton.json +69 -13
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +91 -27
- package/registry/stat.json +1 -1
- package/registry/stepper.json +174 -0
- package/registry/switch.json +1 -1
- package/registry/tabs.json +11 -7
- package/registry/theme.json +3 -3
- package/registry/toast.json +41 -13
- package/registry/tooltip.json +1 -1
- package/dist/chunk-FHYZSO2S.js.map +0 -1
- package/dist/chunk-PESA2R4U.js +0 -51
- package/dist/chunk-PESA2R4U.js.map +0 -1
- package/registry/examples/spinner/muted.js +0 -11
- package/registry/examples/spinner/muted.tsx +0 -6
- /package/registry/examples/{spinner/muted.d.ts → button/error.d.ts} +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Meter, MeterValue } from "@krizaka/ui/meter";
|
|
2
|
+
|
|
3
|
+
// A balance, where high is good (`optimum="high"`): it turns to danger as it runs low.
|
|
4
|
+
export default function MeterBalance() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex items-center gap-6">
|
|
7
|
+
<Meter variant="ring" label="Credits left" value={12} max={100} valueText="12 credits of 100" thresholds={{ low: 0.25, high: 0.6 }} optimum="high">
|
|
8
|
+
<MeterValue value="12" caption="credits" />
|
|
9
|
+
</Meter>
|
|
10
|
+
<Meter variant="ring" label="Credits left" value={80} max={100} valueText="80 credits of 100" thresholds={{ low: 0.25, high: 0.6 }} optimum="high">
|
|
11
|
+
<MeterValue value="80" caption="credits" />
|
|
12
|
+
</Meter>
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/meter/quota.tsx
|
|
4
|
+
import { Meter } from "@krizaka/ui/meter";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function MeterQuota() {
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-4", children: [
|
|
8
|
+
/* @__PURE__ */ jsx(Meter, { label: "Storage", value: 18, max: 50, valueText: "18 GB of 50 GB", thresholds: { low: 0.7, high: 0.9 }, showLabel: true }),
|
|
9
|
+
/* @__PURE__ */ jsx(Meter, { label: "GPU minutes", value: 41, max: 50, valueText: "41 of 50 min", thresholds: { low: 0.7, high: 0.9 }, showLabel: true }),
|
|
10
|
+
/* @__PURE__ */ jsx(Meter, { label: "API calls", value: 970, max: 1e3, valueText: "970 of 1,000", thresholds: { low: 0.7, high: 0.9 }, showLabel: true })
|
|
11
|
+
] });
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
MeterQuota as default
|
|
15
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Meter } from "@krizaka/ui/meter";
|
|
2
|
+
|
|
3
|
+
// Quotas: the tone turns to warning past 70 %, to danger past 90 % — and the value is said in words.
|
|
4
|
+
export default function MeterQuota() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex w-full max-w-sm flex-col gap-4">
|
|
7
|
+
<Meter label="Storage" value={18} max={50} valueText="18 GB of 50 GB" thresholds={{ low: 0.7, high: 0.9 }} showLabel />
|
|
8
|
+
<Meter label="GPU minutes" value={41} max={50} valueText="41 of 50 min" thresholds={{ low: 0.7, high: 0.9 }} showLabel />
|
|
9
|
+
<Meter label="API calls" value={970} max={1000} valueText="970 of 1,000" thresholds={{ low: 0.7, high: 0.9 }} showLabel />
|
|
10
|
+
</div>
|
|
11
|
+
);
|
|
12
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/meter/split.tsx
|
|
4
|
+
import { Meter, MeterValue } from "@krizaka/ui/meter";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
var parts = [
|
|
7
|
+
{ label: "To the creator", value: 90, valueText: "\u20AC9.00" },
|
|
8
|
+
{ label: "Platform", value: 10, valueText: "\u20AC1.00" }
|
|
9
|
+
];
|
|
10
|
+
function MeterSplit() {
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-md flex-wrap items-center gap-8", children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Meter, { variant: "ring", label: "Split of a \u20AC10 tip", parts, children: /* @__PURE__ */ jsx(MeterValue, { value: "90 %", caption: "creator" }) }),
|
|
13
|
+
/* @__PURE__ */ jsx(Meter, { label: "Split of a \u20AC10 tip", parts, showLabel: true, className: "min-w-48 flex-1" })
|
|
14
|
+
] });
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
MeterSplit as default
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Meter, MeterValue } from "@krizaka/ui/meter";
|
|
2
|
+
|
|
3
|
+
// Where a €10 tip goes: a split drawn as a ring and a bar, each with its legend — the text version of what it draws.
|
|
4
|
+
const parts = [
|
|
5
|
+
{ label: "To the creator", value: 90, valueText: "€9.00" },
|
|
6
|
+
{ label: "Platform", value: 10, valueText: "€1.00" },
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
export default function MeterSplit() {
|
|
10
|
+
return (
|
|
11
|
+
<div className="flex w-full max-w-md flex-wrap items-center gap-8">
|
|
12
|
+
<Meter variant="ring" label="Split of a €10 tip" parts={parts}>
|
|
13
|
+
<MeterValue value="90 %" caption="creator" />
|
|
14
|
+
</Meter>
|
|
15
|
+
<Meter label="Split of a €10 tip" parts={parts} showLabel className="min-w-48 flex-1" />
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/nav-bar/app-bar.tsx
|
|
4
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function NavBarAppBar() {
|
|
7
|
+
return /* @__PURE__ */ jsxs(NavBar.Root, { label: "Studio", floating: false, compactAfter: false, children: [
|
|
8
|
+
/* @__PURE__ */ jsx(NavBar.Brand, { href: "#studio", children: "Studio" }),
|
|
9
|
+
/* @__PURE__ */ jsxs(NavBar.Items, { children: [
|
|
10
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#videos", active: true, children: "Videos" }),
|
|
11
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#earnings", children: "Earnings" }),
|
|
12
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#auctions", children: "Auctions" })
|
|
13
|
+
] }),
|
|
14
|
+
/* @__PURE__ */ jsx(NavBar.Actions, { children: /* @__PURE__ */ jsxs(NavBar.Mobile, { openLabel: "Open the menu", closeLabel: "Close the menu", children: [
|
|
15
|
+
/* @__PURE__ */ jsx(NavBar.MobileLink, { href: "#videos", active: true, children: "Videos" }),
|
|
16
|
+
/* @__PURE__ */ jsx(NavBar.MobileLink, { href: "#earnings", children: "Earnings" })
|
|
17
|
+
] }) })
|
|
18
|
+
] });
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
NavBarAppBar as default
|
|
22
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
2
|
+
|
|
3
|
+
// Inside an app: `floating={false}` — a full-width bar with a hairline, the same light between sections.
|
|
4
|
+
export default function NavBarAppBar() {
|
|
5
|
+
return (
|
|
6
|
+
<NavBar.Root label="Studio" floating={false} compactAfter={false}>
|
|
7
|
+
<NavBar.Brand href="#studio">Studio</NavBar.Brand>
|
|
8
|
+
<NavBar.Items>
|
|
9
|
+
<NavBar.Link href="#videos" active>Videos</NavBar.Link>
|
|
10
|
+
<NavBar.Link href="#earnings">Earnings</NavBar.Link>
|
|
11
|
+
<NavBar.Link href="#auctions">Auctions</NavBar.Link>
|
|
12
|
+
</NavBar.Items>
|
|
13
|
+
<NavBar.Actions>
|
|
14
|
+
<NavBar.Mobile openLabel="Open the menu" closeLabel="Close the menu">
|
|
15
|
+
<NavBar.MobileLink href="#videos" active>Videos</NavBar.MobileLink>
|
|
16
|
+
<NavBar.MobileLink href="#earnings">Earnings</NavBar.MobileLink>
|
|
17
|
+
</NavBar.Mobile>
|
|
18
|
+
</NavBar.Actions>
|
|
19
|
+
</NavBar.Root>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/nav-bar/menu-open.tsx
|
|
4
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
var icon = /* @__PURE__ */ jsxs("svg", { "data-kz-icon": true, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", "aria-hidden": true, children: [
|
|
7
|
+
/* @__PURE__ */ jsx("path", { d: "M12 3 19.8 7.5v9L12 21l-7.8-4.5v-9Z" }),
|
|
8
|
+
/* @__PURE__ */ jsx("circle", { "data-node": true, cx: "12", cy: "12", r: "2.4", fill: "currentColor" })
|
|
9
|
+
] });
|
|
10
|
+
function NavBarMenuOpen({ defaultOpen = false }) {
|
|
11
|
+
return /* @__PURE__ */ jsxs(NavBar.Root, { label: "Main", className: "mb-72", children: [
|
|
12
|
+
/* @__PURE__ */ jsx(NavBar.Brand, { href: "#home", children: "Krizaka" }),
|
|
13
|
+
/* @__PURE__ */ jsxs(NavBar.Items, { defaultValue: defaultOpen ? "products" : void 0, children: [
|
|
14
|
+
/* @__PURE__ */ jsxs(NavBar.Menu, { value: "products", label: "Products", columns: 2, active: true, children: [
|
|
15
|
+
/* @__PURE__ */ jsx(NavBar.MenuLink, { href: "#overview", icon, title: "Overview", description: "What it does, in one page.", active: true }),
|
|
16
|
+
/* @__PURE__ */ jsx(NavBar.MenuLink, { href: "#how", icon, title: "How it works", description: "The request journey, step by step." }),
|
|
17
|
+
/* @__PURE__ */ jsx(NavBar.MenuLink, { href: "#demo", icon, title: "Demo", description: "Try it on the real application." }),
|
|
18
|
+
/* @__PURE__ */ jsx(NavBar.MenuLink, { href: "#signature", icon, title: "Signature", description: "What only it does." })
|
|
19
|
+
] }),
|
|
20
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#docs", children: "Docs" })
|
|
21
|
+
] })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
NavBarMenuOpen as default
|
|
26
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
2
|
+
|
|
3
|
+
const icon = (
|
|
4
|
+
<svg data-kz-icon viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" aria-hidden>
|
|
5
|
+
<path d="M12 3 19.8 7.5v9L12 21l-7.8-4.5v-9Z" />
|
|
6
|
+
<circle data-node cx="12" cy="12" r="2.4" fill="currentColor" />
|
|
7
|
+
</svg>
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
// A menu in two columns, open: icons whose node lights up under the pointer, the current page tinted.
|
|
11
|
+
export default function NavBarMenuOpen({ defaultOpen = false }: { defaultOpen?: boolean }) {
|
|
12
|
+
return (
|
|
13
|
+
<NavBar.Root label="Main" className="mb-72">
|
|
14
|
+
<NavBar.Brand href="#home">Krizaka</NavBar.Brand>
|
|
15
|
+
<NavBar.Items defaultValue={defaultOpen ? "products" : undefined}>
|
|
16
|
+
<NavBar.Menu value="products" label="Products" columns={2} active>
|
|
17
|
+
<NavBar.MenuLink href="#overview" icon={icon} title="Overview" description="What it does, in one page." active />
|
|
18
|
+
<NavBar.MenuLink href="#how" icon={icon} title="How it works" description="The request journey, step by step." />
|
|
19
|
+
<NavBar.MenuLink href="#demo" icon={icon} title="Demo" description="Try it on the real application." />
|
|
20
|
+
<NavBar.MenuLink href="#signature" icon={icon} title="Signature" description="What only it does." />
|
|
21
|
+
</NavBar.Menu>
|
|
22
|
+
<NavBar.Link href="#docs">Docs</NavBar.Link>
|
|
23
|
+
</NavBar.Items>
|
|
24
|
+
</NavBar.Root>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/nav-bar/site.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
var products = [
|
|
8
|
+
{ href: "#orazaka", title: "Orazaka", description: "Sovereign AI, on your own servers." },
|
|
9
|
+
{ href: "#orochia", title: "Orochia", description: "Creators keep 90 % of every support." },
|
|
10
|
+
{ href: "#ui", title: "Krizaka UI", description: "The components behind both." }
|
|
11
|
+
];
|
|
12
|
+
function NavBarSite() {
|
|
13
|
+
return /* @__PURE__ */ jsxs(NavBar.Root, { label: "Main", children: [
|
|
14
|
+
/* @__PURE__ */ jsx(NavBar.Brand, { href: "#home", children: "Krizaka" }),
|
|
15
|
+
/* @__PURE__ */ jsxs(NavBar.Items, { children: [
|
|
16
|
+
/* @__PURE__ */ jsx(NavBar.Menu, { label: "Products", children: products.map((p) => /* @__PURE__ */ jsx(NavBar.MenuLink, { ...p }, p.href)) }),
|
|
17
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#docs", children: "Docs" }),
|
|
18
|
+
/* @__PURE__ */ jsx(NavBar.Link, { href: "#story", active: true, children: "Our story" })
|
|
19
|
+
] }),
|
|
20
|
+
/* @__PURE__ */ jsxs(NavBar.Actions, { children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", shape: "pill", className: "hidden sm:inline-flex", children: "Contact" }),
|
|
22
|
+
/* @__PURE__ */ jsxs(NavBar.Mobile, { openLabel: "Open the menu", closeLabel: "Close the menu", children: [
|
|
23
|
+
products.map((p) => /* @__PURE__ */ jsx(NavBar.MobileLink, { href: p.href, children: p.title }, p.href)),
|
|
24
|
+
/* @__PURE__ */ jsx(NavBar.MobileLink, { href: "#story", active: true, children: "Our story" })
|
|
25
|
+
] })
|
|
26
|
+
] })
|
|
27
|
+
] });
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
NavBarSite as default
|
|
31
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Button } from "@krizaka/ui/button";
|
|
2
|
+
import { NavBar } from "@krizaka/ui/nav-bar";
|
|
3
|
+
|
|
4
|
+
const products = [
|
|
5
|
+
{ href: "#orazaka", title: "Orazaka", description: "Sovereign AI, on your own servers." },
|
|
6
|
+
{ href: "#orochia", title: "Orochia", description: "Creators keep 90 % of every support." },
|
|
7
|
+
{ href: "#ui", title: "Krizaka UI", description: "The components behind both." },
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
// The site's bar: a floating pill that tightens on scroll, one light gliding between its items and resting on the
|
|
11
|
+
// current page, an accessible menu (Enter or ↓ opens, Escape closes), and a panel below `md`.
|
|
12
|
+
export default function NavBarSite() {
|
|
13
|
+
return (
|
|
14
|
+
<NavBar.Root label="Main">
|
|
15
|
+
<NavBar.Brand href="#home">Krizaka</NavBar.Brand>
|
|
16
|
+
<NavBar.Items>
|
|
17
|
+
<NavBar.Menu label="Products">
|
|
18
|
+
{products.map((p) => (
|
|
19
|
+
<NavBar.MenuLink key={p.href} {...p} />
|
|
20
|
+
))}
|
|
21
|
+
</NavBar.Menu>
|
|
22
|
+
<NavBar.Link href="#docs">Docs</NavBar.Link>
|
|
23
|
+
<NavBar.Link href="#story" active>Our story</NavBar.Link>
|
|
24
|
+
</NavBar.Items>
|
|
25
|
+
<NavBar.Actions>
|
|
26
|
+
<Button variant="primary" size="sm" shape="pill" className="hidden sm:inline-flex">Contact</Button>
|
|
27
|
+
<NavBar.Mobile openLabel="Open the menu" closeLabel="Close the menu">
|
|
28
|
+
{products.map((p) => (
|
|
29
|
+
<NavBar.MobileLink key={p.href} href={p.href}>{p.title}</NavBar.MobileLink>
|
|
30
|
+
))}
|
|
31
|
+
<NavBar.MobileLink href="#story" active>Our story</NavBar.MobileLink>
|
|
32
|
+
</NavBar.Mobile>
|
|
33
|
+
</NavBar.Actions>
|
|
34
|
+
</NavBar.Root>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/number-ticker/gradient.tsx
|
|
4
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function NumberTickerGradient() {
|
|
7
|
+
return /* @__PURE__ */ jsx("p", { className: "bg-linear-to-r from-accent to-accent-2 bg-clip-text font-display text-5xl font-bold text-transparent", children: /* @__PURE__ */ jsx(NumberTicker, { value: 4.9, format: { maximumFractionDigits: 1 }, locale: "en" }) });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
NumberTickerGradient as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
2
|
+
|
|
3
|
+
// Inside gradient text: every box of the figure carries the gradient, so the climbing digits stay painted.
|
|
4
|
+
export default function NumberTickerGradient() {
|
|
5
|
+
return (
|
|
6
|
+
<p className="bg-linear-to-r from-accent to-accent-2 bg-clip-text font-display text-5xl font-bold text-transparent">
|
|
7
|
+
<NumberTicker value={4.9} format={{ maximumFractionDigits: 1 }} locale="en" />
|
|
8
|
+
</p>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/number-ticker/live-total.tsx
|
|
4
|
+
import { Button } from "@krizaka/ui/button";
|
|
5
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function NumberTickerLiveTotal() {
|
|
9
|
+
const [bid, setBid] = useState(1250);
|
|
10
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
11
|
+
/* @__PURE__ */ jsx("p", { className: "font-display text-3xl font-semibold text-fg", children: /* @__PURE__ */ jsx(NumberTicker, { value: bid, trigger: "change", announce: true, locale: "en", format: { style: "currency", currency: "EUR", maximumFractionDigits: 0 } }) }),
|
|
12
|
+
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "primary", onClick: () => setBid((b) => b + 50), children: "Outbid by \u20AC50" })
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
NumberTickerLiveTotal as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Button } from "@krizaka/ui/button";
|
|
4
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
|
|
7
|
+
// A live total (an auction's highest bid): each digit rolls to the new value, a rise flashes the success colour, and the
|
|
8
|
+
// new amount is announced politely.
|
|
9
|
+
export default function NumberTickerLiveTotal() {
|
|
10
|
+
const [bid, setBid] = useState(1250);
|
|
11
|
+
return (
|
|
12
|
+
<div className="flex items-center gap-4">
|
|
13
|
+
<p className="font-display text-3xl font-semibold text-fg">
|
|
14
|
+
<NumberTicker value={bid} trigger="change" announce locale="en" format={{ style: "currency", currency: "EUR", maximumFractionDigits: 0 }} />
|
|
15
|
+
</p>
|
|
16
|
+
<Button size="sm" variant="primary" onClick={() => setBid((b) => b + 50)}>
|
|
17
|
+
Outbid by €50
|
|
18
|
+
</Button>
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/number-ticker/stats.tsx
|
|
4
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function NumberTickerStats() {
|
|
7
|
+
const stats = [
|
|
8
|
+
{ value: 90, label: "of every support goes to the creator", format: { style: "unit", unit: "percent" } },
|
|
9
|
+
{ value: 12480, label: "creators paid this month" },
|
|
10
|
+
{ value: 1.2, label: "seconds to the first token", format: { maximumFractionDigits: 1 } }
|
|
11
|
+
];
|
|
12
|
+
return /* @__PURE__ */ jsx("dl", { className: "grid gap-6 sm:grid-cols-3", children: stats.map((s) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
13
|
+
/* @__PURE__ */ jsx("dt", { className: "text-sm text-fg-secondary", children: s.label }),
|
|
14
|
+
/* @__PURE__ */ jsx("dd", { className: "order-first font-display text-4xl font-semibold text-fg", children: /* @__PURE__ */ jsx(NumberTicker, { value: s.value, locale: "en", format: s.format, align: "start" }) })
|
|
15
|
+
] }, s.label)) });
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
NumberTickerStats as default
|
|
19
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NumberTicker } from "@krizaka/ui/number-ticker";
|
|
2
|
+
|
|
3
|
+
// Figures that climb once as they scroll into view. The server renders the final values: nothing jumps, and a reader
|
|
4
|
+
// who lands with them already on screen sees them still.
|
|
5
|
+
export default function NumberTickerStats() {
|
|
6
|
+
const stats = [
|
|
7
|
+
{ value: 90, label: "of every support goes to the creator", format: { style: "unit", unit: "percent" } as const },
|
|
8
|
+
{ value: 12480, label: "creators paid this month" },
|
|
9
|
+
{ value: 1.2, label: "seconds to the first token", format: { maximumFractionDigits: 1 } },
|
|
10
|
+
];
|
|
11
|
+
return (
|
|
12
|
+
<dl className="grid gap-6 sm:grid-cols-3">
|
|
13
|
+
{stats.map((s) => (
|
|
14
|
+
<div key={s.label} className="flex flex-col gap-1">
|
|
15
|
+
<dt className="text-sm text-fg-secondary">{s.label}</dt>
|
|
16
|
+
<dd className="order-first font-display text-4xl font-semibold text-fg">
|
|
17
|
+
<NumberTicker value={s.value} locale="en" format={s.format} align="start" />
|
|
18
|
+
</dd>
|
|
19
|
+
</div>
|
|
20
|
+
))}
|
|
21
|
+
</dl>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/progress/buffer.tsx
|
|
4
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function ProgressBuffer() {
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Progress, { label: "Played", value: 38, buffer: 71, valueText: "1:54 of 5:00", size: "sm" }) });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
ProgressBuffer as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
2
|
+
|
|
3
|
+
// A player's timeline: what is watched, and — lighter — what is already loaded ahead (`buffer`).
|
|
4
|
+
export default function ProgressBuffer() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="w-full max-w-sm">
|
|
7
|
+
<Progress label="Played" value={38} buffer={71} valueText="1:54 of 5:00" size="sm" />
|
|
8
|
+
</div>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/progress/statuses.tsx
|
|
4
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function ProgressStatuses() {
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-4", children: [
|
|
8
|
+
/* @__PURE__ */ jsx(Progress, { label: "Sync \u2014 paused, waiting for Wi-Fi", value: 45, status: "paused", showLabel: true }),
|
|
9
|
+
/* @__PURE__ */ jsx(Progress, { label: "Transcoding failed at 72 %", value: 72, status: "error", showLabel: true, valueText: "Retry" })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
ProgressStatuses as default
|
|
14
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
2
|
+
|
|
3
|
+
// When it stops: `paused` rests striped (it waits for someone), `error` turns to the danger colour where it stopped.
|
|
4
|
+
export default function ProgressStatuses() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex w-full max-w-sm flex-col gap-4">
|
|
7
|
+
<Progress label="Sync — paused, waiting for Wi-Fi" value={45} status="paused" showLabel />
|
|
8
|
+
<Progress label="Transcoding failed at 72 %" value={72} status="error" showLabel valueText="Retry" />
|
|
9
|
+
</div>
|
|
10
|
+
);
|
|
11
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/progress/steps.tsx
|
|
4
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function ProgressSteps() {
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-4", children: [
|
|
8
|
+
/* @__PURE__ */ jsx(Progress, { label: "Profile completed", value: 3, max: 5, valueText: "3 of 5 steps", segments: 5, showLabel: true }),
|
|
9
|
+
/* @__PURE__ */ jsx(Progress, { variant: "ring", label: "Goal", value: 7, max: 10, segments: 10, valueText: "7 of 10 supporters", children: /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-fg", children: "7/10" }) })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
ProgressSteps as default
|
|
14
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
2
|
+
|
|
3
|
+
// A task in steps: `segments` cuts the bar into its parts — 3 of 5 done reads at a glance.
|
|
4
|
+
export default function ProgressSteps() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex w-full max-w-sm flex-col gap-4">
|
|
7
|
+
<Progress label="Profile completed" value={3} max={5} valueText="3 of 5 steps" segments={5} showLabel />
|
|
8
|
+
<Progress variant="ring" label="Goal" value={7} max={10} segments={10} valueText="7 of 10 supporters">
|
|
9
|
+
<span className="text-sm font-semibold text-fg">7/10</span>
|
|
10
|
+
</Progress>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/progress/upload.tsx
|
|
4
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function ProgressUpload() {
|
|
7
|
+
return /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Progress, { label: "Night walk.mp4", value: 64, eta: "About 40 s left", showLabel: true }) });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
ProgressUpload as default
|
|
11
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Progress } from "@krizaka/ui/progress";
|
|
2
|
+
|
|
3
|
+
// An upload the user follows: its name, the percentage and the time left above the bar — read as one sentence.
|
|
4
|
+
export default function ProgressUpload() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="w-full max-w-sm">
|
|
7
|
+
<Progress label="Night walk.mp4" value={64} eta="About 40 s left" showLabel />
|
|
8
|
+
</div>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/skeleton/paragraph.tsx
|
|
4
|
+
import { Skeleton, SkeletonText } from "@krizaka/ui/skeleton";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function SkeletonParagraph() {
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-3", children: [
|
|
8
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-2/3" }),
|
|
9
|
+
/* @__PURE__ */ jsx(SkeletonText, { lines: 4 })
|
|
10
|
+
] });
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
SkeletonParagraph as default
|
|
14
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Skeleton, SkeletonText } from "@krizaka/ui/skeleton";
|
|
2
|
+
|
|
3
|
+
// An article on its way: a title, then `SkeletonText` — lines that wrap, the last one shorter. One reflection crosses
|
|
4
|
+
// all of them together, like light across a page, rather than each one pulsing on its own.
|
|
5
|
+
export default function SkeletonParagraph() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="flex w-full max-w-sm flex-col gap-3">
|
|
8
|
+
<Skeleton className="h-5 w-2/3" />
|
|
9
|
+
<SkeletonText lines={4} />
|
|
10
|
+
</div>
|
|
11
|
+
);
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// registry/examples/skeleton/shape-of-content.tsx
|
|
4
|
+
import { SkeletonShape } from "@krizaka/ui/skeleton";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function CreatorCard({ name, line }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 rounded-xl border border-border-default bg-surface-1 p-4", children: [
|
|
8
|
+
/* @__PURE__ */ jsx("span", { "data-skeleton": true, "aria-hidden": true, className: "h-10 w-10 shrink-0 rounded-full bg-accent-soft" }),
|
|
9
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
10
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-fg", children: name }),
|
|
11
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-fg-secondary", children: line })
|
|
12
|
+
] })
|
|
13
|
+
] });
|
|
14
|
+
}
|
|
15
|
+
function SkeletonShapeOfContent() {
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-3", children: [
|
|
17
|
+
/* @__PURE__ */ jsx(SkeletonShape, { children: /* @__PURE__ */ jsx(CreatorCard, { name: "Placeholder name", line: "Placeholder supporters line" }) }),
|
|
18
|
+
/* @__PURE__ */ jsx(CreatorCard, { name: "Eric Moreau", line: "1,204 supporters \xB7 Paris" })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
SkeletonShapeOfContent as default
|
|
23
|
+
};
|