@krizaka/ui 2.8.0 → 2.10.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 +73 -5
- 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/blocks.css +247 -0
- package/dist/catalogue-page.d.ts +34 -0
- package/dist/catalogue-page.js +26 -0
- package/dist/catalogue-page.js.map +1 -0
- package/dist/changelog-page.d.ts +50 -0
- package/dist/changelog-page.js +27 -0
- package/dist/changelog-page.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 → chunk-JZPVUJIX.js} +25 -3
- package/dist/chunk-JZPVUJIX.js.map +1 -0
- package/dist/chunk-KNBYZGSQ.js +11 -0
- package/dist/chunk-KNBYZGSQ.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/component-page.d.ts +41 -0
- package/dist/component-page.js +17 -0
- package/dist/component-page.js.map +1 -0
- package/dist/contact-page.d.ts +31 -0
- package/dist/contact-page.js +26 -0
- package/dist/contact-page.js.map +1 -0
- 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-article-page.d.ts +54 -0
- package/dist/docs-article-page.js +29 -0
- package/dist/docs-article-page.js.map +1 -0
- package/dist/docs-hub-page.d.ts +72 -0
- package/dist/docs-hub-page.js +45 -0
- package/dist/docs-hub-page.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/error-page.d.ts +22 -0
- package/dist/error-page.js +23 -0
- package/dist/error-page.js.map +1 -0
- package/dist/gallery-page.d.ts +50 -0
- package/dist/gallery-page.js +30 -0
- package/dist/gallery-page.js.map +1 -0
- package/dist/{geometry-CXrAW34x.d.ts → geometry-CbOU4rtL.d.ts} +4 -4
- 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/how-it-works-page.d.ts +48 -0
- package/dist/how-it-works-page.js +28 -0
- package/dist/how-it-works-page.js.map +1 -0
- package/dist/index.d.ts +16 -6
- package/dist/index.js +115 -24
- package/dist/index.js.map +1 -1
- package/dist/landing-page.d.ts +58 -0
- package/dist/landing-page.js +42 -0
- package/dist/landing-page.js.map +1 -0
- package/dist/landscape.d.ts +41 -0
- package/dist/landscape.js +836 -0
- package/dist/landscape.js.map +1 -0
- package/dist/legal-page.d.ts +34 -0
- package/dist/legal-page.js +18 -0
- package/dist/legal-page.js.map +1 -0
- package/dist/longform-page.d.ts +42 -0
- package/dist/longform-page.js +29 -0
- package/dist/longform-page.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 -4
- package/dist/mascot-quote.js +23 -1
- package/dist/mascot-quote.js.map +1 -1
- package/dist/mascot-state.d.ts +2 -2
- package/dist/mascot-state.js +1 -1
- package/dist/mascot-state.js.map +1 -1
- package/dist/mascots.d.ts +18 -5
- package/dist/mascots.js +87 -2
- package/dist/mascots.js.map +1 -1
- package/dist/native.d.ts +88 -11
- package/dist/native.js +640 -297
- package/dist/native.js.map +1 -1
- package/dist/pricing-page.d.ts +62 -0
- package/dist/pricing-page.js +71 -0
- package/dist/pricing-page.js.map +1 -0
- package/dist/product-page.d.ts +83 -0
- package/dist/product-page.js +60 -0
- package/dist/product-page.js.map +1 -0
- 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/status-page.d.ts +42 -0
- package/dist/status-page.js +28 -0
- package/dist/status-page.js.map +1 -0
- package/dist/story-variant-CLn4H5Nt.d.ts +4 -0
- package/dist/story.css +432 -0
- package/package.json +478 -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/catalogue-page.json +240 -0
- package/registry/changelog-page.json +226 -0
- 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/component-page.json +227 -0
- package/registry/confirm-button.json +3 -3
- package/registry/contact-page.json +212 -0
- 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-article-page.json +242 -0
- package/registry/docs-hub-page.json +270 -0
- package/registry/docs-layout.json +148 -0
- package/registry/dropdown-menu.json +3 -3
- package/registry/empty-state.json +1 -1
- package/registry/error-page.json +183 -0
- 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/catalogue-page/components.d.ts +4 -0
- package/registry/examples/catalogue-page/components.js +33 -0
- package/registry/examples/catalogue-page/components.tsx +36 -0
- package/registry/examples/changelog-page/releases.d.ts +4 -0
- package/registry/examples/changelog-page/releases.js +44 -0
- package/registry/examples/changelog-page/releases.tsx +39 -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/component-page/button.d.ts +4 -0
- package/registry/examples/component-page/button.js +33 -0
- package/registry/examples/component-page/button.tsx +30 -0
- package/registry/examples/contact-page/team.d.ts +4 -0
- package/registry/examples/contact-page/team.js +39 -0
- package/registry/examples/contact-page/team.tsx +38 -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-article-page/cli.d.ts +4 -0
- package/registry/examples/docs-article-page/cli.js +33 -0
- package/registry/examples/docs-article-page/cli.tsx +38 -0
- package/registry/examples/docs-hub-page/krizaka.d.ts +4 -0
- package/registry/examples/docs-hub-page/krizaka.js +46 -0
- package/registry/examples/docs-hub-page/krizaka.tsx +37 -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/error-page/not-found.d.ts +4 -0
- package/registry/examples/error-page/not-found.js +24 -0
- package/registry/examples/error-page/not-found.tsx +19 -0
- package/registry/examples/gallery-page/made-here.d.ts +4 -0
- package/registry/examples/gallery-page/made-here.js +34 -0
- package/registry/examples/gallery-page/made-here.tsx +32 -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/how-it-works-page/orazaka.d.ts +4 -0
- package/registry/examples/how-it-works-page/orazaka.js +30 -0
- package/registry/examples/how-it-works-page/orazaka.tsx +26 -0
- package/registry/examples/landing-page/krizaka.d.ts +4 -0
- package/registry/examples/landing-page/krizaka.js +44 -0
- package/registry/examples/landing-page/krizaka.tsx +44 -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/legal-page/privacy.d.ts +4 -0
- package/registry/examples/legal-page/privacy.js +24 -0
- package/registry/examples/legal-page/privacy.tsx +19 -0
- package/registry/examples/longform-page/story.d.ts +4 -0
- package/registry/examples/longform-page/story.js +38 -0
- package/registry/examples/longform-page/story.tsx +35 -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/mascots/crane.d.ts +4 -0
- package/registry/examples/mascots/crane.js +19 -0
- package/registry/examples/mascots/crane.tsx +18 -0
- package/registry/examples/mascots/flock.tsx +2 -1
- package/registry/examples/mascots/native/crane.d.ts +4 -0
- package/registry/examples/mascots/native/crane.dark.png +0 -0
- package/registry/examples/mascots/native/crane.js +21 -0
- package/registry/examples/mascots/native/crane.light.png +0 -0
- package/registry/examples/mascots/native/crane.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/pricing-page/credits.d.ts +4 -0
- package/registry/examples/pricing-page/credits.js +41 -0
- package/registry/examples/pricing-page/credits.tsx +33 -0
- package/registry/examples/product-page/orazaka.d.ts +4 -0
- package/registry/examples/product-page/orazaka.js +44 -0
- package/registry/examples/product-page/orazaka.tsx +36 -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/examples/status-page/building.d.ts +4 -0
- package/registry/examples/status-page/building.js +29 -0
- package/registry/examples/status-page/building.tsx +25 -0
- package/registry/examples/status-page/operational.d.ts +4 -0
- package/registry/examples/status-page/operational.js +26 -0
- package/registry/examples/status-page/operational.tsx +20 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/gallery-page.json +256 -0
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +322 -0
- package/registry/how-it-works-page.json +242 -0
- package/registry/image-cropper.json +1 -1
- package/registry/index.json +621 -5
- package/registry/iso.json +1 -1
- package/registry/kbd.json +1 -1
- package/registry/landing-page.json +242 -0
- package/registry/landscape.json +189 -0
- package/registry/legal-page.json +199 -0
- package/registry/link-card.json +1 -1
- package/registry/loader.json +1 -1
- package/registry/longform-page.json +213 -0
- 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 +34 -34
- 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/pricing-page.json +245 -0
- package/registry/product-page.json +319 -0
- 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/status-page.json +263 -0
- 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
- package/dist/chunk-NOVUREEC.js.map +0 -1
package/dist/native.js
CHANGED
|
@@ -176,6 +176,16 @@ var marks = /* @__PURE__ */ Object.freeze({
|
|
|
176
176
|
"100%",
|
|
177
177
|
"#089b96"
|
|
178
178
|
]
|
|
179
|
+
],
|
|
180
|
+
"yororis": [
|
|
181
|
+
[
|
|
182
|
+
"0%",
|
|
183
|
+
"#a4773d"
|
|
184
|
+
],
|
|
185
|
+
[
|
|
186
|
+
"100%",
|
|
187
|
+
"#5d894d"
|
|
188
|
+
]
|
|
179
189
|
]
|
|
180
190
|
});
|
|
181
191
|
|
|
@@ -719,8 +729,88 @@ var styles8 = StyleSheet8.create({
|
|
|
719
729
|
action: { marginTop: 8, flexDirection: "row", flexWrap: "wrap", justifyContent: "center", gap: 8 }
|
|
720
730
|
});
|
|
721
731
|
|
|
732
|
+
// src/native/goal-gauge.tsx
|
|
733
|
+
import { Animated as Animated4, StyleSheet as StyleSheet9, View as View6 } from "react-native";
|
|
734
|
+
|
|
735
|
+
// src/native/story-motion.ts
|
|
736
|
+
import * as React7 from "react";
|
|
737
|
+
import { AccessibilityInfo as AccessibilityInfo2, Animated as Animated3, Easing } from "react-native";
|
|
738
|
+
function useEntrance(animated, delay = 0, duration = 700) {
|
|
739
|
+
const [value] = React7.useState(() => new Animated3.Value(animated ? 0 : 1));
|
|
740
|
+
React7.useEffect(() => {
|
|
741
|
+
if (!animated) return;
|
|
742
|
+
let cancelled = false;
|
|
743
|
+
void AccessibilityInfo2.isReduceMotionEnabled().then((reduce) => {
|
|
744
|
+
if (cancelled) return;
|
|
745
|
+
if (reduce) value.setValue(1);
|
|
746
|
+
else Animated3.timing(value, { toValue: 1, duration, delay, easing: Easing.out(Easing.cubic), useNativeDriver: true }).start();
|
|
747
|
+
});
|
|
748
|
+
return () => {
|
|
749
|
+
cancelled = true;
|
|
750
|
+
};
|
|
751
|
+
}, [animated, delay, duration, value]);
|
|
752
|
+
return value;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
// src/native/goal-gauge.tsx
|
|
756
|
+
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
757
|
+
function Cell({ lit, animate, order, animated, arcade }) {
|
|
758
|
+
const { theme } = useTheme();
|
|
759
|
+
const t = useEntrance(animated && animate, 300 + order * 100, 350);
|
|
760
|
+
const spentOpacity = arcade ? 0.14 : 1;
|
|
761
|
+
const opacity = !animate ? 1 : lit ? t.interpolate({ inputRange: [0, 1], outputRange: [0.25, 1] }) : t.interpolate({ inputRange: [0, 1], outputRange: [1, arcade ? 0.14 : 1] });
|
|
762
|
+
const color = lit || arcade ? theme.accent : theme.surface3;
|
|
763
|
+
return /* @__PURE__ */ jsx10(
|
|
764
|
+
Animated4.View,
|
|
765
|
+
{
|
|
766
|
+
style: [styles9.cell, arcade ? styles9.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]
|
|
767
|
+
}
|
|
768
|
+
);
|
|
769
|
+
}
|
|
770
|
+
function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel = true, variant = "default", animated = true, style, ...props }) {
|
|
771
|
+
const { theme } = useTheme();
|
|
772
|
+
const total = Math.max(1, Math.round(segments));
|
|
773
|
+
const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));
|
|
774
|
+
const words = valueText ?? `${lit} / ${total}`;
|
|
775
|
+
const arcade = variant === "arcade";
|
|
776
|
+
return /* @__PURE__ */ jsxs7(
|
|
777
|
+
View6,
|
|
778
|
+
{
|
|
779
|
+
accessible: true,
|
|
780
|
+
role: "meter",
|
|
781
|
+
"aria-label": label,
|
|
782
|
+
"aria-valuemin": 0,
|
|
783
|
+
"aria-valuemax": total,
|
|
784
|
+
"aria-valuenow": lit,
|
|
785
|
+
"aria-valuetext": words,
|
|
786
|
+
...props,
|
|
787
|
+
style: [styles9.root, style],
|
|
788
|
+
children: [
|
|
789
|
+
showLabel ? /* @__PURE__ */ jsxs7(View6, { "aria-hidden": true, style: [styles9.head, arcade ? styles9.headArcade : null], children: [
|
|
790
|
+
/* @__PURE__ */ jsx10(Txt, { variant: arcade ? "mono" : "caption", tone: "secondary", children: arcade ? label.toUpperCase() : label }),
|
|
791
|
+
arcade ? null : /* @__PURE__ */ jsx10(Txt, { variant: "caption", children: words })
|
|
792
|
+
] }) : null,
|
|
793
|
+
/* @__PURE__ */ jsx10(View6, { "aria-hidden": true, style: [styles9.cells, arcade ? [styles9.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null], children: Array.from({ length: total }, (_, i) => {
|
|
794
|
+
const on = i < lit;
|
|
795
|
+
const animate = mode === "fill" ? on : !on;
|
|
796
|
+
return /* @__PURE__ */ jsx10(Cell, { lit: on, animate, order: mode === "fill" ? i : i - lit, animated, arcade }, i);
|
|
797
|
+
}) })
|
|
798
|
+
]
|
|
799
|
+
}
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
var styles9 = StyleSheet9.create({
|
|
803
|
+
root: { alignSelf: "stretch", gap: 8 },
|
|
804
|
+
head: { flexDirection: "row", justifyContent: "space-between", alignItems: "baseline", gap: 12 },
|
|
805
|
+
headArcade: { justifyContent: "center" },
|
|
806
|
+
cells: { flexDirection: "row", gap: 4 },
|
|
807
|
+
cellsArcade: { padding: 3, borderWidth: 1, borderRadius: 4, transform: [{ skewX: "-14deg" }] },
|
|
808
|
+
cell: { flex: 1, height: 8, borderRadius: 4 },
|
|
809
|
+
cellArcade: { height: 10, borderRadius: 1 }
|
|
810
|
+
});
|
|
811
|
+
|
|
722
812
|
// src/native/KrizakaMark.tsx
|
|
723
|
-
import { View as
|
|
813
|
+
import { View as View7 } from "react-native";
|
|
724
814
|
import Svg2, { Circle, Defs as Defs2, G as Group, LinearGradient as LinearGradient2, Path, RadialGradient, Stop as Stop2 } from "react-native-svg";
|
|
725
815
|
|
|
726
816
|
// src/marks/krizaka-geometry.ts
|
|
@@ -743,24 +833,24 @@ var KRIZAKA = {
|
|
|
743
833
|
};
|
|
744
834
|
|
|
745
835
|
// src/native/mark-motion.ts
|
|
746
|
-
import { useEffect as
|
|
747
|
-
import { AccessibilityInfo as
|
|
836
|
+
import { useEffect as useEffect5, useState as useState7 } from "react";
|
|
837
|
+
import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated5, Easing as Easing2 } from "react-native";
|
|
748
838
|
var markA11y = (title) => title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
|
|
749
839
|
function useMarkMotion(size, animated, spinMs = 3e4) {
|
|
750
|
-
const [spin] =
|
|
751
|
-
const [pulse] =
|
|
752
|
-
|
|
840
|
+
const [spin] = useState7(() => new Animated5.Value(0));
|
|
841
|
+
const [pulse] = useState7(() => new Animated5.Value(0));
|
|
842
|
+
useEffect5(() => {
|
|
753
843
|
if (!animated) return;
|
|
754
844
|
let loops = [];
|
|
755
845
|
let cancelled = false;
|
|
756
|
-
void
|
|
846
|
+
void AccessibilityInfo3.isReduceMotionEnabled().then((reduce) => {
|
|
757
847
|
if (reduce || cancelled) return;
|
|
758
848
|
loops = [
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
849
|
+
Animated5.loop(Animated5.timing(spin, { toValue: 1, duration: spinMs, easing: Easing2.linear, useNativeDriver: true })),
|
|
850
|
+
Animated5.loop(
|
|
851
|
+
Animated5.sequence([
|
|
852
|
+
Animated5.timing(pulse, { toValue: 1, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true }),
|
|
853
|
+
Animated5.timing(pulse, { toValue: 0, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true })
|
|
764
854
|
])
|
|
765
855
|
)
|
|
766
856
|
];
|
|
@@ -772,7 +862,7 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
|
|
|
772
862
|
};
|
|
773
863
|
}, [animated, spin, pulse, spinMs]);
|
|
774
864
|
return {
|
|
775
|
-
Animated:
|
|
865
|
+
Animated: Animated5,
|
|
776
866
|
layer: { position: "absolute", width: size, height: size },
|
|
777
867
|
spinStyle: { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] },
|
|
778
868
|
pulseStyle: { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }
|
|
@@ -780,39 +870,39 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
|
|
|
780
870
|
}
|
|
781
871
|
|
|
782
872
|
// src/native/KrizakaMark.tsx
|
|
783
|
-
import { Fragment as Fragment2, jsx as
|
|
873
|
+
import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
784
874
|
function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
785
875
|
const { theme } = useTheme();
|
|
786
|
-
const { Animated:
|
|
876
|
+
const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
787
877
|
const id = useSvgId("kzm");
|
|
788
878
|
const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
|
|
789
879
|
const stroke = neutral ?? theme.textMuted;
|
|
790
|
-
const blue = /* @__PURE__ */
|
|
791
|
-
const dot = (c) => /* @__PURE__ */
|
|
792
|
-
/* @__PURE__ */
|
|
793
|
-
/* @__PURE__ */
|
|
880
|
+
const blue = /* @__PURE__ */ jsx11(LinearGradient2, { id: `${id}b`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1 + KRIZAKA.offset, y1: KRIZAKA.blue.y1 + KRIZAKA.offset, x2: KRIZAKA.blue.x2 + KRIZAKA.offset, y2: KRIZAKA.blue.y2 + KRIZAKA.offset, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx11(Stop2, { offset, stopColor: color }, offset)) });
|
|
881
|
+
const dot = (c) => /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
882
|
+
/* @__PURE__ */ jsx11(Circle, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
|
|
883
|
+
/* @__PURE__ */ jsx11(Circle, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
|
|
794
884
|
] });
|
|
795
|
-
return /* @__PURE__ */
|
|
796
|
-
/* @__PURE__ */
|
|
797
|
-
/* @__PURE__ */
|
|
798
|
-
/* @__PURE__ */
|
|
799
|
-
/* @__PURE__ */
|
|
800
|
-
/* @__PURE__ */
|
|
885
|
+
return /* @__PURE__ */ jsxs8(View7, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
886
|
+
/* @__PURE__ */ jsxs8(Svg2, { viewBox, style: layer, children: [
|
|
887
|
+
/* @__PURE__ */ jsxs8(Defs2, { children: [
|
|
888
|
+
/* @__PURE__ */ jsxs8(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
889
|
+
/* @__PURE__ */ jsx11(Stop2, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
|
|
890
|
+
/* @__PURE__ */ jsx11(Stop2, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
|
|
801
891
|
] }),
|
|
802
|
-
/* @__PURE__ */
|
|
803
|
-
/* @__PURE__ */
|
|
804
|
-
/* @__PURE__ */
|
|
892
|
+
/* @__PURE__ */ jsxs8(LinearGradient2, { id: `${id}i`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1 + KRIZAKA.offset, y1: KRIZAKA.ink.y1 + KRIZAKA.offset, x2: KRIZAKA.ink.x2 + KRIZAKA.offset, y2: KRIZAKA.ink.y2 + KRIZAKA.offset, children: [
|
|
893
|
+
/* @__PURE__ */ jsx11(Stop2, { offset: "0%", stopColor: theme.textSecondary }),
|
|
894
|
+
/* @__PURE__ */ jsx11(Stop2, { offset: "100%", stopColor: theme.textPrimary })
|
|
805
895
|
] }),
|
|
806
896
|
blue
|
|
807
897
|
] }),
|
|
808
|
-
size >= 48 ? /* @__PURE__ */
|
|
809
|
-
/* @__PURE__ */
|
|
810
|
-
/* @__PURE__ */
|
|
898
|
+
size >= 48 ? /* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
|
|
899
|
+
/* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
900
|
+
/* @__PURE__ */ jsx11(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx11(Path, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
|
|
811
901
|
] }),
|
|
812
|
-
/* @__PURE__ */
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
/* @__PURE__ */
|
|
815
|
-
/* @__PURE__ */
|
|
902
|
+
/* @__PURE__ */ jsx11(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx11(Svg2, { viewBox, style: layer, children: /* @__PURE__ */ jsx11(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
|
|
903
|
+
/* @__PURE__ */ jsx11(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs8(Svg2, { viewBox, style: layer, children: [
|
|
904
|
+
/* @__PURE__ */ jsx11(Defs2, { children: blue }),
|
|
905
|
+
/* @__PURE__ */ jsxs8(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
|
|
816
906
|
dot(KRIZAKA.node),
|
|
817
907
|
dot(KRIZAKA.core)
|
|
818
908
|
] })
|
|
@@ -821,12 +911,12 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
821
911
|
}
|
|
822
912
|
|
|
823
913
|
// src/native/mascot-state.tsx
|
|
824
|
-
import * as
|
|
825
|
-
import { AccessibilityInfo as
|
|
914
|
+
import * as React9 from "react";
|
|
915
|
+
import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated7, Easing as Easing4, StyleSheet as StyleSheet10, View as View9 } from "react-native";
|
|
826
916
|
|
|
827
917
|
// src/native/mascots.tsx
|
|
828
|
-
import { useEffect as
|
|
829
|
-
import { AccessibilityInfo as
|
|
918
|
+
import { useEffect as useEffect6, useState as useState8 } from "react";
|
|
919
|
+
import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated6, Easing as Easing3, View as View8 } from "react-native";
|
|
830
920
|
import Svg3, { Circle as Circle2, Defs as Defs3, Ellipse, G, LinearGradient as LinearGradient3, Path as Path2, Rect as Rect2, Stop as Stop3 } from "react-native-svg";
|
|
831
921
|
|
|
832
922
|
// src/mascots/geometry.ts
|
|
@@ -928,6 +1018,26 @@ var BIRDS = {
|
|
|
928
1018
|
details: ["M43 40 C42 28 51 22 60 22 C69 22 78 28 77 40 C76 50 68 55 60 55 C52 55 44 50 43 40 Z"],
|
|
929
1019
|
beak: "M55 44 C55 40 65 40 65 44 C65 50 62 54 60 55 C58 54 55 50 55 44 Z",
|
|
930
1020
|
eyes: { at: [[51, 36], [69, 36]], white: 4.6, pupil: 2.4 }
|
|
1021
|
+
},
|
|
1022
|
+
/**
|
|
1023
|
+
* The crane — the one that listens: posed, unhurried, drawn in one line. A tall wader seen in profile, standing still
|
|
1024
|
+
* on two straight legs, the neck a single stroke up to a small head with its crown (the detail colour) and a long,
|
|
1025
|
+
* straight beak; the folded wings low on its back. The flamingo bends and answers; the crane stands and listens.
|
|
1026
|
+
*/
|
|
1027
|
+
crane: {
|
|
1028
|
+
shadow: [62, 110, 20, 3],
|
|
1029
|
+
legs: ["M56 87 L55 108 M51 108 L59 108", "M67 87 L68 108 M64 108 L73 108"],
|
|
1030
|
+
body: "M40 66 C38 54 84 54 86 68 C88 82 76 88 62 88 C48 88 40 80 40 66 Z",
|
|
1031
|
+
belly: "M48 70 C48 62 78 62 79 70 C80 79 72 84 63 84 C54 84 48 79 48 70 Z",
|
|
1032
|
+
wings: [
|
|
1033
|
+
{ d: "M44 62 C33 68 35 82 49 83 C45 76 45 69 44 62 Z", pivot: [44, 62] },
|
|
1034
|
+
{ d: "M82 62 C93 67 96 82 80 84 C83 76 83 69 82 62 Z", pivot: [82, 62] }
|
|
1035
|
+
],
|
|
1036
|
+
neck: { d: "M52 62 C48 47 52 37 48 26", width: 6 },
|
|
1037
|
+
head: { cx: 47, cy: 21, r: 8.5 },
|
|
1038
|
+
details: ["M41 16.5 C42 11 52 11 53 16.5 C50 14.6 44 14.6 41 16.5 Z"],
|
|
1039
|
+
beak: "M40.5 18.5 L19 22.5 L40.5 25.5 Z",
|
|
1040
|
+
eyes: { at: [[45.5, 19.5]], white: 2.8, pupil: 1.6 }
|
|
931
1041
|
}
|
|
932
1042
|
};
|
|
933
1043
|
var MOOD_PARTS = {
|
|
@@ -956,24 +1066,26 @@ var OWN_PALETTES = {
|
|
|
956
1066
|
duck: { from: "#f43f5e", to: "#be123c", wing: "#db2777", detail: "#9f1239", beak: "#fbbf24", eye: "#1f2937" },
|
|
957
1067
|
flamingo: { from: "#f9a8d4", to: "#db2777", wing: "#ec4899", detail: "#be185d", beak: "#fbbf24", eye: "#1f2937" },
|
|
958
1068
|
pigeon: { from: "#22d3ee", to: "#6366f1", wing: "#a855f7", detail: "#4338ca", beak: "#f59e0b", eye: "#1f2937" },
|
|
959
|
-
lovebird: { from: "#6ee7b7", to: "#059669", wing: "#047857", detail: "#fb7185", beak: "#f97316", eye: "#1f2937" }
|
|
1069
|
+
lovebird: { from: "#6ee7b7", to: "#059669", wing: "#047857", detail: "#fb7185", beak: "#f97316", eye: "#1f2937" },
|
|
1070
|
+
// The sandhill crane (grue du Canada): sand-grey plumage, its red crown, dark legs and beak.
|
|
1071
|
+
crane: { from: "#ebe3d6", to: "#9c8f80", wing: "#7d7266", detail: "#dc2626", beak: "#44403c", eye: "#1f2937" }
|
|
960
1072
|
};
|
|
961
1073
|
var LIGHT = "#ffffff";
|
|
962
1074
|
var SHADE = "#000000";
|
|
963
1075
|
var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
|
|
964
1076
|
|
|
965
1077
|
// src/native/mascots.tsx
|
|
966
|
-
import { jsx as
|
|
1078
|
+
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
967
1079
|
function useBob(animated) {
|
|
968
|
-
const [y] =
|
|
969
|
-
|
|
1080
|
+
const [y] = useState8(() => new Animated6.Value(0));
|
|
1081
|
+
useEffect6(() => {
|
|
970
1082
|
if (!animated) return;
|
|
971
1083
|
let loop;
|
|
972
1084
|
let cancelled = false;
|
|
973
|
-
void
|
|
1085
|
+
void AccessibilityInfo4.isReduceMotionEnabled().then((reduce) => {
|
|
974
1086
|
if (reduce || cancelled) return;
|
|
975
|
-
const step = (toValue) =>
|
|
976
|
-
loop =
|
|
1087
|
+
const step = (toValue) => Animated6.timing(y, { toValue, duration: 1800, easing: Easing3.inOut(Easing3.ease), useNativeDriver: true });
|
|
1088
|
+
loop = Animated6.loop(Animated6.sequence([step(-2.5), step(0)]));
|
|
977
1089
|
loop.start();
|
|
978
1090
|
});
|
|
979
1091
|
return () => {
|
|
@@ -997,62 +1109,62 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone2 = "brand", size =
|
|
|
997
1109
|
const look3 = mood === "thinking" ? 1.4 : 0;
|
|
998
1110
|
const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
|
|
999
1111
|
const [wl, wr] = g.wings;
|
|
1000
|
-
return /* @__PURE__ */
|
|
1001
|
-
/* @__PURE__ */
|
|
1002
|
-
/* @__PURE__ */
|
|
1003
|
-
/* @__PURE__ */
|
|
1112
|
+
return /* @__PURE__ */ jsx12(View8, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx12(Animated6.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs9(Svg3, { width: size, height: size, viewBox: "0 0 120 120", children: [
|
|
1113
|
+
/* @__PURE__ */ jsx12(Defs3, { children: /* @__PURE__ */ jsxs9(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
1114
|
+
/* @__PURE__ */ jsx12(Stop3, { offset: "0%", stopColor: p.from }),
|
|
1115
|
+
/* @__PURE__ */ jsx12(Stop3, { offset: "100%", stopColor: p.to })
|
|
1004
1116
|
] }) }),
|
|
1005
|
-
/* @__PURE__ */
|
|
1006
|
-
mood === "empty" && /* @__PURE__ */
|
|
1007
|
-
g.legs.map((d) => /* @__PURE__ */
|
|
1008
|
-
g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */
|
|
1009
|
-
g.parcel?.map((d, i) => /* @__PURE__ */
|
|
1010
|
-
/* @__PURE__ */
|
|
1011
|
-
/* @__PURE__ */
|
|
1117
|
+
/* @__PURE__ */ jsx12(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
|
|
1118
|
+
mood === "empty" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
|
|
1119
|
+
g.legs.map((d) => /* @__PURE__ */ jsx12(Path2, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
|
|
1120
|
+
g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx12(Path2, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx12(Path2, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
|
|
1121
|
+
g.parcel?.map((d, i) => /* @__PURE__ */ jsx12(Path2, { d, fill: PARCEL[i], ...line }, d)),
|
|
1122
|
+
/* @__PURE__ */ jsx12(Path2, { d: g.body, fill: body, ...line }),
|
|
1123
|
+
/* @__PURE__ */ jsx12(Path2, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
|
|
1012
1124
|
[wl, wr].map((w, i) => {
|
|
1013
1125
|
const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
|
|
1014
|
-
return /* @__PURE__ */
|
|
1015
|
-
/* @__PURE__ */
|
|
1016
|
-
/* @__PURE__ */
|
|
1126
|
+
return /* @__PURE__ */ jsxs9(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
|
|
1127
|
+
/* @__PURE__ */ jsx12(Path2, { d: w.d, fill: p.wing, ...line }),
|
|
1128
|
+
/* @__PURE__ */ jsx12(Path2, { d: w.d, fill: SHADE, opacity: 0.16 })
|
|
1017
1129
|
] }, i);
|
|
1018
1130
|
}),
|
|
1019
|
-
g.neck && /* @__PURE__ */
|
|
1020
|
-
g.head.r > 0 && /* @__PURE__ */
|
|
1021
|
-
g.details.map((d) => /* @__PURE__ */
|
|
1022
|
-
g.visor && /* @__PURE__ */
|
|
1131
|
+
g.neck && /* @__PURE__ */ jsx12(Path2, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
|
|
1132
|
+
g.head.r > 0 && /* @__PURE__ */ jsx12(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
|
|
1133
|
+
g.details.map((d) => /* @__PURE__ */ jsx12(Path2, { d, fill: p.detail, ...line }, d)),
|
|
1134
|
+
g.visor && /* @__PURE__ */ jsx12(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
|
|
1023
1135
|
g.eyes.at.map(
|
|
1024
|
-
(at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */
|
|
1025
|
-
/* @__PURE__ */
|
|
1026
|
-
/* @__PURE__ */
|
|
1027
|
-
/* @__PURE__ */
|
|
1028
|
-
] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */
|
|
1029
|
-
g.eyes.white > 0 && /* @__PURE__ */
|
|
1030
|
-
/* @__PURE__ */
|
|
1136
|
+
(at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs9(G, { children: [
|
|
1137
|
+
/* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
1138
|
+
/* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
|
|
1139
|
+
/* @__PURE__ */ jsx12(Path2, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
|
|
1140
|
+
] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx12(Path2, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs9(G, { children: [
|
|
1141
|
+
g.eyes.white > 0 && /* @__PURE__ */ jsx12(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
1142
|
+
/* @__PURE__ */ jsx12(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
|
|
1031
1143
|
] }, i)
|
|
1032
1144
|
),
|
|
1033
|
-
g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */
|
|
1034
|
-
mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */
|
|
1035
|
-
/* @__PURE__ */
|
|
1036
|
-
mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */
|
|
1037
|
-
(mood === "success" || mood === "error") && /* @__PURE__ */
|
|
1038
|
-
mood === "success" && /* @__PURE__ */
|
|
1039
|
-
mood === "error" && /* @__PURE__ */
|
|
1040
|
-
mood === "error" && /* @__PURE__ */
|
|
1145
|
+
g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx12(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
|
|
1146
|
+
mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx12(Path2, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
|
|
1147
|
+
/* @__PURE__ */ jsx12(Path2, { d: g.beak, fill: p.beak, ...line }),
|
|
1148
|
+
mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx12(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
|
|
1149
|
+
(mood === "success" || mood === "error") && /* @__PURE__ */ jsx12(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
|
|
1150
|
+
mood === "success" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
|
|
1151
|
+
mood === "error" && /* @__PURE__ */ jsx12(Path2, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
|
|
1152
|
+
mood === "error" && /* @__PURE__ */ jsx12(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
|
|
1041
1153
|
] }) }) });
|
|
1042
1154
|
}
|
|
1043
1155
|
|
|
1044
1156
|
// src/native/mascot-state.tsx
|
|
1045
|
-
import { jsx as
|
|
1157
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1046
1158
|
var SIZE = { sm: 64, md: 96, lg: 128 };
|
|
1047
1159
|
function useArrival(animated) {
|
|
1048
|
-
const [value] =
|
|
1049
|
-
|
|
1160
|
+
const [value] = React9.useState(() => new Animated7.Value(animated ? 0 : 1));
|
|
1161
|
+
React9.useEffect(() => {
|
|
1050
1162
|
if (!animated) return;
|
|
1051
1163
|
let cancelled = false;
|
|
1052
|
-
void
|
|
1164
|
+
void AccessibilityInfo5.isReduceMotionEnabled().then((reduce) => {
|
|
1053
1165
|
if (cancelled) return;
|
|
1054
1166
|
if (reduce) value.setValue(1);
|
|
1055
|
-
else
|
|
1167
|
+
else Animated7.timing(value, { toValue: 1, duration: 420, easing: Easing4.out(Easing4.cubic), useNativeDriver: true }).start();
|
|
1056
1168
|
});
|
|
1057
1169
|
return () => {
|
|
1058
1170
|
cancelled = true;
|
|
@@ -1063,30 +1175,30 @@ function useArrival(animated) {
|
|
|
1063
1175
|
function MascotState({ bird = "owl", mood = "empty", title, description, action, size = "md", layout = "stacked", tone: tone2, animated = true, style, ...props }) {
|
|
1064
1176
|
const opacity = useArrival(animated);
|
|
1065
1177
|
const inline = layout === "inline";
|
|
1066
|
-
return /* @__PURE__ */
|
|
1067
|
-
|
|
1178
|
+
return /* @__PURE__ */ jsxs10(
|
|
1179
|
+
Animated7.View,
|
|
1068
1180
|
{
|
|
1069
1181
|
role: mood === "error" ? "alert" : "status",
|
|
1070
1182
|
accessibilityLiveRegion: mood === "error" ? "assertive" : "polite",
|
|
1071
1183
|
"aria-busy": mood === "thinking" ? true : void 0,
|
|
1072
1184
|
...props,
|
|
1073
|
-
style: [inline ?
|
|
1185
|
+
style: [inline ? styles10.inline : styles10.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
|
|
1074
1186
|
children: [
|
|
1075
|
-
/* @__PURE__ */
|
|
1076
|
-
/* @__PURE__ */
|
|
1077
|
-
/* @__PURE__ */
|
|
1078
|
-
description ? /* @__PURE__ */
|
|
1079
|
-
action ? /* @__PURE__ */
|
|
1187
|
+
/* @__PURE__ */ jsx13(Mascot, { bird, mood, tone: tone2, size: SIZE[size], animated }),
|
|
1188
|
+
/* @__PURE__ */ jsxs10(View9, { style: inline ? styles10.wordsInline : styles10.words, children: [
|
|
1189
|
+
/* @__PURE__ */ jsx13(Txt, { variant: "label", role: "heading", style: inline ? null : styles10.center, children: title }),
|
|
1190
|
+
description ? /* @__PURE__ */ jsx13(Txt, { tone: "secondary", style: inline ? null : styles10.center, children: description }) : null,
|
|
1191
|
+
action ? /* @__PURE__ */ jsx13(View9, { style: [styles10.action, inline ? null : styles10.actionCentred], children: action }) : null
|
|
1080
1192
|
] })
|
|
1081
1193
|
]
|
|
1082
1194
|
}
|
|
1083
1195
|
);
|
|
1084
1196
|
}
|
|
1085
|
-
var ErrorState = (props) => /* @__PURE__ */
|
|
1086
|
-
var SuccessState = (props) => /* @__PURE__ */
|
|
1087
|
-
var LoadingState = (props) => /* @__PURE__ */
|
|
1088
|
-
var WelcomeState = (props) => /* @__PURE__ */
|
|
1089
|
-
var
|
|
1197
|
+
var ErrorState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "error", ...props });
|
|
1198
|
+
var SuccessState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "success", ...props });
|
|
1199
|
+
var LoadingState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "thinking", ...props });
|
|
1200
|
+
var WelcomeState = (props) => /* @__PURE__ */ jsx13(MascotState, { mood: "welcome", ...props });
|
|
1201
|
+
var styles10 = StyleSheet10.create({
|
|
1090
1202
|
stacked: { alignItems: "center", justifyContent: "center", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },
|
|
1091
1203
|
inline: { flexDirection: "row", alignItems: "center", gap: 16 },
|
|
1092
1204
|
words: { alignItems: "center", gap: 6 },
|
|
@@ -1097,7 +1209,7 @@ var styles9 = StyleSheet9.create({
|
|
|
1097
1209
|
});
|
|
1098
1210
|
|
|
1099
1211
|
// src/native/OrazakaMark.tsx
|
|
1100
|
-
import { View as
|
|
1212
|
+
import { View as View10 } from "react-native";
|
|
1101
1213
|
import Svg4, { Circle as Circle3, Defs as Defs4, LinearGradient as LinearGradient4, Path as Path3, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
|
|
1102
1214
|
|
|
1103
1215
|
// src/marks/orazaka-geometry.ts
|
|
@@ -1127,40 +1239,40 @@ var ORAZAKA = {
|
|
|
1127
1239
|
};
|
|
1128
1240
|
|
|
1129
1241
|
// src/native/OrazakaMark.tsx
|
|
1130
|
-
import { jsx as
|
|
1242
|
+
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1131
1243
|
function OrazakaMark({ size = 48, animated = true, title, neutral }) {
|
|
1132
1244
|
const { theme } = useTheme();
|
|
1133
|
-
const { Animated:
|
|
1245
|
+
const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
1134
1246
|
const id = useSvgId("ozm");
|
|
1135
1247
|
const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
|
|
1136
1248
|
const stroke = neutral ?? theme.textMuted;
|
|
1137
|
-
const gradient = /* @__PURE__ */
|
|
1249
|
+
const gradient = /* @__PURE__ */ jsx14(LinearGradient4, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: ORAZAKA.gradient.x1, y1: ORAZAKA.gradient.y1, x2: ORAZAKA.gradient.x2, y2: ORAZAKA.gradient.y2, children: ORAZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx14(Stop4, { offset, stopColor: color }, offset)) });
|
|
1138
1250
|
const fill = `url(#${id}a)`;
|
|
1139
|
-
return /* @__PURE__ */
|
|
1140
|
-
/* @__PURE__ */
|
|
1141
|
-
/* @__PURE__ */
|
|
1142
|
-
/* @__PURE__ */
|
|
1143
|
-
/* @__PURE__ */
|
|
1251
|
+
return /* @__PURE__ */ jsxs11(View10, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
1252
|
+
/* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
|
|
1253
|
+
/* @__PURE__ */ jsx14(Defs4, { children: /* @__PURE__ */ jsxs11(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
1254
|
+
/* @__PURE__ */ jsx14(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
|
|
1255
|
+
/* @__PURE__ */ jsx14(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
|
|
1144
1256
|
] }) }),
|
|
1145
|
-
size >= 48 ? /* @__PURE__ */
|
|
1146
|
-
/* @__PURE__ */
|
|
1147
|
-
/* @__PURE__ */
|
|
1257
|
+
size >= 48 ? /* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
1258
|
+
/* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
1259
|
+
/* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
|
|
1148
1260
|
] }),
|
|
1149
|
-
/* @__PURE__ */
|
|
1150
|
-
/* @__PURE__ */
|
|
1151
|
-
ORAZAKA.shards.map((d) => /* @__PURE__ */
|
|
1261
|
+
/* @__PURE__ */ jsx14(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
|
|
1262
|
+
/* @__PURE__ */ jsx14(Defs4, { children: gradient }),
|
|
1263
|
+
ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx14(Path3, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
|
|
1152
1264
|
] }) }),
|
|
1153
|
-
/* @__PURE__ */
|
|
1154
|
-
/* @__PURE__ */
|
|
1155
|
-
/* @__PURE__ */
|
|
1156
|
-
/* @__PURE__ */
|
|
1265
|
+
/* @__PURE__ */ jsx14(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs11(Svg4, { viewBox, style: layer, children: [
|
|
1266
|
+
/* @__PURE__ */ jsx14(Defs4, { children: gradient }),
|
|
1267
|
+
/* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
|
|
1268
|
+
/* @__PURE__ */ jsx14(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
|
|
1157
1269
|
] }) })
|
|
1158
1270
|
] });
|
|
1159
1271
|
}
|
|
1160
1272
|
|
|
1161
1273
|
// src/native/OrochiaMark.tsx
|
|
1162
|
-
import { useEffect as
|
|
1163
|
-
import { AccessibilityInfo as
|
|
1274
|
+
import { useEffect as useEffect8, useState as useState10 } from "react";
|
|
1275
|
+
import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated8, Easing as Easing5, View as View11 } from "react-native";
|
|
1164
1276
|
import Svg5, { Circle as Circle4, Defs as Defs5, Ellipse as Ellipse2, G as Group2, LinearGradient as LinearGradient5, Path as Path4, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
|
|
1165
1277
|
|
|
1166
1278
|
// src/marks/orochia-geometry.ts
|
|
@@ -1188,25 +1300,25 @@ var OROCHIA = {
|
|
|
1188
1300
|
};
|
|
1189
1301
|
|
|
1190
1302
|
// src/native/OrochiaMark.tsx
|
|
1191
|
-
import { jsx as
|
|
1303
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1192
1304
|
var CENTER = OROCHIA.offset + 180;
|
|
1193
1305
|
function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }) {
|
|
1194
1306
|
const { theme } = useTheme();
|
|
1195
1307
|
const neutral = neutralProp ?? theme.textMuted;
|
|
1196
|
-
const [spin] =
|
|
1197
|
-
const [pulse] =
|
|
1198
|
-
|
|
1308
|
+
const [spin] = useState10(() => new Animated8.Value(0));
|
|
1309
|
+
const [pulse] = useState10(() => new Animated8.Value(0));
|
|
1310
|
+
useEffect8(() => {
|
|
1199
1311
|
if (!animated) return;
|
|
1200
1312
|
let loops = [];
|
|
1201
1313
|
let cancelled = false;
|
|
1202
|
-
void
|
|
1314
|
+
void AccessibilityInfo6.isReduceMotionEnabled().then((reduce) => {
|
|
1203
1315
|
if (reduce || cancelled) return;
|
|
1204
1316
|
loops = [
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1317
|
+
Animated8.loop(Animated8.timing(spin, { toValue: 1, duration: 3e4, easing: Easing5.linear, useNativeDriver: true })),
|
|
1318
|
+
Animated8.loop(
|
|
1319
|
+
Animated8.sequence([
|
|
1320
|
+
Animated8.timing(pulse, { toValue: 1, duration: 1600, easing: Easing5.inOut(Easing5.ease), useNativeDriver: true }),
|
|
1321
|
+
Animated8.timing(pulse, { toValue: 0, duration: 1600, easing: Easing5.inOut(Easing5.ease), useNativeDriver: true })
|
|
1210
1322
|
])
|
|
1211
1323
|
)
|
|
1212
1324
|
];
|
|
@@ -1220,44 +1332,44 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
|
|
|
1220
1332
|
const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
|
|
1221
1333
|
const layer = { position: "absolute", width: size, height: size };
|
|
1222
1334
|
const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
|
|
1223
|
-
const bodyGradient = /* @__PURE__ */
|
|
1224
|
-
return /* @__PURE__ */
|
|
1225
|
-
/* @__PURE__ */
|
|
1226
|
-
/* @__PURE__ */
|
|
1227
|
-
/* @__PURE__ */
|
|
1228
|
-
/* @__PURE__ */
|
|
1335
|
+
const bodyGradient = /* @__PURE__ */ jsx15(LinearGradient5, { id: "body", gradientUnits: "userSpaceOnUse", x1: OROCHIA.body.x1 + OROCHIA.offset, y1: OROCHIA.body.y1 + OROCHIA.offset, x2: OROCHIA.body.x2 + OROCHIA.offset, y2: OROCHIA.body.y2 + OROCHIA.offset, children: OROCHIA.body.stops.map(([offset, color]) => /* @__PURE__ */ jsx15(Stop5, { offset, stopColor: color }, offset)) });
|
|
1336
|
+
return /* @__PURE__ */ jsxs12(View11, { style: { width: size, height: size }, ...a11y, children: [
|
|
1337
|
+
/* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
|
|
1338
|
+
/* @__PURE__ */ jsx15(Defs5, { children: /* @__PURE__ */ jsxs12(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
1339
|
+
/* @__PURE__ */ jsx15(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
|
|
1340
|
+
/* @__PURE__ */ jsx15(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
|
|
1229
1341
|
] }) }),
|
|
1230
|
-
/* @__PURE__ */
|
|
1231
|
-
/* @__PURE__ */
|
|
1342
|
+
/* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
|
|
1343
|
+
/* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
|
|
1232
1344
|
] }),
|
|
1233
|
-
/* @__PURE__ */
|
|
1234
|
-
/* @__PURE__ */
|
|
1235
|
-
/* @__PURE__ */
|
|
1236
|
-
/* @__PURE__ */
|
|
1237
|
-
/* @__PURE__ */
|
|
1238
|
-
/* @__PURE__ */
|
|
1239
|
-
/* @__PURE__ */
|
|
1240
|
-
/* @__PURE__ */
|
|
1241
|
-
/* @__PURE__ */
|
|
1242
|
-
/* @__PURE__ */
|
|
1345
|
+
/* @__PURE__ */ jsx15(Animated8.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx15(Svg5, { viewBox, style: layer, children: /* @__PURE__ */ jsx15(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
|
|
1346
|
+
/* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
|
|
1347
|
+
/* @__PURE__ */ jsx15(Defs5, { children: bodyGradient }),
|
|
1348
|
+
/* @__PURE__ */ jsxs12(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
|
|
1349
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
|
|
1350
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
|
|
1351
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
|
|
1352
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
|
|
1353
|
+
/* @__PURE__ */ jsx15(Ellipse2, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
|
|
1354
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
|
|
1243
1355
|
] })
|
|
1244
1356
|
] }),
|
|
1245
|
-
/* @__PURE__ */
|
|
1246
|
-
/* @__PURE__ */
|
|
1247
|
-
/* @__PURE__ */
|
|
1248
|
-
/* @__PURE__ */
|
|
1249
|
-
/* @__PURE__ */
|
|
1357
|
+
/* @__PURE__ */ jsx15(Animated8.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs12(Svg5, { viewBox, style: layer, children: [
|
|
1358
|
+
/* @__PURE__ */ jsx15(Defs5, { children: /* @__PURE__ */ jsx15(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx15(Stop5, { offset, stopColor: color }, offset)) }) }),
|
|
1359
|
+
/* @__PURE__ */ jsxs12(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
|
|
1360
|
+
/* @__PURE__ */ jsx15(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
|
|
1361
|
+
/* @__PURE__ */ jsx15(Path4, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
|
|
1250
1362
|
] })
|
|
1251
1363
|
] }) })
|
|
1252
1364
|
] });
|
|
1253
1365
|
}
|
|
1254
1366
|
|
|
1255
1367
|
// src/native/pagination.tsx
|
|
1256
|
-
import { Pressable as Pressable4, StyleSheet as
|
|
1368
|
+
import { Pressable as Pressable4, StyleSheet as StyleSheet11, Text as Text6, View as View12 } from "react-native";
|
|
1257
1369
|
import Svg6, { Path as Path5 } from "react-native-svg";
|
|
1258
|
-
import { jsx as
|
|
1370
|
+
import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1259
1371
|
function Chevron({ direction, color }) {
|
|
1260
|
-
return /* @__PURE__ */
|
|
1372
|
+
return /* @__PURE__ */ jsx16(Svg6, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx16(Path5, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
|
|
1261
1373
|
}
|
|
1262
1374
|
function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }) {
|
|
1263
1375
|
const { theme, radius: radius3 } = useTheme();
|
|
@@ -1266,7 +1378,7 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
1266
1378
|
const current = Math.min(Math.max(1, page), count);
|
|
1267
1379
|
const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));
|
|
1268
1380
|
const canNext = !disabled && (paged ? current < count : Boolean(hasNext));
|
|
1269
|
-
const button = (direction, enabled, onPress, label) => /* @__PURE__ */
|
|
1381
|
+
const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx16(
|
|
1270
1382
|
Pressable4,
|
|
1271
1383
|
{
|
|
1272
1384
|
role: "button",
|
|
@@ -1276,50 +1388,125 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
1276
1388
|
hitSlop: 6,
|
|
1277
1389
|
onPress,
|
|
1278
1390
|
style: ({ pressed }) => [
|
|
1279
|
-
|
|
1391
|
+
styles11.button,
|
|
1280
1392
|
{ borderRadius: radius3.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? pressed ? 0.8 : 1 : 0.4 }
|
|
1281
1393
|
],
|
|
1282
|
-
children: /* @__PURE__ */
|
|
1394
|
+
children: /* @__PURE__ */ jsx16(Chevron, { direction, color: theme.textPrimary })
|
|
1283
1395
|
}
|
|
1284
1396
|
);
|
|
1285
1397
|
const text = status ?? (paged ? labels.compact(current, count) : null);
|
|
1286
|
-
return /* @__PURE__ */
|
|
1398
|
+
return /* @__PURE__ */ jsxs13(View12, { role: "navigation", style: [styles11.row, style], children: [
|
|
1287
1399
|
button("left", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous),
|
|
1288
|
-
text ? /* @__PURE__ */
|
|
1400
|
+
text ? /* @__PURE__ */ jsx16(Text6, { "aria-live": "polite", style: [styles11.status, { color: theme.textSecondary }], children: text }) : null,
|
|
1289
1401
|
button("right", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)
|
|
1290
1402
|
] });
|
|
1291
1403
|
}
|
|
1292
|
-
var
|
|
1404
|
+
var styles11 = StyleSheet11.create({
|
|
1293
1405
|
row: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 12 },
|
|
1294
|
-
button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth:
|
|
1406
|
+
button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet11.hairlineWidth },
|
|
1295
1407
|
status: { fontSize: 13, fontWeight: "600", fontVariant: ["tabular-nums"] }
|
|
1296
1408
|
});
|
|
1297
1409
|
|
|
1298
|
-
// src/native/
|
|
1299
|
-
import {
|
|
1410
|
+
// src/native/phoenix.tsx
|
|
1411
|
+
import { useEffect as useEffect9, useState as useState11 } from "react";
|
|
1412
|
+
import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated9, Easing as Easing6, View as View13 } from "react-native";
|
|
1300
1413
|
import Svg7, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient6, Path as Path6, RadialGradient as RadialGradient4, Stop as Stop6 } from "react-native-svg";
|
|
1301
1414
|
|
|
1415
|
+
// src/mascots/phoenix-geometry.ts
|
|
1416
|
+
var PHOENIX = {
|
|
1417
|
+
wingL: "M56 62 C40 40 22 36 8 40 C22 46 30 56 34 70 C40 64 48 62 56 62 Z",
|
|
1418
|
+
wingR: "M64 62 C80 40 98 36 112 40 C98 46 90 56 86 70 C80 64 72 62 64 62 Z",
|
|
1419
|
+
tailL: "M52 66 C46 82 40 94 30 104 C44 98 52 90 58 78 Z",
|
|
1420
|
+
tailR: "M68 66 C74 82 80 94 90 104 C76 98 68 90 62 78 Z",
|
|
1421
|
+
body: "M60 34 L68 60 L60 82 L52 60 Z",
|
|
1422
|
+
crest: "M60 34 L56 24 M60 34 L64 24"
|
|
1423
|
+
};
|
|
1424
|
+
var PHOENIX_PALETTES = {
|
|
1425
|
+
own: {
|
|
1426
|
+
left: ["#c084fc", "#7c3aed"],
|
|
1427
|
+
right: ["#fde68a", "#f59e0b"],
|
|
1428
|
+
core: ["#fff7ed", "#fb923c"],
|
|
1429
|
+
body: "#1f1530",
|
|
1430
|
+
edge: "#e9d5ff",
|
|
1431
|
+
crest: "#fbbf24"
|
|
1432
|
+
}
|
|
1433
|
+
};
|
|
1434
|
+
|
|
1435
|
+
// src/native/phoenix.tsx
|
|
1436
|
+
import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1437
|
+
function useFloat(animated) {
|
|
1438
|
+
const [y] = useState11(() => new Animated9.Value(0));
|
|
1439
|
+
useEffect9(() => {
|
|
1440
|
+
if (!animated) return;
|
|
1441
|
+
let loop;
|
|
1442
|
+
let cancelled = false;
|
|
1443
|
+
void AccessibilityInfo7.isReduceMotionEnabled().then((reduce) => {
|
|
1444
|
+
if (reduce || cancelled) return;
|
|
1445
|
+
const step = (toValue) => Animated9.timing(y, { toValue, duration: 2500, easing: Easing6.inOut(Easing6.ease), useNativeDriver: true });
|
|
1446
|
+
loop = Animated9.loop(Animated9.sequence([step(-6), step(0)]));
|
|
1447
|
+
loop.start();
|
|
1448
|
+
});
|
|
1449
|
+
return () => {
|
|
1450
|
+
cancelled = true;
|
|
1451
|
+
loop?.stop();
|
|
1452
|
+
};
|
|
1453
|
+
}, [animated, y]);
|
|
1454
|
+
return y;
|
|
1455
|
+
}
|
|
1456
|
+
function Phoenix({ tone: tone2 = "own", size = 120, animated = true, title, style }) {
|
|
1457
|
+
const { theme } = useTheme();
|
|
1458
|
+
const id = useSvgId("kzp");
|
|
1459
|
+
const y = useFloat(animated);
|
|
1460
|
+
const p = tone2 === "brand" ? { left: [theme.accent2, theme.accent], right: [theme.accent, theme.accent2], core: ["#ffffff", theme.accent], body: theme.surface3, edge: theme.borderStrong, crest: theme.accent } : PHOENIX_PALETTES.own;
|
|
1461
|
+
return /* @__PURE__ */ jsx17(View13, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx17(Animated9.View, { style: { transform: [{ translateY: y }] }, children: /* @__PURE__ */ jsxs14(Svg7, { width: size, height: size, viewBox: "0 0 120 120", children: [
|
|
1462
|
+
/* @__PURE__ */ jsxs14(Defs6, { children: [
|
|
1463
|
+
/* @__PURE__ */ jsxs14(LinearGradient6, { id: `${id}l`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
|
|
1464
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.left[0] }),
|
|
1465
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.left[1] })
|
|
1466
|
+
] }),
|
|
1467
|
+
/* @__PURE__ */ jsxs14(LinearGradient6, { id: `${id}r`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
|
|
1468
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.right[0] }),
|
|
1469
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.right[1] })
|
|
1470
|
+
] }),
|
|
1471
|
+
/* @__PURE__ */ jsxs14(RadialGradient4, { id: `${id}c`, children: [
|
|
1472
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "0%", stopColor: p.core[0] }),
|
|
1473
|
+
/* @__PURE__ */ jsx17(Stop6, { offset: "100%", stopColor: p.core[1], stopOpacity: 0 })
|
|
1474
|
+
] })
|
|
1475
|
+
] }),
|
|
1476
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.wingL, fill: `url(#${id}l)` }),
|
|
1477
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.wingR, fill: `url(#${id}r)` }),
|
|
1478
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.tailL, fill: `url(#${id}l)`, opacity: 0.7 }),
|
|
1479
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.tailR, fill: `url(#${id}r)`, opacity: 0.7 }),
|
|
1480
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: 0.5 }),
|
|
1481
|
+
/* @__PURE__ */ jsx17(Circle5, { cx: 60, cy: 58, r: 12, fill: `url(#${id}c)` }),
|
|
1482
|
+
/* @__PURE__ */ jsx17(Circle5, { cx: 60, cy: 58, r: 3.5, fill: "#ffffff" }),
|
|
1483
|
+
/* @__PURE__ */ jsx17(Path6, { d: PHOENIX.crest, stroke: p.crest, strokeWidth: 2, strokeLinecap: "round" })
|
|
1484
|
+
] }) }) });
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
// src/native/YazakiaMark.tsx
|
|
1488
|
+
import React12 from "react";
|
|
1489
|
+
import { View as View14 } from "react-native";
|
|
1490
|
+
import Svg8, { Circle as Circle6, Defs as Defs7, LinearGradient as LinearGradient7, Path as Path7, RadialGradient as RadialGradient5, Stop as Stop7 } from "react-native-svg";
|
|
1491
|
+
|
|
1302
1492
|
// src/marks/yazakia-geometry.ts
|
|
1303
1493
|
var turquoise = marks.yazakia[marks.yazakia.length - 1][1];
|
|
1304
1494
|
var YAZAKIA = {
|
|
1305
1495
|
viewBox: "0 0 400 400",
|
|
1306
1496
|
croppedViewBox: "80 80 240 240",
|
|
1307
1497
|
center: 200,
|
|
1308
|
-
/** The two
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
/** The width of the arms and the stem: the weight of Orochia's body. */
|
|
1313
|
-
stroke: 36,
|
|
1314
|
-
/** The two heads, at the ends of the arms. */
|
|
1315
|
-
heads: [
|
|
1316
|
-
{ cx: 128, cy: 124, r: 28 },
|
|
1317
|
-
{ cx: 272, cy: 124, r: 28 }
|
|
1498
|
+
/** The two voices, left then right: each a bubble (cut around the lens) and its tail. */
|
|
1499
|
+
voices: [
|
|
1500
|
+
{ body: "M191.9 109 A80 80 0 1 0 191.9 259 A87 87 0 0 1 191.9 109 Z", tail: "M98 230 Q104 268 88 294 Q122 288 144 262 L130 200 Z" },
|
|
1501
|
+
{ body: "M208.1 109 A80 80 0 1 1 208.1 259 A87 87 0 0 0 208.1 109 Z", tail: "M302 230 Q296 268 312 294 Q278 288 256 262 L270 200 Z" }
|
|
1318
1502
|
],
|
|
1503
|
+
/** The left voice, a shade deeper: the depth between the two. */
|
|
1504
|
+
shade: { color: "#000", opacity: 0.22 },
|
|
1505
|
+
/** Where the bubbles overlap: the core, lit from above. */
|
|
1506
|
+
lens: { d: "M200 112.6 A80 80 0 0 1 200 255.4 A80 80 0 0 1 200 112.6 Z", y1: 112.6, y2: 255.4 },
|
|
1319
1507
|
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yazakia },
|
|
1320
|
-
/**
|
|
1321
|
-
|
|
1322
|
-
highlight: "#f0fdfa",
|
|
1508
|
+
/** The light on the lens: bright at the top, fading down. */
|
|
1509
|
+
highlight: { color: "#f0fdfa", from: 0.75, to: 0.2 },
|
|
1323
1510
|
/** The pair: two nodes on the orbit, opposite each other, that turn with it. */
|
|
1324
1511
|
pair: { r: 8, at: [[40, 200], [360, 200]] },
|
|
1325
1512
|
glow: { color: turquoise, opacity: 0.16 },
|
|
@@ -1330,58 +1517,210 @@ var YAZAKIA = {
|
|
|
1330
1517
|
};
|
|
1331
1518
|
|
|
1332
1519
|
// src/native/YazakiaMark.tsx
|
|
1333
|
-
import { jsx as
|
|
1520
|
+
import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1334
1521
|
function YazakiaMark({ size = 48, animated = true, title, neutral }) {
|
|
1335
1522
|
const { theme } = useTheme();
|
|
1336
|
-
const { Animated:
|
|
1523
|
+
const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
1337
1524
|
const id = useSvgId("yzm");
|
|
1338
1525
|
const viewBox = size < 48 ? YAZAKIA.croppedViewBox : YAZAKIA.viewBox;
|
|
1339
1526
|
const stroke = neutral ?? theme.textMuted;
|
|
1340
|
-
const gradient = /* @__PURE__ */
|
|
1527
|
+
const gradient = /* @__PURE__ */ jsx18(LinearGradient7, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YAZAKIA.gradient.x1, y1: YAZAKIA.gradient.y1, x2: YAZAKIA.gradient.x2, y2: YAZAKIA.gradient.y2, children: YAZAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx18(Stop7, { offset, stopColor: color }, offset)) });
|
|
1528
|
+
const fill = `url(#${id}a)`;
|
|
1529
|
+
return /* @__PURE__ */ jsxs15(View14, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
1530
|
+
/* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
|
|
1531
|
+
/* @__PURE__ */ jsxs15(Defs7, { children: [
|
|
1532
|
+
/* @__PURE__ */ jsxs15(RadialGradient5, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
1533
|
+
/* @__PURE__ */ jsx18(Stop7, { offset: "0%", stopColor: YAZAKIA.glow.color, stopOpacity: YAZAKIA.glow.opacity }),
|
|
1534
|
+
/* @__PURE__ */ jsx18(Stop7, { offset: "100%", stopColor: YAZAKIA.glow.color, stopOpacity: 0 })
|
|
1535
|
+
] }),
|
|
1536
|
+
gradient
|
|
1537
|
+
] }),
|
|
1538
|
+
size >= 48 ? /* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
1539
|
+
/* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.ring.r, stroke, strokeWidth: YAZAKIA.ring.width, opacity: 0.35, fill: "none" }),
|
|
1540
|
+
YAZAKIA.voices.map((v, i) => /* @__PURE__ */ jsxs15(React12.Fragment, { children: [
|
|
1541
|
+
/* @__PURE__ */ jsx18(Path7, { d: v.body, fill }),
|
|
1542
|
+
/* @__PURE__ */ jsx18(Path7, { d: v.tail, fill }),
|
|
1543
|
+
i === 0 ? /* @__PURE__ */ jsx18(Path7, { d: `${v.body} ${v.tail}`, fill: YAZAKIA.shade.color, opacity: YAZAKIA.shade.opacity }) : null
|
|
1544
|
+
] }, v.body))
|
|
1545
|
+
] }),
|
|
1546
|
+
/* @__PURE__ */ jsx18(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
|
|
1547
|
+
/* @__PURE__ */ jsx18(Defs7, { children: gradient }),
|
|
1548
|
+
/* @__PURE__ */ jsx18(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.orbit.r, stroke, strokeWidth: YAZAKIA.orbit.width, strokeDasharray: YAZAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
1549
|
+
YAZAKIA.pair.at.map(([cx, cy]) => /* @__PURE__ */ jsx18(Circle6, { cx, cy, r: YAZAKIA.pair.r, fill }, cx))
|
|
1550
|
+
] }) }),
|
|
1551
|
+
/* @__PURE__ */ jsx18(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs15(Svg8, { viewBox, style: layer, children: [
|
|
1552
|
+
/* @__PURE__ */ jsxs15(Defs7, { children: [
|
|
1553
|
+
gradient,
|
|
1554
|
+
/* @__PURE__ */ jsxs15(LinearGradient7, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YAZAKIA.lens.y1, x2: 0, y2: YAZAKIA.lens.y2, children: [
|
|
1555
|
+
/* @__PURE__ */ jsx18(Stop7, { offset: "0%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.from }),
|
|
1556
|
+
/* @__PURE__ */ jsx18(Stop7, { offset: "100%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.to })
|
|
1557
|
+
] })
|
|
1558
|
+
] }),
|
|
1559
|
+
/* @__PURE__ */ jsx18(Path7, { d: YAZAKIA.lens.d, fill }),
|
|
1560
|
+
/* @__PURE__ */ jsx18(Path7, { d: YAZAKIA.lens.d, fill: `url(#${id}l)` })
|
|
1561
|
+
] }) })
|
|
1562
|
+
] });
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
// src/native/YororisMark.tsx
|
|
1566
|
+
import { View as View15 } from "react-native";
|
|
1567
|
+
import Svg9, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient8, Path as Path8, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
|
|
1568
|
+
|
|
1569
|
+
// src/marks/yororis-geometry.ts
|
|
1570
|
+
var sand = marks.yororis[0][1];
|
|
1571
|
+
var sage = marks.yororis[marks.yororis.length - 1][1];
|
|
1572
|
+
var YORORIS = {
|
|
1573
|
+
viewBox: "0 0 400 400",
|
|
1574
|
+
croppedViewBox: "80 80 240 240",
|
|
1575
|
+
center: 200,
|
|
1576
|
+
/** The two leaves — open hands, mirrored around x = 200 — filled, rising from the stem. */
|
|
1577
|
+
leaves: [
|
|
1578
|
+
"M200 262 C142 256 104 206 110 122 C138 130 154 152 160 180 C168 218 182 238 204 246 Z",
|
|
1579
|
+
"M200 262 C258 256 296 206 290 122 C262 130 246 152 240 180 C232 218 218 238 196 246 Z"
|
|
1580
|
+
],
|
|
1581
|
+
/** A vein of light along each leaf (dashed, it drifts slowly when animated). */
|
|
1582
|
+
veins: "M122 142 C128 196 156 232 192 248 M278 142 C272 196 244 232 208 248",
|
|
1583
|
+
vein: { color: "#fbf6ea", opacity: 0.45, width: 3, dash: "2 14" },
|
|
1584
|
+
/** The stem, from the junction down. */
|
|
1585
|
+
stem: "M200 244 L200 312",
|
|
1586
|
+
stroke: 30,
|
|
1587
|
+
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },
|
|
1588
|
+
/** The core's warm light: from the mark's sand (below) to a light sand (above). */
|
|
1589
|
+
coreGradient: { stops: [["0%", sand], ["100%", "#e6c993"]] },
|
|
1590
|
+
/** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */
|
|
1591
|
+
core: { cx: 200, cy: 184, r: 32, inner: 11 },
|
|
1592
|
+
highlight: "#fbf6ea",
|
|
1593
|
+
/** The moment: one node on the orbit, that turns with it. */
|
|
1594
|
+
moment: { r: 9, at: [200, 40] },
|
|
1595
|
+
glow: { color: sage, opacity: 0.18 },
|
|
1596
|
+
/** The core's breathing shadow (web), in the core's warm sand. */
|
|
1597
|
+
pulse: { color: sand, low: 0.3, high: 0.6 },
|
|
1598
|
+
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
1599
|
+
ring: { r: 134, width: 1 }
|
|
1600
|
+
};
|
|
1601
|
+
|
|
1602
|
+
// src/native/YororisMark.tsx
|
|
1603
|
+
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1604
|
+
function YororisMark({ size = 48, animated = true, title, neutral }) {
|
|
1605
|
+
const { theme } = useTheme();
|
|
1606
|
+
const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, 36e3);
|
|
1607
|
+
const id = useSvgId("yrm");
|
|
1608
|
+
const viewBox = size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox;
|
|
1609
|
+
const stroke = neutral ?? theme.textMuted;
|
|
1610
|
+
const gradient = /* @__PURE__ */ jsx19(LinearGradient8, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx19(Stop8, { offset, stopColor: color }, offset)) });
|
|
1341
1611
|
const fill = `url(#${id}a)`;
|
|
1342
|
-
return /* @__PURE__ */
|
|
1343
|
-
/* @__PURE__ */
|
|
1344
|
-
/* @__PURE__ */
|
|
1345
|
-
/* @__PURE__ */
|
|
1346
|
-
/* @__PURE__ */
|
|
1347
|
-
/* @__PURE__ */
|
|
1612
|
+
return /* @__PURE__ */ jsxs16(View15, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
1613
|
+
/* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
|
|
1614
|
+
/* @__PURE__ */ jsxs16(Defs8, { children: [
|
|
1615
|
+
/* @__PURE__ */ jsxs16(RadialGradient6, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
1616
|
+
/* @__PURE__ */ jsx19(Stop8, { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
|
|
1617
|
+
/* @__PURE__ */ jsx19(Stop8, { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: 0 })
|
|
1348
1618
|
] }),
|
|
1349
1619
|
gradient
|
|
1350
1620
|
] }),
|
|
1351
|
-
size >= 48 ? /* @__PURE__ */
|
|
1352
|
-
/* @__PURE__ */
|
|
1353
|
-
|
|
1354
|
-
/* @__PURE__ */
|
|
1355
|
-
|
|
1621
|
+
size >= 48 ? /* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
1622
|
+
/* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
|
|
1623
|
+
/* @__PURE__ */ jsx19(Path8, { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" }),
|
|
1624
|
+
YORORIS.leaves.map((d) => /* @__PURE__ */ jsx19(Path8, { d, fill }, d)),
|
|
1625
|
+
/* @__PURE__ */ jsx19(Path8, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
|
|
1356
1626
|
] }),
|
|
1357
|
-
/* @__PURE__ */
|
|
1358
|
-
/* @__PURE__ */
|
|
1359
|
-
/* @__PURE__ */
|
|
1360
|
-
|
|
1627
|
+
/* @__PURE__ */ jsx19(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
|
|
1628
|
+
/* @__PURE__ */ jsx19(Defs8, { children: gradient }),
|
|
1629
|
+
/* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke, strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
1630
|
+
/* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
|
|
1361
1631
|
] }) }),
|
|
1362
|
-
/* @__PURE__ */
|
|
1363
|
-
/* @__PURE__ */
|
|
1364
|
-
/* @__PURE__ */
|
|
1365
|
-
/* @__PURE__ */
|
|
1632
|
+
/* @__PURE__ */ jsx19(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs16(Svg9, { viewBox, style: layer, children: [
|
|
1633
|
+
/* @__PURE__ */ jsx19(Defs8, { children: /* @__PURE__ */ jsx19(LinearGradient8, { id: `${id}c`, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: YORORIS.coreGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx19(Stop8, { offset, stopColor: color }, offset)) }) }),
|
|
1634
|
+
/* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id}c)` }),
|
|
1635
|
+
/* @__PURE__ */ jsx19(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
|
|
1366
1636
|
] }) })
|
|
1367
1637
|
] });
|
|
1368
1638
|
}
|
|
1369
1639
|
|
|
1370
1640
|
// src/native/ProductMark.tsx
|
|
1371
|
-
import { jsx as
|
|
1641
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1372
1642
|
function ProductMark({ id, ...props }) {
|
|
1373
|
-
if (id === "krizaka") return /* @__PURE__ */
|
|
1374
|
-
if (id === "orazaka") return /* @__PURE__ */
|
|
1375
|
-
if (id === "yazakia") return /* @__PURE__ */
|
|
1376
|
-
return /* @__PURE__ */
|
|
1643
|
+
if (id === "krizaka") return /* @__PURE__ */ jsx20(KrizakaMark, { ...props });
|
|
1644
|
+
if (id === "orazaka") return /* @__PURE__ */ jsx20(OrazakaMark, { ...props });
|
|
1645
|
+
if (id === "yazakia") return /* @__PURE__ */ jsx20(YazakiaMark, { ...props });
|
|
1646
|
+
if (id === "yororis") return /* @__PURE__ */ jsx20(YororisMark, { ...props });
|
|
1647
|
+
return /* @__PURE__ */ jsx20(OrochiaMark, { ...props });
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
// src/native/profile-card.tsx
|
|
1651
|
+
import * as React13 from "react";
|
|
1652
|
+
import { Animated as Animated10, StyleSheet as StyleSheet12, View as View16 } from "react-native";
|
|
1653
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1654
|
+
var ratioOf = (value, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));
|
|
1655
|
+
function Bar({ label, ratio, words, animated, delay }) {
|
|
1656
|
+
const { theme } = useTheme();
|
|
1657
|
+
const t = useEntrance(animated, delay, 900);
|
|
1658
|
+
const [width, setWidth] = React13.useState(0);
|
|
1659
|
+
const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });
|
|
1660
|
+
return /* @__PURE__ */ jsx21(
|
|
1661
|
+
View16,
|
|
1662
|
+
{
|
|
1663
|
+
accessible: true,
|
|
1664
|
+
role: "meter",
|
|
1665
|
+
"aria-label": label,
|
|
1666
|
+
"aria-valuemin": 0,
|
|
1667
|
+
"aria-valuemax": 100,
|
|
1668
|
+
"aria-valuenow": Math.round(ratio * 100),
|
|
1669
|
+
"aria-valuetext": words,
|
|
1670
|
+
onLayout: (e) => setWidth(e.nativeEvent.layout.width),
|
|
1671
|
+
style: [styles12.track, { backgroundColor: theme.surface3 }],
|
|
1672
|
+
children: /* @__PURE__ */ jsx21(Animated10.View, { style: [styles12.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
|
|
1673
|
+
}
|
|
1674
|
+
);
|
|
1377
1675
|
}
|
|
1676
|
+
function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }) {
|
|
1677
|
+
const { theme, radius: radius3 } = useTheme();
|
|
1678
|
+
const ratio = ratioOf(value);
|
|
1679
|
+
return /* @__PURE__ */ jsxs17(View16, { ...props, style: [styles12.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
|
|
1680
|
+
/* @__PURE__ */ jsx21(View16, { "aria-hidden": true, style: [styles12.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }], children: visual }),
|
|
1681
|
+
/* @__PURE__ */ jsxs17(View16, { style: styles12.head, children: [
|
|
1682
|
+
/* @__PURE__ */ jsx21(Txt, { variant: "title", style: styles12.name, children: name }),
|
|
1683
|
+
statLabel ? /* @__PURE__ */ jsxs17(Txt, { variant: "caption", tone: "secondary", children: [
|
|
1684
|
+
statLabel,
|
|
1685
|
+
" ",
|
|
1686
|
+
/* @__PURE__ */ jsx21(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
|
|
1687
|
+
] }) : null
|
|
1688
|
+
] }),
|
|
1689
|
+
statLabel ? /* @__PURE__ */ jsx21(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
|
|
1690
|
+
stats?.map((s, i) => {
|
|
1691
|
+
const r = ratioOf(s.value, s.max);
|
|
1692
|
+
const words = s.valueText ?? `${Math.round(r * 100)} %`;
|
|
1693
|
+
return /* @__PURE__ */ jsxs17(View16, { style: styles12.stat, children: [
|
|
1694
|
+
/* @__PURE__ */ jsxs17(View16, { "aria-hidden": true, style: styles12.statHead, children: [
|
|
1695
|
+
/* @__PURE__ */ jsx21(Txt, { variant: "caption", tone: "secondary", children: s.label }),
|
|
1696
|
+
/* @__PURE__ */ jsx21(Txt, { variant: "caption", children: words })
|
|
1697
|
+
] }),
|
|
1698
|
+
/* @__PURE__ */ jsx21(Bar, { label: s.label, ratio: r, words, animated, delay: 320 + i * 120 })
|
|
1699
|
+
] }, s.label);
|
|
1700
|
+
}),
|
|
1701
|
+
caption ? /* @__PURE__ */ jsx21(Txt, { variant: "caption", tone: "secondary", style: styles12.caption, children: caption }) : null,
|
|
1702
|
+
children ? /* @__PURE__ */ jsx21(View16, { style: styles12.extra, children }) : null
|
|
1703
|
+
] });
|
|
1704
|
+
}
|
|
1705
|
+
var styles12 = StyleSheet12.create({
|
|
1706
|
+
root: { alignItems: "center", gap: 12, padding: 20, borderWidth: StyleSheet12.hairlineWidth },
|
|
1707
|
+
disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: "center", justifyContent: "center", overflow: "hidden" },
|
|
1708
|
+
head: { flexDirection: "row", alignSelf: "stretch", alignItems: "center", justifyContent: "space-between", gap: 8 },
|
|
1709
|
+
name: { flexShrink: 1, fontSize: 17 },
|
|
1710
|
+
track: { alignSelf: "stretch", height: 6, borderRadius: 3, overflow: "hidden" },
|
|
1711
|
+
fill: { height: "100%", borderRadius: 3 },
|
|
1712
|
+
stat: { alignSelf: "stretch", gap: 5 },
|
|
1713
|
+
statHead: { flexDirection: "row", justifyContent: "space-between", gap: 8 },
|
|
1714
|
+
caption: { textAlign: "center" },
|
|
1715
|
+
extra: { flexDirection: "row", flexWrap: "wrap", justifyContent: "center", gap: 8, alignSelf: "stretch" }
|
|
1716
|
+
});
|
|
1378
1717
|
|
|
1379
1718
|
// src/native/progress.tsx
|
|
1380
|
-
import * as
|
|
1381
|
-
import { Animated as
|
|
1382
|
-
import
|
|
1383
|
-
import { jsx as
|
|
1384
|
-
var AnimatedCircle =
|
|
1719
|
+
import * as React14 from "react";
|
|
1720
|
+
import { Animated as Animated11, Easing as Easing7, StyleSheet as StyleSheet13, View as View17 } from "react-native";
|
|
1721
|
+
import Svg10, { Circle as Circle8, Defs as Defs9, LinearGradient as LinearGradient9, Rect as Rect3, Stop as Stop9 } from "react-native-svg";
|
|
1722
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1723
|
+
var AnimatedCircle = Animated11.createAnimatedComponent(Circle8);
|
|
1385
1724
|
var BAR = { sm: 4, md: 8, lg: 12 };
|
|
1386
1725
|
var RING = { sm: 40, md: 80, lg: 144 };
|
|
1387
1726
|
var STROKE = { sm: 12, md: 9, lg: 7 };
|
|
@@ -1392,21 +1731,21 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
1392
1731
|
const known = typeof value === "number" && Number.isFinite(value);
|
|
1393
1732
|
const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;
|
|
1394
1733
|
const percent = Math.round(ratio * 100);
|
|
1395
|
-
const [progress] =
|
|
1396
|
-
const [spin] =
|
|
1397
|
-
const [track, setTrack] =
|
|
1398
|
-
|
|
1734
|
+
const [progress] = React14.useState(() => new Animated11.Value(ratio));
|
|
1735
|
+
const [spin] = React14.useState(() => new Animated11.Value(0));
|
|
1736
|
+
const [track, setTrack] = React14.useState(0);
|
|
1737
|
+
React14.useEffect(() => {
|
|
1399
1738
|
if (reduce) {
|
|
1400
1739
|
progress.setValue(ratio);
|
|
1401
1740
|
return;
|
|
1402
1741
|
}
|
|
1403
|
-
const animation =
|
|
1742
|
+
const animation = Animated11.timing(progress, { toValue: ratio, duration: 700, easing: Easing7.out(Easing7.cubic), useNativeDriver: false });
|
|
1404
1743
|
animation.start();
|
|
1405
1744
|
return () => animation.stop();
|
|
1406
1745
|
}, [ratio, reduce, progress]);
|
|
1407
|
-
|
|
1746
|
+
React14.useEffect(() => {
|
|
1408
1747
|
if (known || reduce) return;
|
|
1409
|
-
const loop =
|
|
1748
|
+
const loop = Animated11.loop(Animated11.timing(spin, { toValue: 1, duration: 1200, easing: Easing7.linear, useNativeDriver: true }));
|
|
1410
1749
|
loop.start();
|
|
1411
1750
|
return () => {
|
|
1412
1751
|
loop.stop();
|
|
@@ -1422,9 +1761,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
1422
1761
|
"aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
|
|
1423
1762
|
"aria-valuetext": known ? valueText ?? `${percent}%` : valueText
|
|
1424
1763
|
};
|
|
1425
|
-
const gradient = /* @__PURE__ */
|
|
1426
|
-
/* @__PURE__ */
|
|
1427
|
-
/* @__PURE__ */
|
|
1764
|
+
const gradient = /* @__PURE__ */ jsx22(Defs9, { children: /* @__PURE__ */ jsxs18(LinearGradient9, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
|
|
1765
|
+
/* @__PURE__ */ jsx22(Stop9, { offset: "0", stopColor: theme.accent }),
|
|
1766
|
+
/* @__PURE__ */ jsx22(Stop9, { offset: "1", stopColor: theme.accent2 })
|
|
1428
1767
|
] }) });
|
|
1429
1768
|
if (variant === "ring") {
|
|
1430
1769
|
const side = RING[size];
|
|
@@ -1433,11 +1772,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
1433
1772
|
const circumference = 2 * Math.PI * r;
|
|
1434
1773
|
const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
|
|
1435
1774
|
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
|
|
1436
|
-
return /* @__PURE__ */
|
|
1437
|
-
/* @__PURE__ */
|
|
1775
|
+
return /* @__PURE__ */ jsxs18(View17, { ...a11y, style: [styles13.ring, { width: side, height: side }, style], children: [
|
|
1776
|
+
/* @__PURE__ */ jsx22(Animated11.View, { style: [StyleSheet13.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs18(Svg10, { width: side, height: side, viewBox: "0 0 100 100", children: [
|
|
1438
1777
|
gradient,
|
|
1439
|
-
/* @__PURE__ */
|
|
1440
|
-
/* @__PURE__ */
|
|
1778
|
+
/* @__PURE__ */ jsx22(Circle8, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
|
|
1779
|
+
/* @__PURE__ */ jsx22(
|
|
1441
1780
|
AnimatedCircle,
|
|
1442
1781
|
{
|
|
1443
1782
|
cx: 50,
|
|
@@ -1457,48 +1796,48 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
1457
1796
|
}
|
|
1458
1797
|
const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
|
|
1459
1798
|
const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
|
|
1460
|
-
return /* @__PURE__ */
|
|
1461
|
-
|
|
1799
|
+
return /* @__PURE__ */ jsx22(
|
|
1800
|
+
View17,
|
|
1462
1801
|
{
|
|
1463
1802
|
...a11y,
|
|
1464
1803
|
onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
|
|
1465
|
-
style: [
|
|
1466
|
-
children: /* @__PURE__ */
|
|
1804
|
+
style: [styles13.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
|
|
1805
|
+
children: /* @__PURE__ */ jsx22(Animated11.View, { style: [styles13.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs18(Svg10, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
|
|
1467
1806
|
gradient,
|
|
1468
|
-
/* @__PURE__ */
|
|
1807
|
+
/* @__PURE__ */ jsx22(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
|
|
1469
1808
|
] }) })
|
|
1470
1809
|
}
|
|
1471
1810
|
);
|
|
1472
1811
|
}
|
|
1473
|
-
var
|
|
1812
|
+
var styles13 = StyleSheet13.create({
|
|
1474
1813
|
ring: { alignItems: "center", justifyContent: "center" },
|
|
1475
1814
|
bar: { width: "100%", overflow: "hidden", borderRadius: 9999 },
|
|
1476
1815
|
fill: { height: "100%", overflow: "hidden", borderRadius: 9999 }
|
|
1477
1816
|
});
|
|
1478
1817
|
|
|
1479
1818
|
// src/native/search-field.tsx
|
|
1480
|
-
import * as
|
|
1481
|
-
import { Pressable as Pressable5, StyleSheet as
|
|
1482
|
-
import
|
|
1483
|
-
import { jsx as
|
|
1819
|
+
import * as React15 from "react";
|
|
1820
|
+
import { Pressable as Pressable5, StyleSheet as StyleSheet14, TextInput, View as View18 } from "react-native";
|
|
1821
|
+
import Svg11, { Circle as Circle9, Path as Path9 } from "react-native-svg";
|
|
1822
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1484
1823
|
function SearchField({ label, value, defaultValue = "", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, style, placeholder, ...props }) {
|
|
1485
1824
|
const { theme, radius: radius3 } = useTheme();
|
|
1486
|
-
const [own, setOwn] =
|
|
1825
|
+
const [own, setOwn] = React15.useState(defaultValue);
|
|
1487
1826
|
const query = value ?? own;
|
|
1488
|
-
const timer2 =
|
|
1489
|
-
|
|
1827
|
+
const timer2 = React15.useRef(void 0);
|
|
1828
|
+
React15.useEffect(() => () => clearTimeout(timer2.current), []);
|
|
1490
1829
|
const change = (next) => {
|
|
1491
1830
|
if (value === void 0) setOwn(next);
|
|
1492
1831
|
onValueChange?.(next);
|
|
1493
1832
|
clearTimeout(timer2.current);
|
|
1494
1833
|
if (onSearch) timer2.current = setTimeout(() => onSearch(next), debounce);
|
|
1495
1834
|
};
|
|
1496
|
-
return /* @__PURE__ */
|
|
1497
|
-
/* @__PURE__ */
|
|
1498
|
-
/* @__PURE__ */
|
|
1499
|
-
/* @__PURE__ */
|
|
1835
|
+
return /* @__PURE__ */ jsxs19(View18, { style: [styles14.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
|
|
1836
|
+
/* @__PURE__ */ jsxs19(Svg11, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
|
|
1837
|
+
/* @__PURE__ */ jsx23(Circle9, { cx: 11, cy: 11, r: 7 }),
|
|
1838
|
+
/* @__PURE__ */ jsx23(Path9, { d: "m20 20-3.5-3.5" })
|
|
1500
1839
|
] }),
|
|
1501
|
-
/* @__PURE__ */
|
|
1840
|
+
/* @__PURE__ */ jsx23(
|
|
1502
1841
|
TextInput,
|
|
1503
1842
|
{
|
|
1504
1843
|
role: "searchbox",
|
|
@@ -1516,33 +1855,33 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
1516
1855
|
onSearch?.(query);
|
|
1517
1856
|
onSubmit?.(query);
|
|
1518
1857
|
},
|
|
1519
|
-
style: [
|
|
1858
|
+
style: [styles14.input, { color: theme.textPrimary }],
|
|
1520
1859
|
...props
|
|
1521
1860
|
}
|
|
1522
1861
|
),
|
|
1523
|
-
query ? /* @__PURE__ */
|
|
1862
|
+
query ? /* @__PURE__ */ jsx23(Pressable5, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles14.clear, children: /* @__PURE__ */ jsx23(Svg11, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx23(Path9, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
|
|
1524
1863
|
] });
|
|
1525
1864
|
}
|
|
1526
|
-
var
|
|
1527
|
-
frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth:
|
|
1865
|
+
var styles14 = StyleSheet14.create({
|
|
1866
|
+
frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet14.hairlineWidth },
|
|
1528
1867
|
input: { flex: 1, height: "100%", fontSize: 15, paddingVertical: 0 },
|
|
1529
1868
|
clear: { width: 32, height: 32, alignItems: "center", justifyContent: "center" }
|
|
1530
1869
|
});
|
|
1531
1870
|
|
|
1532
1871
|
// src/native/segmented.tsx
|
|
1533
|
-
import { Pressable as Pressable6, StyleSheet as
|
|
1534
|
-
import { jsx as
|
|
1872
|
+
import { Pressable as Pressable6, StyleSheet as StyleSheet15, Text as Text7, View as View19 } from "react-native";
|
|
1873
|
+
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
1535
1874
|
function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
|
|
1536
1875
|
const { theme, radius: radius3 } = useTheme();
|
|
1537
|
-
return /* @__PURE__ */
|
|
1538
|
-
|
|
1876
|
+
return /* @__PURE__ */ jsx24(
|
|
1877
|
+
View19,
|
|
1539
1878
|
{
|
|
1540
1879
|
role: "tablist",
|
|
1541
1880
|
"aria-label": label,
|
|
1542
|
-
style: [
|
|
1881
|
+
style: [styles15.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
|
|
1543
1882
|
children: options.map((option) => {
|
|
1544
1883
|
const selected = option.value === value;
|
|
1545
|
-
return /* @__PURE__ */
|
|
1884
|
+
return /* @__PURE__ */ jsx24(
|
|
1546
1885
|
Pressable6,
|
|
1547
1886
|
{
|
|
1548
1887
|
role: "tab",
|
|
@@ -1553,12 +1892,12 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
|
|
|
1553
1892
|
if (!selected) onValueChange(option.value);
|
|
1554
1893
|
},
|
|
1555
1894
|
style: [
|
|
1556
|
-
|
|
1895
|
+
styles15.segment,
|
|
1557
1896
|
{ borderRadius: radius3.sm },
|
|
1558
1897
|
selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
|
|
1559
|
-
option.disabled ?
|
|
1898
|
+
option.disabled ? styles15.disabled : null
|
|
1560
1899
|
],
|
|
1561
|
-
children: /* @__PURE__ */
|
|
1900
|
+
children: /* @__PURE__ */ jsx24(Text7, { numberOfLines: 1, style: [styles15.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
|
|
1562
1901
|
},
|
|
1563
1902
|
option.value
|
|
1564
1903
|
);
|
|
@@ -1566,17 +1905,17 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
|
|
|
1566
1905
|
}
|
|
1567
1906
|
);
|
|
1568
1907
|
}
|
|
1569
|
-
var
|
|
1570
|
-
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth:
|
|
1571
|
-
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth:
|
|
1908
|
+
var styles15 = StyleSheet15.create({
|
|
1909
|
+
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet15.hairlineWidth },
|
|
1910
|
+
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet15.hairlineWidth, borderColor: "transparent" },
|
|
1572
1911
|
label: { fontWeight: "600" },
|
|
1573
1912
|
disabled: { opacity: 0.4 }
|
|
1574
1913
|
});
|
|
1575
1914
|
|
|
1576
1915
|
// src/native/skeleton.tsx
|
|
1577
|
-
import * as
|
|
1578
|
-
import { Animated as
|
|
1579
|
-
import { jsx as
|
|
1916
|
+
import * as React16 from "react";
|
|
1917
|
+
import { Animated as Animated12 } from "react-native";
|
|
1918
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1580
1919
|
var SHAPE = {
|
|
1581
1920
|
text: { width: "100%", height: 12, radius: 4 },
|
|
1582
1921
|
circle: { width: 40, height: 40, radius: 9999 },
|
|
@@ -1585,13 +1924,13 @@ var SHAPE = {
|
|
|
1585
1924
|
function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
1586
1925
|
const { theme } = useTheme();
|
|
1587
1926
|
const reduce = useReducedMotion();
|
|
1588
|
-
const [opacity] =
|
|
1589
|
-
|
|
1927
|
+
const [opacity] = React16.useState(() => new Animated12.Value(1));
|
|
1928
|
+
React16.useEffect(() => {
|
|
1590
1929
|
if (reduce) return;
|
|
1591
|
-
const loop =
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1930
|
+
const loop = Animated12.loop(
|
|
1931
|
+
Animated12.sequence([
|
|
1932
|
+
Animated12.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),
|
|
1933
|
+
Animated12.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true })
|
|
1595
1934
|
])
|
|
1596
1935
|
);
|
|
1597
1936
|
loop.start();
|
|
@@ -1602,8 +1941,8 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
1602
1941
|
}, [reduce, opacity]);
|
|
1603
1942
|
const s = SHAPE[shape];
|
|
1604
1943
|
const side = shape === "circle" ? width ?? height ?? s.width : void 0;
|
|
1605
|
-
return /* @__PURE__ */
|
|
1606
|
-
|
|
1944
|
+
return /* @__PURE__ */ jsx25(
|
|
1945
|
+
Animated12.View,
|
|
1607
1946
|
{
|
|
1608
1947
|
testID,
|
|
1609
1948
|
"aria-hidden": true,
|
|
@@ -1617,10 +1956,10 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
1617
1956
|
|
|
1618
1957
|
// src/native/spinner.tsx
|
|
1619
1958
|
import { ActivityIndicator as ActivityIndicator2 } from "react-native";
|
|
1620
|
-
import { jsx as
|
|
1959
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
1621
1960
|
function Spinner({ label, size = "md", ...props }) {
|
|
1622
1961
|
const { theme } = useTheme();
|
|
1623
|
-
return /* @__PURE__ */
|
|
1962
|
+
return /* @__PURE__ */ jsx26(
|
|
1624
1963
|
ActivityIndicator2,
|
|
1625
1964
|
{
|
|
1626
1965
|
accessible: true,
|
|
@@ -1635,9 +1974,9 @@ function Spinner({ label, size = "md", ...props }) {
|
|
|
1635
1974
|
}
|
|
1636
1975
|
|
|
1637
1976
|
// src/native/toast.tsx
|
|
1638
|
-
import * as
|
|
1639
|
-
import { AccessibilityInfo as
|
|
1640
|
-
import { Fragment as Fragment3, jsx as
|
|
1977
|
+
import * as React17 from "react";
|
|
1978
|
+
import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated13, Pressable as Pressable7, StyleSheet as StyleSheet16, Text as Text8, View as View20 } from "react-native";
|
|
1979
|
+
import { Fragment as Fragment3, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1641
1980
|
var items = [];
|
|
1642
1981
|
var listeners2 = /* @__PURE__ */ new Set();
|
|
1643
1982
|
var counter = 0;
|
|
@@ -1672,30 +2011,30 @@ var toast = Object.assign(show, {
|
|
|
1672
2011
|
function ToastView({ item, closeLabel, duration }) {
|
|
1673
2012
|
const { theme, radius: radius3 } = useTheme();
|
|
1674
2013
|
const reduce = useReducedMotion();
|
|
1675
|
-
const [enter] =
|
|
1676
|
-
|
|
2014
|
+
const [enter] = React17.useState(() => new Animated13.Value(reduce ? 1 : 0));
|
|
2015
|
+
React17.useEffect(() => {
|
|
1677
2016
|
if (reduce) enter.setValue(1);
|
|
1678
|
-
else
|
|
2017
|
+
else Animated13.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
|
|
1679
2018
|
}, [enter, reduce]);
|
|
1680
|
-
|
|
1681
|
-
|
|
2019
|
+
React17.useEffect(() => {
|
|
2020
|
+
AccessibilityInfo8.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
|
|
1682
2021
|
}, [item.title, item.description]);
|
|
1683
2022
|
const ms = item.duration ?? duration;
|
|
1684
|
-
|
|
2023
|
+
React17.useEffect(() => {
|
|
1685
2024
|
if (!Number.isFinite(ms)) return;
|
|
1686
2025
|
const timer2 = setTimeout(() => dismiss(item.id), ms);
|
|
1687
2026
|
return () => clearTimeout(timer2);
|
|
1688
2027
|
}, [item.id, ms]);
|
|
1689
2028
|
const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
|
|
1690
|
-
const text = /* @__PURE__ */
|
|
1691
|
-
item.icon ? /* @__PURE__ */
|
|
1692
|
-
/* @__PURE__ */
|
|
1693
|
-
/* @__PURE__ */
|
|
1694
|
-
item.description ? /* @__PURE__ */
|
|
2029
|
+
const text = /* @__PURE__ */ jsxs20(Fragment3, { children: [
|
|
2030
|
+
item.icon ? /* @__PURE__ */ jsx27(View20, { "aria-hidden": true, children: item.icon }) : null,
|
|
2031
|
+
/* @__PURE__ */ jsxs20(View20, { style: styles16.content, children: [
|
|
2032
|
+
/* @__PURE__ */ jsx27(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
|
|
2033
|
+
item.description ? /* @__PURE__ */ jsx27(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
|
|
1695
2034
|
] })
|
|
1696
2035
|
] });
|
|
1697
|
-
const body = /* @__PURE__ */
|
|
1698
|
-
item.onPress ? /* @__PURE__ */
|
|
2036
|
+
const body = /* @__PURE__ */ jsxs20(Fragment3, { children: [
|
|
2037
|
+
item.onPress ? /* @__PURE__ */ jsx27(
|
|
1699
2038
|
Pressable7,
|
|
1700
2039
|
{
|
|
1701
2040
|
role: "button",
|
|
@@ -1703,11 +2042,11 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
1703
2042
|
item.onPress?.();
|
|
1704
2043
|
dismiss(item.id);
|
|
1705
2044
|
},
|
|
1706
|
-
style: ({ pressed }) => [
|
|
2045
|
+
style: ({ pressed }) => [styles16.main, { opacity: pressed ? 0.8 : 1 }],
|
|
1707
2046
|
children: text
|
|
1708
2047
|
}
|
|
1709
|
-
) : /* @__PURE__ */
|
|
1710
|
-
item.action ? /* @__PURE__ */
|
|
2048
|
+
) : /* @__PURE__ */ jsx27(View20, { style: styles16.main, children: text }),
|
|
2049
|
+
item.action ? /* @__PURE__ */ jsx27(
|
|
1711
2050
|
Pressable7,
|
|
1712
2051
|
{
|
|
1713
2052
|
role: "button",
|
|
@@ -1715,33 +2054,33 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
1715
2054
|
item.action?.onPress();
|
|
1716
2055
|
dismiss(item.id);
|
|
1717
2056
|
},
|
|
1718
|
-
style: [
|
|
1719
|
-
children: /* @__PURE__ */
|
|
2057
|
+
style: [styles16.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
|
|
2058
|
+
children: /* @__PURE__ */ jsx27(Text8, { style: [styles16.actionLabel, { color: theme.onAccent }], children: item.action.label })
|
|
1720
2059
|
}
|
|
1721
2060
|
) : null,
|
|
1722
|
-
/* @__PURE__ */
|
|
2061
|
+
/* @__PURE__ */ jsx27(Pressable7, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles16.close, children: /* @__PURE__ */ jsx27(Text8, { style: [styles16.cross, { color: theme.textSecondary }], children: "\xD7" }) })
|
|
1723
2062
|
] });
|
|
1724
2063
|
const frame = [
|
|
1725
|
-
|
|
2064
|
+
styles16.toast,
|
|
1726
2065
|
{ backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
|
|
1727
2066
|
];
|
|
1728
2067
|
const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };
|
|
1729
|
-
return /* @__PURE__ */
|
|
2068
|
+
return /* @__PURE__ */ jsx27(Animated13.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx27(View20, { style: frame, children: body }) });
|
|
1730
2069
|
}
|
|
1731
2070
|
function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
|
|
1732
|
-
const all =
|
|
2071
|
+
const all = React17.useSyncExternalStore(subscribe2, snapshot, snapshot);
|
|
1733
2072
|
const shown = all.slice(-max);
|
|
1734
2073
|
if (shown.length === 0) return null;
|
|
1735
|
-
return /* @__PURE__ */
|
|
2074
|
+
return /* @__PURE__ */ jsx27(View20, { pointerEvents: "box-none", style: [styles16.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx27(ToastView, { item, closeLabel, duration }, item.id)) });
|
|
1736
2075
|
}
|
|
1737
|
-
var
|
|
2076
|
+
var styles16 = StyleSheet16.create({
|
|
1738
2077
|
stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
|
|
1739
2078
|
toast: {
|
|
1740
2079
|
flexDirection: "row",
|
|
1741
2080
|
alignItems: "center",
|
|
1742
2081
|
gap: 10,
|
|
1743
2082
|
padding: 12,
|
|
1744
|
-
borderWidth:
|
|
2083
|
+
borderWidth: StyleSheet16.hairlineWidth,
|
|
1745
2084
|
borderLeftWidth: 4,
|
|
1746
2085
|
shadowOpacity: 0.3,
|
|
1747
2086
|
shadowRadius: 16,
|
|
@@ -1774,6 +2113,7 @@ export {
|
|
|
1774
2113
|
Countdown,
|
|
1775
2114
|
EmptyState,
|
|
1776
2115
|
ErrorState,
|
|
2116
|
+
GoalGauge,
|
|
1777
2117
|
IconButton,
|
|
1778
2118
|
KrizakaMark,
|
|
1779
2119
|
LoadingState,
|
|
@@ -1782,7 +2122,9 @@ export {
|
|
|
1782
2122
|
OrazakaMark,
|
|
1783
2123
|
OrochiaMark,
|
|
1784
2124
|
Pagination,
|
|
2125
|
+
Phoenix,
|
|
1785
2126
|
ProductMark,
|
|
2127
|
+
ProfileCard,
|
|
1786
2128
|
Progress,
|
|
1787
2129
|
SearchField,
|
|
1788
2130
|
Segmented,
|
|
@@ -1794,6 +2136,7 @@ export {
|
|
|
1794
2136
|
Txt,
|
|
1795
2137
|
WelcomeState,
|
|
1796
2138
|
YazakiaMark,
|
|
2139
|
+
YororisMark,
|
|
1797
2140
|
alpha,
|
|
1798
2141
|
splitDuration,
|
|
1799
2142
|
textStyles,
|