@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,128 @@
|
|
|
1
|
+
import * as tailwind_variants from 'tailwind-variants';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-CXrAW34x.js';
|
|
4
|
+
|
|
5
|
+
declare const mascotState: tailwind_variants.TVReturnType<{
|
|
6
|
+
layout: {
|
|
7
|
+
stacked: {
|
|
8
|
+
root: string;
|
|
9
|
+
words: string;
|
|
10
|
+
action: string;
|
|
11
|
+
};
|
|
12
|
+
inline: {
|
|
13
|
+
root: string;
|
|
14
|
+
action: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
framed: {
|
|
18
|
+
true: {
|
|
19
|
+
root: string;
|
|
20
|
+
};
|
|
21
|
+
false: {};
|
|
22
|
+
};
|
|
23
|
+
}, {
|
|
24
|
+
root: string;
|
|
25
|
+
bird: string;
|
|
26
|
+
words: string;
|
|
27
|
+
title: string;
|
|
28
|
+
description: string;
|
|
29
|
+
action: string;
|
|
30
|
+
}, undefined, {
|
|
31
|
+
layout: {
|
|
32
|
+
stacked: {
|
|
33
|
+
root: string;
|
|
34
|
+
words: string;
|
|
35
|
+
action: string;
|
|
36
|
+
};
|
|
37
|
+
inline: {
|
|
38
|
+
root: string;
|
|
39
|
+
action: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
framed: {
|
|
43
|
+
true: {
|
|
44
|
+
root: string;
|
|
45
|
+
};
|
|
46
|
+
false: {};
|
|
47
|
+
};
|
|
48
|
+
}, {
|
|
49
|
+
root: string;
|
|
50
|
+
bird: string;
|
|
51
|
+
words: string;
|
|
52
|
+
title: string;
|
|
53
|
+
description: string;
|
|
54
|
+
action: string;
|
|
55
|
+
}, tailwind_variants.TVReturnTypeLike<{
|
|
56
|
+
layout: {
|
|
57
|
+
stacked: {
|
|
58
|
+
root: string;
|
|
59
|
+
words: string;
|
|
60
|
+
action: string;
|
|
61
|
+
};
|
|
62
|
+
inline: {
|
|
63
|
+
root: string;
|
|
64
|
+
action: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
framed: {
|
|
68
|
+
true: {
|
|
69
|
+
root: string;
|
|
70
|
+
};
|
|
71
|
+
false: {};
|
|
72
|
+
};
|
|
73
|
+
}, {
|
|
74
|
+
root: string;
|
|
75
|
+
bird: string;
|
|
76
|
+
words: string;
|
|
77
|
+
title: string;
|
|
78
|
+
description: string;
|
|
79
|
+
action: string;
|
|
80
|
+
}>>;
|
|
81
|
+
declare const SIZE: {
|
|
82
|
+
readonly sm: 64;
|
|
83
|
+
readonly md: 96;
|
|
84
|
+
readonly lg: 128;
|
|
85
|
+
};
|
|
86
|
+
type MascotStateProps = Omit<React.ComponentProps<"div">, "title"> & {
|
|
87
|
+
/**
|
|
88
|
+
* The bird whose job the moment is about: `owl` (documents, reading), `falcon` (security, verification), `duck`
|
|
89
|
+
* (code, building), `flamingo` (answers, payments), `pigeon` (delivery, notifications), `lovebird` (introductions). One bird per idea.
|
|
90
|
+
*/
|
|
91
|
+
bird?: MascotBird;
|
|
92
|
+
/** The moment: `empty` (nothing yet), `thinking` (a long task runs), `success` (done), `error` (it failed), `welcome`. */
|
|
93
|
+
mood?: MascotMood;
|
|
94
|
+
/** What happened, in a few words ("No videos yet", "Payment received"). */
|
|
95
|
+
title: React.ReactNode;
|
|
96
|
+
/** Why, or what comes next. */
|
|
97
|
+
description?: React.ReactNode;
|
|
98
|
+
/** What to do next: a Button, a link. One, at most two. */
|
|
99
|
+
action?: React.ReactNode;
|
|
100
|
+
/** The bird's size: `sm` 64 px, `md` 96 px (default), `lg` 128 px. */
|
|
101
|
+
size?: keyof typeof SIZE;
|
|
102
|
+
/** `stacked` (default): the bird above centred words — a page, a panel. `inline`: the bird beside the words — a card, a row of a form. */
|
|
103
|
+
layout?: "stacked" | "inline";
|
|
104
|
+
/** A dashed frame on the raised surface, for an empty list or panel. */
|
|
105
|
+
framed?: boolean;
|
|
106
|
+
/** `brand` (default): the product's accent. `own`: the bird's colours of the Krizaka story. */
|
|
107
|
+
tone?: MascotTone;
|
|
108
|
+
/** The bird's gesture and the staged arrival. Off with `false`; always off under `prefers-reduced-motion`. */
|
|
109
|
+
animated?: boolean;
|
|
110
|
+
/** The level of the title (default `p`): `h1` on a full page (a 404), `h2`/`h3` inside a page. */
|
|
111
|
+
titleAs?: "p" | "h1" | "h2" | "h3";
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* A moment told by a bird of the flock: an empty list, a long wait, a success, an error, a welcome. Announced to
|
|
115
|
+
* assistive technology — `role="alert"` for an error, `role="status"` otherwise (`aria-busy` while thinking).
|
|
116
|
+
*/
|
|
117
|
+
declare function MascotState({ bird, mood, title, description, action, size, layout, framed, tone, animated, titleAs: Title, className, ...props }: MascotStateProps): React.JSX.Element;
|
|
118
|
+
type PresetProps = Omit<MascotStateProps, "mood">;
|
|
119
|
+
/** It failed: what went wrong and what to do (`role="alert"`). `MascotState` with `mood="error"`. */
|
|
120
|
+
declare function ErrorState(props: PresetProps): React.JSX.Element;
|
|
121
|
+
/** It is done: a payment, a verification, a delivery, a sent message. `MascotState` with `mood="success"`. */
|
|
122
|
+
declare function SuccessState(props: PresetProps): React.JSX.Element;
|
|
123
|
+
/** A long task runs (`aria-busy`): what runs, beside the bird. `MascotState` with `mood="thinking"`. */
|
|
124
|
+
declare function LoadingState(props: PresetProps): React.JSX.Element;
|
|
125
|
+
/** A first screen, an onboarding step. `MascotState` with `mood="welcome"`. */
|
|
126
|
+
declare function WelcomeState(props: PresetProps): React.JSX.Element;
|
|
127
|
+
|
|
128
|
+
export { ErrorState, LoadingState, MascotState, type MascotStateProps, SuccessState, WelcomeState, mascotState };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Mascot
|
|
4
|
+
} from "./chunk-NOVUREEC.js";
|
|
5
|
+
|
|
6
|
+
// src/mascot-state/mascot-state.tsx
|
|
7
|
+
import { tv } from "tailwind-variants";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
var CSS = `
|
|
10
|
+
@keyframes kzms-in { from { opacity: 0; transform: translateY(6px); } }
|
|
11
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
12
|
+
[data-kzms-staged] > [data-kzms-part] { animation: kzms-in .42s cubic-bezier(.2,.8,.2,1) both; }
|
|
13
|
+
[data-kzms-staged] > [data-kzms-part="words"] { animation-delay: .12s; }
|
|
14
|
+
[data-kzms-staged] > [data-kzms-part="action"] { animation-delay: .24s; }
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
var mascotState = tv({
|
|
18
|
+
slots: {
|
|
19
|
+
root: "flex items-center gap-4 text-fg",
|
|
20
|
+
bird: "shrink-0",
|
|
21
|
+
words: "flex flex-col gap-1.5",
|
|
22
|
+
title: "text-base font-semibold text-fg",
|
|
23
|
+
description: "max-w-sm text-sm text-fg-secondary",
|
|
24
|
+
action: "flex flex-wrap items-center gap-2"
|
|
25
|
+
},
|
|
26
|
+
variants: {
|
|
27
|
+
layout: {
|
|
28
|
+
stacked: { root: "flex-col justify-center px-6 py-10 text-center", words: "items-center", action: "justify-center" },
|
|
29
|
+
inline: { root: "flex-row text-left", action: "mt-1" }
|
|
30
|
+
},
|
|
31
|
+
framed: { true: { root: "rounded-xl border border-dashed border-border-default bg-surface-1" }, false: {} }
|
|
32
|
+
},
|
|
33
|
+
compoundVariants: [{ layout: "inline", framed: true, class: { root: "p-4" } }],
|
|
34
|
+
defaultVariants: { layout: "stacked", framed: false }
|
|
35
|
+
});
|
|
36
|
+
var SIZE = { sm: 64, md: 96, lg: 128 };
|
|
37
|
+
function MascotState({
|
|
38
|
+
bird = "owl",
|
|
39
|
+
mood = "empty",
|
|
40
|
+
title,
|
|
41
|
+
description,
|
|
42
|
+
action,
|
|
43
|
+
size = "md",
|
|
44
|
+
layout,
|
|
45
|
+
framed,
|
|
46
|
+
tone,
|
|
47
|
+
animated = true,
|
|
48
|
+
titleAs: Title = "p",
|
|
49
|
+
className,
|
|
50
|
+
...props
|
|
51
|
+
}) {
|
|
52
|
+
const s = mascotState({ layout, framed });
|
|
53
|
+
return /* @__PURE__ */ jsxs(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
role: mood === "error" ? "alert" : "status",
|
|
57
|
+
"aria-busy": mood === "thinking" ? true : void 0,
|
|
58
|
+
"data-mood": mood,
|
|
59
|
+
"data-kzms-staged": animated ? "" : void 0,
|
|
60
|
+
className: s.root({ className }),
|
|
61
|
+
...props,
|
|
62
|
+
children: [
|
|
63
|
+
animated && /* @__PURE__ */ jsx("style", { children: CSS }),
|
|
64
|
+
/* @__PURE__ */ jsx("span", { "data-kzms-part": "bird", className: s.bird(), children: /* @__PURE__ */ jsx(Mascot, { bird, mood, tone, size: SIZE[size], animated }) }),
|
|
65
|
+
/* @__PURE__ */ jsxs("div", { "data-kzms-part": "words", className: s.words(), children: [
|
|
66
|
+
/* @__PURE__ */ jsx(Title, { className: s.title(), children: title }),
|
|
67
|
+
description && /* @__PURE__ */ jsx("p", { className: s.description(), children: description }),
|
|
68
|
+
layout === "inline" && action && /* @__PURE__ */ jsx("div", { className: s.action(), children: action })
|
|
69
|
+
] }),
|
|
70
|
+
layout !== "inline" && action && /* @__PURE__ */ jsx("div", { "data-kzms-part": "action", className: s.action(), children: action })
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
function ErrorState(props) {
|
|
76
|
+
return /* @__PURE__ */ jsx(MascotState, { mood: "error", ...props });
|
|
77
|
+
}
|
|
78
|
+
function SuccessState(props) {
|
|
79
|
+
return /* @__PURE__ */ jsx(MascotState, { mood: "success", ...props });
|
|
80
|
+
}
|
|
81
|
+
function LoadingState(props) {
|
|
82
|
+
return /* @__PURE__ */ jsx(MascotState, { mood: "thinking", ...props });
|
|
83
|
+
}
|
|
84
|
+
function WelcomeState(props) {
|
|
85
|
+
return /* @__PURE__ */ jsx(MascotState, { mood: "welcome", ...props });
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
ErrorState,
|
|
89
|
+
LoadingState,
|
|
90
|
+
MascotState,
|
|
91
|
+
SuccessState,
|
|
92
|
+
WelcomeState,
|
|
93
|
+
mascotState
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=mascot-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mascot-state/mascot-state.tsx"],"sourcesContent":["// The moments a product speaks to a person — nothing yet, a long wait, done, it failed, welcome — told by a bird of\n// the flock beside the words. Every word is a prop; the bird never carries the message alone.\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nimport type { MascotBird, MascotMood, MascotTone } from \"../mascots/geometry\";\nimport { Mascot } from \"../mascots/mascot\";\n\n// Staged: the bird arrives, then the words, then the action — once, and not at all under reduced motion.\nconst CSS = `\n@keyframes kzms-in { from { opacity: 0; transform: translateY(6px); } }\n@media (prefers-reduced-motion: no-preference) {\n [data-kzms-staged] > [data-kzms-part] { animation: kzms-in .42s cubic-bezier(.2,.8,.2,1) both; }\n [data-kzms-staged] > [data-kzms-part=\"words\"] { animation-delay: .12s; }\n [data-kzms-staged] > [data-kzms-part=\"action\"] { animation-delay: .24s; }\n}\n`;\n\nexport const mascotState = tv({\n slots: {\n root: \"flex items-center gap-4 text-fg\",\n bird: \"shrink-0\",\n words: \"flex flex-col gap-1.5\",\n title: \"text-base font-semibold text-fg\",\n description: \"max-w-sm text-sm text-fg-secondary\",\n action: \"flex flex-wrap items-center gap-2\",\n },\n variants: {\n layout: {\n stacked: { root: \"flex-col justify-center px-6 py-10 text-center\", words: \"items-center\", action: \"justify-center\" },\n inline: { root: \"flex-row text-left\", action: \"mt-1\" },\n },\n framed: { true: { root: \"rounded-xl border border-dashed border-border-default bg-surface-1\" }, false: {} },\n },\n compoundVariants: [{ layout: \"inline\", framed: true, class: { root: \"p-4\" } }],\n defaultVariants: { layout: \"stacked\", framed: false },\n});\n\nconst SIZE = { sm: 64, md: 96, lg: 128 } as const;\n\nexport type MascotStateProps = Omit<React.ComponentProps<\"div\">, \"title\"> & {\n /**\n * The bird whose job the moment is about: `owl` (documents, reading), `falcon` (security, verification), `duck`\n * (code, building), `flamingo` (answers, payments), `pigeon` (delivery, notifications), `lovebird` (introductions). One bird per idea.\n */\n bird?: MascotBird;\n /** The moment: `empty` (nothing yet), `thinking` (a long task runs), `success` (done), `error` (it failed), `welcome`. */\n mood?: MascotMood;\n /** What happened, in a few words (\"No videos yet\", \"Payment received\"). */\n title: React.ReactNode;\n /** Why, or what comes next. */\n description?: React.ReactNode;\n /** What to do next: a Button, a link. One, at most two. */\n action?: React.ReactNode;\n /** The bird's size: `sm` 64 px, `md` 96 px (default), `lg` 128 px. */\n size?: keyof typeof SIZE;\n /** `stacked` (default): the bird above centred words — a page, a panel. `inline`: the bird beside the words — a card, a row of a form. */\n layout?: \"stacked\" | \"inline\";\n /** A dashed frame on the raised surface, for an empty list or panel. */\n framed?: boolean;\n /** `brand` (default): the product's accent. `own`: the bird's colours of the Krizaka story. */\n tone?: MascotTone;\n /** The bird's gesture and the staged arrival. Off with `false`; always off under `prefers-reduced-motion`. */\n animated?: boolean;\n /** The level of the title (default `p`): `h1` on a full page (a 404), `h2`/`h3` inside a page. */\n titleAs?: \"p\" | \"h1\" | \"h2\" | \"h3\";\n};\n\n/**\n * A moment told by a bird of the flock: an empty list, a long wait, a success, an error, a welcome. Announced to\n * assistive technology — `role=\"alert\"` for an error, `role=\"status\"` otherwise (`aria-busy` while thinking).\n */\nexport function MascotState({\n bird = \"owl\",\n mood = \"empty\",\n title,\n description,\n action,\n size = \"md\",\n layout,\n framed,\n tone,\n animated = true,\n titleAs: Title = \"p\",\n className,\n ...props\n}: MascotStateProps) {\n const s = mascotState({ layout, framed });\n return (\n <div\n role={mood === \"error\" ? \"alert\" : \"status\"}\n aria-busy={mood === \"thinking\" ? true : undefined}\n data-mood={mood}\n data-kzms-staged={animated ? \"\" : undefined}\n className={s.root({ className })}\n {...props}\n >\n {animated && <style>{CSS}</style>}\n <span data-kzms-part=\"bird\" className={s.bird()}>\n <Mascot bird={bird} mood={mood} tone={tone} size={SIZE[size]} animated={animated} />\n </span>\n <div data-kzms-part=\"words\" className={s.words()}>\n <Title className={s.title()}>{title}</Title>\n {description && <p className={s.description()}>{description}</p>}\n {layout === \"inline\" && action && <div className={s.action()}>{action}</div>}\n </div>\n {layout !== \"inline\" && action && (\n <div data-kzms-part=\"action\" className={s.action()}>\n {action}\n </div>\n )}\n </div>\n );\n}\n\ntype PresetProps = Omit<MascotStateProps, \"mood\">;\n\n/** It failed: what went wrong and what to do (`role=\"alert\"`). `MascotState` with `mood=\"error\"`. */\nexport function ErrorState(props: PresetProps) {\n return <MascotState mood=\"error\" {...props} />;\n}\n\n/** It is done: a payment, a verification, a delivery, a sent message. `MascotState` with `mood=\"success\"`. */\nexport function SuccessState(props: PresetProps) {\n return <MascotState mood=\"success\" {...props} />;\n}\n\n/** A long task runs (`aria-busy`): what runs, beside the bird. `MascotState` with `mood=\"thinking\"`. */\nexport function LoadingState(props: PresetProps) {\n return <MascotState mood=\"thinking\" {...props} />;\n}\n\n/** A first screen, an onboarding step. `MascotState` with `mood=\"welcome\"`. */\nexport function WelcomeState(props: PresetProps) {\n return <MascotState mood=\"welcome\" {...props} />;\n}\n"],"mappings":";;;;;;AAGA,SAAS,UAAU;AA8FA,cAIb,YAJa;AAxFnB,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASL,IAAM,cAAc,GAAG;AAAA,EAC5B,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,SAAS,EAAE,MAAM,kDAAkD,OAAO,gBAAgB,QAAQ,iBAAiB;AAAA,MACnH,QAAQ,EAAE,MAAM,sBAAsB,QAAQ,OAAO;AAAA,IACvD;AAAA,IACA,QAAQ,EAAE,MAAM,EAAE,MAAM,qEAAqE,GAAG,OAAO,CAAC,EAAE;AAAA,EAC5G;AAAA,EACA,kBAAkB,CAAC,EAAE,QAAQ,UAAU,QAAQ,MAAM,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC;AAAA,EAC7E,iBAAiB,EAAE,QAAQ,WAAW,QAAQ,MAAM;AACtD,CAAC;AAED,IAAM,OAAO,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAkChC,SAAS,YAAY;AAAA,EAC1B,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,SAAS,QAAQ;AAAA,EACjB;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,IAAI,YAAY,EAAE,QAAQ,OAAO,CAAC;AACxC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,SAAS,UAAU,UAAU;AAAA,MACnC,aAAW,SAAS,aAAa,OAAO;AAAA,MACxC,aAAW;AAAA,MACX,oBAAkB,WAAW,KAAK;AAAA,MAClC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC;AAAA,MAC9B,GAAG;AAAA,MAEH;AAAA,oBAAY,oBAAC,WAAO,eAAI;AAAA,QACzB,oBAAC,UAAK,kBAAe,QAAO,WAAW,EAAE,KAAK,GAC5C,8BAAC,UAAO,MAAY,MAAY,MAAY,MAAM,KAAK,IAAI,GAAG,UAAoB,GACpF;AAAA,QACA,qBAAC,SAAI,kBAAe,SAAQ,WAAW,EAAE,MAAM,GAC7C;AAAA,8BAAC,SAAM,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,UACnC,eAAe,oBAAC,OAAE,WAAW,EAAE,YAAY,GAAI,uBAAY;AAAA,UAC3D,WAAW,YAAY,UAAU,oBAAC,SAAI,WAAW,EAAE,OAAO,GAAI,kBAAO;AAAA,WACxE;AAAA,QACC,WAAW,YAAY,UACtB,oBAAC,SAAI,kBAAe,UAAS,WAAW,EAAE,OAAO,GAC9C,kBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAKO,SAAS,WAAW,OAAoB;AAC7C,SAAO,oBAAC,eAAY,MAAK,SAAS,GAAG,OAAO;AAC9C;AAGO,SAAS,aAAa,OAAoB;AAC/C,SAAO,oBAAC,eAAY,MAAK,WAAW,GAAG,OAAO;AAChD;AAGO,SAAS,aAAa,OAAoB;AAC/C,SAAO,oBAAC,eAAY,MAAK,YAAY,GAAG,OAAO;AACjD;AAGO,SAAS,aAAa,OAAoB;AAC/C,SAAO,oBAAC,eAAY,MAAK,WAAW,GAAG,OAAO;AAChD;","names":[]}
|
package/dist/mascots.d.ts
CHANGED
|
@@ -1,24 +1,9 @@
|
|
|
1
|
+
import { M as MascotBird, a as MascotMood, b as MascotTone } from './geometry-CXrAW34x.js';
|
|
2
|
+
export { c as MASCOT_BIRDS, d as MASCOT_MOODS } from './geometry-CXrAW34x.js';
|
|
1
3
|
import * as React from 'react';
|
|
2
4
|
|
|
3
|
-
/**
|
|
4
|
-
* The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one
|
|
5
|
-
* (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,
|
|
6
|
-
* the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), redrawn on one 120 × 120
|
|
7
|
-
* grid so that any bird can wear any mood.
|
|
8
|
-
*
|
|
9
|
-
* Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,
|
|
10
|
-
* `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives
|
|
11
|
-
* each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades
|
|
12
|
-
* and highlights are black and white at a low opacity over the role, so they hold in both themes.
|
|
13
|
-
*/
|
|
14
|
-
declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon"];
|
|
15
|
-
type MascotBird = (typeof MASCOT_BIRDS)[number];
|
|
16
|
-
declare const MASCOT_MOODS: readonly ["welcome", "thinking", "success", "empty", "error"];
|
|
17
|
-
type MascotMood = (typeof MASCOT_MOODS)[number];
|
|
18
|
-
type MascotTone = "brand" | "own";
|
|
19
|
-
|
|
20
5
|
type MascotProps = Omit<React.ComponentProps<"svg">, "children"> & {
|
|
21
|
-
/** Which bird of the flock: `falcon` (watch, security), `owl` (reading, documents), `duck` (building, code), `flamingo` (answers, support), `pigeon` (delivery, notifications). */
|
|
6
|
+
/** Which bird of the flock: `falcon` (watch, security), `owl` (reading, documents), `duck` (building, code), `flamingo` (answers, support), `pigeon` (delivery, notifications), `lovebird` (introductions, two people who meet). */
|
|
22
7
|
bird?: MascotBird;
|
|
23
8
|
/** What the moment is: `welcome` (onboarding), `thinking` (a long task running), `success` (it is done), `empty` (nothing here yet), `error` (it failed). */
|
|
24
9
|
mood?: MascotMood;
|
|
@@ -32,9 +17,22 @@ type MascotProps = Omit<React.ComponentProps<"svg">, "children"> & {
|
|
|
32
17
|
title?: string;
|
|
33
18
|
};
|
|
34
19
|
/**
|
|
35
|
-
* One of the
|
|
20
|
+
* One of the six Krizaka birds in one mood — for the moments a product speaks to a person: a welcome, a long wait,
|
|
36
21
|
* a success, an empty list, an error. Drawn in the host's brand colours by default (`tone="own"` for the story's).
|
|
37
22
|
*/
|
|
38
23
|
declare function Mascot({ bird, mood, tone, size, animated, title, className, ...props }: MascotProps): React.JSX.Element;
|
|
39
24
|
|
|
40
|
-
|
|
25
|
+
type PhoenixProps = Omit<React.ComponentProps<"svg">, "children"> & {
|
|
26
|
+
/** `own` (default): the violet wing and the gold wing of the Krizaka story. `brand`: the host's accent and accent-2. */
|
|
27
|
+
tone?: "own" | "brand";
|
|
28
|
+
/** Width and height in pixels. */
|
|
29
|
+
size?: number;
|
|
30
|
+
/** A slow float and a breathing core. Off with `false`; always off under `prefers-reduced-motion`. */
|
|
31
|
+
animated?: boolean;
|
|
32
|
+
/** An accessible name (the phoenix becomes an image); without it, it is decorative. */
|
|
33
|
+
title?: string;
|
|
34
|
+
};
|
|
35
|
+
/** The phoenix: the comeback, beside the five birds of the flock (`Mascot`). Decorative unless titled. */
|
|
36
|
+
declare function Phoenix({ tone, size, animated, title, className, ...props }: PhoenixProps): React.JSX.Element;
|
|
37
|
+
|
|
38
|
+
export { Mascot, MascotBird, MascotMood, type MascotProps, MascotTone, Phoenix, type PhoenixProps };
|
package/dist/mascots.js
CHANGED
|
@@ -1,186 +1,54 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
MASCOT_BIRDS,
|
|
4
|
+
MASCOT_MOODS,
|
|
5
|
+
Mascot
|
|
6
|
+
} from "./chunk-NOVUREEC.js";
|
|
2
7
|
|
|
3
|
-
// src/mascots/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
belly: "M41 66 C41 55 79 55 79 66 C79 82 71 90 60 90 C49 90 41 82 41 66 Z",
|
|
15
|
-
wings: [
|
|
16
|
-
{ d: falconWing, pivot: [29, 58] },
|
|
17
|
-
{ d: mirror(falconWing), pivot: [91, 58] }
|
|
18
|
-
],
|
|
19
|
-
head: { cx: 60, cy: 38, r: 22 },
|
|
20
|
-
details: ["M46 20 L52 10 L56 19 Z", "M74 20 L68 10 L64 19 Z"],
|
|
21
|
-
visor: { x: 41, y: 29, w: 38, h: 13 },
|
|
22
|
-
beak: "M54 45 L66 45 L60 57 Z",
|
|
23
|
-
eyes: { at: [[50, 35.5], [70, 35.5]], white: 0, pupil: 3.2 }
|
|
24
|
-
},
|
|
25
|
-
owl: {
|
|
26
|
-
shadow: [60, 110, 24, 3.5],
|
|
27
|
-
legs: ["M53 100 L51 107 M47 107 L55 107", "M67 100 L69 107 M65 107 L73 107"],
|
|
28
|
-
body: "M28 52 C28 20 92 20 92 52 C92 86 82 102 60 102 C38 102 28 86 28 52 Z",
|
|
29
|
-
belly: "M42 66 C42 52 78 52 78 66 C78 86 72 94 60 94 C48 94 42 86 42 66 Z",
|
|
30
|
-
wings: [
|
|
31
|
-
{ d: "M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z", pivot: [29, 58] },
|
|
32
|
-
{ d: mirror("M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z"), pivot: [91, 58] }
|
|
33
|
-
],
|
|
34
|
-
head: { cx: 60, cy: 42, r: 0 },
|
|
35
|
-
details: ["M31 20 L47 31 L31 41 Z", "M89 20 L73 31 L89 41 Z"],
|
|
36
|
-
beak: "M55 50 L65 50 L60 59 Z",
|
|
37
|
-
eyes: { at: [[47, 41], [73, 41]], white: 10, pupil: 4 }
|
|
38
|
-
},
|
|
39
|
-
duck: {
|
|
40
|
-
shadow: [60, 110, 30, 3.5],
|
|
41
|
-
legs: [],
|
|
42
|
-
back: ["M88 80 C100 76 104 66 96 62 C98 70 94 74 88 74 Z"],
|
|
43
|
-
body: "M26 80 C26 62 94 62 94 80 C94 100 82 106 60 106 C38 106 26 100 26 80 Z",
|
|
44
|
-
belly: "M38 84 C38 72 82 72 82 84 C82 96 74 101 60 101 C46 101 38 96 38 84 Z",
|
|
45
|
-
wings: [
|
|
46
|
-
{ d: "M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z", pivot: [27, 74] },
|
|
47
|
-
{ d: mirror("M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z"), pivot: [93, 74] }
|
|
48
|
-
],
|
|
49
|
-
head: { cx: 60, cy: 42, r: 23 },
|
|
50
|
-
details: ["M57 20 C54 11 63 8 66 14 C62 13 60 16 61 20 Z"],
|
|
51
|
-
glasses: true,
|
|
52
|
-
beak: "M43 51 C43 46 55 45 60 45 C65 45 77 46 77 51 C77 56 66 60 60 60 C54 60 43 56 43 51 Z",
|
|
53
|
-
eyes: { at: [[51, 37], [69, 37]], white: 0, pupil: 2.6 }
|
|
54
|
-
},
|
|
55
|
-
flamingo: {
|
|
56
|
-
shadow: [60, 110, 20, 3],
|
|
57
|
-
legs: ["M56 86 L55 97 L58 108 M53 108 L62 108", "M65 86 L66 108 M62 108 L71 108"],
|
|
58
|
-
body: "M38 70 C38 54 88 54 88 70 C88 86 76 90 62 90 C48 90 38 86 38 70 Z",
|
|
59
|
-
belly: "M46 72 C46 63 80 63 80 72 C80 82 72 85 63 85 C54 85 46 82 46 72 Z",
|
|
60
|
-
wings: [
|
|
61
|
-
{ d: "M42 64 C30 68 32 84 47 84 C43 76 43 70 42 64 Z", pivot: [42, 64] },
|
|
62
|
-
{ d: "M84 64 C96 68 94 84 79 84 C83 76 83 70 84 64 Z", pivot: [84, 64] }
|
|
63
|
-
],
|
|
64
|
-
neck: { d: "M58 60 C58 42 40 34 46 22", width: 7 },
|
|
65
|
-
head: { cx: 48, cy: 18, r: 11 },
|
|
66
|
-
details: [],
|
|
67
|
-
beak: "M38 16 C28 18 29 28 24 33 C33 28 38 23 40 20 Z",
|
|
68
|
-
eyes: { at: [[46, 15]], white: 3.2, pupil: 1.8 }
|
|
69
|
-
},
|
|
70
|
-
pigeon: {
|
|
71
|
-
shadow: [60, 112, 22, 3],
|
|
72
|
-
legs: ["M52 94 L51 99 M48 99 L54 99", "M68 94 L69 99 M66 99 L72 99"],
|
|
73
|
-
back: ["M53 98 L52 103", "M67 98 L68 103", "M30 68 C16 72 14 62 28 56 C17 57 15 49 32 48 Z"],
|
|
74
|
-
body: "M34 64 C34 44 86 44 86 64 C86 86 74 96 60 96 C46 96 34 86 34 64 Z",
|
|
75
|
-
belly: "M43 68 C43 57 77 57 77 68 C77 82 70 88 60 88 C50 88 43 82 43 68 Z",
|
|
76
|
-
wings: [
|
|
77
|
-
{ d: pigeonWing, pivot: [36, 58] },
|
|
78
|
-
{ d: mirror(pigeonWing), pivot: [84, 58] }
|
|
79
|
-
],
|
|
80
|
-
head: { cx: 60, cy: 36, r: 19 },
|
|
81
|
-
details: ["M54 18 C56 12 64 12 66 18 C63 16 57 16 54 18 Z"],
|
|
82
|
-
beak: "M55 41 L65 41 L60 50 Z",
|
|
83
|
-
eyes: { at: [[52, 33], [68, 33]], white: 5, pupil: 2.4 },
|
|
84
|
-
parcel: ["M60 100 L71 105 L60 110 L49 105 Z", "M49 105 L60 110 L60 118 L49 113 Z", "M71 105 L60 110 L60 118 L71 113 Z"]
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
var MOOD_PARTS = {
|
|
88
|
-
/** The badge of `success` and `error`, top right. */
|
|
89
|
-
badge: { cx: 98, cy: 22, r: 11 },
|
|
90
|
-
check: "M92.5 22.5 L96.8 26.6 L103.6 18.4",
|
|
91
|
-
bang: { line: "M98 15.5 L98 23.5", dot: [98, 28] },
|
|
92
|
-
/** `thinking`: three dots rising to the right of the head. */
|
|
93
|
-
dots: [
|
|
94
|
-
[88, 26, 2.6],
|
|
95
|
-
[96, 19, 3.2],
|
|
96
|
-
[105, 11, 3.8]
|
|
97
|
-
],
|
|
98
|
-
/** `empty`: an open tray beside the bird. */
|
|
99
|
-
tray: "M90 96 L110 96 L107 108 L93 108 Z",
|
|
100
|
-
/** `success`: two sparkles. */
|
|
101
|
-
sparkles: ["M16 26 L18 31 L23 33 L18 35 L16 40 L14 35 L9 33 L14 31 Z", "M104 52 L105.2 55 L108 56 L105.2 57 L104 60 L102.8 57 L100 56 L102.8 55 Z"]
|
|
8
|
+
// src/mascots/phoenix.tsx
|
|
9
|
+
import { useId } from "react";
|
|
10
|
+
|
|
11
|
+
// src/mascots/phoenix-geometry.ts
|
|
12
|
+
var PHOENIX = {
|
|
13
|
+
wingL: "M56 62 C40 40 22 36 8 40 C22 46 30 56 34 70 C40 64 48 62 56 62 Z",
|
|
14
|
+
wingR: "M64 62 C80 40 98 36 112 40 C98 46 90 56 86 70 C80 64 72 62 64 62 Z",
|
|
15
|
+
tailL: "M52 66 C46 82 40 94 30 104 C44 98 52 90 58 78 Z",
|
|
16
|
+
tailR: "M68 66 C74 82 80 94 90 104 C76 98 68 90 62 78 Z",
|
|
17
|
+
body: "M60 34 L68 60 L60 82 L52 60 Z",
|
|
18
|
+
crest: "M60 34 L56 24 M60 34 L64 24"
|
|
102
19
|
};
|
|
103
|
-
var
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
pigeon: { from: "#22d3ee", to: "#6366f1", wing: "#a855f7", detail: "#4338ca", beak: "#f59e0b", eye: "#1f2937" }
|
|
20
|
+
var PHOENIX_PALETTES = {
|
|
21
|
+
own: {
|
|
22
|
+
left: ["#c084fc", "#7c3aed"],
|
|
23
|
+
right: ["#fde68a", "#f59e0b"],
|
|
24
|
+
core: ["#fff7ed", "#fb923c"],
|
|
25
|
+
body: "#1f1530",
|
|
26
|
+
edge: "#e9d5ff",
|
|
27
|
+
crest: "#fbbf24"
|
|
28
|
+
}
|
|
113
29
|
};
|
|
114
|
-
var LIGHT = "#ffffff";
|
|
115
|
-
var SHADE = "#000000";
|
|
116
|
-
var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
|
|
117
30
|
|
|
118
|
-
// src/mascots/
|
|
119
|
-
import {
|
|
120
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
31
|
+
// src/mascots/phoenix.tsx
|
|
32
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
121
33
|
var CSS = `
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
[data-animated] .
|
|
126
|
-
|
|
127
|
-
[data-animated][data-mood="welcome"] .kzb-wing-r { animation: kzb-wave 1.1s ease-in-out infinite alternate; }
|
|
128
|
-
[data-animated][data-mood="thinking"] .kzb-dot { animation: kzb-dot 1.5s ease-in-out infinite; }
|
|
129
|
-
[data-animated][data-mood="thinking"] .kzb-dot:nth-child(2) { animation-delay: .2s; }
|
|
130
|
-
[data-animated][data-mood="thinking"] .kzb-dot:nth-child(3) { animation-delay: .4s; }
|
|
131
|
-
[data-animated][data-mood="success"] .kzb-bird { animation: kzb-hop 1.6s cubic-bezier(.3,1.6,.5,1) 1, kzb-bob 3.6s ease-in-out 1.6s infinite; }
|
|
132
|
-
[data-animated][data-mood="success"] .kzb-badge { animation: kzb-pop .5s cubic-bezier(.3,1.6,.5,1) .3s both; }
|
|
133
|
-
[data-animated][data-mood="success"] .kzb-sparkle { animation: kzb-twinkle 2.4s ease-in-out infinite; }
|
|
134
|
-
[data-animated][data-mood="error"] .kzb-bird { animation: kzb-shake .5s ease-in-out .2s 2, kzb-bob 3.6s ease-in-out 1.2s infinite; }
|
|
135
|
-
[data-animated][data-mood="empty"] .kzb-bird { animation: kzb-sway 5s ease-in-out infinite; }
|
|
136
|
-
.kzb-badge, .kzb-sparkle, .kzb-dot { transform-box: fill-box; transform-origin: center; }
|
|
137
|
-
@keyframes kzb-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2.5px); } }
|
|
138
|
-
@keyframes kzb-blink { 0%, 92%, 100% { transform: scaleY(1); } 95% { transform: scaleY(.1); } }
|
|
139
|
-
@keyframes kzb-wave { from { transform: rotate(-8deg); } to { transform: rotate(-38deg); } }
|
|
140
|
-
@keyframes kzb-dot { 0%, 100% { opacity: .35; transform: translateY(0); } 50% { opacity: 1; transform: translateY(-2px); } }
|
|
141
|
-
@keyframes kzb-hop { 0% { transform: translateY(0); } 30% { transform: translateY(-9px); } 60% { transform: translateY(0); } 100% { transform: translateY(0); } }
|
|
142
|
-
@keyframes kzb-pop { from { transform: scale(0); } to { transform: scale(1); } }
|
|
143
|
-
@keyframes kzb-twinkle { 0%, 100% { opacity: .25; transform: scale(.7); } 50% { opacity: 1; transform: scale(1); } }
|
|
144
|
-
@keyframes kzb-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-3px); } 75% { transform: translateX(3px); } }
|
|
145
|
-
@keyframes kzb-sway { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-2deg); } }
|
|
146
|
-
@media (prefers-reduced-motion: reduce) {
|
|
147
|
-
.kzb-bird, .kzb-blink, .kzb-wing-r, .kzb-dot, .kzb-badge, .kzb-sparkle { animation: none !important; }
|
|
148
|
-
}
|
|
34
|
+
@keyframes kzp-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
|
|
35
|
+
@keyframes kzp-core { 0%, 100% { opacity: .8; } 50% { opacity: 1; } }
|
|
36
|
+
.kzp[data-animated] { animation: kzp-float 5s ease-in-out infinite; }
|
|
37
|
+
.kzp[data-animated] .kzp-core { animation: kzp-core 2.8s ease-in-out infinite; }
|
|
38
|
+
@media (prefers-reduced-motion: reduce) { .kzp, .kzp .kzp-core { animation: none !important; } }
|
|
149
39
|
`;
|
|
150
40
|
var BRAND = {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
41
|
+
left: ["var(--kz-accent-2, var(--kz-accent))", "var(--kz-accent)"],
|
|
42
|
+
right: ["var(--kz-accent)", "var(--kz-accent-2, var(--kz-accent))"],
|
|
43
|
+
core: ["#ffffff", "var(--kz-accent)"],
|
|
44
|
+
body: "var(--kz-surface-3)",
|
|
45
|
+
edge: "var(--kz-border-strong)",
|
|
46
|
+
crest: "var(--kz-accent)"
|
|
157
47
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const
|
|
162
|
-
const g = BIRDS[bird];
|
|
163
|
-
const p = tone === "own" ? OWN_PALETTES[bird] : BRAND;
|
|
164
|
-
const body = `url(#kzb-${uid})`;
|
|
165
|
-
const line = { stroke: OUTLINE, strokeWidth: 1.4, strokeLinejoin: "round" };
|
|
166
|
-
const eyeR = g.eyes.white || g.eyes.pupil * 1.2;
|
|
167
|
-
const eyes = g.eyes.at.map((at, i) => {
|
|
168
|
-
const look = mood === "thinking" ? 1.4 : 0;
|
|
169
|
-
if (mood === "success") return /* @__PURE__ */ jsx("path", { d: archEye(at, eyeR * 0.85), stroke: g.visor ? p.eye : OUTLINE, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i);
|
|
170
|
-
if (mood === "empty" && g.eyes.white > 0)
|
|
171
|
-
return /* @__PURE__ */ jsxs("g", { children: [
|
|
172
|
-
/* @__PURE__ */ jsx("circle", { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
173
|
-
/* @__PURE__ */ jsx("circle", { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
|
|
174
|
-
/* @__PURE__ */ jsx("path", { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
|
|
175
|
-
] }, i);
|
|
176
|
-
if (mood === "empty") return /* @__PURE__ */ jsx("path", { d: lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : OUTLINE, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i);
|
|
177
|
-
return /* @__PURE__ */ jsxs("g", { className: "kzb-eye kzb-blink", children: [
|
|
178
|
-
g.eyes.white > 0 && /* @__PURE__ */ jsx("circle", { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
179
|
-
/* @__PURE__ */ jsx("circle", { cx: at[0] + look, cy: at[1] - look, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE }),
|
|
180
|
-
g.eyes.white > 0 && /* @__PURE__ */ jsx("circle", { cx: at[0] + look - g.eyes.pupil * 0.35, cy: at[1] - look - g.eyes.pupil * 0.35, r: g.eyes.pupil * 0.35, fill: LIGHT })
|
|
181
|
-
] }, i);
|
|
182
|
-
});
|
|
183
|
-
const [wl, wr] = g.wings;
|
|
48
|
+
function Phoenix({ tone = "own", size = 120, animated = true, title, className, ...props }) {
|
|
49
|
+
const id = useId().replace(/[^a-zA-Z0-9_-]/g, "");
|
|
50
|
+
const p = tone === "brand" ? BRAND : PHOENIX_PALETTES.own;
|
|
51
|
+
const a11y = title ? { role: "img", "aria-label": title } : { "aria-hidden": true };
|
|
184
52
|
return /* @__PURE__ */ jsxs(
|
|
185
53
|
"svg",
|
|
186
54
|
{
|
|
@@ -188,59 +56,34 @@ function Mascot({ bird = "owl", mood = "welcome", tone = "brand", size = 96, ani
|
|
|
188
56
|
height: size,
|
|
189
57
|
viewBox: "0 0 120 120",
|
|
190
58
|
fill: "none",
|
|
191
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
192
|
-
"data-bird": bird,
|
|
193
|
-
"data-mood": mood,
|
|
194
59
|
"data-animated": animated ? "" : void 0,
|
|
195
|
-
className,
|
|
196
|
-
...
|
|
60
|
+
className: ["kzp", className].filter(Boolean).join(" "),
|
|
61
|
+
...a11y,
|
|
197
62
|
...props,
|
|
198
63
|
children: [
|
|
199
64
|
/* @__PURE__ */ jsx("style", { children: CSS }),
|
|
200
|
-
/* @__PURE__ */
|
|
201
|
-
/* @__PURE__ */
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
/* @__PURE__ */ jsx("ellipse", { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
|
|
205
|
-
mood === "empty" && /* @__PURE__ */ jsx("path", { d: MOOD_PARTS.tray, stroke: OUTLINE, strokeWidth: 1.6, strokeDasharray: "3 3", strokeLinejoin: "round" }),
|
|
206
|
-
/* @__PURE__ */ jsxs("g", { className: "kzb-bird", children: [
|
|
207
|
-
g.legs.map((d) => /* @__PURE__ */ jsx("path", { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round" }, d)),
|
|
208
|
-
g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx("path", { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx("path", { d, stroke: OUTLINE, strokeWidth: 1.4 }, d)),
|
|
209
|
-
g.parcel && /* @__PURE__ */ jsx("g", { ...line, children: g.parcel.map((d, i) => /* @__PURE__ */ jsx("path", { d, fill: PARCEL[i] }, d)) }),
|
|
210
|
-
/* @__PURE__ */ jsx("path", { d: g.body, fill: body, ...line }),
|
|
211
|
-
/* @__PURE__ */ jsx("path", { d: g.belly, fill: LIGHT, opacity: 0.28 }),
|
|
212
|
-
[wl, wr].map((w, i) => {
|
|
213
|
-
const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
|
|
214
|
-
return /* @__PURE__ */ jsxs("g", { className: i === 1 ? "kzb-wing kzb-wing-r" : "kzb-wing", style: { transformOrigin: `${w.pivot[0]}px ${w.pivot[1]}px`, transform: turn ? `rotate(${turn}deg)` : void 0 }, children: [
|
|
215
|
-
/* @__PURE__ */ jsx("path", { d: w.d, fill: p.wing, ...line }),
|
|
216
|
-
/* @__PURE__ */ jsx("path", { d: w.d, fill: SHADE, opacity: 0.16 })
|
|
217
|
-
] }, i);
|
|
218
|
-
}),
|
|
219
|
-
g.neck && /* @__PURE__ */ jsx("path", { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round" }),
|
|
220
|
-
g.head.r > 0 && /* @__PURE__ */ jsx("circle", { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
|
|
221
|
-
g.details.map((d) => /* @__PURE__ */ jsx("path", { d, fill: p.detail, ...line }, d)),
|
|
222
|
-
g.visor && /* @__PURE__ */ jsx("rect", { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: SURFACE, ...line }),
|
|
223
|
-
eyes,
|
|
224
|
-
g.glasses && /* @__PURE__ */ jsxs("g", { stroke: OUTLINE, strokeWidth: 1.3, children: [
|
|
225
|
-
g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: 6.5, fill: LIGHT, fillOpacity: 0.12 }, x)),
|
|
226
|
-
/* @__PURE__ */ jsx("path", { d: `M${g.eyes.at[0][0] + 6.5} ${g.eyes.at[0][1]} L${g.eyes.at[1][0] - 6.5} ${g.eyes.at[1][1]}` })
|
|
65
|
+
/* @__PURE__ */ jsxs("defs", { children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `kzp-l-${id}`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
|
|
67
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: p.left[0] }),
|
|
68
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: p.left[1] })
|
|
227
69
|
] }),
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
/* @__PURE__ */ jsx("circle", { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: "var(--kz-success)" }),
|
|
236
|
-
/* @__PURE__ */ jsx("path", { d: MOOD_PARTS.check, stroke: SURFACE, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round" })
|
|
70
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `kzp-r-${id}`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
|
|
71
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: p.right[0] }),
|
|
72
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: p.right[1] })
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ jsxs("radialGradient", { id: `kzp-c-${id}`, children: [
|
|
75
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: p.core[0] }),
|
|
76
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: p.core[1], stopOpacity: "0" })
|
|
237
77
|
] })
|
|
238
78
|
] }),
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
79
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.wingL, fill: `url(#kzp-l-${id})` }),
|
|
80
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.wingR, fill: `url(#kzp-r-${id})` }),
|
|
81
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.tailL, fill: `url(#kzp-l-${id})`, opacity: ".7" }),
|
|
82
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.tailR, fill: `url(#kzp-r-${id})`, opacity: ".7" }),
|
|
83
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: ".5" }),
|
|
84
|
+
/* @__PURE__ */ jsx("circle", { cx: "60", cy: "58", r: "12", fill: `url(#kzp-c-${id})`, className: "kzp-core" }),
|
|
85
|
+
/* @__PURE__ */ jsx("circle", { cx: "60", cy: "58", r: "3.5", fill: "#fff" }),
|
|
86
|
+
/* @__PURE__ */ jsx("path", { d: PHOENIX.crest, stroke: p.crest, strokeWidth: "2", strokeLinecap: "round" })
|
|
244
87
|
]
|
|
245
88
|
}
|
|
246
89
|
);
|
|
@@ -248,6 +91,7 @@ function Mascot({ bird = "owl", mood = "welcome", tone = "brand", size = 96, ani
|
|
|
248
91
|
export {
|
|
249
92
|
MASCOT_BIRDS,
|
|
250
93
|
MASCOT_MOODS,
|
|
251
|
-
Mascot
|
|
94
|
+
Mascot,
|
|
95
|
+
Phoenix
|
|
252
96
|
};
|
|
253
97
|
//# sourceMappingURL=mascots.js.map
|