@krizaka/ui 3.20.0 → 3.22.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 +1 -0
- package/dist/action-bar.js +4 -4
- package/dist/app-shell.js +1 -1
- package/dist/argument-card.js +4 -4
- package/dist/blocks.css +1 -1
- package/dist/button.js +3 -2
- package/dist/card.js +3 -3
- package/dist/{chunk-5MH64NIL.js → chunk-2L67YTNV.js} +2 -2
- package/dist/{chunk-2NB27LM7.js → chunk-3IN6TOPM.js} +4 -4
- package/dist/{chunk-VDR2EP6K.js → chunk-4QN5YJ3D.js} +17 -5
- package/dist/chunk-4QN5YJ3D.js.map +1 -0
- package/dist/chunk-AQSZJJAJ.js +126 -0
- package/dist/chunk-AQSZJJAJ.js.map +1 -0
- package/dist/{chunk-3GODX3D6.js → chunk-QDXV544C.js} +2 -2
- package/dist/chunk-QDXV544C.js.map +1 -0
- package/dist/chunk-R6NK6ZNY.js +1080 -0
- package/dist/chunk-R6NK6ZNY.js.map +1 -0
- package/dist/chunk-TDG7ED2W.js +1 -0
- package/dist/chunk-TDG7ED2W.js.map +1 -0
- package/dist/{chunk-LIPK4UCS.js → chunk-YCIBJ6OQ.js} +140 -209
- package/dist/chunk-YCIBJ6OQ.js.map +1 -0
- package/dist/code-block.js +17 -5
- package/dist/code-block.js.map +1 -1
- package/dist/comparison-table.d.ts +44 -0
- package/dist/comparison-table.js +84 -0
- package/dist/comparison-table.js.map +1 -0
- package/dist/data-table.js +19 -1066
- package/dist/data-table.js.map +1 -1
- package/dist/date-picker.js +5 -5
- package/dist/date-picker.js.map +1 -1
- package/dist/force-update-screen.d.ts +80 -0
- package/dist/force-update-screen.js +38 -0
- package/dist/force-update-screen.js.map +1 -0
- package/dist/genui.d.ts +219 -0
- package/dist/genui.js +506 -0
- package/dist/genui.js.map +1 -0
- package/dist/index.d.ts +17 -24
- package/dist/index.js +1 -1
- package/dist/maintenance-screen.d.ts +68 -0
- package/dist/maintenance-screen.js +35 -0
- package/dist/maintenance-screen.js.map +1 -0
- package/dist/marketing-layout.js +1 -1
- package/dist/marketing-layout.js.map +1 -1
- package/dist/media-grid.js +44 -152
- package/dist/media-grid.js.map +1 -1
- package/dist/meta-row.d.ts +54 -0
- package/dist/meta-row.js +35 -0
- package/dist/meta-row.js.map +1 -0
- package/dist/native.d.ts +92 -16
- package/dist/native.js +873 -814
- package/dist/native.js.map +1 -1
- package/dist/nav-bar.d.ts +30 -7
- package/dist/nav-bar.js +71 -17
- package/dist/nav-bar.js.map +1 -1
- package/dist/page-hero.js +5 -5
- package/dist/radio-group.js +1 -1
- package/dist/settings-layout.js +1 -1
- package/dist/settings-layout.js.map +1 -1
- package/dist/site-footer.js +2 -2
- package/dist/skip-link.js +1 -1
- package/dist/step-showcase.d.ts +62 -0
- package/dist/step-showcase.js +227 -0
- package/dist/step-showcase.js.map +1 -0
- package/dist/tabs.js +2 -2
- package/dist/tabs.js.map +1 -1
- package/dist/update-prompt.d.ts +86 -0
- package/dist/update-prompt.js +41 -0
- package/dist/update-prompt.js.map +1 -0
- package/dist/video-player.d.ts +1 -1
- package/dist/video-player.js +16 -3
- package/dist/video-player.js.map +1 -1
- package/package.json +108 -9
- package/registry/achievement.json +1 -1
- package/registry/action-bar.json +1 -1
- package/registry/activity-feed.json +1 -1
- package/registry/alert.json +1 -1
- package/registry/app-shell.json +1 -1
- package/registry/argument-card.json +1 -1
- package/registry/audio-player.json +1 -1
- package/registry/auth-layout.json +1 -1
- package/registry/avatar.json +1 -1
- package/registry/badge.json +1 -1
- package/registry/button.json +1 -1
- package/registry/card-grid.json +1 -1
- package/registry/card.json +1 -1
- package/registry/catalogue-page.json +1 -1
- package/registry/changelog-page.json +1 -1
- package/registry/chat.json +1 -1
- package/registry/checkbox.json +1 -1
- package/registry/chip-link.json +1 -1
- package/registry/chip.json +1 -1
- package/registry/choice-grid.json +1 -1
- package/registry/code-block.json +1 -1
- package/registry/combobox.json +1 -1
- package/registry/command.json +1 -1
- package/registry/comparison-table.json +207 -0
- package/registry/component-page.json +1 -1
- package/registry/confirm-button.json +1 -1
- package/registry/contact-page.json +1 -1
- package/registry/continue-prompt.json +1 -1
- package/registry/countdown.json +1 -1
- package/registry/cta-panel.json +1 -1
- package/registry/dashboard-layout.json +1 -1
- package/registry/data-table.json +1 -1
- package/registry/date-picker.json +3 -3
- package/registry/decision-list.json +1 -1
- package/registry/description-list.json +1 -1
- package/registry/detail-layout.json +1 -1
- package/registry/dialog.json +1 -1
- package/registry/docs-article-page.json +1 -1
- package/registry/docs-hub-page.json +1 -1
- package/registry/docs-layout.json +1 -1
- package/registry/document-viewer.json +1 -1
- package/registry/dropdown-menu.json +1 -1
- package/registry/empty-state.json +1 -1
- package/registry/error-page.json +1 -1
- package/registry/examples/comparison-table/versus.d.ts +4 -0
- package/registry/examples/comparison-table/versus.js +28 -0
- package/registry/examples/comparison-table/versus.tsx +20 -0
- package/registry/examples/dialog/native/sheet.dark.png +0 -0
- package/registry/examples/dialog/native/sheet.light.png +0 -0
- package/registry/examples/force-update-screen/default.d.ts +4 -0
- package/registry/examples/force-update-screen/default.js +25 -0
- package/registry/examples/force-update-screen/default.tsx +19 -0
- package/registry/examples/force-update-screen/native/default.d.ts +4 -0
- package/registry/examples/force-update-screen/native/default.dark.png +0 -0
- package/registry/examples/force-update-screen/native/default.js +24 -0
- package/registry/examples/force-update-screen/native/default.light.png +0 -0
- package/registry/examples/force-update-screen/native/default.tsx +18 -0
- package/registry/examples/genui/streaming.d.ts +4 -0
- package/registry/examples/genui/streaming.js +18 -0
- package/registry/examples/genui/streaming.tsx +14 -0
- package/registry/examples/genui/table.d.ts +4 -0
- package/registry/examples/genui/table.js +19 -0
- package/registry/examples/genui/table.tsx +14 -0
- package/registry/examples/maintenance-screen/default.d.ts +4 -0
- package/registry/examples/maintenance-screen/default.js +22 -0
- package/registry/examples/maintenance-screen/default.tsx +16 -0
- package/registry/examples/maintenance-screen/native/default.d.ts +4 -0
- package/registry/examples/maintenance-screen/native/default.dark.png +0 -0
- package/registry/examples/maintenance-screen/native/default.js +21 -0
- package/registry/examples/maintenance-screen/native/default.light.png +0 -0
- package/registry/examples/maintenance-screen/native/default.tsx +15 -0
- package/registry/examples/meta-row/native/video.d.ts +4 -0
- package/registry/examples/meta-row/native/video.dark.png +0 -0
- package/registry/examples/meta-row/native/video.js +11 -0
- package/registry/examples/meta-row/native/video.light.png +0 -0
- package/registry/examples/meta-row/native/video.tsx +5 -0
- package/registry/examples/meta-row/status.d.ts +4 -0
- package/registry/examples/meta-row/status.js +12 -0
- package/registry/examples/meta-row/status.tsx +7 -0
- package/registry/examples/meta-row/video.d.ts +4 -0
- package/registry/examples/meta-row/video.js +12 -0
- package/registry/examples/meta-row/video.tsx +7 -0
- package/registry/examples/nav-bar/family-product.js +16 -13
- package/registry/examples/nav-bar/family-product.tsx +19 -19
- package/registry/examples/step-showcase/desktop.d.ts +4 -0
- package/registry/examples/step-showcase/desktop.js +24 -0
- package/registry/examples/step-showcase/desktop.tsx +19 -0
- package/registry/examples/step-showcase/phone.d.ts +4 -0
- package/registry/examples/step-showcase/phone.js +24 -0
- package/registry/examples/step-showcase/phone.tsx +19 -0
- package/registry/examples/update-prompt/default.d.ts +4 -0
- package/registry/examples/update-prompt/default.js +24 -0
- package/registry/examples/update-prompt/default.tsx +18 -0
- package/registry/examples/update-prompt/native/default.d.ts +4 -0
- package/registry/examples/update-prompt/native/default.dark.png +0 -0
- package/registry/examples/update-prompt/native/default.js +23 -0
- package/registry/examples/update-prompt/native/default.light.png +0 -0
- package/registry/examples/update-prompt/native/default.tsx +17 -0
- package/registry/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/force-update-screen.json +323 -0
- package/registry/form.json +1 -1
- package/registry/gallery-page.json +1 -1
- package/registry/genui.json +409 -0
- package/registry/glow-card.json +1 -1
- package/registry/goal-gauge.json +1 -1
- package/registry/how-it-works-page.json +1 -1
- package/registry/image-cropper.json +1 -1
- package/registry/index.json +223 -4
- package/registry/iso.json +1 -1
- package/registry/kanban.json +1 -1
- package/registry/kbd.json +1 -1
- package/registry/landing-page.json +1 -1
- package/registry/landscape.json +1 -1
- package/registry/legal-page.json +1 -1
- package/registry/link-card.json +1 -1
- package/registry/list.json +1 -1
- package/registry/loader.json +1 -1
- package/registry/longform-page.json +1 -1
- package/registry/maintenance-screen.json +259 -0
- package/registry/map.json +2 -2
- package/registry/markdown.json +1 -1
- package/registry/marketing-layout.json +1 -1
- package/registry/marquee.json +1 -1
- package/registry/mascot-quote.json +1 -1
- package/registry/mascot-state.json +1 -1
- package/registry/mascots.json +1 -1
- package/registry/match-dialog.json +1 -1
- package/registry/media-capture.json +1 -1
- package/registry/media-grid.json +2 -2
- package/registry/meta-row.json +215 -0
- package/registry/meter.json +1 -1
- package/registry/nav-bar.json +58 -25
- package/registry/number-ticker.json +1 -1
- package/registry/page-header.json +1 -1
- package/registry/page-hero.json +1 -1
- package/registry/page.json +1 -1
- package/registry/pagination.json +1 -1
- package/registry/photo-grid.json +1 -1
- package/registry/pointer-light.json +1 -1
- package/registry/popover.json +1 -1
- package/registry/pricing-page.json +1 -1
- package/registry/product-page.json +1 -1
- package/registry/profile-card.json +1 -1
- package/registry/progress.json +1 -1
- package/registry/promise-card.json +1 -1
- package/registry/radio-group.json +2 -2
- package/registry/recipes.json +1 -1
- package/registry/scroll-stage.json +1 -1
- 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 +2 -2
- package/registry/showcase.json +1 -1
- package/registry/site-footer.json +13 -13
- package/registry/sites.json +1 -1
- package/registry/skeleton.json +1 -1
- package/registry/skip-link.json +2 -2
- package/registry/slider.json +1 -1
- package/registry/slot.json +1 -1
- package/registry/spinner.json +1 -1
- package/registry/split-view.json +1 -1
- package/registry/stage-banner.json +1 -1
- package/registry/stat.json +1 -1
- package/registry/status-page.json +1 -1
- package/registry/step-progress.json +1 -1
- package/registry/step-showcase.json +296 -0
- package/registry/stepper.json +1 -1
- package/registry/swipe-deck.json +1 -1
- package/registry/switch.json +1 -1
- package/registry/tabs.json +3 -3
- package/registry/tag-input.json +1 -1
- package/registry/tag-selector.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/tree-view.json +1 -1
- package/registry/update-prompt.json +316 -0
- package/registry/verified-badge.json +1 -1
- package/registry/vertical-video.json +1 -1
- package/registry/video-player.json +4 -4
- package/registry/video-trimmer.json +1 -1
- package/registry/virtual.json +1 -1
- package/dist/chunk-3GODX3D6.js.map +0 -1
- package/dist/chunk-LIPK4UCS.js.map +0 -1
- package/dist/chunk-VDR2EP6K.js.map +0 -1
- /package/dist/{chunk-5MH64NIL.js.map → chunk-2L67YTNV.js.map} +0 -0
- /package/dist/{chunk-2NB27LM7.js.map → chunk-3IN6TOPM.js.map} +0 -0
package/dist/native.js
CHANGED
|
@@ -639,32 +639,30 @@ var styles3 = StyleSheet3.create({
|
|
|
639
639
|
|
|
640
640
|
// src/native/AkinazaMark.tsx
|
|
641
641
|
import { View as View3 } from "react-native";
|
|
642
|
-
import Svg, { Circle, Defs,
|
|
642
|
+
import Svg, { Circle, Defs, Path, RadialGradient, Stop } from "react-native-svg";
|
|
643
643
|
|
|
644
644
|
// src/marks/akinaza-geometry.ts
|
|
645
|
+
var forest = marks.akinaza[0][1];
|
|
645
646
|
var copper = marks.akinaza[marks.akinaza.length - 1][1];
|
|
646
647
|
var AKINAZA = {
|
|
647
648
|
viewBox: "0 0 400 400",
|
|
648
649
|
croppedViewBox: "80 80 240 240",
|
|
649
650
|
center: 200,
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
/** The
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
/** A window each side, in light. */
|
|
661
|
-
windows: "M154 196 H168 V212 H154 Z M232 196 H246 V212 H232 Z",
|
|
662
|
-
gradient: { x1: 140, y1: 300, x2: 276, y2: 108, stops: marks.akinaza },
|
|
651
|
+
forest,
|
|
652
|
+
copper,
|
|
653
|
+
log: "M197 110 L290 203 A96 96 0 1 1 197 110 Z",
|
|
654
|
+
/** The fresh face of the cut: a copper band along the chord. */
|
|
655
|
+
cut: "M197 110 L290 203 A96 96 0 0 1 289.1 219.1 L180.9 110.9 A96 96 0 0 1 197 110 Z",
|
|
656
|
+
/** The year rings, in light, inside the band. */
|
|
657
|
+
rings: { cx: 194, cy: 206, r: [52, 28], width: 7, opacity: 0.42 },
|
|
658
|
+
heart: { cx: 194, cy: 206, r: 16, inner: 5.4 },
|
|
659
|
+
highlight: "#fff7ed",
|
|
660
|
+
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.akinaza },
|
|
663
661
|
/** A coin: one node on the orbit, that turns with it. */
|
|
664
662
|
node: { r: 9, at: [200, 40] },
|
|
665
663
|
glow: { color: copper, opacity: 0.16 },
|
|
666
|
-
/** The door's breathing light (web), in the copper. */
|
|
667
664
|
pulse: { color: copper, low: 0.3, high: 0.65 },
|
|
665
|
+
motion: { spin: 32, breath: 3.8 },
|
|
668
666
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
669
667
|
ring: { r: 134, width: 1 }
|
|
670
668
|
};
|
|
@@ -710,36 +708,29 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
|
|
|
710
708
|
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
711
709
|
function AkinazaMark({ size = 48, animated = true, title, neutral }) {
|
|
712
710
|
const { theme } = useTheme();
|
|
713
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
711
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, AKINAZA.motion.spin * 1e3);
|
|
714
712
|
const id = useSvgId("akm");
|
|
715
713
|
const viewBox = size < 48 ? AKINAZA.croppedViewBox : AKINAZA.viewBox;
|
|
716
714
|
const stroke = neutral ?? theme.textMuted;
|
|
717
|
-
const gradient = /* @__PURE__ */ jsx5(LinearGradient, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: AKINAZA.gradient.x1, y1: AKINAZA.gradient.y1, x2: AKINAZA.gradient.x2, y2: AKINAZA.gradient.y2, children: AKINAZA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx5(Stop, { offset, stopColor: color }, offset)) });
|
|
718
|
-
const fill = `url(#${id}a)`;
|
|
719
715
|
return /* @__PURE__ */ jsxs3(View3, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
720
716
|
/* @__PURE__ */ jsxs3(Svg, { viewBox, style: layer, children: [
|
|
721
|
-
/* @__PURE__ */
|
|
722
|
-
/* @__PURE__ */
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
] }),
|
|
726
|
-
gradient
|
|
727
|
-
] }),
|
|
717
|
+
/* @__PURE__ */ jsx5(Defs, { children: /* @__PURE__ */ jsxs3(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
718
|
+
/* @__PURE__ */ jsx5(Stop, { offset: "0%", stopColor: AKINAZA.glow.color, stopOpacity: AKINAZA.glow.opacity }),
|
|
719
|
+
/* @__PURE__ */ jsx5(Stop, { offset: "100%", stopColor: AKINAZA.glow.color, stopOpacity: 0 })
|
|
720
|
+
] }) }),
|
|
728
721
|
size >= 48 ? /* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.center, cy: AKINAZA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
729
722
|
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.center, cy: AKINAZA.center, r: AKINAZA.ring.r, stroke, strokeWidth: AKINAZA.ring.width, opacity: 0.35, fill: "none" }),
|
|
730
|
-
/* @__PURE__ */ jsx5(Path, { d: AKINAZA.
|
|
731
|
-
/* @__PURE__ */ jsx5(Path, { d: AKINAZA.
|
|
732
|
-
/* @__PURE__ */ jsx5(
|
|
733
|
-
/* @__PURE__ */ jsx5(Path, { d: AKINAZA.windows, fill: AKINAZA.stripe.color, fillOpacity: AKINAZA.stripe.opacity })
|
|
723
|
+
/* @__PURE__ */ jsx5(Path, { d: AKINAZA.log, fill: AKINAZA.forest }),
|
|
724
|
+
/* @__PURE__ */ jsx5(Path, { d: AKINAZA.cut, fill: AKINAZA.copper }),
|
|
725
|
+
AKINAZA.rings.r.map((r) => /* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.rings.cx, cy: AKINAZA.rings.cy, r, stroke: AKINAZA.highlight, strokeOpacity: AKINAZA.rings.opacity, strokeWidth: AKINAZA.rings.width, fill: "none" }, r))
|
|
734
726
|
] }),
|
|
735
727
|
/* @__PURE__ */ jsx5(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs3(Svg, { viewBox, style: layer, children: [
|
|
736
|
-
/* @__PURE__ */ jsx5(Defs, { children: gradient }),
|
|
737
728
|
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.center, cy: AKINAZA.center, r: AKINAZA.orbit.r, stroke, strokeWidth: AKINAZA.orbit.width, strokeDasharray: AKINAZA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
738
|
-
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.node.at[0], cy: AKINAZA.node.at[1], r: AKINAZA.node.r, fill })
|
|
729
|
+
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.node.at[0], cy: AKINAZA.node.at[1], r: AKINAZA.node.r, fill: AKINAZA.copper })
|
|
739
730
|
] }) }),
|
|
740
731
|
/* @__PURE__ */ jsx5(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs3(Svg, { viewBox, style: layer, children: [
|
|
741
|
-
/* @__PURE__ */ jsx5(
|
|
742
|
-
/* @__PURE__ */ jsx5(
|
|
732
|
+
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.heart.cx, cy: AKINAZA.heart.cy, r: AKINAZA.heart.r, fill: AKINAZA.copper }),
|
|
733
|
+
/* @__PURE__ */ jsx5(Circle, { cx: AKINAZA.heart.cx, cy: AKINAZA.heart.cy, r: AKINAZA.heart.inner, fill: AKINAZA.highlight })
|
|
743
734
|
] }) })
|
|
744
735
|
] });
|
|
745
736
|
}
|
|
@@ -747,7 +738,7 @@ function AkinazaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
747
738
|
// src/native/avatar.tsx
|
|
748
739
|
import * as React4 from "react";
|
|
749
740
|
import { Image, StyleSheet as StyleSheet4, Text as Text2, View as View4 } from "react-native";
|
|
750
|
-
import Svg2, { Circle as Circle2, Defs as Defs2, LinearGradient
|
|
741
|
+
import Svg2, { Circle as Circle2, Defs as Defs2, LinearGradient, Stop as Stop2, SvgUri } from "react-native-svg";
|
|
751
742
|
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
752
743
|
var SIDE = { xs: 20, sm: 32, md: 40, lg: 56, xl: 80 };
|
|
753
744
|
function isSvgUri(uri) {
|
|
@@ -782,7 +773,7 @@ function AvatarRoot({ src, svg, alt = "", fallback, fallbackSrc, defaultAvatar,
|
|
|
782
773
|
const name = [alt, presence ? presenceLabel : null].filter(Boolean).join(", ");
|
|
783
774
|
return /* @__PURE__ */ jsxs4(View4, { accessible: Boolean(name), role: name ? "img" : void 0, "aria-label": name || void 0, ...props, style: [{ width: outer, height: outer, alignItems: "center", justifyContent: "center" }, style], children: [
|
|
784
775
|
ring ? /* @__PURE__ */ jsxs4(Svg2, { width: outer, height: outer, style: StyleSheet4.absoluteFill, "aria-hidden": true, children: [
|
|
785
|
-
/* @__PURE__ */ jsx6(Defs2, { children: /* @__PURE__ */ jsxs4(
|
|
776
|
+
/* @__PURE__ */ jsx6(Defs2, { children: /* @__PURE__ */ jsxs4(LinearGradient, { id: gradient, x1: "0", y1: "1", x2: "1", y2: "0", children: [
|
|
786
777
|
/* @__PURE__ */ jsx6(Stop2, { offset: "0", stopColor: theme.accent }),
|
|
787
778
|
/* @__PURE__ */ jsx6(Stop2, { offset: "1", stopColor: theme.accent2 })
|
|
788
779
|
] }) }),
|
|
@@ -1081,7 +1072,7 @@ var styles5 = StyleSheet5.create({
|
|
|
1081
1072
|
// src/native/button.tsx
|
|
1082
1073
|
import * as React6 from "react";
|
|
1083
1074
|
import { ActivityIndicator, Pressable as Pressable2, StyleSheet as StyleSheet6, View as View5 } from "react-native";
|
|
1084
|
-
import Svg3, { Defs as Defs3, LinearGradient as
|
|
1075
|
+
import Svg3, { Defs as Defs3, LinearGradient as LinearGradient2, Rect, Stop as Stop3 } from "react-native-svg";
|
|
1085
1076
|
|
|
1086
1077
|
// src/button/recipe.ts
|
|
1087
1078
|
var buttonRecipe = defineRecipe({
|
|
@@ -1140,11 +1131,11 @@ function useButton({ variant = "secondary", size = "md", shape = "rounded", load
|
|
|
1140
1131
|
function Fill({ colors, id }) {
|
|
1141
1132
|
if (!colors.gradient) return null;
|
|
1142
1133
|
return /* @__PURE__ */ jsxs6(Svg3, { "aria-hidden": true, pointerEvents: "none", style: StyleSheet6.absoluteFill, width: "100%", height: "100%", children: [
|
|
1143
|
-
/* @__PURE__ */ jsx8(Defs3, { children: /* @__PURE__ */ jsxs6(
|
|
1134
|
+
/* @__PURE__ */ jsx8(Defs3, { children: /* @__PURE__ */ jsxs6(LinearGradient2, { id, x1: "0", y1: "0", x2: "1", y2: "0", children: [
|
|
1144
1135
|
/* @__PURE__ */ jsx8(Stop3, { offset: "0", stopColor: colors.gradient[0] }),
|
|
1145
1136
|
/* @__PURE__ */ jsx8(Stop3, { offset: "1", stopColor: colors.gradient[1] })
|
|
1146
1137
|
] }) }),
|
|
1147
|
-
/* @__PURE__ */ jsx8(
|
|
1138
|
+
/* @__PURE__ */ jsx8(Rect, { width: "100%", height: "100%", fill: `url(#${id})` })
|
|
1148
1139
|
] });
|
|
1149
1140
|
}
|
|
1150
1141
|
function Button({ label, icon, variant, size = "md", shape, loading = false, disabled, style, ...props }) {
|
|
@@ -2592,8 +2583,32 @@ var styles20 = StyleSheet20.create({
|
|
|
2592
2583
|
disabled: { opacity: 0.5 }
|
|
2593
2584
|
});
|
|
2594
2585
|
|
|
2586
|
+
// src/native/force-update-screen.tsx
|
|
2587
|
+
import { StyleSheet as StyleSheet21, View as View19 } from "react-native";
|
|
2588
|
+
import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2589
|
+
function ForceUpdateScreen({ title, message, versionLabel, mark, updateLabel, onUpdate, retryLabel, onRetry, fill = true, style }) {
|
|
2590
|
+
const { theme } = useTheme();
|
|
2591
|
+
return /* @__PURE__ */ jsxs20(View19, { style: [styles21.root, fill ? styles21.fill : null, { backgroundColor: theme.surface0 }, style], children: [
|
|
2592
|
+
mark ? /* @__PURE__ */ jsx23(View19, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: styles21.mark, children: mark }) : null,
|
|
2593
|
+
/* @__PURE__ */ jsx23(Txt, { variant: "title", style: styles21.centred, children: title }),
|
|
2594
|
+
message ? /* @__PURE__ */ jsx23(Txt, { tone: "secondary", style: styles21.centred, children: message }) : null,
|
|
2595
|
+
versionLabel ? /* @__PURE__ */ jsx23(Txt, { variant: "mono", tone: "secondary", style: styles21.centred, children: versionLabel }) : null,
|
|
2596
|
+
/* @__PURE__ */ jsxs20(View19, { style: styles21.actions, children: [
|
|
2597
|
+
/* @__PURE__ */ jsx23(Button, { label: updateLabel, variant: "primary", size: "lg", onPress: onUpdate }),
|
|
2598
|
+
retryLabel && onRetry ? /* @__PURE__ */ jsx23(Button, { label: retryLabel, variant: "ghost", onPress: onRetry }) : null
|
|
2599
|
+
] })
|
|
2600
|
+
] });
|
|
2601
|
+
}
|
|
2602
|
+
var styles21 = StyleSheet21.create({
|
|
2603
|
+
root: { alignItems: "center", justifyContent: "center", gap: 12, padding: 24 },
|
|
2604
|
+
fill: { flex: 1 },
|
|
2605
|
+
mark: { width: 96, height: 96, alignItems: "center", justifyContent: "center" },
|
|
2606
|
+
centred: { textAlign: "center", maxWidth: 340 },
|
|
2607
|
+
actions: { marginTop: 8, gap: 8, alignSelf: "stretch", maxWidth: 340, width: "100%" }
|
|
2608
|
+
});
|
|
2609
|
+
|
|
2595
2610
|
// src/native/goal-gauge.tsx
|
|
2596
|
-
import { Animated as Animated7, StyleSheet as
|
|
2611
|
+
import { Animated as Animated7, StyleSheet as StyleSheet22, View as View20 } from "react-native";
|
|
2597
2612
|
|
|
2598
2613
|
// src/native/story-motion.ts
|
|
2599
2614
|
import * as React17 from "react";
|
|
@@ -2616,17 +2631,17 @@ function useEntrance(animated, delay = 0, duration = 700) {
|
|
|
2616
2631
|
}
|
|
2617
2632
|
|
|
2618
2633
|
// src/native/goal-gauge.tsx
|
|
2619
|
-
import { jsx as
|
|
2634
|
+
import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2620
2635
|
function Cell({ lit, animate, order, animated, arcade }) {
|
|
2621
2636
|
const { theme } = useTheme();
|
|
2622
2637
|
const t = useEntrance(animated && animate, 300 + order * 100, 350);
|
|
2623
2638
|
const spentOpacity = arcade ? 0.14 : 1;
|
|
2624
2639
|
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] });
|
|
2625
2640
|
const color = lit || arcade ? theme.accent : theme.surface3;
|
|
2626
|
-
return /* @__PURE__ */
|
|
2641
|
+
return /* @__PURE__ */ jsx24(
|
|
2627
2642
|
Animated7.View,
|
|
2628
2643
|
{
|
|
2629
|
-
style: [
|
|
2644
|
+
style: [styles22.cell, arcade ? styles22.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]
|
|
2630
2645
|
}
|
|
2631
2646
|
);
|
|
2632
2647
|
}
|
|
@@ -2636,8 +2651,8 @@ function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel
|
|
|
2636
2651
|
const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));
|
|
2637
2652
|
const words2 = valueText ?? `${lit} / ${total}`;
|
|
2638
2653
|
const arcade = variant === "arcade";
|
|
2639
|
-
return /* @__PURE__ */
|
|
2640
|
-
|
|
2654
|
+
return /* @__PURE__ */ jsxs21(
|
|
2655
|
+
View20,
|
|
2641
2656
|
{
|
|
2642
2657
|
accessible: true,
|
|
2643
2658
|
role: "meter",
|
|
@@ -2647,22 +2662,22 @@ function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel
|
|
|
2647
2662
|
"aria-valuenow": lit,
|
|
2648
2663
|
"aria-valuetext": words2,
|
|
2649
2664
|
...props,
|
|
2650
|
-
style: [
|
|
2665
|
+
style: [styles22.root, style],
|
|
2651
2666
|
children: [
|
|
2652
|
-
showLabel ? /* @__PURE__ */
|
|
2653
|
-
/* @__PURE__ */
|
|
2654
|
-
arcade ? null : /* @__PURE__ */
|
|
2667
|
+
showLabel ? /* @__PURE__ */ jsxs21(View20, { "aria-hidden": true, style: [styles22.head, arcade ? styles22.headArcade : null], children: [
|
|
2668
|
+
/* @__PURE__ */ jsx24(Txt, { variant: arcade ? "mono" : "caption", tone: "secondary", children: arcade ? label.toUpperCase() : label }),
|
|
2669
|
+
arcade ? null : /* @__PURE__ */ jsx24(Txt, { variant: "caption", children: words2 })
|
|
2655
2670
|
] }) : null,
|
|
2656
|
-
/* @__PURE__ */
|
|
2671
|
+
/* @__PURE__ */ jsx24(View20, { "aria-hidden": true, style: [styles22.cells, arcade ? [styles22.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null], children: Array.from({ length: total }, (_, i) => {
|
|
2657
2672
|
const on = i < lit;
|
|
2658
2673
|
const animate = mode === "fill" ? on : !on;
|
|
2659
|
-
return /* @__PURE__ */
|
|
2674
|
+
return /* @__PURE__ */ jsx24(Cell, { lit: on, animate, order: mode === "fill" ? i : i - lit, animated, arcade }, i);
|
|
2660
2675
|
}) })
|
|
2661
2676
|
]
|
|
2662
2677
|
}
|
|
2663
2678
|
);
|
|
2664
2679
|
}
|
|
2665
|
-
var
|
|
2680
|
+
var styles22 = StyleSheet22.create({
|
|
2666
2681
|
root: { alignSelf: "stretch", gap: 8 },
|
|
2667
2682
|
head: { flexDirection: "row", justifyContent: "space-between", alignItems: "baseline", gap: 12 },
|
|
2668
2683
|
headArcade: { justifyContent: "center" },
|
|
@@ -2674,9 +2689,9 @@ var styles21 = StyleSheet21.create({
|
|
|
2674
2689
|
|
|
2675
2690
|
// src/native/header.tsx
|
|
2676
2691
|
import * as React18 from "react";
|
|
2677
|
-
import { Animated as Animated8, Pressable as Pressable12, StyleSheet as
|
|
2692
|
+
import { Animated as Animated8, Pressable as Pressable12, StyleSheet as StyleSheet23, View as View21 } from "react-native";
|
|
2678
2693
|
import Svg8, { Path as Path6 } from "react-native-svg";
|
|
2679
|
-
import { jsx as
|
|
2694
|
+
import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2680
2695
|
var BAR = 44;
|
|
2681
2696
|
var LARGE = 52;
|
|
2682
2697
|
function Header({ title, subtitle, scrollY, size = "large", backLabel, onBack, actions, children, style }) {
|
|
@@ -2689,21 +2704,21 @@ function Header({ title, subtitle, scrollY, size = "large", backLabel, onBack, a
|
|
|
2689
2704
|
const largeOpacity = progress.interpolate({ inputRange: [0, 0.7], outputRange: [1, 0], extrapolate: "clamp" });
|
|
2690
2705
|
const largeShift = reduce ? 0 : progress.interpolate({ inputRange: [0, 1], outputRange: [0, -10] });
|
|
2691
2706
|
const largeHeight = progress.interpolate({ inputRange: [0, 1], outputRange: [LARGE + (subtitle ? 18 : 0), 0] });
|
|
2692
|
-
return /* @__PURE__ */
|
|
2693
|
-
/* @__PURE__ */
|
|
2694
|
-
/* @__PURE__ */
|
|
2695
|
-
/* @__PURE__ */
|
|
2696
|
-
/* @__PURE__ */
|
|
2707
|
+
return /* @__PURE__ */ jsxs22(View21, { style: [{ paddingTop: insets.top, backgroundColor: theme.surface0 }, style], children: [
|
|
2708
|
+
/* @__PURE__ */ jsxs22(View21, { style: styles23.bar, children: [
|
|
2709
|
+
/* @__PURE__ */ jsx25(View21, { style: styles23.side, children: onBack && backLabel ? /* @__PURE__ */ jsxs22(Pressable12, { role: "button", "aria-label": backLabel, onPress: onBack, hitSlop: 8, style: styles23.back, children: [
|
|
2710
|
+
/* @__PURE__ */ jsx25(Svg8, { width: 22, height: 22, viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsx25(Path6, { d: "M15 5l-7 7 7 7", stroke: theme.accentText, strokeWidth: 2.4, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }) }),
|
|
2711
|
+
/* @__PURE__ */ jsx25(Txt, { variant: "label", tone: "accent", numberOfLines: 1, children: backLabel })
|
|
2697
2712
|
] }) : null }),
|
|
2698
|
-
/* @__PURE__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
2713
|
+
/* @__PURE__ */ jsx25(Animated8.View, { style: [styles23.middle, { opacity: smallOpacity }], "aria-hidden": large, children: /* @__PURE__ */ jsx25(Txt, { variant: "label", numberOfLines: 1, role: large ? void 0 : "heading", children: title }) }),
|
|
2714
|
+
/* @__PURE__ */ jsx25(View21, { style: [styles23.side, styles23.right], children: actions })
|
|
2700
2715
|
] }),
|
|
2701
|
-
large ? /* @__PURE__ */
|
|
2702
|
-
/* @__PURE__ */
|
|
2703
|
-
subtitle ? /* @__PURE__ */
|
|
2716
|
+
large ? /* @__PURE__ */ jsx25(Animated8.View, { style: { height: largeHeight, overflow: "hidden" }, children: /* @__PURE__ */ jsxs22(Animated8.View, { style: [styles23.large, { opacity: largeOpacity, transform: [{ translateY: largeShift }] }], children: [
|
|
2717
|
+
/* @__PURE__ */ jsx25(Txt, { variant: "display", numberOfLines: 1, role: "heading", style: styles23.largeTitle, children: title }),
|
|
2718
|
+
subtitle ? /* @__PURE__ */ jsx25(Txt, { variant: "caption", tone: "secondary", children: subtitle }) : null
|
|
2704
2719
|
] }) }) : null,
|
|
2705
|
-
children ? /* @__PURE__ */
|
|
2706
|
-
/* @__PURE__ */
|
|
2720
|
+
children ? /* @__PURE__ */ jsx25(View21, { style: styles23.children, children }) : null,
|
|
2721
|
+
/* @__PURE__ */ jsx25(Animated8.View, { "aria-hidden": true, style: [styles23.rule, { backgroundColor: theme.borderSubtle, opacity: smallOpacity }] })
|
|
2707
2722
|
] });
|
|
2708
2723
|
}
|
|
2709
2724
|
function useCollapsingHeader() {
|
|
@@ -2711,7 +2726,7 @@ function useCollapsingHeader() {
|
|
|
2711
2726
|
const onScroll = React18.useMemo(() => Animated8.event([{ nativeEvent: { contentOffset: { y: scrollY } } }], { useNativeDriver: false }), [scrollY]);
|
|
2712
2727
|
return { scrollY, onScroll };
|
|
2713
2728
|
}
|
|
2714
|
-
var
|
|
2729
|
+
var styles23 = StyleSheet23.create({
|
|
2715
2730
|
bar: { height: BAR, flexDirection: "row", alignItems: "center", paddingHorizontal: 8 },
|
|
2716
2731
|
side: { flex: 1, flexDirection: "row", alignItems: "center" },
|
|
2717
2732
|
right: { justifyContent: "flex-end", gap: 4 },
|
|
@@ -2720,13 +2735,13 @@ var styles22 = StyleSheet22.create({
|
|
|
2720
2735
|
large: { paddingHorizontal: 16, paddingBottom: 6 },
|
|
2721
2736
|
largeTitle: { fontSize: 32, lineHeight: 40 },
|
|
2722
2737
|
children: { paddingHorizontal: 16, paddingBottom: 8 },
|
|
2723
|
-
rule: { height:
|
|
2738
|
+
rule: { height: StyleSheet23.hairlineWidth }
|
|
2724
2739
|
});
|
|
2725
2740
|
|
|
2726
2741
|
// src/native/image-viewer.tsx
|
|
2727
2742
|
import * as React19 from "react";
|
|
2728
|
-
import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated9, Image as Image3, Modal as Modal3, PanResponder, Pressable as Pressable13, StyleSheet as
|
|
2729
|
-
import { jsx as
|
|
2743
|
+
import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated9, Image as Image3, Modal as Modal3, PanResponder, Pressable as Pressable13, StyleSheet as StyleSheet24, useWindowDimensions, View as View22 } from "react-native";
|
|
2744
|
+
import { jsx as jsx26, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2730
2745
|
var MAX_SCALE = 4;
|
|
2731
2746
|
function ImageViewer({ images, index, onIndexChange, closeLabel, positionLabel = (n, total) => `${n} / ${total}` }) {
|
|
2732
2747
|
const { theme, insets, haptic } = useTheme();
|
|
@@ -2814,12 +2829,12 @@ function ImageViewer({ images, index, onIndexChange, closeLabel, positionLabel =
|
|
|
2814
2829
|
if (!open) return null;
|
|
2815
2830
|
const image = images[index];
|
|
2816
2831
|
const backdrop = dismiss2.interpolate({ inputRange: [0, height / 2], outputRange: [1, 0.3], extrapolate: "clamp" });
|
|
2817
|
-
return /* @__PURE__ */
|
|
2818
|
-
/* @__PURE__ */
|
|
2819
|
-
/* @__PURE__ */
|
|
2820
|
-
|
|
2832
|
+
return /* @__PURE__ */ jsxs23(Modal3, { ...modalName(image.alt), visible: true, transparent: true, animationType: reduce ? "none" : "fade", onRequestClose: () => onIndexChange(null), statusBarTranslucent: true, children: [
|
|
2833
|
+
/* @__PURE__ */ jsx26(Animated9.View, { style: [StyleSheet24.absoluteFill, { backgroundColor: theme.media, opacity: backdrop }] }),
|
|
2834
|
+
/* @__PURE__ */ jsx26(
|
|
2835
|
+
View22,
|
|
2821
2836
|
{
|
|
2822
|
-
style:
|
|
2837
|
+
style: StyleSheet24.absoluteFill,
|
|
2823
2838
|
accessible: true,
|
|
2824
2839
|
role: "img",
|
|
2825
2840
|
"aria-label": `${image.alt}, ${positionLabel(index + 1, images.length)}`,
|
|
@@ -2831,21 +2846,21 @@ function ImageViewer({ images, index, onIndexChange, closeLabel, positionLabel =
|
|
|
2831
2846
|
if (name === "escape") onIndexChange(null);
|
|
2832
2847
|
},
|
|
2833
2848
|
...responder.panHandlers,
|
|
2834
|
-
children: /* @__PURE__ */
|
|
2849
|
+
children: /* @__PURE__ */ jsx26(Animated9.View, { style: { width, height, transform: [{ translateX: pan.x }, { translateY: Animated9.add(pan.y, dismiss2) }, { scale }] }, children: /* @__PURE__ */ jsx26(Image3, { source: { uri: image.uri }, resizeMode: "contain", style: { width, height }, accessibilityIgnoresInvertColors: true }) })
|
|
2835
2850
|
}
|
|
2836
2851
|
),
|
|
2837
|
-
/* @__PURE__ */
|
|
2838
|
-
/* @__PURE__ */
|
|
2839
|
-
/* @__PURE__ */
|
|
2852
|
+
/* @__PURE__ */ jsxs23(View22, { pointerEvents: "box-none", style: [styles24.top, { paddingTop: insets.top + 8 }], children: [
|
|
2853
|
+
/* @__PURE__ */ jsx26(View22, { "aria-hidden": true, style: [styles24.counter, { backgroundColor: theme.scrimStrong }], children: /* @__PURE__ */ jsx26(Txt, { variant: "label", tone: "onMedia", children: positionLabel(index + 1, images.length) }) }),
|
|
2854
|
+
/* @__PURE__ */ jsx26(Pressable13, { role: "button", "aria-label": closeLabel, hitSlop: 12, onPress: () => onIndexChange(null), style: [styles24.close, { backgroundColor: theme.scrimStrong }], children: /* @__PURE__ */ jsx26(Txt, { tone: "onMedia", style: styles24.cross, "aria-hidden": true, children: "\xD7" }) })
|
|
2840
2855
|
] }),
|
|
2841
|
-
image.caption ? /* @__PURE__ */
|
|
2856
|
+
image.caption ? /* @__PURE__ */ jsx26(View22, { pointerEvents: "none", style: [styles24.caption, { paddingBottom: insets.bottom + 16, backgroundColor: theme.scrimStrong }], children: /* @__PURE__ */ jsx26(Txt, { tone: "onMedia", children: image.caption }) }) : null
|
|
2842
2857
|
] });
|
|
2843
2858
|
}
|
|
2844
2859
|
function prefetchNeighbours(images, index) {
|
|
2845
2860
|
if (index === null) return;
|
|
2846
2861
|
for (const i of [index - 1, index + 1]) if (images[i]) void Image3.prefetch(images[i].uri).catch(() => void 0);
|
|
2847
2862
|
}
|
|
2848
|
-
var
|
|
2863
|
+
var styles24 = StyleSheet24.create({
|
|
2849
2864
|
top: { position: "absolute", top: 0, left: 0, right: 0, flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingHorizontal: 16 },
|
|
2850
2865
|
counter: { paddingHorizontal: 10, paddingVertical: 4, borderRadius: 999 },
|
|
2851
2866
|
close: { width: 40, height: 40, borderRadius: 20, alignItems: "center", justifyContent: "center" },
|
|
@@ -2854,72 +2869,71 @@ var styles23 = StyleSheet23.create({
|
|
|
2854
2869
|
});
|
|
2855
2870
|
|
|
2856
2871
|
// src/native/KachizakaMark.tsx
|
|
2857
|
-
import { View as
|
|
2858
|
-
import Svg9, { Circle as Circle3, Defs as Defs4,
|
|
2872
|
+
import { View as View23 } from "react-native";
|
|
2873
|
+
import Svg9, { Circle as Circle3, Defs as Defs4, Path as Path7, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
|
|
2859
2874
|
|
|
2860
2875
|
// src/marks/kachizaka-geometry.ts
|
|
2876
|
+
var cobalt = marks.kachizaka[0][1];
|
|
2861
2877
|
var gold = marks.kachizaka[marks.kachizaka.length - 1][1];
|
|
2862
2878
|
var KACHIZAKA = {
|
|
2863
2879
|
viewBox: "0 0 400 400",
|
|
2864
2880
|
croppedViewBox: "80 80 240 240",
|
|
2865
2881
|
center: 200,
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
/** The
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2882
|
+
cobalt,
|
|
2883
|
+
gold,
|
|
2884
|
+
/** The steps: second (left, cut top-left), first (centre, both top corners cut, in gold), third (right, cut top-right). */
|
|
2885
|
+
steps: {
|
|
2886
|
+
second: "M102 240 L122 220 H162 V296 H102 Z",
|
|
2887
|
+
first: "M170 192 L188 174 H212 L230 192 V296 H170 Z",
|
|
2888
|
+
third: "M238 248 H278 L298 268 V296 H238 Z"
|
|
2889
|
+
},
|
|
2890
|
+
/** The lit node over the winner: a gold diamond (half-diagonal 22, softened by a 6-unit round stroke), its light inside. */
|
|
2891
|
+
node: { d: "M200 102 L222 124 L200 146 L178 124 Z", light: "M200 116.1 L207.9 124 L200 131.9 L192.1 124 Z", soften: 6 },
|
|
2892
|
+
highlight: "#fffbea",
|
|
2893
|
+
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.kachizaka },
|
|
2877
2894
|
/** The ball: one node on the orbit, that turns with it. */
|
|
2878
|
-
|
|
2895
|
+
ball: { r: 9, at: [200, 40] },
|
|
2879
2896
|
glow: { color: gold, opacity: 0.18 },
|
|
2880
|
-
/** The seal's breathing shadow (web), in the gold. */
|
|
2881
2897
|
pulse: { color: gold, low: 0.35, high: 0.75 },
|
|
2898
|
+
motion: { spin: 28, breath: 3.2 },
|
|
2882
2899
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
2883
2900
|
ring: { r: 134, width: 1 }
|
|
2884
2901
|
};
|
|
2885
2902
|
|
|
2886
2903
|
// src/native/KachizakaMark.tsx
|
|
2887
|
-
import { jsx as
|
|
2904
|
+
import { jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2888
2905
|
function KachizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
2889
2906
|
const { theme } = useTheme();
|
|
2890
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
2891
|
-
const id = useSvgId("
|
|
2907
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, KACHIZAKA.motion.spin * 1e3);
|
|
2908
|
+
const id = useSvgId("kcm");
|
|
2892
2909
|
const viewBox = size < 48 ? KACHIZAKA.croppedViewBox : KACHIZAKA.viewBox;
|
|
2893
2910
|
const stroke = neutral ?? theme.textMuted;
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
size >= 48 ? /* @__PURE__ */ jsx26(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
2906
|
-
/* @__PURE__ */ jsx26(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: KACHIZAKA.ring.r, stroke, strokeWidth: KACHIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
2907
|
-
/* @__PURE__ */ jsx26(Path7, { d: KACHIZAKA.handles, stroke: fill, strokeWidth: KACHIZAKA.handleWidth, strokeLinecap: "round", fill: "none" }),
|
|
2908
|
-
/* @__PURE__ */ jsx26(Path7, { d: KACHIZAKA.base, fill }),
|
|
2909
|
-
/* @__PURE__ */ jsx26(Path7, { d: KACHIZAKA.cup, fill })
|
|
2911
|
+
return /* @__PURE__ */ jsxs24(View23, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
2912
|
+
/* @__PURE__ */ jsxs24(Svg9, { viewBox, style: layer, children: [
|
|
2913
|
+
/* @__PURE__ */ jsx27(Defs4, { children: /* @__PURE__ */ jsxs24(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
2914
|
+
/* @__PURE__ */ jsx27(Stop4, { offset: "0%", stopColor: KACHIZAKA.glow.color, stopOpacity: KACHIZAKA.glow.opacity }),
|
|
2915
|
+
/* @__PURE__ */ jsx27(Stop4, { offset: "100%", stopColor: KACHIZAKA.glow.color, stopOpacity: 0 })
|
|
2916
|
+
] }) }),
|
|
2917
|
+
size >= 48 ? /* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
2918
|
+
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: KACHIZAKA.ring.r, stroke, strokeWidth: KACHIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
2919
|
+
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.steps.second, fill: KACHIZAKA.cobalt }),
|
|
2920
|
+
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.steps.first, fill: KACHIZAKA.gold }),
|
|
2921
|
+
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.steps.third, fill: KACHIZAKA.cobalt })
|
|
2910
2922
|
] }),
|
|
2911
|
-
/* @__PURE__ */
|
|
2912
|
-
/* @__PURE__ */
|
|
2913
|
-
/* @__PURE__ */
|
|
2914
|
-
/* @__PURE__ */ jsx26(Circle3, { cx: KACHIZAKA.node.at[0], cy: KACHIZAKA.node.at[1], r: KACHIZAKA.node.r, fill })
|
|
2923
|
+
/* @__PURE__ */ jsx27(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs24(Svg9, { viewBox, style: layer, children: [
|
|
2924
|
+
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: KACHIZAKA.orbit.r, stroke, strokeWidth: KACHIZAKA.orbit.width, strokeDasharray: KACHIZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
2925
|
+
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.ball.at[0], cy: KACHIZAKA.ball.at[1], r: KACHIZAKA.ball.r, fill: KACHIZAKA.gold })
|
|
2915
2926
|
] }) }),
|
|
2916
|
-
/* @__PURE__ */
|
|
2927
|
+
/* @__PURE__ */ jsx27(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs24(Svg9, { viewBox, style: layer, children: [
|
|
2928
|
+
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.node.d, fill: KACHIZAKA.gold, stroke: KACHIZAKA.gold, strokeWidth: KACHIZAKA.node.soften, strokeLinejoin: "round" }),
|
|
2929
|
+
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.node.light, fill: KACHIZAKA.highlight })
|
|
2930
|
+
] }) })
|
|
2917
2931
|
] });
|
|
2918
2932
|
}
|
|
2919
2933
|
|
|
2920
2934
|
// src/native/KrizakaMark.tsx
|
|
2921
|
-
import { View as
|
|
2922
|
-
import Svg10, { Circle as Circle4, Defs as Defs5, G as Group, LinearGradient as
|
|
2935
|
+
import { View as View24 } from "react-native";
|
|
2936
|
+
import Svg10, { Circle as Circle4, Defs as Defs5, G as Group, LinearGradient as LinearGradient3, Path as Path8, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
|
|
2923
2937
|
|
|
2924
2938
|
// src/marks/krizaka-geometry.ts
|
|
2925
2939
|
var KRIZAKA = {
|
|
@@ -2941,39 +2955,39 @@ var KRIZAKA = {
|
|
|
2941
2955
|
};
|
|
2942
2956
|
|
|
2943
2957
|
// src/native/KrizakaMark.tsx
|
|
2944
|
-
import { Fragment as Fragment5, jsx as
|
|
2958
|
+
import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2945
2959
|
function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
2946
2960
|
const { theme } = useTheme();
|
|
2947
2961
|
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
2948
2962
|
const id = useSvgId("kzm");
|
|
2949
2963
|
const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
|
|
2950
2964
|
const stroke = neutral ?? theme.textMuted;
|
|
2951
|
-
const blue = /* @__PURE__ */
|
|
2952
|
-
const dot = (c) => /* @__PURE__ */
|
|
2953
|
-
/* @__PURE__ */
|
|
2954
|
-
/* @__PURE__ */
|
|
2965
|
+
const blue = /* @__PURE__ */ jsx28(LinearGradient3, { 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__ */ jsx28(Stop5, { offset, stopColor: color }, offset)) });
|
|
2966
|
+
const dot = (c) => /* @__PURE__ */ jsxs25(Fragment5, { children: [
|
|
2967
|
+
/* @__PURE__ */ jsx28(Circle4, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
|
|
2968
|
+
/* @__PURE__ */ jsx28(Circle4, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
|
|
2955
2969
|
] });
|
|
2956
|
-
return /* @__PURE__ */
|
|
2957
|
-
/* @__PURE__ */
|
|
2958
|
-
/* @__PURE__ */
|
|
2959
|
-
/* @__PURE__ */
|
|
2960
|
-
/* @__PURE__ */
|
|
2961
|
-
/* @__PURE__ */
|
|
2970
|
+
return /* @__PURE__ */ jsxs25(View24, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
2971
|
+
/* @__PURE__ */ jsxs25(Svg10, { viewBox, style: layer, children: [
|
|
2972
|
+
/* @__PURE__ */ jsxs25(Defs5, { children: [
|
|
2973
|
+
/* @__PURE__ */ jsxs25(RadialGradient3, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
2974
|
+
/* @__PURE__ */ jsx28(Stop5, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
|
|
2975
|
+
/* @__PURE__ */ jsx28(Stop5, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
|
|
2962
2976
|
] }),
|
|
2963
|
-
/* @__PURE__ */
|
|
2964
|
-
/* @__PURE__ */
|
|
2965
|
-
/* @__PURE__ */
|
|
2977
|
+
/* @__PURE__ */ jsxs25(LinearGradient3, { 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: [
|
|
2978
|
+
/* @__PURE__ */ jsx28(Stop5, { offset: "0%", stopColor: theme.textSecondary }),
|
|
2979
|
+
/* @__PURE__ */ jsx28(Stop5, { offset: "100%", stopColor: theme.textPrimary })
|
|
2966
2980
|
] }),
|
|
2967
2981
|
blue
|
|
2968
2982
|
] }),
|
|
2969
|
-
size >= 48 ? /* @__PURE__ */
|
|
2970
|
-
/* @__PURE__ */
|
|
2971
|
-
/* @__PURE__ */
|
|
2983
|
+
size >= 48 ? /* @__PURE__ */ jsx28(Circle4, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
|
|
2984
|
+
/* @__PURE__ */ jsx28(Circle4, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
2985
|
+
/* @__PURE__ */ jsx28(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx28(Path8, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
|
|
2972
2986
|
] }),
|
|
2973
|
-
/* @__PURE__ */
|
|
2974
|
-
/* @__PURE__ */
|
|
2975
|
-
/* @__PURE__ */
|
|
2976
|
-
/* @__PURE__ */
|
|
2987
|
+
/* @__PURE__ */ jsx28(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx28(Svg10, { viewBox, style: layer, children: /* @__PURE__ */ jsx28(Circle4, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
|
|
2988
|
+
/* @__PURE__ */ jsx28(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs25(Svg10, { viewBox, style: layer, children: [
|
|
2989
|
+
/* @__PURE__ */ jsx28(Defs5, { children: blue }),
|
|
2990
|
+
/* @__PURE__ */ jsxs25(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
|
|
2977
2991
|
dot(KRIZAKA.node),
|
|
2978
2992
|
dot(KRIZAKA.core)
|
|
2979
2993
|
] })
|
|
@@ -2983,12 +2997,12 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
2983
2997
|
|
|
2984
2998
|
// src/native/loader.tsx
|
|
2985
2999
|
import * as React22 from "react";
|
|
2986
|
-
import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated11, Easing as Easing5, StyleSheet as
|
|
3000
|
+
import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated11, Easing as Easing5, StyleSheet as StyleSheet25, View as View30 } from "react-native";
|
|
2987
3001
|
import Svg16, { Circle as Circle10, Path as Path14 } from "react-native-svg";
|
|
2988
3002
|
|
|
2989
3003
|
// src/native/OrazakaMark.tsx
|
|
2990
|
-
import { View as
|
|
2991
|
-
import Svg11, { Circle as Circle5, Defs as Defs6, LinearGradient as
|
|
3004
|
+
import { View as View25 } from "react-native";
|
|
3005
|
+
import Svg11, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient4, Path as Path9, RadialGradient as RadialGradient4, Stop as Stop6 } from "react-native-svg";
|
|
2992
3006
|
|
|
2993
3007
|
// src/marks/orazaka-geometry.ts
|
|
2994
3008
|
var orange = marks.orazaka[marks.orazaka.length - 1][1];
|
|
@@ -3017,41 +3031,41 @@ var ORAZAKA = {
|
|
|
3017
3031
|
};
|
|
3018
3032
|
|
|
3019
3033
|
// src/native/OrazakaMark.tsx
|
|
3020
|
-
import { jsx as
|
|
3034
|
+
import { jsx as jsx29, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
3021
3035
|
function OrazakaMark({ size = 48, animated = true, title, neutral }) {
|
|
3022
3036
|
const { theme } = useTheme();
|
|
3023
3037
|
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
3024
3038
|
const id = useSvgId("ozm");
|
|
3025
3039
|
const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
|
|
3026
3040
|
const stroke = neutral ?? theme.textMuted;
|
|
3027
|
-
const gradient = /* @__PURE__ */
|
|
3041
|
+
const gradient = /* @__PURE__ */ jsx29(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__ */ jsx29(Stop6, { offset, stopColor: color }, offset)) });
|
|
3028
3042
|
const fill = `url(#${id}a)`;
|
|
3029
|
-
return /* @__PURE__ */
|
|
3030
|
-
/* @__PURE__ */
|
|
3031
|
-
/* @__PURE__ */
|
|
3032
|
-
/* @__PURE__ */
|
|
3033
|
-
/* @__PURE__ */
|
|
3043
|
+
return /* @__PURE__ */ jsxs26(View25, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3044
|
+
/* @__PURE__ */ jsxs26(Svg11, { viewBox, style: layer, children: [
|
|
3045
|
+
/* @__PURE__ */ jsx29(Defs6, { children: /* @__PURE__ */ jsxs26(RadialGradient4, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
3046
|
+
/* @__PURE__ */ jsx29(Stop6, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
|
|
3047
|
+
/* @__PURE__ */ jsx29(Stop6, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
|
|
3034
3048
|
] }) }),
|
|
3035
|
-
size >= 48 ? /* @__PURE__ */
|
|
3036
|
-
/* @__PURE__ */
|
|
3037
|
-
/* @__PURE__ */
|
|
3049
|
+
size >= 48 ? /* @__PURE__ */ jsx29(Circle5, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3050
|
+
/* @__PURE__ */ jsx29(Circle5, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
3051
|
+
/* @__PURE__ */ jsx29(Circle5, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
|
|
3038
3052
|
] }),
|
|
3039
|
-
/* @__PURE__ */
|
|
3040
|
-
/* @__PURE__ */
|
|
3041
|
-
ORAZAKA.shards.map((d) => /* @__PURE__ */
|
|
3053
|
+
/* @__PURE__ */ jsx29(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs26(Svg11, { viewBox, style: layer, children: [
|
|
3054
|
+
/* @__PURE__ */ jsx29(Defs6, { children: gradient }),
|
|
3055
|
+
ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx29(Path9, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
|
|
3042
3056
|
] }) }),
|
|
3043
|
-
/* @__PURE__ */
|
|
3044
|
-
/* @__PURE__ */
|
|
3045
|
-
/* @__PURE__ */
|
|
3046
|
-
/* @__PURE__ */
|
|
3057
|
+
/* @__PURE__ */ jsx29(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs26(Svg11, { viewBox, style: layer, children: [
|
|
3058
|
+
/* @__PURE__ */ jsx29(Defs6, { children: gradient }),
|
|
3059
|
+
/* @__PURE__ */ jsx29(Circle5, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
|
|
3060
|
+
/* @__PURE__ */ jsx29(Circle5, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
|
|
3047
3061
|
] }) })
|
|
3048
3062
|
] });
|
|
3049
3063
|
}
|
|
3050
3064
|
|
|
3051
3065
|
// src/native/OrochiaMark.tsx
|
|
3052
3066
|
import { useEffect as useEffect12, useState as useState20 } from "react";
|
|
3053
|
-
import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated10, Easing as Easing4, View as
|
|
3054
|
-
import Svg12, { Circle as Circle6, Defs as Defs7, Ellipse, G as Group2, LinearGradient as
|
|
3067
|
+
import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated10, Easing as Easing4, View as View26 } from "react-native";
|
|
3068
|
+
import Svg12, { Circle as Circle6, Defs as Defs7, Ellipse, G as Group2, LinearGradient as LinearGradient5, Path as Path10, RadialGradient as RadialGradient5, Stop as Stop7 } from "react-native-svg";
|
|
3055
3069
|
|
|
3056
3070
|
// src/marks/orochia-geometry.ts
|
|
3057
3071
|
var OROCHIA = {
|
|
@@ -3078,7 +3092,7 @@ var OROCHIA = {
|
|
|
3078
3092
|
};
|
|
3079
3093
|
|
|
3080
3094
|
// src/native/OrochiaMark.tsx
|
|
3081
|
-
import { jsx as
|
|
3095
|
+
import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
3082
3096
|
var CENTER = OROCHIA.offset + 180;
|
|
3083
3097
|
function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }) {
|
|
3084
3098
|
const { theme } = useTheme();
|
|
@@ -3110,42 +3124,41 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
|
|
|
3110
3124
|
const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
|
|
3111
3125
|
const layer = { position: "absolute", width: size, height: size };
|
|
3112
3126
|
const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
|
|
3113
|
-
const bodyGradient = /* @__PURE__ */
|
|
3114
|
-
return /* @__PURE__ */
|
|
3115
|
-
/* @__PURE__ */
|
|
3116
|
-
/* @__PURE__ */
|
|
3117
|
-
/* @__PURE__ */
|
|
3118
|
-
/* @__PURE__ */
|
|
3127
|
+
const bodyGradient = /* @__PURE__ */ jsx30(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__ */ jsx30(Stop7, { offset, stopColor: color }, offset)) });
|
|
3128
|
+
return /* @__PURE__ */ jsxs27(View26, { style: { width: size, height: size }, ...a11y, children: [
|
|
3129
|
+
/* @__PURE__ */ jsxs27(Svg12, { viewBox, style: layer, children: [
|
|
3130
|
+
/* @__PURE__ */ jsx30(Defs7, { children: /* @__PURE__ */ jsxs27(RadialGradient5, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
3131
|
+
/* @__PURE__ */ jsx30(Stop7, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
|
|
3132
|
+
/* @__PURE__ */ jsx30(Stop7, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
|
|
3119
3133
|
] }) }),
|
|
3120
|
-
/* @__PURE__ */
|
|
3121
|
-
/* @__PURE__ */
|
|
3134
|
+
/* @__PURE__ */ jsx30(Circle6, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
|
|
3135
|
+
/* @__PURE__ */ jsx30(Circle6, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
|
|
3122
3136
|
] }),
|
|
3123
|
-
/* @__PURE__ */
|
|
3124
|
-
/* @__PURE__ */
|
|
3125
|
-
/* @__PURE__ */
|
|
3126
|
-
/* @__PURE__ */
|
|
3127
|
-
/* @__PURE__ */
|
|
3128
|
-
/* @__PURE__ */
|
|
3129
|
-
/* @__PURE__ */
|
|
3130
|
-
/* @__PURE__ */
|
|
3131
|
-
/* @__PURE__ */
|
|
3132
|
-
/* @__PURE__ */
|
|
3137
|
+
/* @__PURE__ */ jsx30(Animated10.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx30(Svg12, { viewBox, style: layer, children: /* @__PURE__ */ jsx30(Circle6, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
|
|
3138
|
+
/* @__PURE__ */ jsxs27(Svg12, { viewBox, style: layer, children: [
|
|
3139
|
+
/* @__PURE__ */ jsx30(Defs7, { children: bodyGradient }),
|
|
3140
|
+
/* @__PURE__ */ jsxs27(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
|
|
3141
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
|
|
3142
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
|
|
3143
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
|
|
3144
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
|
|
3145
|
+
/* @__PURE__ */ jsx30(Ellipse, { 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)" }),
|
|
3146
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
|
|
3133
3147
|
] })
|
|
3134
3148
|
] }),
|
|
3135
|
-
/* @__PURE__ */
|
|
3136
|
-
/* @__PURE__ */
|
|
3137
|
-
/* @__PURE__ */
|
|
3138
|
-
/* @__PURE__ */
|
|
3139
|
-
/* @__PURE__ */
|
|
3149
|
+
/* @__PURE__ */ jsx30(Animated10.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs27(Svg12, { viewBox, style: layer, children: [
|
|
3150
|
+
/* @__PURE__ */ jsx30(Defs7, { children: /* @__PURE__ */ jsx30(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx30(Stop7, { offset, stopColor: color }, offset)) }) }),
|
|
3151
|
+
/* @__PURE__ */ jsxs27(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
|
|
3152
|
+
/* @__PURE__ */ jsx30(Circle6, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
|
|
3153
|
+
/* @__PURE__ */ jsx30(Path10, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
|
|
3140
3154
|
] })
|
|
3141
3155
|
] }) })
|
|
3142
3156
|
] });
|
|
3143
3157
|
}
|
|
3144
3158
|
|
|
3145
3159
|
// src/native/YasakiaMark.tsx
|
|
3146
|
-
import
|
|
3147
|
-
import {
|
|
3148
|
-
import Svg13, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient8, Path as Path11, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
|
|
3160
|
+
import { View as View27 } from "react-native";
|
|
3161
|
+
import Svg13, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient6, Path as Path11, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
|
|
3149
3162
|
|
|
3150
3163
|
// src/marks/yasakia-geometry.ts
|
|
3151
3164
|
var turquoise = marks.yasakia[marks.yasakia.length - 1][1];
|
|
@@ -3153,77 +3166,63 @@ var YASAKIA = {
|
|
|
3153
3166
|
viewBox: "0 0 400 400",
|
|
3154
3167
|
croppedViewBox: "80 80 240 240",
|
|
3155
3168
|
center: 200,
|
|
3156
|
-
|
|
3157
|
-
|
|
3158
|
-
|
|
3159
|
-
|
|
3169
|
+
bubble: { cx: 200, cy: 200, r: 86 },
|
|
3170
|
+
/** The two tails, out of the bubble at 115°–160° and, turned 180° about the centre, at 295°–340°. */
|
|
3171
|
+
tails: [
|
|
3172
|
+
"M163.7 277.9 Q138 294 106 304 Q124 270 119.2 229.4 Z",
|
|
3173
|
+
"M236.3 122.1 Q262 106 294 96 Q276 130 280.8 170.6 Z"
|
|
3160
3174
|
],
|
|
3161
|
-
/** The
|
|
3162
|
-
|
|
3163
|
-
|
|
3164
|
-
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 },
|
|
3175
|
+
/** The spark: a diamond of light (half-diagonal 24, softened by a 6-unit round stroke). */
|
|
3176
|
+
spark: { d: "M200 176 L224 200 L200 224 L176 200 Z", soften: 6 },
|
|
3177
|
+
highlight: "#f0fdfa",
|
|
3165
3178
|
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yasakia },
|
|
3166
|
-
/** The
|
|
3167
|
-
|
|
3168
|
-
/** The pair: two nodes on the orbit, opposite each other, that turn with it. */
|
|
3169
|
-
pair: { r: 8, at: [[40, 200], [360, 200]] },
|
|
3179
|
+
/** The two people: one node on the orbit, that turns with it. */
|
|
3180
|
+
node: { r: 9, at: [200, 40] },
|
|
3170
3181
|
glow: { color: turquoise, opacity: 0.16 },
|
|
3171
|
-
/** The core's breathing shadow (web), in the mark's turquoise. */
|
|
3172
3182
|
pulse: { color: turquoise, low: 0.3, high: 0.6 },
|
|
3183
|
+
motion: { spin: 30, breath: 3.2 },
|
|
3173
3184
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3174
3185
|
ring: { r: 134, width: 1 }
|
|
3175
3186
|
};
|
|
3176
3187
|
|
|
3177
3188
|
// src/native/YasakiaMark.tsx
|
|
3178
|
-
import { jsx as
|
|
3189
|
+
import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
3179
3190
|
function YasakiaMark({ size = 48, animated = true, title, neutral }) {
|
|
3180
3191
|
const { theme } = useTheme();
|
|
3181
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
3192
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YASAKIA.motion.spin * 1e3);
|
|
3182
3193
|
const id = useSvgId("yzm");
|
|
3183
3194
|
const viewBox = size < 48 ? YASAKIA.croppedViewBox : YASAKIA.viewBox;
|
|
3184
3195
|
const stroke = neutral ?? theme.textMuted;
|
|
3185
|
-
const gradient = /* @__PURE__ */
|
|
3196
|
+
const gradient = /* @__PURE__ */ jsx31(LinearGradient6, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YASAKIA.gradient.x1, y1: YASAKIA.gradient.y1, x2: YASAKIA.gradient.x2, y2: YASAKIA.gradient.y2, children: YASAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx31(Stop8, { offset, stopColor: color }, offset)) });
|
|
3186
3197
|
const fill = `url(#${id}a)`;
|
|
3187
|
-
return /* @__PURE__ */
|
|
3188
|
-
/* @__PURE__ */
|
|
3189
|
-
/* @__PURE__ */
|
|
3190
|
-
/* @__PURE__ */
|
|
3191
|
-
/* @__PURE__ */
|
|
3192
|
-
/* @__PURE__ */
|
|
3198
|
+
return /* @__PURE__ */ jsxs28(View27, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3199
|
+
/* @__PURE__ */ jsxs28(Svg13, { viewBox, style: layer, children: [
|
|
3200
|
+
/* @__PURE__ */ jsxs28(Defs8, { children: [
|
|
3201
|
+
/* @__PURE__ */ jsxs28(RadialGradient6, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
3202
|
+
/* @__PURE__ */ jsx31(Stop8, { offset: "0%", stopColor: YASAKIA.glow.color, stopOpacity: YASAKIA.glow.opacity }),
|
|
3203
|
+
/* @__PURE__ */ jsx31(Stop8, { offset: "100%", stopColor: YASAKIA.glow.color, stopOpacity: 0 })
|
|
3193
3204
|
] }),
|
|
3194
3205
|
gradient
|
|
3195
3206
|
] }),
|
|
3196
|
-
size >= 48 ? /* @__PURE__ */
|
|
3197
|
-
/* @__PURE__ */
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
/* @__PURE__ */ jsx30(Path11, { d: v.tail, fill }),
|
|
3201
|
-
i === 0 ? /* @__PURE__ */ jsx30(Path11, { d: `${v.body} ${v.tail}`, fill: YASAKIA.shade.color, opacity: YASAKIA.shade.opacity }) : null
|
|
3202
|
-
] }, v.body))
|
|
3207
|
+
size >= 48 ? /* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.center, cy: YASAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3208
|
+
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.center, cy: YASAKIA.center, r: YASAKIA.ring.r, stroke, strokeWidth: YASAKIA.ring.width, opacity: 0.35, fill: "none" }),
|
|
3209
|
+
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.bubble.cx, cy: YASAKIA.bubble.cy, r: YASAKIA.bubble.r, fill }),
|
|
3210
|
+
/* @__PURE__ */ jsx31(Path11, { d: YASAKIA.tails.join(" "), fill })
|
|
3203
3211
|
] }),
|
|
3204
|
-
/* @__PURE__ */
|
|
3205
|
-
/* @__PURE__ */
|
|
3206
|
-
/* @__PURE__ */
|
|
3207
|
-
|
|
3212
|
+
/* @__PURE__ */ jsx31(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs28(Svg13, { viewBox, style: layer, children: [
|
|
3213
|
+
/* @__PURE__ */ jsx31(Defs8, { children: gradient }),
|
|
3214
|
+
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.center, cy: YASAKIA.center, r: YASAKIA.orbit.r, stroke, strokeWidth: YASAKIA.orbit.width, strokeDasharray: YASAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
3215
|
+
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.node.at[0], cy: YASAKIA.node.at[1], r: YASAKIA.node.r, fill })
|
|
3208
3216
|
] }) }),
|
|
3209
|
-
/* @__PURE__ */
|
|
3210
|
-
/* @__PURE__ */ jsxs27(Defs8, { children: [
|
|
3211
|
-
gradient,
|
|
3212
|
-
/* @__PURE__ */ jsxs27(LinearGradient8, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YASAKIA.lens.y1, x2: 0, y2: YASAKIA.lens.y2, children: [
|
|
3213
|
-
/* @__PURE__ */ jsx30(Stop8, { offset: "0%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.from }),
|
|
3214
|
-
/* @__PURE__ */ jsx30(Stop8, { offset: "100%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.to })
|
|
3215
|
-
] })
|
|
3216
|
-
] }),
|
|
3217
|
-
/* @__PURE__ */ jsx30(Path11, { d: YASAKIA.lens.d, fill }),
|
|
3218
|
-
/* @__PURE__ */ jsx30(Path11, { d: YASAKIA.lens.d, fill: `url(#${id}l)` })
|
|
3219
|
-
] }) })
|
|
3217
|
+
/* @__PURE__ */ jsx31(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsx31(Svg13, { viewBox, style: layer, children: /* @__PURE__ */ jsx31(Path11, { d: YASAKIA.spark.d, fill: YASAKIA.highlight, stroke: YASAKIA.highlight, strokeWidth: YASAKIA.spark.soften, strokeLinejoin: "round" }) }) })
|
|
3220
3218
|
] });
|
|
3221
3219
|
}
|
|
3222
3220
|
var YazakiaMark = YasakiaMark;
|
|
3223
3221
|
|
|
3224
3222
|
// src/native/YomizakaMark.tsx
|
|
3225
|
-
import
|
|
3226
|
-
import
|
|
3223
|
+
import React21 from "react";
|
|
3224
|
+
import { View as View28 } from "react-native";
|
|
3225
|
+
import Svg14, { Circle as Circle8, Defs as Defs9, LinearGradient as LinearGradient7, Path as Path12, RadialGradient as RadialGradient7, Stop as Stop9 } from "react-native-svg";
|
|
3227
3226
|
|
|
3228
3227
|
// src/marks/yomizaka-geometry.ts
|
|
3229
3228
|
var indigo = marks.yomizaka[marks.yomizaka.length - 1][1];
|
|
@@ -3231,74 +3230,72 @@ var YOMIZAKA = {
|
|
|
3231
3230
|
viewBox: "0 0 400 400",
|
|
3232
3231
|
croppedViewBox: "80 80 240 240",
|
|
3233
3232
|
center: 200,
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
/**
|
|
3233
|
+
stroke: 22,
|
|
3234
|
+
/** The brow: two soft arcs that meet over the beak — calm, never a sharp V. */
|
|
3235
|
+
brow: "M106 153 C130 125 176 129 200 159 C224 129 270 125 294 153",
|
|
3236
|
+
/** The two lenses (rings at the family stroke). */
|
|
3237
|
+
lenses: [
|
|
3238
|
+
{ cx: 146, cy: 223, r: 40 },
|
|
3239
|
+
{ cx: 254, cy: 223, r: 40 }
|
|
3240
|
+
],
|
|
3241
|
+
/** The pupils, glancing down-right (reading): the lit cores. */
|
|
3242
|
+
pupils: [
|
|
3243
|
+
{ cx: 154, cy: 229, r: 15, inner: 5.1 },
|
|
3244
|
+
{ cx: 262, cy: 229, r: 15, inner: 5.1 }
|
|
3245
|
+
],
|
|
3246
|
+
highlight: "#f4f5ff",
|
|
3247
|
+
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yomizaka },
|
|
3248
|
+
/** One node, a page, rides the orbit. */
|
|
3250
3249
|
node: { r: 9, at: [200, 40] },
|
|
3251
3250
|
glow: { color: indigo, opacity: 0.18 },
|
|
3252
|
-
/** The lens' breathing shadow (web), in the indigo. */
|
|
3253
3251
|
pulse: { color: indigo, low: 0.3, high: 0.6 },
|
|
3252
|
+
motion: { spin: 32, breath: 3.6 },
|
|
3254
3253
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3255
3254
|
ring: { r: 134, width: 1 }
|
|
3256
3255
|
};
|
|
3257
3256
|
|
|
3258
3257
|
// src/native/YomizakaMark.tsx
|
|
3259
|
-
import { jsx as
|
|
3258
|
+
import { jsx as jsx32, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
3260
3259
|
function YomizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
3261
3260
|
const { theme } = useTheme();
|
|
3262
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
3261
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YOMIZAKA.motion.spin * 1e3);
|
|
3263
3262
|
const id = useSvgId("ymm");
|
|
3264
3263
|
const viewBox = size < 48 ? YOMIZAKA.croppedViewBox : YOMIZAKA.viewBox;
|
|
3265
3264
|
const stroke = neutral ?? theme.textMuted;
|
|
3266
|
-
const gradient = /* @__PURE__ */
|
|
3265
|
+
const gradient = /* @__PURE__ */ jsx32(LinearGradient7, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YOMIZAKA.gradient.x1, y1: YOMIZAKA.gradient.y1, x2: YOMIZAKA.gradient.x2, y2: YOMIZAKA.gradient.y2, children: YOMIZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx32(Stop9, { offset, stopColor: color }, offset)) });
|
|
3267
3266
|
const fill = `url(#${id}a)`;
|
|
3268
|
-
return /* @__PURE__ */
|
|
3269
|
-
/* @__PURE__ */
|
|
3270
|
-
/* @__PURE__ */
|
|
3271
|
-
/* @__PURE__ */
|
|
3272
|
-
/* @__PURE__ */
|
|
3273
|
-
/* @__PURE__ */
|
|
3267
|
+
return /* @__PURE__ */ jsxs29(View28, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3268
|
+
/* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
3269
|
+
/* @__PURE__ */ jsxs29(Defs9, { children: [
|
|
3270
|
+
/* @__PURE__ */ jsxs29(RadialGradient7, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
3271
|
+
/* @__PURE__ */ jsx32(Stop9, { offset: "0%", stopColor: YOMIZAKA.glow.color, stopOpacity: YOMIZAKA.glow.opacity }),
|
|
3272
|
+
/* @__PURE__ */ jsx32(Stop9, { offset: "100%", stopColor: YOMIZAKA.glow.color, stopOpacity: 0 })
|
|
3274
3273
|
] }),
|
|
3275
3274
|
gradient
|
|
3276
3275
|
] }),
|
|
3277
|
-
size >= 48 ? /* @__PURE__ */
|
|
3278
|
-
/* @__PURE__ */
|
|
3279
|
-
/* @__PURE__ */
|
|
3280
|
-
/* @__PURE__ */
|
|
3281
|
-
/* @__PURE__ */ jsx31(Path12, { d: YOMIZAKA.handle, stroke: fill, strokeWidth: YOMIZAKA.handleWidth, strokeLinecap: "round", fill: "none" })
|
|
3276
|
+
size >= 48 ? /* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.center, cy: YOMIZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3277
|
+
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.center, cy: YOMIZAKA.center, r: YOMIZAKA.ring.r, stroke, strokeWidth: YOMIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
3278
|
+
/* @__PURE__ */ jsx32(Path12, { d: YOMIZAKA.brow, stroke: fill, strokeWidth: YOMIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
|
|
3279
|
+
YOMIZAKA.lenses.map((l) => /* @__PURE__ */ jsx32(Circle8, { cx: l.cx, cy: l.cy, r: l.r, stroke: fill, strokeWidth: YOMIZAKA.stroke, fill: "none" }, l.cx))
|
|
3282
3280
|
] }),
|
|
3283
|
-
/* @__PURE__ */
|
|
3284
|
-
/* @__PURE__ */
|
|
3285
|
-
/* @__PURE__ */
|
|
3286
|
-
/* @__PURE__ */
|
|
3281
|
+
/* @__PURE__ */ jsx32(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
3282
|
+
/* @__PURE__ */ jsx32(Defs9, { children: gradient }),
|
|
3283
|
+
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.center, cy: YOMIZAKA.center, r: YOMIZAKA.orbit.r, stroke, strokeWidth: YOMIZAKA.orbit.width, strokeDasharray: YOMIZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
3284
|
+
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.node.at[0], cy: YOMIZAKA.node.at[1], r: YOMIZAKA.node.r, fill })
|
|
3287
3285
|
] }) }),
|
|
3288
|
-
/* @__PURE__ */
|
|
3289
|
-
/* @__PURE__ */
|
|
3290
|
-
|
|
3291
|
-
/* @__PURE__ */
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
/* @__PURE__ */ jsx31(Circle8, { cx: YOMIZAKA.lens.glint.cx, cy: YOMIZAKA.lens.glint.cy, r: YOMIZAKA.lens.glint.r, fill: YOMIZAKA.highlight })
|
|
3286
|
+
/* @__PURE__ */ jsx32(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
3287
|
+
/* @__PURE__ */ jsx32(Defs9, { children: gradient }),
|
|
3288
|
+
YOMIZAKA.pupils.map((p) => /* @__PURE__ */ jsxs29(React21.Fragment, { children: [
|
|
3289
|
+
/* @__PURE__ */ jsx32(Circle8, { cx: p.cx, cy: p.cy, r: p.r, fill }),
|
|
3290
|
+
/* @__PURE__ */ jsx32(Circle8, { cx: p.cx, cy: p.cy, r: p.inner, fill: YOMIZAKA.highlight })
|
|
3291
|
+
] }, p.cx))
|
|
3295
3292
|
] }) })
|
|
3296
3293
|
] });
|
|
3297
3294
|
}
|
|
3298
3295
|
|
|
3299
3296
|
// src/native/YororisMark.tsx
|
|
3300
|
-
import { View as
|
|
3301
|
-
import Svg15, { Circle as Circle9, Defs as Defs10,
|
|
3297
|
+
import { View as View29 } from "react-native";
|
|
3298
|
+
import Svg15, { Circle as Circle9, Defs as Defs10, Path as Path13, RadialGradient as RadialGradient8, Stop as Stop10 } from "react-native-svg";
|
|
3302
3299
|
|
|
3303
3300
|
// src/marks/yororis-geometry.ts
|
|
3304
3301
|
var sand = marks.yororis[0][1];
|
|
@@ -3307,85 +3304,68 @@ var YORORIS = {
|
|
|
3307
3304
|
viewBox: "0 0 400 400",
|
|
3308
3305
|
croppedViewBox: "80 80 240 240",
|
|
3309
3306
|
center: 200,
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
/**
|
|
3316
|
-
|
|
3317
|
-
vein: { color: "#fbf6ea", opacity: 0.45, width: 3, dash: "2 14" },
|
|
3318
|
-
/** The stem, from the junction down. */
|
|
3319
|
-
stem: "M200 244 L200 312",
|
|
3320
|
-
stroke: 30,
|
|
3321
|
-
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },
|
|
3322
|
-
/** The core's warm light: from the mark's sand (below) to a light sand (above). */
|
|
3323
|
-
coreGradient: { stops: [["0%", sand], ["100%", "#e6c993"]] },
|
|
3324
|
-
/** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */
|
|
3325
|
-
core: { cx: 200, cy: 184, r: 32, inner: 11 },
|
|
3307
|
+
stroke: 22,
|
|
3308
|
+
sand,
|
|
3309
|
+
sage,
|
|
3310
|
+
/** The two hands: arcs of a circle r 92 centred (200, 162), from 196° to 104° and from 76° to −16°; open at the bottom and the top. */
|
|
3311
|
+
hands: "M111.6 136.6 A92 92 0 0 0 177.7 251.3 M222.3 251.3 A92 92 0 0 0 288.4 136.6",
|
|
3312
|
+
/** The warm core, held inside the hands. */
|
|
3313
|
+
core: { cx: 200, cy: 176, r: 30, inner: 10.2 },
|
|
3326
3314
|
highlight: "#fbf6ea",
|
|
3327
|
-
|
|
3328
|
-
moment:
|
|
3315
|
+
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },
|
|
3316
|
+
/** The moment: one node on the orbit — it comes round, then it goes. */
|
|
3317
|
+
node: { r: 9, at: [200, 40] },
|
|
3329
3318
|
glow: { color: sage, opacity: 0.18 },
|
|
3330
|
-
/** The core's breathing shadow (web), in the core's warm sand. */
|
|
3331
3319
|
pulse: { color: sand, low: 0.3, high: 0.6 },
|
|
3320
|
+
motion: { spin: 36, breath: 4.2 },
|
|
3332
3321
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3333
3322
|
ring: { r: 134, width: 1 }
|
|
3334
3323
|
};
|
|
3335
3324
|
|
|
3336
3325
|
// src/native/YororisMark.tsx
|
|
3337
|
-
import { jsx as
|
|
3326
|
+
import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
3338
3327
|
function YororisMark({ size = 48, animated = true, title, neutral }) {
|
|
3339
3328
|
const { theme } = useTheme();
|
|
3340
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
3329
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YORORIS.motion.spin * 1e3);
|
|
3341
3330
|
const id = useSvgId("yrm");
|
|
3342
3331
|
const viewBox = size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox;
|
|
3343
3332
|
const stroke = neutral ?? theme.textMuted;
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
gradient
|
|
3354
|
-
] }),
|
|
3355
|
-
size >= 48 ? /* @__PURE__ */ jsx32(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3356
|
-
/* @__PURE__ */ jsx32(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
|
|
3357
|
-
/* @__PURE__ */ jsx32(Path13, { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" }),
|
|
3358
|
-
YORORIS.leaves.map((d) => /* @__PURE__ */ jsx32(Path13, { d, fill }, d)),
|
|
3359
|
-
/* @__PURE__ */ jsx32(Path13, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
|
|
3333
|
+
return /* @__PURE__ */ jsxs30(View29, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3334
|
+
/* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3335
|
+
/* @__PURE__ */ jsx33(Defs10, { children: /* @__PURE__ */ jsxs30(RadialGradient8, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
|
|
3336
|
+
/* @__PURE__ */ jsx33(Stop10, { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
|
|
3337
|
+
/* @__PURE__ */ jsx33(Stop10, { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: 0 })
|
|
3338
|
+
] }) }),
|
|
3339
|
+
size >= 48 ? /* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3340
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
|
|
3341
|
+
/* @__PURE__ */ jsx33(Path13, { d: YORORIS.hands, stroke: YORORIS.sage, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" })
|
|
3360
3342
|
] }),
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3364
|
-
/* @__PURE__ */ jsx32(Circle9, { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
|
|
3343
|
+
/* @__PURE__ */ jsx33(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3344
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke, strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: 0.6, fill: "none" }),
|
|
3345
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.node.at[0], cy: YORORIS.node.at[1], r: YORORIS.node.r, fill: YORORIS.sage })
|
|
3365
3346
|
] }) }),
|
|
3366
|
-
/* @__PURE__ */
|
|
3367
|
-
/* @__PURE__ */
|
|
3368
|
-
/* @__PURE__ */
|
|
3369
|
-
/* @__PURE__ */ jsx32(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
|
|
3347
|
+
/* @__PURE__ */ jsx33(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3348
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: YORORIS.sand }),
|
|
3349
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
|
|
3370
3350
|
] }) })
|
|
3371
3351
|
] });
|
|
3372
3352
|
}
|
|
3373
3353
|
|
|
3374
3354
|
// src/native/ProductMark.tsx
|
|
3375
|
-
import { jsx as
|
|
3355
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
3376
3356
|
function ProductMark({ id, ...props }) {
|
|
3377
|
-
if (id === "krizaka") return /* @__PURE__ */
|
|
3378
|
-
if (id === "orazaka") return /* @__PURE__ */
|
|
3379
|
-
if (id === "yasakia" || id === "yazakia") return /* @__PURE__ */
|
|
3380
|
-
if (id === "yororis") return /* @__PURE__ */
|
|
3381
|
-
if (id === "yomizaka") return /* @__PURE__ */
|
|
3382
|
-
if (id === "kachizaka") return /* @__PURE__ */
|
|
3383
|
-
if (id === "akinaza") return /* @__PURE__ */
|
|
3384
|
-
return /* @__PURE__ */
|
|
3357
|
+
if (id === "krizaka") return /* @__PURE__ */ jsx34(KrizakaMark, { ...props });
|
|
3358
|
+
if (id === "orazaka") return /* @__PURE__ */ jsx34(OrazakaMark, { ...props });
|
|
3359
|
+
if (id === "yasakia" || id === "yazakia") return /* @__PURE__ */ jsx34(YasakiaMark, { ...props });
|
|
3360
|
+
if (id === "yororis") return /* @__PURE__ */ jsx34(YororisMark, { ...props });
|
|
3361
|
+
if (id === "yomizaka") return /* @__PURE__ */ jsx34(YomizakaMark, { ...props });
|
|
3362
|
+
if (id === "kachizaka") return /* @__PURE__ */ jsx34(KachizakaMark, { ...props });
|
|
3363
|
+
if (id === "akinaza") return /* @__PURE__ */ jsx34(AkinazaMark, { ...props });
|
|
3364
|
+
return /* @__PURE__ */ jsx34(OrochiaMark, { ...props });
|
|
3385
3365
|
}
|
|
3386
3366
|
|
|
3387
3367
|
// src/native/loader.tsx
|
|
3388
|
-
import { jsx as
|
|
3368
|
+
import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
3389
3369
|
var HEX = "M12 3 19.79 7.5 19.79 16.5 12 21 4.21 16.5 4.21 7.5Z";
|
|
3390
3370
|
var PERIMETER = 54;
|
|
3391
3371
|
function LoaderGlyph({ state = "loading", value, size = 20, color }) {
|
|
@@ -3402,12 +3382,12 @@ function LoaderGlyph({ state = "loading", value, size = 20, color }) {
|
|
|
3402
3382
|
const stroke = color ?? (state === "success" ? theme.success : state === "error" ? theme.danger : theme.accent);
|
|
3403
3383
|
const fill = state !== "loading" ? 1 : known ? Math.min(1, Math.max(0, value)) : 0.3;
|
|
3404
3384
|
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
|
|
3405
|
-
return /* @__PURE__ */
|
|
3406
|
-
/* @__PURE__ */
|
|
3407
|
-
/* @__PURE__ */
|
|
3408
|
-
state === "loading" ? /* @__PURE__ */
|
|
3409
|
-
state === "success" ? /* @__PURE__ */
|
|
3410
|
-
state === "error" ? /* @__PURE__ */
|
|
3385
|
+
return /* @__PURE__ */ jsx35(Animated11.View, { "aria-hidden": true, style: { width: size, height: size, transform: state === "loading" && !known ? [{ rotate }] : [] }, children: /* @__PURE__ */ jsxs31(Svg16, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", children: [
|
|
3386
|
+
/* @__PURE__ */ jsx35(Path14, { d: HEX, stroke, strokeOpacity: 0.22, strokeWidth: 2.2, strokeLinejoin: "round" }),
|
|
3387
|
+
/* @__PURE__ */ jsx35(Path14, { d: HEX, stroke, strokeWidth: 2.2, strokeLinejoin: "round", strokeLinecap: "round", strokeDasharray: `${fill * PERIMETER} ${PERIMETER}` }),
|
|
3388
|
+
state === "loading" ? /* @__PURE__ */ jsx35(Circle10, { cx: 12, cy: 12, r: 2.6, fill: stroke }) : null,
|
|
3389
|
+
state === "success" ? /* @__PURE__ */ jsx35(Path14, { d: "M8.3 12.3l2.6 2.6 4.9-5.3", stroke, strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round" }) : null,
|
|
3390
|
+
state === "error" ? /* @__PURE__ */ jsx35(Path14, { d: "M9.4 9.4l5.2 5.2M14.6 9.4l-5.2 5.2", stroke, strokeWidth: 2.2, strokeLinecap: "round" }) : null
|
|
3411
3391
|
] }) });
|
|
3412
3392
|
}
|
|
3413
3393
|
function useDelayedWait(active, delay = 250, minDuration = 600) {
|
|
@@ -3459,22 +3439,22 @@ function Loader({ label, status = "loading", successLabel, errorLabel, value, et
|
|
|
3459
3439
|
const known = phase === "loading" && typeof value === "number" && Number.isFinite(value);
|
|
3460
3440
|
const detail = phase === "loading" ? [known ? `${Math.round(Math.min(1, Math.max(0, value)) * 100)} %` : null, eta].filter(Boolean).join(" \xB7 ") : "";
|
|
3461
3441
|
const stacked = variant !== "inline";
|
|
3462
|
-
const box = /* @__PURE__ */
|
|
3463
|
-
product && phase === "loading" ? /* @__PURE__ */
|
|
3464
|
-
/* @__PURE__ */
|
|
3465
|
-
/* @__PURE__ */
|
|
3466
|
-
detail ? /* @__PURE__ */
|
|
3442
|
+
const box = /* @__PURE__ */ jsxs31(View30, { style: [stacked ? styles25.stacked : styles25.inline, variant === "overlay" ? { backgroundColor: alpha(theme.surface1, 0.92), borderColor: theme.borderDefault, borderRadius: radius3.lg, ...styles25.card } : null], children: [
|
|
3443
|
+
product && phase === "loading" ? /* @__PURE__ */ jsx35(ProductMark, { id: product, size: GLYPH[variant], animated: true }) : /* @__PURE__ */ jsx35(LoaderGlyph, { state: phase, value: known ? value : null, size: GLYPH[variant] }),
|
|
3444
|
+
/* @__PURE__ */ jsxs31(View30, { style: stacked ? styles25.center : styles25.text, children: [
|
|
3445
|
+
/* @__PURE__ */ jsx35(Txt, { variant: variant === "page" ? "title" : "label", style: stacked ? styles25.centered : null, children: words2 }),
|
|
3446
|
+
detail ? /* @__PURE__ */ jsx35(Txt, { variant: "caption", tone: "secondary", style: stacked ? styles25.centered : null, children: detail }) : null
|
|
3467
3447
|
] })
|
|
3468
3448
|
] });
|
|
3469
3449
|
const a11y = { accessible: true, role: "progressbar", "aria-label": words2, "aria-busy": phase === "loading", accessibilityLiveRegion: "polite" };
|
|
3470
3450
|
if (variant === "overlay" || variant === "page")
|
|
3471
|
-
return /* @__PURE__ */
|
|
3472
|
-
return /* @__PURE__ */
|
|
3451
|
+
return /* @__PURE__ */ jsx35(View30, { ...a11y, style: [StyleSheet25.absoluteFill, styles25.cover, variant === "page" ? { backgroundColor: alpha(theme.surface0, 0.86) } : null, style], children: box });
|
|
3452
|
+
return /* @__PURE__ */ jsx35(View30, { ...a11y, style: [variant === "block" ? styles25.block : null, style], children: box });
|
|
3473
3453
|
}
|
|
3474
|
-
var
|
|
3454
|
+
var styles25 = StyleSheet25.create({
|
|
3475
3455
|
inline: { flexDirection: "row", alignItems: "center", gap: 10 },
|
|
3476
3456
|
stacked: { alignItems: "center", gap: 10 },
|
|
3477
|
-
card: { paddingHorizontal: 24, paddingVertical: 20, borderWidth:
|
|
3457
|
+
card: { paddingHorizontal: 24, paddingVertical: 20, borderWidth: StyleSheet25.hairlineWidth },
|
|
3478
3458
|
text: { flexShrink: 1, gap: 2 },
|
|
3479
3459
|
center: { alignItems: "center", gap: 2 },
|
|
3480
3460
|
centered: { textAlign: "center" },
|
|
@@ -3482,14 +3462,37 @@ var styles24 = StyleSheet24.create({
|
|
|
3482
3462
|
cover: { alignItems: "center", justifyContent: "center", zIndex: 10 }
|
|
3483
3463
|
});
|
|
3484
3464
|
|
|
3465
|
+
// src/native/maintenance-screen.tsx
|
|
3466
|
+
import { StyleSheet as StyleSheet26, View as View31 } from "react-native";
|
|
3467
|
+
import { jsx as jsx36, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
3468
|
+
function MaintenanceScreen({ title, message, mark, retryLabel, onRetry, fill = true, style }) {
|
|
3469
|
+
const { theme } = useTheme();
|
|
3470
|
+
return /* @__PURE__ */ jsxs32(View31, { style: [styles26.root, fill ? styles26.fill : null, { backgroundColor: theme.surface0 }, style], children: [
|
|
3471
|
+
mark ? /* @__PURE__ */ jsx36(View31, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: styles26.mark, children: mark }) : null,
|
|
3472
|
+
/* @__PURE__ */ jsxs32(View31, { role: "status", style: styles26.text, children: [
|
|
3473
|
+
/* @__PURE__ */ jsx36(Txt, { variant: "title", style: styles26.centred, children: title }),
|
|
3474
|
+
message ? /* @__PURE__ */ jsx36(Txt, { tone: "secondary", style: styles26.centred, children: message }) : null
|
|
3475
|
+
] }),
|
|
3476
|
+
retryLabel && onRetry ? /* @__PURE__ */ jsx36(View31, { style: styles26.actions, children: /* @__PURE__ */ jsx36(Button, { label: retryLabel, variant: "secondary", onPress: onRetry }) }) : null
|
|
3477
|
+
] });
|
|
3478
|
+
}
|
|
3479
|
+
var styles26 = StyleSheet26.create({
|
|
3480
|
+
root: { alignItems: "center", justifyContent: "center", gap: 12, padding: 24 },
|
|
3481
|
+
fill: { flex: 1 },
|
|
3482
|
+
mark: { width: 96, height: 96, alignItems: "center", justifyContent: "center" },
|
|
3483
|
+
text: { gap: 8, alignItems: "center" },
|
|
3484
|
+
centred: { textAlign: "center", maxWidth: 340 },
|
|
3485
|
+
actions: { marginTop: 8, alignSelf: "stretch", maxWidth: 340, width: "100%" }
|
|
3486
|
+
});
|
|
3487
|
+
|
|
3485
3488
|
// src/native/mascot-state.tsx
|
|
3486
3489
|
import * as React24 from "react";
|
|
3487
|
-
import { AccessibilityInfo as AccessibilityInfo9, Animated as Animated13, Easing as Easing7, StyleSheet as
|
|
3490
|
+
import { AccessibilityInfo as AccessibilityInfo9, Animated as Animated13, Easing as Easing7, StyleSheet as StyleSheet27, View as View33 } from "react-native";
|
|
3488
3491
|
|
|
3489
3492
|
// src/native/mascots.tsx
|
|
3490
3493
|
import { useEffect as useEffect14, useState as useState22 } from "react";
|
|
3491
|
-
import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated12, Easing as Easing6, View as
|
|
3492
|
-
import Svg17, { Circle as Circle11, Defs as Defs11, Ellipse as Ellipse2, G, LinearGradient as
|
|
3494
|
+
import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated12, Easing as Easing6, View as View32 } from "react-native";
|
|
3495
|
+
import Svg17, { Circle as Circle11, Defs as Defs11, Ellipse as Ellipse2, G, LinearGradient as LinearGradient8, Path as Path15, Rect as Rect2, Stop as Stop11 } from "react-native-svg";
|
|
3493
3496
|
|
|
3494
3497
|
// src/mascots/geometry.ts
|
|
3495
3498
|
var mirror = (d) => d.replace(/(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/g, (_, x, y) => `${120 - Number(x)} ${y}`);
|
|
@@ -3691,7 +3694,7 @@ var SHADE = "#000000";
|
|
|
3691
3694
|
var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
|
|
3692
3695
|
|
|
3693
3696
|
// src/native/mascots.tsx
|
|
3694
|
-
import { jsx as
|
|
3697
|
+
import { jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
3695
3698
|
function useBob(animated) {
|
|
3696
3699
|
const [y] = useState22(() => new Animated12.Value(0));
|
|
3697
3700
|
useEffect14(() => {
|
|
@@ -3725,52 +3728,52 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone3 = "brand", size =
|
|
|
3725
3728
|
const look3 = mood === "thinking" ? 1.4 : 0;
|
|
3726
3729
|
const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
|
|
3727
3730
|
const [wl, wr] = g.wings;
|
|
3728
|
-
return /* @__PURE__ */
|
|
3729
|
-
/* @__PURE__ */
|
|
3730
|
-
/* @__PURE__ */
|
|
3731
|
-
/* @__PURE__ */
|
|
3731
|
+
return /* @__PURE__ */ jsx37(View32, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx37(Animated12.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs33(Svg17, { width: size, height: size, viewBox: "0 0 120 120", children: [
|
|
3732
|
+
/* @__PURE__ */ jsx37(Defs11, { children: /* @__PURE__ */ jsxs33(LinearGradient8, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
3733
|
+
/* @__PURE__ */ jsx37(Stop11, { offset: "0%", stopColor: p.from }),
|
|
3734
|
+
/* @__PURE__ */ jsx37(Stop11, { offset: "100%", stopColor: p.to })
|
|
3732
3735
|
] }) }),
|
|
3733
|
-
/* @__PURE__ */
|
|
3734
|
-
mood === "empty" && /* @__PURE__ */
|
|
3735
|
-
g.legs.map((d) => /* @__PURE__ */
|
|
3736
|
-
g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */
|
|
3737
|
-
g.parcel?.map((d, i) => /* @__PURE__ */
|
|
3738
|
-
/* @__PURE__ */
|
|
3739
|
-
/* @__PURE__ */
|
|
3736
|
+
/* @__PURE__ */ jsx37(Ellipse2, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
|
|
3737
|
+
mood === "empty" && /* @__PURE__ */ jsx37(Path15, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
|
|
3738
|
+
g.legs.map((d) => /* @__PURE__ */ jsx37(Path15, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
|
|
3739
|
+
g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx37(Path15, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx37(Path15, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
|
|
3740
|
+
g.parcel?.map((d, i) => /* @__PURE__ */ jsx37(Path15, { d, fill: PARCEL[i], ...line }, d)),
|
|
3741
|
+
/* @__PURE__ */ jsx37(Path15, { d: g.body, fill: body, ...line }),
|
|
3742
|
+
/* @__PURE__ */ jsx37(Path15, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
|
|
3740
3743
|
[wl, wr].map((w, i) => {
|
|
3741
3744
|
const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
|
|
3742
|
-
return /* @__PURE__ */
|
|
3743
|
-
/* @__PURE__ */
|
|
3744
|
-
/* @__PURE__ */
|
|
3745
|
+
return /* @__PURE__ */ jsxs33(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
|
|
3746
|
+
/* @__PURE__ */ jsx37(Path15, { d: w.d, fill: p.wing, ...line }),
|
|
3747
|
+
/* @__PURE__ */ jsx37(Path15, { d: w.d, fill: SHADE, opacity: 0.16 })
|
|
3745
3748
|
] }, i);
|
|
3746
3749
|
}),
|
|
3747
|
-
g.neck && /* @__PURE__ */
|
|
3748
|
-
g.head.r > 0 && /* @__PURE__ */
|
|
3749
|
-
g.details.map((d) => /* @__PURE__ */
|
|
3750
|
-
g.visor && /* @__PURE__ */
|
|
3750
|
+
g.neck && /* @__PURE__ */ jsx37(Path15, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
|
|
3751
|
+
g.head.r > 0 && /* @__PURE__ */ jsx37(Circle11, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
|
|
3752
|
+
g.details.map((d) => /* @__PURE__ */ jsx37(Path15, { d, fill: p.detail, ...line }, d)),
|
|
3753
|
+
g.visor && /* @__PURE__ */ jsx37(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
|
|
3751
3754
|
g.eyes.at.map(
|
|
3752
|
-
(at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */
|
|
3753
|
-
/* @__PURE__ */
|
|
3754
|
-
/* @__PURE__ */
|
|
3755
|
-
/* @__PURE__ */
|
|
3756
|
-
] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */
|
|
3757
|
-
g.eyes.white > 0 && /* @__PURE__ */
|
|
3758
|
-
/* @__PURE__ */
|
|
3755
|
+
(at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs33(G, { children: [
|
|
3756
|
+
/* @__PURE__ */ jsx37(Circle11, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
3757
|
+
/* @__PURE__ */ jsx37(Circle11, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
|
|
3758
|
+
/* @__PURE__ */ jsx37(Path15, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
|
|
3759
|
+
] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx37(Path15, { 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__ */ jsxs33(G, { children: [
|
|
3760
|
+
g.eyes.white > 0 && /* @__PURE__ */ jsx37(Circle11, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
3761
|
+
/* @__PURE__ */ jsx37(Circle11, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
|
|
3759
3762
|
] }, i)
|
|
3760
3763
|
),
|
|
3761
|
-
g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */
|
|
3762
|
-
mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */
|
|
3763
|
-
/* @__PURE__ */
|
|
3764
|
-
mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */
|
|
3765
|
-
(mood === "success" || mood === "error") && /* @__PURE__ */
|
|
3766
|
-
mood === "success" && /* @__PURE__ */
|
|
3767
|
-
mood === "error" && /* @__PURE__ */
|
|
3768
|
-
mood === "error" && /* @__PURE__ */
|
|
3764
|
+
g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx37(Circle11, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
|
|
3765
|
+
mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx37(Path15, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
|
|
3766
|
+
/* @__PURE__ */ jsx37(Path15, { d: g.beak, fill: p.beak, ...line }),
|
|
3767
|
+
mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx37(Circle11, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
|
|
3768
|
+
(mood === "success" || mood === "error") && /* @__PURE__ */ jsx37(Circle11, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
|
|
3769
|
+
mood === "success" && /* @__PURE__ */ jsx37(Path15, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
|
|
3770
|
+
mood === "error" && /* @__PURE__ */ jsx37(Path15, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
|
|
3771
|
+
mood === "error" && /* @__PURE__ */ jsx37(Circle11, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
|
|
3769
3772
|
] }) }) });
|
|
3770
3773
|
}
|
|
3771
3774
|
|
|
3772
3775
|
// src/native/mascot-state.tsx
|
|
3773
|
-
import { jsx as
|
|
3776
|
+
import { jsx as jsx38, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
3774
3777
|
var SIZE = { sm: 64, md: 96, lg: 128 };
|
|
3775
3778
|
function useArrival(animated) {
|
|
3776
3779
|
const [value] = React24.useState(() => new Animated13.Value(animated ? 0 : 1));
|
|
@@ -3791,30 +3794,30 @@ function useArrival(animated) {
|
|
|
3791
3794
|
function MascotState({ bird = "owl", mood = "empty", title, description, action, size = "md", layout = "stacked", tone: tone3, animated = true, style, ...props }) {
|
|
3792
3795
|
const opacity = useArrival(animated);
|
|
3793
3796
|
const inline = layout === "inline";
|
|
3794
|
-
return /* @__PURE__ */
|
|
3797
|
+
return /* @__PURE__ */ jsxs34(
|
|
3795
3798
|
Animated13.View,
|
|
3796
3799
|
{
|
|
3797
3800
|
role: mood === "error" ? "alert" : "status",
|
|
3798
3801
|
accessibilityLiveRegion: mood === "error" ? "assertive" : "polite",
|
|
3799
3802
|
"aria-busy": mood === "thinking" ? true : void 0,
|
|
3800
3803
|
...props,
|
|
3801
|
-
style: [inline ?
|
|
3804
|
+
style: [inline ? styles27.inline : styles27.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
|
|
3802
3805
|
children: [
|
|
3803
|
-
/* @__PURE__ */
|
|
3804
|
-
/* @__PURE__ */
|
|
3805
|
-
/* @__PURE__ */
|
|
3806
|
-
description ? /* @__PURE__ */
|
|
3807
|
-
action ? /* @__PURE__ */
|
|
3806
|
+
/* @__PURE__ */ jsx38(Mascot, { bird, mood, tone: tone3, size: SIZE[size], animated }),
|
|
3807
|
+
/* @__PURE__ */ jsxs34(View33, { style: inline ? styles27.wordsInline : styles27.words, children: [
|
|
3808
|
+
/* @__PURE__ */ jsx38(Txt, { variant: "label", role: "heading", style: inline ? null : styles27.center, children: title }),
|
|
3809
|
+
description ? /* @__PURE__ */ jsx38(Txt, { tone: "secondary", style: inline ? null : styles27.center, children: description }) : null,
|
|
3810
|
+
action ? /* @__PURE__ */ jsx38(View33, { style: [styles27.action, inline ? null : styles27.actionCentred], children: action }) : null
|
|
3808
3811
|
] })
|
|
3809
3812
|
]
|
|
3810
3813
|
}
|
|
3811
3814
|
);
|
|
3812
3815
|
}
|
|
3813
|
-
var ErrorState = (props) => /* @__PURE__ */
|
|
3814
|
-
var SuccessState = (props) => /* @__PURE__ */
|
|
3815
|
-
var LoadingState = (props) => /* @__PURE__ */
|
|
3816
|
-
var WelcomeState = (props) => /* @__PURE__ */
|
|
3817
|
-
var
|
|
3816
|
+
var ErrorState = (props) => /* @__PURE__ */ jsx38(MascotState, { mood: "error", ...props });
|
|
3817
|
+
var SuccessState = (props) => /* @__PURE__ */ jsx38(MascotState, { mood: "success", ...props });
|
|
3818
|
+
var LoadingState = (props) => /* @__PURE__ */ jsx38(MascotState, { mood: "thinking", ...props });
|
|
3819
|
+
var WelcomeState = (props) => /* @__PURE__ */ jsx38(MascotState, { mood: "welcome", ...props });
|
|
3820
|
+
var styles27 = StyleSheet27.create({
|
|
3818
3821
|
stacked: { alignItems: "center", justifyContent: "center", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },
|
|
3819
3822
|
inline: { flexDirection: "row", alignItems: "center", gap: 16 },
|
|
3820
3823
|
words: { alignItems: "center", gap: 6 },
|
|
@@ -3826,9 +3829,9 @@ var styles25 = StyleSheet25.create({
|
|
|
3826
3829
|
|
|
3827
3830
|
// src/native/match-dialog.tsx
|
|
3828
3831
|
import * as React25 from "react";
|
|
3829
|
-
import { AccessibilityInfo as AccessibilityInfo10, Animated as Animated14, Easing as Easing8, Modal as Modal4, Pressable as Pressable14, StyleSheet as
|
|
3832
|
+
import { AccessibilityInfo as AccessibilityInfo10, Animated as Animated14, Easing as Easing8, Modal as Modal4, Pressable as Pressable14, StyleSheet as StyleSheet28, View as View34 } from "react-native";
|
|
3830
3833
|
import Svg18, { Path as Path16 } from "react-native-svg";
|
|
3831
|
-
import { jsx as
|
|
3834
|
+
import { jsx as jsx39, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
3832
3835
|
function MatchDialog({ open, onOpenChange, title, description, people, primaryLabel, onPrimary, secondaryLabel }) {
|
|
3833
3836
|
const { theme, haptic } = useTheme();
|
|
3834
3837
|
const reduce = useReducedMotion();
|
|
@@ -3848,17 +3851,17 @@ function MatchDialog({ open, onOpenChange, title, description, people, primaryLa
|
|
|
3848
3851
|
}
|
|
3849
3852
|
}, [open, reduce, t]);
|
|
3850
3853
|
const side = (dir) => ({ transform: [{ translateX: t.interpolate({ inputRange: [0, 1], outputRange: [dir * 110, dir * 50] }) }, { rotate: dir === -1 ? "-8deg" : "8deg" }] });
|
|
3851
|
-
return /* @__PURE__ */
|
|
3852
|
-
/* @__PURE__ */
|
|
3853
|
-
/* @__PURE__ */
|
|
3854
|
-
description ? /* @__PURE__ */
|
|
3855
|
-
/* @__PURE__ */
|
|
3856
|
-
/* @__PURE__ */
|
|
3857
|
-
/* @__PURE__ */
|
|
3858
|
-
/* @__PURE__ */
|
|
3854
|
+
return /* @__PURE__ */ jsx39(Modal4, { ...modalName(title), visible: open, transparent: true, animationType: reduce ? "none" : "fade", onRequestClose: () => onOpenChange(false), statusBarTranslucent: true, children: /* @__PURE__ */ jsxs35(View34, { accessibilityViewIsModal: true, style: [styles28.screen, { backgroundColor: theme.accent }], children: [
|
|
3855
|
+
/* @__PURE__ */ jsx39(View34, { style: [StyleSheet28.absoluteFill, { backgroundColor: theme.accent2, opacity: 0.55 }] }),
|
|
3856
|
+
/* @__PURE__ */ jsx39(Txt, { variant: "display", tone: "onAccent", style: styles28.title, children: title }),
|
|
3857
|
+
description ? /* @__PURE__ */ jsx39(Txt, { tone: "onAccent", style: styles28.center, children: description }) : null,
|
|
3858
|
+
/* @__PURE__ */ jsxs35(View34, { style: styles28.pair, "aria-hidden": true, children: [
|
|
3859
|
+
/* @__PURE__ */ jsx39(Animated14.View, { style: [styles28.photo, side(-1), { borderColor: theme.onAccent }], children: /* @__PURE__ */ jsx39(Avatar, { src: people[0].src, alt: "", fallback: people[0].name.charAt(0), size: 112 }) }),
|
|
3860
|
+
/* @__PURE__ */ jsx39(Animated14.View, { style: [styles28.photo, side(1), { borderColor: theme.onAccent }], children: /* @__PURE__ */ jsx39(Avatar, { src: people[1].src, alt: "", fallback: people[1].name.charAt(0), size: 112 }) }),
|
|
3861
|
+
/* @__PURE__ */ jsx39(Animated14.View, { style: [styles28.heart, { backgroundColor: theme.onAccent, transform: [{ scale: t }] }], children: /* @__PURE__ */ jsx39(Svg18, { width: 26, height: 26, viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx39(Path16, { d: "M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z", fill: theme.accent }) }) })
|
|
3859
3862
|
] }),
|
|
3860
|
-
/* @__PURE__ */
|
|
3861
|
-
/* @__PURE__ */
|
|
3863
|
+
/* @__PURE__ */ jsxs35(View34, { style: styles28.actions, children: [
|
|
3864
|
+
/* @__PURE__ */ jsx39(
|
|
3862
3865
|
Button,
|
|
3863
3866
|
{
|
|
3864
3867
|
label: primaryLabel,
|
|
@@ -3869,11 +3872,11 @@ function MatchDialog({ open, onOpenChange, title, description, people, primaryLa
|
|
|
3869
3872
|
}
|
|
3870
3873
|
}
|
|
3871
3874
|
),
|
|
3872
|
-
/* @__PURE__ */
|
|
3875
|
+
/* @__PURE__ */ jsx39(Pressable14, { role: "button", onPress: () => onOpenChange(false), style: ({ pressed }) => [styles28.secondary, { borderColor: theme.onAccent, opacity: pressed ? 0.8 : 1 }], children: /* @__PURE__ */ jsx39(Txt, { variant: "label", tone: "onAccent", children: secondaryLabel }) })
|
|
3873
3876
|
] })
|
|
3874
3877
|
] }) });
|
|
3875
3878
|
}
|
|
3876
|
-
var
|
|
3879
|
+
var styles28 = StyleSheet28.create({
|
|
3877
3880
|
screen: { flex: 1, alignItems: "center", justifyContent: "center", gap: 12, padding: 32 },
|
|
3878
3881
|
title: { textAlign: "center", fontSize: 40, lineHeight: 46 },
|
|
3879
3882
|
center: { textAlign: "center", maxWidth: 300 },
|
|
@@ -3884,10 +3887,26 @@ var styles26 = StyleSheet26.create({
|
|
|
3884
3887
|
secondary: { minHeight: 48, borderRadius: 999, borderWidth: 1.5, alignItems: "center", justifyContent: "center" }
|
|
3885
3888
|
});
|
|
3886
3889
|
|
|
3890
|
+
// src/native/meta-row.tsx
|
|
3891
|
+
import { View as View35 } from "react-native";
|
|
3892
|
+
import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
3893
|
+
var present = (n) => n !== null && n !== void 0 && n !== false && n !== "";
|
|
3894
|
+
function MetaRow({ items: items2, chips = [], label, style, ...props }) {
|
|
3895
|
+
const facts = items2.filter(present);
|
|
3896
|
+
const tail = chips.filter(present);
|
|
3897
|
+
return /* @__PURE__ */ jsxs36(View35, { role: "list", "aria-label": label, ...props, style: [{ flexDirection: "row", flexWrap: "wrap", alignItems: "center", columnGap: 8, rowGap: 6 }, style], children: [
|
|
3898
|
+
facts.map((fact, i) => /* @__PURE__ */ jsxs36(View35, { role: "listitem", accessible: true, style: { flexDirection: "row", alignItems: "center", columnGap: 8 }, children: [
|
|
3899
|
+
i > 0 ? /* @__PURE__ */ jsx40(Txt, { variant: "caption", tone: "muted", "aria-hidden": true, importantForAccessibility: "no", children: "\xB7" }) : null,
|
|
3900
|
+
typeof fact === "string" || typeof fact === "number" ? /* @__PURE__ */ jsx40(Txt, { variant: "caption", tone: "secondary", children: fact }) : fact
|
|
3901
|
+
] }, i)),
|
|
3902
|
+
tail.map((chip, i) => /* @__PURE__ */ jsx40(View35, { role: "listitem", accessible: true, children: chip }, `chip-${i}`))
|
|
3903
|
+
] });
|
|
3904
|
+
}
|
|
3905
|
+
|
|
3887
3906
|
// src/native/meter.tsx
|
|
3888
|
-
import { StyleSheet as
|
|
3907
|
+
import { StyleSheet as StyleSheet29, View as View36 } from "react-native";
|
|
3889
3908
|
import Svg19, { Circle as Circle12 } from "react-native-svg";
|
|
3890
|
-
import { jsx as
|
|
3909
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
3891
3910
|
var THICK = { sm: 6, md: 8, lg: 12 };
|
|
3892
3911
|
var RING = { sm: 56, md: 96, lg: 144 };
|
|
3893
3912
|
var partColor = (t, i) => [t.accent, t.warning, t.success, t.textSecondary, t.danger][i % 5];
|
|
@@ -3900,10 +3919,10 @@ function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, op
|
|
|
3900
3919
|
const words2 = valueText ?? `${Math.round(ratio * 100)} %`;
|
|
3901
3920
|
const shares = (parts ?? []).map((p, i) => ({ ...p, color: partColor(theme, i), ratio: Math.min(1, Math.max(0, p.value / span)), words: p.valueText ?? `${Math.round(p.value / span * 100)} %` }));
|
|
3902
3921
|
const a11y = parts ? { role: "group", "aria-label": `${label}: ${shares.map((p) => `${p.label} ${p.words}`).join(", ")}` } : { role: "meter", "aria-label": label, "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": Math.min(max, Math.max(min, value)), "aria-valuetext": words2 };
|
|
3903
|
-
const legend = parts ? /* @__PURE__ */
|
|
3904
|
-
/* @__PURE__ */
|
|
3905
|
-
/* @__PURE__ */
|
|
3906
|
-
/* @__PURE__ */
|
|
3922
|
+
const legend = parts ? /* @__PURE__ */ jsx41(View36, { style: styles29.legend, "aria-hidden": true, children: shares.map((p, i) => /* @__PURE__ */ jsxs37(View36, { style: styles29.legendItem, children: [
|
|
3923
|
+
/* @__PURE__ */ jsx41(View36, { style: [styles29.swatch, { backgroundColor: p.color }] }),
|
|
3924
|
+
/* @__PURE__ */ jsx41(Txt, { variant: "caption", children: p.label }),
|
|
3925
|
+
/* @__PURE__ */ jsx41(Txt, { variant: "caption", tone: "secondary", children: p.words })
|
|
3907
3926
|
] }, i)) }) : null;
|
|
3908
3927
|
if (variant === "ring") {
|
|
3909
3928
|
const side = RING[size];
|
|
@@ -3915,27 +3934,27 @@ function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, op
|
|
|
3915
3934
|
offset += p.ratio;
|
|
3916
3935
|
return arc;
|
|
3917
3936
|
}) : [{ color: tone3, len: ratio, start: 0 }];
|
|
3918
|
-
return /* @__PURE__ */
|
|
3919
|
-
/* @__PURE__ */
|
|
3920
|
-
/* @__PURE__ */
|
|
3921
|
-
/* @__PURE__ */
|
|
3922
|
-
arcs.map((a, i) => /* @__PURE__ */
|
|
3937
|
+
return /* @__PURE__ */ jsxs37(View36, { accessible: true, ...a11y, style: [styles29.ringRoot, style], children: [
|
|
3938
|
+
/* @__PURE__ */ jsxs37(View36, { style: { width: side, height: side }, children: [
|
|
3939
|
+
/* @__PURE__ */ jsxs37(Svg19, { width: side, height: side, viewBox: "0 0 100 100", style: { transform: [{ rotate: "-90deg" }] }, children: [
|
|
3940
|
+
/* @__PURE__ */ jsx41(Circle12, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: 9 }),
|
|
3941
|
+
arcs.map((a, i) => /* @__PURE__ */ jsx41(Circle12, { cx: 50, cy: 50, r, fill: "none", stroke: a.color, strokeWidth: 9, strokeDasharray: `${Math.max(0, a.len * c - (parts ? 2 : 0))} ${c}`, strokeDashoffset: -a.start * c, strokeLinecap: parts ? "butt" : "round" }, i))
|
|
3923
3942
|
] }),
|
|
3924
|
-
children !== void 0 ? /* @__PURE__ */
|
|
3943
|
+
children !== void 0 ? /* @__PURE__ */ jsx41(View36, { style: [StyleSheet29.absoluteFill, styles29.center], children }) : null
|
|
3925
3944
|
] }),
|
|
3926
3945
|
legend
|
|
3927
3946
|
] });
|
|
3928
3947
|
}
|
|
3929
|
-
return /* @__PURE__ */
|
|
3930
|
-
showLabel ? /* @__PURE__ */
|
|
3931
|
-
/* @__PURE__ */
|
|
3932
|
-
!parts ? /* @__PURE__ */
|
|
3948
|
+
return /* @__PURE__ */ jsxs37(View36, { accessible: true, ...a11y, style: [styles29.root, style], children: [
|
|
3949
|
+
showLabel ? /* @__PURE__ */ jsxs37(View36, { style: styles29.header, "aria-hidden": true, children: [
|
|
3950
|
+
/* @__PURE__ */ jsx41(Txt, { variant: "caption", numberOfLines: 1, style: styles29.caption, children: label }),
|
|
3951
|
+
!parts ? /* @__PURE__ */ jsx41(Txt, { variant: "caption", tone: "secondary", children: words2 }) : null
|
|
3933
3952
|
] }) : null,
|
|
3934
|
-
/* @__PURE__ */
|
|
3953
|
+
/* @__PURE__ */ jsx41(View36, { style: [styles29.track, { height: THICK[size], backgroundColor: theme.surface3 }], children: parts ? shares.map((p, i) => /* @__PURE__ */ jsx41(View36, { style: { width: `${p.ratio * 100}%`, backgroundColor: p.color } }, i)) : /* @__PURE__ */ jsx41(View36, { style: [styles29.fill, { width: `${ratio * 100}%`, backgroundColor: tone3 }] }) }),
|
|
3935
3954
|
legend
|
|
3936
3955
|
] });
|
|
3937
3956
|
}
|
|
3938
|
-
var
|
|
3957
|
+
var styles29 = StyleSheet29.create({
|
|
3939
3958
|
root: { width: "100%", gap: 6 },
|
|
3940
3959
|
header: { flexDirection: "row", alignItems: "baseline", gap: 8 },
|
|
3941
3960
|
caption: { flex: 1, fontWeight: "600" },
|
|
@@ -3951,7 +3970,7 @@ var styles27 = StyleSheet27.create({
|
|
|
3951
3970
|
// src/native/number-ticker.tsx
|
|
3952
3971
|
import * as React26 from "react";
|
|
3953
3972
|
import { AccessibilityInfo as AccessibilityInfo11, Animated as Animated15, Easing as Easing9, Text as Text13 } from "react-native";
|
|
3954
|
-
import { jsx as
|
|
3973
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
3955
3974
|
function NumberTicker({ value, locale, format, trigger = "mount", duration = 1100, announce, variant = "display", tone: tone3 = "text", style }) {
|
|
3956
3975
|
const reduce = useReducedMotion();
|
|
3957
3976
|
const writer = React26.useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);
|
|
@@ -3979,13 +3998,13 @@ function NumberTicker({ value, locale, format, trigger = "mount", duration = 110
|
|
|
3979
3998
|
};
|
|
3980
3999
|
}, [value, reduce, trigger, duration, announce, anim, writer]);
|
|
3981
4000
|
const digits = Number.isInteger(value) ? Math.round(shown) : shown;
|
|
3982
|
-
return /* @__PURE__ */
|
|
4001
|
+
return /* @__PURE__ */ jsx42(Txt, { variant, tone: tone3, "aria-label": writer.format(value), style: [{ fontVariant: ["tabular-nums"] }, style], children: /* @__PURE__ */ jsx42(Text13, { "aria-hidden": true, children: writer.format(digits) }) });
|
|
3983
4002
|
}
|
|
3984
4003
|
|
|
3985
4004
|
// src/native/onboarding.tsx
|
|
3986
4005
|
import * as React27 from "react";
|
|
3987
|
-
import { ScrollView as ScrollView5, StyleSheet as
|
|
3988
|
-
import { jsx as
|
|
4006
|
+
import { ScrollView as ScrollView5, StyleSheet as StyleSheet30, View as View37 } from "react-native";
|
|
4007
|
+
import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
3989
4008
|
function Onboarding({ slides, labels, onDone, style }) {
|
|
3990
4009
|
const { theme, insets, haptic } = useTheme();
|
|
3991
4010
|
const [width, setWidth] = React27.useState(0);
|
|
@@ -4000,18 +4019,18 @@ function Onboarding({ slides, labels, onDone, style }) {
|
|
|
4000
4019
|
const onScroll = (e) => {
|
|
4001
4020
|
if (width > 0) setPage(Math.round(e.nativeEvent.contentOffset.x / width));
|
|
4002
4021
|
};
|
|
4003
|
-
return /* @__PURE__ */
|
|
4004
|
-
/* @__PURE__ */
|
|
4005
|
-
/* @__PURE__ */
|
|
4006
|
-
slide.visual ? /* @__PURE__ */
|
|
4007
|
-
/* @__PURE__ */
|
|
4008
|
-
/* @__PURE__ */
|
|
4022
|
+
return /* @__PURE__ */ jsxs38(View37, { style: [styles30.root, { backgroundColor: theme.surface0, paddingTop: insets.top + 8, paddingBottom: insets.bottom + 16 }, style], onLayout: (e) => setWidth(e.nativeEvent.layout.width), children: [
|
|
4023
|
+
/* @__PURE__ */ jsx43(View37, { style: styles30.top, children: !last ? /* @__PURE__ */ jsx43(Button, { label: labels.skip, variant: "ghost", size: "sm", onPress: onDone }) : /* @__PURE__ */ jsx43(View37, { style: styles30.spacer }) }),
|
|
4024
|
+
/* @__PURE__ */ jsx43(ScrollView5, { ref: scroller, tabIndex: 0, horizontal: true, pagingEnabled: true, showsHorizontalScrollIndicator: false, onMomentumScrollEnd: onScroll, style: styles30.flex, children: slides.map((slide, i) => /* @__PURE__ */ jsxs38(View37, { style: [styles30.slide, { width: width || void 0 }], accessible: true, "aria-label": `${labels.position(i + 1, slides.length)}. ${slide.title}. ${slide.description}`, "aria-hidden": i !== page, children: [
|
|
4025
|
+
slide.visual ? /* @__PURE__ */ jsx43(View37, { style: styles30.visual, children: slide.visual }) : null,
|
|
4026
|
+
/* @__PURE__ */ jsx43(Txt, { variant: "display", style: styles30.centred, children: slide.title }),
|
|
4027
|
+
/* @__PURE__ */ jsx43(Txt, { tone: "secondary", style: [styles30.centred, styles30.description], children: slide.description })
|
|
4009
4028
|
] }, i)) }),
|
|
4010
|
-
/* @__PURE__ */
|
|
4011
|
-
/* @__PURE__ */
|
|
4029
|
+
/* @__PURE__ */ jsx43(View37, { style: styles30.dots, "aria-hidden": true, children: slides.map((_, i) => /* @__PURE__ */ jsx43(View37, { style: [styles30.dot, { width: i === page ? 22 : 8, backgroundColor: i === page ? theme.accent : theme.borderStrong }] }, i)) }),
|
|
4030
|
+
/* @__PURE__ */ jsx43(View37, { style: styles30.bottom, children: /* @__PURE__ */ jsx43(Button, { label: last ? labels.done : labels.next, variant: last ? "gradient" : "primary", size: "lg", onPress: () => last ? onDone() : go(page + 1) }) })
|
|
4012
4031
|
] });
|
|
4013
4032
|
}
|
|
4014
|
-
var
|
|
4033
|
+
var styles30 = StyleSheet30.create({
|
|
4015
4034
|
root: { flex: 1 },
|
|
4016
4035
|
top: { flexDirection: "row", justifyContent: "flex-end", paddingHorizontal: 16, minHeight: 32 },
|
|
4017
4036
|
spacer: { height: 32 },
|
|
@@ -4027,8 +4046,8 @@ var styles28 = StyleSheet28.create({
|
|
|
4027
4046
|
|
|
4028
4047
|
// src/native/otp-input.tsx
|
|
4029
4048
|
import * as React28 from "react";
|
|
4030
|
-
import { Platform as Platform2, Pressable as Pressable15, StyleSheet as
|
|
4031
|
-
import { jsx as
|
|
4049
|
+
import { Platform as Platform2, Pressable as Pressable15, StyleSheet as StyleSheet31, TextInput as TextInput5, View as View38 } from "react-native";
|
|
4050
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
4032
4051
|
function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode = "numeric", invalid, disabled, autoFocus, style }) {
|
|
4033
4052
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
4034
4053
|
const [own, setOwn] = React28.useState("");
|
|
@@ -4047,14 +4066,14 @@ function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode =
|
|
|
4047
4066
|
onComplete?.(next);
|
|
4048
4067
|
}
|
|
4049
4068
|
};
|
|
4050
|
-
return /* @__PURE__ */
|
|
4051
|
-
/* @__PURE__ */
|
|
4069
|
+
return /* @__PURE__ */ jsxs39(Pressable15, { onPress: () => input.current?.focus(), disabled, accessible: false, style: [styles31.root, style], children: [
|
|
4070
|
+
/* @__PURE__ */ jsx44(View38, { style: styles31.boxes, "aria-hidden": true, children: Array.from({ length }, (_, i) => {
|
|
4052
4071
|
const active = focused && i === Math.min(code.length, length - 1);
|
|
4053
|
-
return /* @__PURE__ */
|
|
4054
|
-
|
|
4072
|
+
return /* @__PURE__ */ jsx44(
|
|
4073
|
+
View38,
|
|
4055
4074
|
{
|
|
4056
4075
|
style: [
|
|
4057
|
-
|
|
4076
|
+
styles31.box,
|
|
4058
4077
|
{
|
|
4059
4078
|
borderRadius: radius3.md,
|
|
4060
4079
|
backgroundColor: theme.surface2,
|
|
@@ -4062,12 +4081,12 @@ function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode =
|
|
|
4062
4081
|
borderWidth: invalid || active ? 2 : 1
|
|
4063
4082
|
}
|
|
4064
4083
|
],
|
|
4065
|
-
children: /* @__PURE__ */
|
|
4084
|
+
children: /* @__PURE__ */ jsx44(Txt, { variant: "title", children: code[i] ?? "" })
|
|
4066
4085
|
},
|
|
4067
4086
|
i
|
|
4068
4087
|
);
|
|
4069
4088
|
}) }),
|
|
4070
|
-
/* @__PURE__ */
|
|
4089
|
+
/* @__PURE__ */ jsx44(
|
|
4071
4090
|
TextInput5,
|
|
4072
4091
|
{
|
|
4073
4092
|
ref: input,
|
|
@@ -4086,12 +4105,12 @@ function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode =
|
|
|
4086
4105
|
caretHidden: true,
|
|
4087
4106
|
onFocus: () => setFocused(true),
|
|
4088
4107
|
onBlur: () => setFocused(false),
|
|
4089
|
-
style:
|
|
4108
|
+
style: styles31.hidden
|
|
4090
4109
|
}
|
|
4091
4110
|
)
|
|
4092
4111
|
] });
|
|
4093
4112
|
}
|
|
4094
|
-
var
|
|
4113
|
+
var styles31 = StyleSheet31.create({
|
|
4095
4114
|
root: { alignSelf: "flex-start" },
|
|
4096
4115
|
boxes: { flexDirection: "row", gap: 8 },
|
|
4097
4116
|
box: { width: 46, height: 56, alignItems: "center", justifyContent: "center" },
|
|
@@ -4099,11 +4118,11 @@ var styles29 = StyleSheet29.create({
|
|
|
4099
4118
|
});
|
|
4100
4119
|
|
|
4101
4120
|
// src/native/pagination.tsx
|
|
4102
|
-
import { Pressable as Pressable16, StyleSheet as
|
|
4121
|
+
import { Pressable as Pressable16, StyleSheet as StyleSheet32, Text as Text14, View as View39 } from "react-native";
|
|
4103
4122
|
import Svg20, { Path as Path17 } from "react-native-svg";
|
|
4104
|
-
import { jsx as
|
|
4123
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
4105
4124
|
function Chevron3({ direction, color }) {
|
|
4106
|
-
return /* @__PURE__ */
|
|
4125
|
+
return /* @__PURE__ */ jsx45(Svg20, { 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__ */ jsx45(Path17, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
|
|
4107
4126
|
}
|
|
4108
4127
|
function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }) {
|
|
4109
4128
|
const { theme, radius: radius3 } = useTheme();
|
|
@@ -4112,7 +4131,7 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
4112
4131
|
const current = Math.min(Math.max(1, page), count);
|
|
4113
4132
|
const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));
|
|
4114
4133
|
const canNext = !disabled && (paged ? current < count : Boolean(hasNext));
|
|
4115
|
-
const button = (direction, enabled, onPress, label) => /* @__PURE__ */
|
|
4134
|
+
const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx45(
|
|
4116
4135
|
Pressable16,
|
|
4117
4136
|
{
|
|
4118
4137
|
role: "button",
|
|
@@ -4122,28 +4141,28 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
4122
4141
|
hitSlop: 6,
|
|
4123
4142
|
onPress,
|
|
4124
4143
|
style: ({ pressed }) => [
|
|
4125
|
-
|
|
4144
|
+
styles32.button,
|
|
4126
4145
|
{ borderRadius: radius3.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? pressed ? 0.8 : 1 : 0.4 }
|
|
4127
4146
|
],
|
|
4128
|
-
children: /* @__PURE__ */
|
|
4147
|
+
children: /* @__PURE__ */ jsx45(Chevron3, { direction, color: theme.textPrimary })
|
|
4129
4148
|
}
|
|
4130
4149
|
);
|
|
4131
4150
|
const text = status ?? (paged ? labels.compact(current, count) : null);
|
|
4132
|
-
return /* @__PURE__ */
|
|
4151
|
+
return /* @__PURE__ */ jsxs40(View39, { role: "navigation", style: [styles32.row, style], children: [
|
|
4133
4152
|
button("left", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous),
|
|
4134
|
-
text ? /* @__PURE__ */
|
|
4153
|
+
text ? /* @__PURE__ */ jsx45(Text14, { "aria-live": "polite", style: [styles32.status, { color: theme.textSecondary }], children: text }) : null,
|
|
4135
4154
|
button("right", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)
|
|
4136
4155
|
] });
|
|
4137
4156
|
}
|
|
4138
|
-
var
|
|
4157
|
+
var styles32 = StyleSheet32.create({
|
|
4139
4158
|
row: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 12 },
|
|
4140
|
-
button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth:
|
|
4159
|
+
button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet32.hairlineWidth },
|
|
4141
4160
|
status: { fontSize: 13, fontWeight: "600", fontVariant: ["tabular-nums"] }
|
|
4142
4161
|
});
|
|
4143
4162
|
|
|
4144
4163
|
// src/native/permission-prompt.tsx
|
|
4145
|
-
import { StyleSheet as
|
|
4146
|
-
import { Fragment as Fragment6, jsx as
|
|
4164
|
+
import { StyleSheet as StyleSheet33, View as View40 } from "react-native";
|
|
4165
|
+
import { Fragment as Fragment6, jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
4147
4166
|
function PermissionPrompt({
|
|
4148
4167
|
status,
|
|
4149
4168
|
title,
|
|
@@ -4160,28 +4179,28 @@ function PermissionPrompt({
|
|
|
4160
4179
|
style
|
|
4161
4180
|
}) {
|
|
4162
4181
|
const { theme, radius: radius3 } = useTheme();
|
|
4163
|
-
if (status === "granted") return /* @__PURE__ */
|
|
4182
|
+
if (status === "granted") return /* @__PURE__ */ jsx46(Fragment6, { children: children ?? null });
|
|
4164
4183
|
const blocked = status === "blocked" || status === "denied" && Boolean(onOpenSettings);
|
|
4165
|
-
return /* @__PURE__ */
|
|
4166
|
-
/* @__PURE__ */
|
|
4167
|
-
/* @__PURE__ */
|
|
4168
|
-
/* @__PURE__ */
|
|
4169
|
-
/* @__PURE__ */
|
|
4170
|
-
blocked && settingsLabel && onOpenSettings ? /* @__PURE__ */
|
|
4171
|
-
dismissLabel && onDismiss ? /* @__PURE__ */
|
|
4184
|
+
return /* @__PURE__ */ jsxs41(View40, { style: [styles33.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
|
|
4185
|
+
/* @__PURE__ */ jsx46(Mascot, { bird: mascot, mood: blocked ? "error" : "welcome", size: 104 }),
|
|
4186
|
+
/* @__PURE__ */ jsx46(Txt, { variant: "title", style: styles33.centred, children: title }),
|
|
4187
|
+
/* @__PURE__ */ jsx46(Txt, { tone: "secondary", style: styles33.centred, children: blocked && blockedDescription ? blockedDescription : description }),
|
|
4188
|
+
/* @__PURE__ */ jsxs41(View40, { style: styles33.actions, children: [
|
|
4189
|
+
blocked && settingsLabel && onOpenSettings ? /* @__PURE__ */ jsx46(Button, { label: settingsLabel, variant: "primary", onPress: onOpenSettings }) : /* @__PURE__ */ jsx46(Button, { label: allowLabel, variant: "primary", onPress: onAllow }),
|
|
4190
|
+
dismissLabel && onDismiss ? /* @__PURE__ */ jsx46(Button, { label: dismissLabel, variant: "ghost", onPress: onDismiss }) : null
|
|
4172
4191
|
] })
|
|
4173
4192
|
] });
|
|
4174
4193
|
}
|
|
4175
|
-
var
|
|
4176
|
-
root: { alignItems: "center", gap: 10, padding: 24, borderWidth:
|
|
4194
|
+
var styles33 = StyleSheet33.create({
|
|
4195
|
+
root: { alignItems: "center", gap: 10, padding: 24, borderWidth: StyleSheet33.hairlineWidth },
|
|
4177
4196
|
centred: { textAlign: "center", maxWidth: 340 },
|
|
4178
4197
|
actions: { marginTop: 8, gap: 8, alignSelf: "stretch" }
|
|
4179
4198
|
});
|
|
4180
4199
|
|
|
4181
4200
|
// src/native/phoenix.tsx
|
|
4182
4201
|
import { useEffect as useEffect19, useState as useState28 } from "react";
|
|
4183
|
-
import { AccessibilityInfo as AccessibilityInfo12, Animated as Animated16, Easing as Easing10, View as
|
|
4184
|
-
import Svg21, { Circle as Circle13, Defs as Defs12, LinearGradient as
|
|
4202
|
+
import { AccessibilityInfo as AccessibilityInfo12, Animated as Animated16, Easing as Easing10, View as View41 } from "react-native";
|
|
4203
|
+
import Svg21, { Circle as Circle13, Defs as Defs12, LinearGradient as LinearGradient9, Path as Path18, RadialGradient as RadialGradient9, Stop as Stop12 } from "react-native-svg";
|
|
4185
4204
|
|
|
4186
4205
|
// src/mascots/phoenix-geometry.ts
|
|
4187
4206
|
var PHOENIX = {
|
|
@@ -4204,7 +4223,7 @@ var PHOENIX_PALETTES = {
|
|
|
4204
4223
|
};
|
|
4205
4224
|
|
|
4206
4225
|
// src/native/phoenix.tsx
|
|
4207
|
-
import { jsx as
|
|
4226
|
+
import { jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
4208
4227
|
function useFloat(animated) {
|
|
4209
4228
|
const [y] = useState28(() => new Animated16.Value(0));
|
|
4210
4229
|
useEffect19(() => {
|
|
@@ -4229,37 +4248,37 @@ function Phoenix({ tone: tone3 = "own", size = 120, animated = true, title, styl
|
|
|
4229
4248
|
const id = useSvgId("kzp");
|
|
4230
4249
|
const y = useFloat(animated);
|
|
4231
4250
|
const p = tone3 === "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;
|
|
4232
|
-
return /* @__PURE__ */
|
|
4233
|
-
/* @__PURE__ */
|
|
4234
|
-
/* @__PURE__ */
|
|
4235
|
-
/* @__PURE__ */
|
|
4236
|
-
/* @__PURE__ */
|
|
4251
|
+
return /* @__PURE__ */ jsx47(View41, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx47(Animated16.View, { style: { transform: [{ translateY: y }] }, children: /* @__PURE__ */ jsxs42(Svg21, { width: size, height: size, viewBox: "0 0 120 120", children: [
|
|
4252
|
+
/* @__PURE__ */ jsxs42(Defs12, { children: [
|
|
4253
|
+
/* @__PURE__ */ jsxs42(LinearGradient9, { id: `${id}l`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
|
|
4254
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "0%", stopColor: p.left[0] }),
|
|
4255
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "100%", stopColor: p.left[1] })
|
|
4237
4256
|
] }),
|
|
4238
|
-
/* @__PURE__ */
|
|
4239
|
-
/* @__PURE__ */
|
|
4240
|
-
/* @__PURE__ */
|
|
4257
|
+
/* @__PURE__ */ jsxs42(LinearGradient9, { id: `${id}r`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
|
|
4258
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "0%", stopColor: p.right[0] }),
|
|
4259
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "100%", stopColor: p.right[1] })
|
|
4241
4260
|
] }),
|
|
4242
|
-
/* @__PURE__ */
|
|
4243
|
-
/* @__PURE__ */
|
|
4244
|
-
/* @__PURE__ */
|
|
4261
|
+
/* @__PURE__ */ jsxs42(RadialGradient9, { id: `${id}c`, children: [
|
|
4262
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "0%", stopColor: p.core[0] }),
|
|
4263
|
+
/* @__PURE__ */ jsx47(Stop12, { offset: "100%", stopColor: p.core[1], stopOpacity: 0 })
|
|
4245
4264
|
] })
|
|
4246
4265
|
] }),
|
|
4247
|
-
/* @__PURE__ */
|
|
4248
|
-
/* @__PURE__ */
|
|
4249
|
-
/* @__PURE__ */
|
|
4250
|
-
/* @__PURE__ */
|
|
4251
|
-
/* @__PURE__ */
|
|
4252
|
-
/* @__PURE__ */
|
|
4253
|
-
/* @__PURE__ */
|
|
4254
|
-
/* @__PURE__ */
|
|
4266
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.wingL, fill: `url(#${id}l)` }),
|
|
4267
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.wingR, fill: `url(#${id}r)` }),
|
|
4268
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.tailL, fill: `url(#${id}l)`, opacity: 0.7 }),
|
|
4269
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.tailR, fill: `url(#${id}r)`, opacity: 0.7 }),
|
|
4270
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: 0.5 }),
|
|
4271
|
+
/* @__PURE__ */ jsx47(Circle13, { cx: 60, cy: 58, r: 12, fill: `url(#${id}c)` }),
|
|
4272
|
+
/* @__PURE__ */ jsx47(Circle13, { cx: 60, cy: 58, r: 3.5, fill: "#ffffff" }),
|
|
4273
|
+
/* @__PURE__ */ jsx47(Path18, { d: PHOENIX.crest, stroke: p.crest, strokeWidth: 2, strokeLinecap: "round" })
|
|
4255
4274
|
] }) }) });
|
|
4256
4275
|
}
|
|
4257
4276
|
|
|
4258
4277
|
// src/native/photo-grid.tsx
|
|
4259
4278
|
import * as React30 from "react";
|
|
4260
|
-
import { Image as Image4, Pressable as Pressable17, StyleSheet as
|
|
4279
|
+
import { Image as Image4, Pressable as Pressable17, StyleSheet as StyleSheet34, View as View42 } from "react-native";
|
|
4261
4280
|
import Svg22, { Path as Path19 } from "react-native-svg";
|
|
4262
|
-
import { jsx as
|
|
4281
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
4263
4282
|
function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, columns = 3, labels, style }) {
|
|
4264
4283
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
4265
4284
|
const [menu, setMenu] = React30.useState(null);
|
|
@@ -4276,11 +4295,11 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4276
4295
|
onValueChange(value.filter((_, j) => j !== i));
|
|
4277
4296
|
};
|
|
4278
4297
|
const width = `${100 / columns}%`;
|
|
4279
|
-
return /* @__PURE__ */
|
|
4298
|
+
return /* @__PURE__ */ jsxs43(View42, { style: [styles34.grid, style], children: [
|
|
4280
4299
|
Array.from({ length: slots }, (_, i) => {
|
|
4281
4300
|
const photo = value[i];
|
|
4282
|
-
const cell = [
|
|
4283
|
-
return /* @__PURE__ */
|
|
4301
|
+
const cell = [styles34.slot, { borderRadius: radius3.lg, aspectRatio: 3 / 4 }];
|
|
4302
|
+
return /* @__PURE__ */ jsx48(View42, { style: [styles34.cell, { width }], children: photo ? /* @__PURE__ */ jsxs43(
|
|
4284
4303
|
Pressable17,
|
|
4285
4304
|
{
|
|
4286
4305
|
role: "button",
|
|
@@ -4304,11 +4323,11 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4304
4323
|
},
|
|
4305
4324
|
style: [...cell, { backgroundColor: theme.surface3, overflow: "hidden" }],
|
|
4306
4325
|
children: [
|
|
4307
|
-
/* @__PURE__ */
|
|
4308
|
-
i === 0 ? /* @__PURE__ */
|
|
4326
|
+
/* @__PURE__ */ jsx48(Image4, { source: { uri: photo.uri }, style: StyleSheet34.absoluteFill, resizeMode: "cover" }),
|
|
4327
|
+
i === 0 ? /* @__PURE__ */ jsx48(View42, { style: [styles34.main, { backgroundColor: theme.accent, borderRadius: radius3.full }], children: /* @__PURE__ */ jsx48(Txt, { variant: "caption", tone: "onAccent", style: styles34.mainText, children: labels.main }) }) : null
|
|
4309
4328
|
]
|
|
4310
4329
|
}
|
|
4311
|
-
) : /* @__PURE__ */
|
|
4330
|
+
) : /* @__PURE__ */ jsx48(
|
|
4312
4331
|
Pressable17,
|
|
4313
4332
|
{
|
|
4314
4333
|
role: "button",
|
|
@@ -4317,14 +4336,14 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4317
4336
|
onPress: onAdd,
|
|
4318
4337
|
style: ({ pressed }) => [
|
|
4319
4338
|
...cell,
|
|
4320
|
-
|
|
4339
|
+
styles34.empty,
|
|
4321
4340
|
{ borderColor: i < required ? theme.accent : theme.borderStrong, backgroundColor: pressed ? theme.surface2 : theme.surface1, opacity: i > value.length ? 0.5 : 1 }
|
|
4322
4341
|
],
|
|
4323
|
-
children: /* @__PURE__ */
|
|
4342
|
+
children: /* @__PURE__ */ jsx48(View42, { style: [styles34.plus, { backgroundColor: i === value.length ? theme.accent : theme.surface3, borderRadius: radius3.full }], children: /* @__PURE__ */ jsx48(Svg22, { width: 16, height: 16, viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsx48(Path19, { d: "M12 5v14M5 12h14", stroke: i === value.length ? theme.onAccent : theme.textSecondary, strokeWidth: 2.6, strokeLinecap: "round" }) }) })
|
|
4324
4343
|
}
|
|
4325
4344
|
) }, photo?.id ?? `empty-${i}`);
|
|
4326
4345
|
}),
|
|
4327
|
-
/* @__PURE__ */
|
|
4346
|
+
/* @__PURE__ */ jsx48(
|
|
4328
4347
|
ActionSheet,
|
|
4329
4348
|
{
|
|
4330
4349
|
open: menu !== null,
|
|
@@ -4340,7 +4359,7 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4340
4359
|
)
|
|
4341
4360
|
] });
|
|
4342
4361
|
}
|
|
4343
|
-
var
|
|
4362
|
+
var styles34 = StyleSheet34.create({
|
|
4344
4363
|
grid: { flexDirection: "row", flexWrap: "wrap", marginHorizontal: -4 },
|
|
4345
4364
|
cell: { padding: 4 },
|
|
4346
4365
|
slot: { width: "100%" },
|
|
@@ -4352,16 +4371,16 @@ var styles32 = StyleSheet32.create({
|
|
|
4352
4371
|
|
|
4353
4372
|
// src/native/profile-card.tsx
|
|
4354
4373
|
import * as React31 from "react";
|
|
4355
|
-
import { Animated as Animated17, StyleSheet as
|
|
4356
|
-
import { jsx as
|
|
4374
|
+
import { Animated as Animated17, StyleSheet as StyleSheet35, View as View43 } from "react-native";
|
|
4375
|
+
import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
4357
4376
|
var ratioOf = (value, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));
|
|
4358
4377
|
function Bar({ label, ratio, words: words2, animated, delay }) {
|
|
4359
4378
|
const { theme } = useTheme();
|
|
4360
4379
|
const t = useEntrance(animated, delay, 900);
|
|
4361
4380
|
const [width, setWidth] = React31.useState(0);
|
|
4362
4381
|
const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });
|
|
4363
|
-
return /* @__PURE__ */
|
|
4364
|
-
|
|
4382
|
+
return /* @__PURE__ */ jsx49(
|
|
4383
|
+
View43,
|
|
4365
4384
|
{
|
|
4366
4385
|
accessible: true,
|
|
4367
4386
|
role: "meter",
|
|
@@ -4371,42 +4390,42 @@ function Bar({ label, ratio, words: words2, animated, delay }) {
|
|
|
4371
4390
|
"aria-valuenow": Math.round(ratio * 100),
|
|
4372
4391
|
"aria-valuetext": words2,
|
|
4373
4392
|
onLayout: (e) => setWidth(e.nativeEvent.layout.width),
|
|
4374
|
-
style: [
|
|
4375
|
-
children: /* @__PURE__ */
|
|
4393
|
+
style: [styles35.track, { backgroundColor: theme.surface3 }],
|
|
4394
|
+
children: /* @__PURE__ */ jsx49(Animated17.View, { style: [styles35.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
|
|
4376
4395
|
}
|
|
4377
4396
|
);
|
|
4378
4397
|
}
|
|
4379
4398
|
function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }) {
|
|
4380
4399
|
const { theme, radius: radius3 } = useTheme();
|
|
4381
4400
|
const ratio = ratioOf(value);
|
|
4382
|
-
return /* @__PURE__ */
|
|
4383
|
-
/* @__PURE__ */
|
|
4384
|
-
/* @__PURE__ */
|
|
4385
|
-
/* @__PURE__ */
|
|
4386
|
-
statLabel ? /* @__PURE__ */
|
|
4401
|
+
return /* @__PURE__ */ jsxs44(View43, { ...props, style: [styles35.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
|
|
4402
|
+
/* @__PURE__ */ jsx49(View43, { "aria-hidden": true, style: [styles35.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }], children: visual }),
|
|
4403
|
+
/* @__PURE__ */ jsxs44(View43, { style: styles35.head, children: [
|
|
4404
|
+
/* @__PURE__ */ jsx49(Txt, { variant: "title", style: styles35.name, children: name }),
|
|
4405
|
+
statLabel ? /* @__PURE__ */ jsxs44(Txt, { variant: "caption", tone: "secondary", children: [
|
|
4387
4406
|
statLabel,
|
|
4388
4407
|
" ",
|
|
4389
|
-
/* @__PURE__ */
|
|
4408
|
+
/* @__PURE__ */ jsx49(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
|
|
4390
4409
|
] }) : null
|
|
4391
4410
|
] }),
|
|
4392
|
-
statLabel ? /* @__PURE__ */
|
|
4411
|
+
statLabel ? /* @__PURE__ */ jsx49(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
|
|
4393
4412
|
stats?.map((s, i) => {
|
|
4394
4413
|
const r = ratioOf(s.value, s.max);
|
|
4395
4414
|
const words2 = s.valueText ?? `${Math.round(r * 100)} %`;
|
|
4396
|
-
return /* @__PURE__ */
|
|
4397
|
-
/* @__PURE__ */
|
|
4398
|
-
/* @__PURE__ */
|
|
4399
|
-
/* @__PURE__ */
|
|
4415
|
+
return /* @__PURE__ */ jsxs44(View43, { style: styles35.stat, children: [
|
|
4416
|
+
/* @__PURE__ */ jsxs44(View43, { "aria-hidden": true, style: styles35.statHead, children: [
|
|
4417
|
+
/* @__PURE__ */ jsx49(Txt, { variant: "caption", tone: "secondary", children: s.label }),
|
|
4418
|
+
/* @__PURE__ */ jsx49(Txt, { variant: "caption", children: words2 })
|
|
4400
4419
|
] }),
|
|
4401
|
-
/* @__PURE__ */
|
|
4420
|
+
/* @__PURE__ */ jsx49(Bar, { label: s.label, ratio: r, words: words2, animated, delay: 320 + i * 120 })
|
|
4402
4421
|
] }, s.label);
|
|
4403
4422
|
}),
|
|
4404
|
-
caption ? /* @__PURE__ */
|
|
4405
|
-
children ? /* @__PURE__ */
|
|
4423
|
+
caption ? /* @__PURE__ */ jsx49(Txt, { variant: "caption", tone: "secondary", style: styles35.caption, children: caption }) : null,
|
|
4424
|
+
children ? /* @__PURE__ */ jsx49(View43, { style: styles35.extra, children }) : null
|
|
4406
4425
|
] });
|
|
4407
4426
|
}
|
|
4408
|
-
var
|
|
4409
|
-
root: { alignItems: "center", gap: 12, padding: 20, borderWidth:
|
|
4427
|
+
var styles35 = StyleSheet35.create({
|
|
4428
|
+
root: { alignItems: "center", gap: 12, padding: 20, borderWidth: StyleSheet35.hairlineWidth },
|
|
4410
4429
|
disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: "center", justifyContent: "center", overflow: "hidden" },
|
|
4411
4430
|
head: { flexDirection: "row", alignSelf: "stretch", alignItems: "center", justifyContent: "space-between", gap: 8 },
|
|
4412
4431
|
name: { flexShrink: 1, fontSize: 17 },
|
|
@@ -4420,9 +4439,9 @@ var styles33 = StyleSheet33.create({
|
|
|
4420
4439
|
|
|
4421
4440
|
// src/native/progress.tsx
|
|
4422
4441
|
import * as React32 from "react";
|
|
4423
|
-
import { Animated as Animated18, Easing as Easing11, StyleSheet as
|
|
4424
|
-
import Svg23, { Circle as Circle14, Defs as Defs13, LinearGradient as
|
|
4425
|
-
import { jsx as
|
|
4442
|
+
import { Animated as Animated18, Easing as Easing11, StyleSheet as StyleSheet36, View as View44 } from "react-native";
|
|
4443
|
+
import Svg23, { Circle as Circle14, Defs as Defs13, LinearGradient as LinearGradient10, Rect as Rect3, Stop as Stop13 } from "react-native-svg";
|
|
4444
|
+
import { jsx as jsx50, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
4426
4445
|
var AnimatedCircle = Animated18.createAnimatedComponent(Circle14);
|
|
4427
4446
|
var BAR2 = { sm: 4, md: 8, lg: 12 };
|
|
4428
4447
|
var RING2 = { sm: 40, md: 80, lg: 144 };
|
|
@@ -4464,9 +4483,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4464
4483
|
"aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
|
|
4465
4484
|
"aria-valuetext": known ? valueText ?? `${percent}%` : valueText
|
|
4466
4485
|
};
|
|
4467
|
-
const gradient = /* @__PURE__ */
|
|
4468
|
-
/* @__PURE__ */
|
|
4469
|
-
/* @__PURE__ */
|
|
4486
|
+
const gradient = /* @__PURE__ */ jsx50(Defs13, { children: /* @__PURE__ */ jsxs45(LinearGradient10, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
|
|
4487
|
+
/* @__PURE__ */ jsx50(Stop13, { offset: "0", stopColor: theme.accent }),
|
|
4488
|
+
/* @__PURE__ */ jsx50(Stop13, { offset: "1", stopColor: theme.accent2 })
|
|
4470
4489
|
] }) });
|
|
4471
4490
|
if (variant === "ring") {
|
|
4472
4491
|
const side = RING2[size];
|
|
@@ -4475,11 +4494,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4475
4494
|
const circumference = 2 * Math.PI * r;
|
|
4476
4495
|
const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
|
|
4477
4496
|
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
|
|
4478
|
-
return /* @__PURE__ */
|
|
4479
|
-
/* @__PURE__ */
|
|
4497
|
+
return /* @__PURE__ */ jsxs45(View44, { ...a11y, style: [styles36.ring, { width: side, height: side }, style], children: [
|
|
4498
|
+
/* @__PURE__ */ jsx50(Animated18.View, { style: [StyleSheet36.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs45(Svg23, { width: side, height: side, viewBox: "0 0 100 100", children: [
|
|
4480
4499
|
gradient,
|
|
4481
|
-
/* @__PURE__ */
|
|
4482
|
-
/* @__PURE__ */
|
|
4500
|
+
/* @__PURE__ */ jsx50(Circle14, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
|
|
4501
|
+
/* @__PURE__ */ jsx50(
|
|
4483
4502
|
AnimatedCircle,
|
|
4484
4503
|
{
|
|
4485
4504
|
cx: 50,
|
|
@@ -4499,20 +4518,20 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4499
4518
|
}
|
|
4500
4519
|
const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
|
|
4501
4520
|
const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
|
|
4502
|
-
return /* @__PURE__ */
|
|
4503
|
-
|
|
4521
|
+
return /* @__PURE__ */ jsx50(
|
|
4522
|
+
View44,
|
|
4504
4523
|
{
|
|
4505
4524
|
...a11y,
|
|
4506
4525
|
onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
|
|
4507
|
-
style: [
|
|
4508
|
-
children: /* @__PURE__ */
|
|
4526
|
+
style: [styles36.bar, { height: BAR2[size], backgroundColor: theme.surface3 }, style],
|
|
4527
|
+
children: /* @__PURE__ */ jsx50(Animated18.View, { style: [styles36.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs45(Svg23, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
|
|
4509
4528
|
gradient,
|
|
4510
|
-
/* @__PURE__ */
|
|
4529
|
+
/* @__PURE__ */ jsx50(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
|
|
4511
4530
|
] }) })
|
|
4512
4531
|
}
|
|
4513
4532
|
);
|
|
4514
4533
|
}
|
|
4515
|
-
var
|
|
4534
|
+
var styles36 = StyleSheet36.create({
|
|
4516
4535
|
ring: { alignItems: "center", justifyContent: "center" },
|
|
4517
4536
|
bar: { width: "100%", overflow: "hidden", borderRadius: 9999 },
|
|
4518
4537
|
fill: { height: "100%", overflow: "hidden", borderRadius: 9999 }
|
|
@@ -4520,11 +4539,11 @@ var styles34 = StyleSheet34.create({
|
|
|
4520
4539
|
|
|
4521
4540
|
// src/native/pull-to-refresh.tsx
|
|
4522
4541
|
import * as React33 from "react";
|
|
4523
|
-
import { AccessibilityInfo as AccessibilityInfo13, Animated as Animated19, RefreshControl, StyleSheet as
|
|
4524
|
-
import { jsx as
|
|
4542
|
+
import { AccessibilityInfo as AccessibilityInfo13, Animated as Animated19, RefreshControl, StyleSheet as StyleSheet37, View as View45 } from "react-native";
|
|
4543
|
+
import { jsx as jsx51, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
4525
4544
|
function PullToRefresh({ label, ...props }) {
|
|
4526
4545
|
const { theme } = useTheme();
|
|
4527
|
-
return /* @__PURE__ */
|
|
4546
|
+
return /* @__PURE__ */ jsx51(RefreshControl, { ...props, tintColor: theme.accent, colors: [theme.accent], progressBackgroundColor: theme.surface2, title: label, titleColor: theme.textSecondary });
|
|
4528
4547
|
}
|
|
4529
4548
|
var pullProgress = (offset, threshold) => Math.min(1, Math.max(0, -offset / threshold));
|
|
4530
4549
|
function BrandedRefresh({ product, refreshing, onRefresh, label, children, threshold = 72 }) {
|
|
@@ -4541,28 +4560,28 @@ function BrandedRefresh({ product, refreshing, onRefresh, label, children, thres
|
|
|
4541
4560
|
const shown = refreshing ? 1 : pull;
|
|
4542
4561
|
const scale = refreshing || reduce ? 1 : pull.interpolate({ inputRange: [0, 1], outputRange: [0.4, 1] });
|
|
4543
4562
|
const rotate = refreshing || reduce ? "0deg" : pull.interpolate({ inputRange: [0, 1], outputRange: ["-90deg", "0deg"] });
|
|
4544
|
-
return /* @__PURE__ */
|
|
4563
|
+
return /* @__PURE__ */ jsxs46(View45, { style: styles37.root, children: [
|
|
4545
4564
|
children({
|
|
4546
4565
|
// The platform's control does the gesture and the haptics, drawn transparent: the mark is ours.
|
|
4547
|
-
refreshControl: /* @__PURE__ */
|
|
4566
|
+
refreshControl: /* @__PURE__ */ jsx51(RefreshControl, { refreshing, onRefresh, tintColor: "transparent", colors: ["transparent"], progressBackgroundColor: "transparent" }),
|
|
4548
4567
|
onScroll,
|
|
4549
4568
|
scrollEventThrottle: 16
|
|
4550
4569
|
}),
|
|
4551
|
-
/* @__PURE__ */
|
|
4570
|
+
/* @__PURE__ */ jsx51(Animated19.View, { pointerEvents: "none", "aria-hidden": true, style: [styles37.mark, { opacity: shown, transform: [{ scale }, { rotate }] }], children: /* @__PURE__ */ jsx51(ProductMark, { id: product, size: 32, animated: refreshing, neutral: theme.textMuted }) })
|
|
4552
4571
|
] });
|
|
4553
4572
|
}
|
|
4554
|
-
var
|
|
4573
|
+
var styles37 = StyleSheet37.create({
|
|
4555
4574
|
root: { flex: 1 },
|
|
4556
4575
|
mark: { position: "absolute", top: 12, left: 0, right: 0, alignItems: "center" }
|
|
4557
4576
|
});
|
|
4558
4577
|
|
|
4559
4578
|
// src/native/radio-group.tsx
|
|
4560
4579
|
import * as React34 from "react";
|
|
4561
|
-
import { Animated as Animated20, Pressable as Pressable18, StyleSheet as
|
|
4580
|
+
import { Animated as Animated20, Pressable as Pressable18, StyleSheet as StyleSheet38, Text as Text15, View as View46 } from "react-native";
|
|
4562
4581
|
import Svg24, { Path as Path20 } from "react-native-svg";
|
|
4563
|
-
import { jsx as
|
|
4582
|
+
import { jsx as jsx52, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
4564
4583
|
function Check({ color }) {
|
|
4565
|
-
return /* @__PURE__ */
|
|
4584
|
+
return /* @__PURE__ */ jsx52(Svg24, { width: 12, height: 12, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 3.2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx52(Path20, { d: "M20 6 9 17l-5-5" }) });
|
|
4566
4585
|
}
|
|
4567
4586
|
function Key({ option, checked, disabled, onPress }) {
|
|
4568
4587
|
const { theme, radius: radius3, motion: motion3 } = useTheme();
|
|
@@ -4572,7 +4591,7 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4572
4591
|
React34.useEffect(() => {
|
|
4573
4592
|
Animated20.timing(sink, { toValue: down ? 1 : 0, duration: motion3.duration.fast, useNativeDriver: true }).start();
|
|
4574
4593
|
}, [down, sink, motion3.duration.fast]);
|
|
4575
|
-
return /* @__PURE__ */
|
|
4594
|
+
return /* @__PURE__ */ jsxs47(
|
|
4576
4595
|
Pressable18,
|
|
4577
4596
|
{
|
|
4578
4597
|
role: "radio",
|
|
@@ -4583,14 +4602,14 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4583
4602
|
onPress,
|
|
4584
4603
|
onPressIn: () => setHeld(true),
|
|
4585
4604
|
onPressOut: () => setHeld(false),
|
|
4586
|
-
style: [
|
|
4605
|
+
style: [styles38.keySlot, disabled ? styles38.disabled : null],
|
|
4587
4606
|
children: [
|
|
4588
|
-
/* @__PURE__ */
|
|
4589
|
-
/* @__PURE__ */
|
|
4607
|
+
/* @__PURE__ */ jsx52(View46, { style: [styles38.ledge, { borderRadius: radius3.lg, backgroundColor: checked ? theme.accentHover : theme.borderStrong }] }),
|
|
4608
|
+
/* @__PURE__ */ jsxs47(
|
|
4590
4609
|
Animated20.View,
|
|
4591
4610
|
{
|
|
4592
4611
|
style: [
|
|
4593
|
-
|
|
4612
|
+
styles38.key,
|
|
4594
4613
|
{
|
|
4595
4614
|
borderRadius: radius3.lg,
|
|
4596
4615
|
backgroundColor: checked ? theme.accent : theme.surface2,
|
|
@@ -4599,8 +4618,8 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4599
4618
|
}
|
|
4600
4619
|
],
|
|
4601
4620
|
children: [
|
|
4602
|
-
/* @__PURE__ */
|
|
4603
|
-
option.hint ? /* @__PURE__ */
|
|
4621
|
+
/* @__PURE__ */ jsx52(Text15, { style: [styles38.keyLabel, { color: checked ? theme.onAccent : theme.textPrimary }], children: option.label }),
|
|
4622
|
+
option.hint ? /* @__PURE__ */ jsx52(Text15, { style: [styles38.keyHint, { color: checked ? theme.onAccent : theme.textSecondary }], children: option.hint }) : null
|
|
4604
4623
|
]
|
|
4605
4624
|
}
|
|
4606
4625
|
)
|
|
@@ -4621,9 +4640,9 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4621
4640
|
const checked = o.value === value;
|
|
4622
4641
|
const off = Boolean(disabled || o.disabled);
|
|
4623
4642
|
const name = o.description ? `${o.label}, ${o.description}` : o.label;
|
|
4624
|
-
if (variant === "buttons") return /* @__PURE__ */
|
|
4643
|
+
if (variant === "buttons") return /* @__PURE__ */ jsx52(Key, { option: o, checked, disabled: off, onPress: () => pick(o.value) }, o.value);
|
|
4625
4644
|
if (variant === "segmented")
|
|
4626
|
-
return /* @__PURE__ */
|
|
4645
|
+
return /* @__PURE__ */ jsx52(
|
|
4627
4646
|
Pressable18,
|
|
4628
4647
|
{
|
|
4629
4648
|
role: "radio",
|
|
@@ -4632,13 +4651,13 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4632
4651
|
"aria-disabled": off || void 0,
|
|
4633
4652
|
disabled: off,
|
|
4634
4653
|
onPress: () => pick(o.value),
|
|
4635
|
-
style: [
|
|
4636
|
-
children: /* @__PURE__ */
|
|
4654
|
+
style: [styles38.segment, { borderRadius: radius3.md }, checked ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null, off ? styles38.disabled : null],
|
|
4655
|
+
children: /* @__PURE__ */ jsx52(Text15, { numberOfLines: 1, style: [styles38.segmentLabel, { color: checked ? theme.textPrimary : theme.textSecondary }], children: o.label })
|
|
4637
4656
|
},
|
|
4638
4657
|
o.value
|
|
4639
4658
|
);
|
|
4640
4659
|
if (variant === "cards")
|
|
4641
|
-
return /* @__PURE__ */
|
|
4660
|
+
return /* @__PURE__ */ jsxs47(
|
|
4642
4661
|
Pressable18,
|
|
4643
4662
|
{
|
|
4644
4663
|
role: "radio",
|
|
@@ -4648,40 +4667,40 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4648
4667
|
disabled: off,
|
|
4649
4668
|
onPress: () => pick(o.value),
|
|
4650
4669
|
style: ({ pressed }) => [
|
|
4651
|
-
|
|
4670
|
+
styles38.card,
|
|
4652
4671
|
{ borderRadius: radius3.xl, backgroundColor: checked ? theme.accentSoft : theme.surface1, borderColor: checked ? theme.accent : theme.borderDefault, transform: [{ scale: pressed ? 0.98 : 1 }] },
|
|
4653
|
-
off ?
|
|
4672
|
+
off ? styles38.disabled : null
|
|
4654
4673
|
],
|
|
4655
4674
|
children: [
|
|
4656
|
-
/* @__PURE__ */
|
|
4657
|
-
/* @__PURE__ */
|
|
4658
|
-
o.description ? /* @__PURE__ */
|
|
4675
|
+
/* @__PURE__ */ jsx52(View46, { style: [styles38.cardCheck, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }], children: checked ? /* @__PURE__ */ jsx52(Check, { color: theme.onAccent }) : null }),
|
|
4676
|
+
/* @__PURE__ */ jsx52(Text15, { style: [styles38.cardLabel, { color: theme.textPrimary }], children: o.label }),
|
|
4677
|
+
o.description ? /* @__PURE__ */ jsx52(Text15, { style: [styles38.cardDescription, { color: theme.textSecondary }], children: o.description }) : null
|
|
4659
4678
|
]
|
|
4660
4679
|
},
|
|
4661
4680
|
o.value
|
|
4662
4681
|
);
|
|
4663
|
-
return /* @__PURE__ */
|
|
4664
|
-
/* @__PURE__ */
|
|
4665
|
-
/* @__PURE__ */
|
|
4666
|
-
/* @__PURE__ */
|
|
4667
|
-
o.description ? /* @__PURE__ */
|
|
4682
|
+
return /* @__PURE__ */ jsxs47(Pressable18, { role: "radio", "aria-checked": checked, "aria-label": name, "aria-disabled": off || void 0, disabled: off, onPress: () => pick(o.value), style: [styles38.row, off ? styles38.disabled : null], children: [
|
|
4683
|
+
/* @__PURE__ */ jsx52(View46, { style: [styles38.dot, { borderColor: checked ? theme.accent : theme.borderStrong, backgroundColor: checked ? theme.accent : theme.surface1 }], children: checked ? /* @__PURE__ */ jsx52(View46, { style: [styles38.dotIn, { backgroundColor: theme.onAccent }] }) : null }),
|
|
4684
|
+
/* @__PURE__ */ jsxs47(View46, { style: styles38.rowText, children: [
|
|
4685
|
+
/* @__PURE__ */ jsx52(Text15, { style: [styles38.rowLabel, { color: theme.textPrimary }], children: o.label }),
|
|
4686
|
+
o.description ? /* @__PURE__ */ jsx52(Text15, { style: [styles38.cardDescription, { color: theme.textSecondary }], children: o.description }) : null
|
|
4668
4687
|
] })
|
|
4669
4688
|
] }, o.value);
|
|
4670
4689
|
});
|
|
4671
|
-
return /* @__PURE__ */
|
|
4672
|
-
/* @__PURE__ */
|
|
4673
|
-
|
|
4690
|
+
return /* @__PURE__ */ jsxs47(View46, { style: [styles38.root, style], children: [
|
|
4691
|
+
/* @__PURE__ */ jsx52(
|
|
4692
|
+
View46,
|
|
4674
4693
|
{
|
|
4675
4694
|
role: "radiogroup",
|
|
4676
4695
|
"aria-label": label,
|
|
4677
|
-
style: variant === "segmented" ? [
|
|
4696
|
+
style: variant === "segmented" ? [styles38.track, { borderRadius: radius3.lg, backgroundColor: theme.surface2, borderColor: error ? theme.danger : theme.borderDefault }] : variant === "buttons" ? styles38.keys : variant === "cards" ? styles38.cards : styles38.list,
|
|
4678
4697
|
children: body
|
|
4679
4698
|
}
|
|
4680
4699
|
),
|
|
4681
|
-
error ? /* @__PURE__ */
|
|
4700
|
+
error ? /* @__PURE__ */ jsx52(Text15, { role: "alert", "aria-live": "polite", style: [styles38.error, { color: theme.dangerText }], children: error }) : null
|
|
4682
4701
|
] });
|
|
4683
4702
|
}
|
|
4684
|
-
var
|
|
4703
|
+
var styles38 = StyleSheet38.create({
|
|
4685
4704
|
root: { gap: 6, alignSelf: "stretch" },
|
|
4686
4705
|
list: { gap: 2 },
|
|
4687
4706
|
row: { flexDirection: "row", alignItems: "center", gap: 12, minHeight: 44 },
|
|
@@ -4700,34 +4719,34 @@ var styles36 = StyleSheet36.create({
|
|
|
4700
4719
|
key: { minHeight: 48, paddingHorizontal: 16, paddingVertical: 8, alignItems: "center", justifyContent: "center", gap: 1, borderWidth: 1 },
|
|
4701
4720
|
keyLabel: { fontSize: 15, fontWeight: "700" },
|
|
4702
4721
|
keyHint: { fontSize: 11, fontWeight: "500" },
|
|
4703
|
-
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth:
|
|
4704
|
-
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth:
|
|
4722
|
+
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet38.hairlineWidth, height: 42 },
|
|
4723
|
+
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet38.hairlineWidth, borderColor: "transparent" },
|
|
4705
4724
|
segmentLabel: { fontSize: 13, fontWeight: "600" },
|
|
4706
4725
|
error: { fontSize: 12, lineHeight: 16 },
|
|
4707
4726
|
disabled: { opacity: 0.4 }
|
|
4708
4727
|
});
|
|
4709
4728
|
|
|
4710
4729
|
// src/native/screen.tsx
|
|
4711
|
-
import { KeyboardAvoidingView, Platform as Platform3, ScrollView as ScrollView6, StyleSheet as
|
|
4712
|
-
import { Fragment as Fragment7, jsx as
|
|
4730
|
+
import { KeyboardAvoidingView, Platform as Platform3, ScrollView as ScrollView6, StyleSheet as StyleSheet39, View as View47 } from "react-native";
|
|
4731
|
+
import { Fragment as Fragment7, jsx as jsx53, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
4713
4732
|
function Screen({ header, footer, children, scroll = true, keyboard = true, padding = 16, surface = "surface0", contentStyle }) {
|
|
4714
4733
|
const { theme, insets } = useTheme();
|
|
4715
|
-
const body = scroll ? /* @__PURE__ */
|
|
4716
|
-
const inner = /* @__PURE__ */
|
|
4734
|
+
const body = scroll ? /* @__PURE__ */ jsx53(ScrollView6, { style: styles39.flex, contentContainerStyle: [{ padding, paddingTop: header ? padding : padding + insets.top, gap: 16 }, contentStyle], keyboardShouldPersistTaps: "handled", tabIndex: 0, children }) : /* @__PURE__ */ jsx53(View47, { style: [styles39.flex, { paddingTop: header ? 0 : insets.top }, contentStyle], children });
|
|
4735
|
+
const inner = /* @__PURE__ */ jsxs48(Fragment7, { children: [
|
|
4717
4736
|
header,
|
|
4718
4737
|
body,
|
|
4719
4738
|
footer
|
|
4720
4739
|
] });
|
|
4721
|
-
return /* @__PURE__ */
|
|
4740
|
+
return /* @__PURE__ */ jsx53(View47, { style: [styles39.flex, { backgroundColor: theme[surface] }], children: keyboard ? /* @__PURE__ */ jsx53(KeyboardAvoidingView, { style: styles39.flex, behavior: Platform3.OS === "ios" ? "padding" : void 0, children: inner }) : inner });
|
|
4722
4741
|
}
|
|
4723
|
-
var
|
|
4742
|
+
var styles39 = StyleSheet39.create({ flex: { flex: 1 } });
|
|
4724
4743
|
|
|
4725
4744
|
// src/native/search-field.tsx
|
|
4726
4745
|
import { useDebouncedCallback } from "@krizaka/pacer/react";
|
|
4727
4746
|
import * as React35 from "react";
|
|
4728
|
-
import { Pressable as Pressable19, StyleSheet as
|
|
4747
|
+
import { Pressable as Pressable19, StyleSheet as StyleSheet40, TextInput as TextInput6, View as View48 } from "react-native";
|
|
4729
4748
|
import Svg25, { Circle as Circle15, Path as Path21 } from "react-native-svg";
|
|
4730
|
-
import { jsx as
|
|
4749
|
+
import { jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
4731
4750
|
function SearchField({ label, value, defaultValue = "", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, cancelLabel, onCancel, style, placeholder, onFocus, onBlur, ...props }) {
|
|
4732
4751
|
const [focused, setFocused] = React35.useState(false);
|
|
4733
4752
|
const input = React35.useRef(null);
|
|
@@ -4741,12 +4760,12 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4741
4760
|
search.cancel();
|
|
4742
4761
|
if (onSearch) search(next);
|
|
4743
4762
|
};
|
|
4744
|
-
const field = /* @__PURE__ */
|
|
4745
|
-
/* @__PURE__ */
|
|
4746
|
-
/* @__PURE__ */
|
|
4747
|
-
/* @__PURE__ */
|
|
4763
|
+
const field = /* @__PURE__ */ jsxs49(View48, { style: [styles40.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
|
|
4764
|
+
/* @__PURE__ */ jsxs49(Svg25, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
|
|
4765
|
+
/* @__PURE__ */ jsx54(Circle15, { cx: 11, cy: 11, r: 7 }),
|
|
4766
|
+
/* @__PURE__ */ jsx54(Path21, { d: "m20 20-3.5-3.5" })
|
|
4748
4767
|
] }),
|
|
4749
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ jsx54(
|
|
4750
4769
|
TextInput6,
|
|
4751
4770
|
{
|
|
4752
4771
|
ref: input,
|
|
@@ -4765,7 +4784,7 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4765
4784
|
onSearch?.(query);
|
|
4766
4785
|
onSubmit?.(query);
|
|
4767
4786
|
},
|
|
4768
|
-
style: [
|
|
4787
|
+
style: [styles40.input, { color: theme.textPrimary }],
|
|
4769
4788
|
onFocus: (e) => {
|
|
4770
4789
|
setFocused(true);
|
|
4771
4790
|
onFocus?.(e);
|
|
@@ -4777,12 +4796,12 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4777
4796
|
...props
|
|
4778
4797
|
}
|
|
4779
4798
|
),
|
|
4780
|
-
query ? /* @__PURE__ */
|
|
4799
|
+
query ? /* @__PURE__ */ jsx54(Pressable19, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles40.clear, children: /* @__PURE__ */ jsx54(Svg25, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx54(Path21, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
|
|
4781
4800
|
] });
|
|
4782
4801
|
if (!cancelLabel || !onCancel) return field;
|
|
4783
|
-
return /* @__PURE__ */
|
|
4784
|
-
/* @__PURE__ */
|
|
4785
|
-
focused || query ? /* @__PURE__ */
|
|
4802
|
+
return /* @__PURE__ */ jsxs49(View48, { style: styles40.bar, children: [
|
|
4803
|
+
/* @__PURE__ */ jsx54(View48, { style: styles40.grow, children: field }),
|
|
4804
|
+
focused || query ? /* @__PURE__ */ jsx54(
|
|
4786
4805
|
Pressable19,
|
|
4787
4806
|
{
|
|
4788
4807
|
role: "button",
|
|
@@ -4792,14 +4811,14 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4792
4811
|
onCancel();
|
|
4793
4812
|
},
|
|
4794
4813
|
hitSlop: 8,
|
|
4795
|
-
style:
|
|
4796
|
-
children: /* @__PURE__ */
|
|
4814
|
+
style: styles40.cancel,
|
|
4815
|
+
children: /* @__PURE__ */ jsx54(Txt, { variant: "label", tone: "accent", children: cancelLabel })
|
|
4797
4816
|
}
|
|
4798
4817
|
) : null
|
|
4799
4818
|
] });
|
|
4800
4819
|
}
|
|
4801
|
-
var
|
|
4802
|
-
frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth:
|
|
4820
|
+
var styles40 = StyleSheet40.create({
|
|
4821
|
+
frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet40.hairlineWidth },
|
|
4803
4822
|
input: { flex: 1, height: "100%", fontSize: 15, paddingVertical: 0 },
|
|
4804
4823
|
bar: { flexDirection: "row", alignItems: "center", gap: 10 },
|
|
4805
4824
|
grow: { flex: 1 },
|
|
@@ -4808,19 +4827,19 @@ var styles38 = StyleSheet38.create({
|
|
|
4808
4827
|
});
|
|
4809
4828
|
|
|
4810
4829
|
// src/native/segmented.tsx
|
|
4811
|
-
import { Pressable as Pressable20, StyleSheet as
|
|
4812
|
-
import { jsx as
|
|
4830
|
+
import { Pressable as Pressable20, StyleSheet as StyleSheet41, Text as Text16, View as View49 } from "react-native";
|
|
4831
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
4813
4832
|
function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
|
|
4814
4833
|
const { theme, radius: radius3 } = useTheme();
|
|
4815
|
-
return /* @__PURE__ */
|
|
4816
|
-
|
|
4834
|
+
return /* @__PURE__ */ jsx55(
|
|
4835
|
+
View49,
|
|
4817
4836
|
{
|
|
4818
4837
|
role: "tablist",
|
|
4819
4838
|
"aria-label": label,
|
|
4820
|
-
style: [
|
|
4839
|
+
style: [styles41.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
|
|
4821
4840
|
children: options.map((option) => {
|
|
4822
4841
|
const selected = option.value === value;
|
|
4823
|
-
return /* @__PURE__ */
|
|
4842
|
+
return /* @__PURE__ */ jsx55(
|
|
4824
4843
|
Pressable20,
|
|
4825
4844
|
{
|
|
4826
4845
|
role: "tab",
|
|
@@ -4831,12 +4850,12 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
|
|
|
4831
4850
|
if (!selected) onValueChange(option.value);
|
|
4832
4851
|
},
|
|
4833
4852
|
style: [
|
|
4834
|
-
|
|
4853
|
+
styles41.segment,
|
|
4835
4854
|
{ borderRadius: radius3.sm },
|
|
4836
4855
|
selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
|
|
4837
|
-
option.disabled ?
|
|
4856
|
+
option.disabled ? styles41.disabled : null
|
|
4838
4857
|
],
|
|
4839
|
-
children: /* @__PURE__ */
|
|
4858
|
+
children: /* @__PURE__ */ jsx55(Text16, { numberOfLines: 1, style: [styles41.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
|
|
4840
4859
|
},
|
|
4841
4860
|
option.value
|
|
4842
4861
|
);
|
|
@@ -4844,18 +4863,18 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
|
|
|
4844
4863
|
}
|
|
4845
4864
|
);
|
|
4846
4865
|
}
|
|
4847
|
-
var
|
|
4848
|
-
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth:
|
|
4849
|
-
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth:
|
|
4866
|
+
var styles41 = StyleSheet41.create({
|
|
4867
|
+
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet41.hairlineWidth },
|
|
4868
|
+
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet41.hairlineWidth, borderColor: "transparent" },
|
|
4850
4869
|
label: { fontWeight: "600" },
|
|
4851
4870
|
disabled: { opacity: 0.4 }
|
|
4852
4871
|
});
|
|
4853
4872
|
|
|
4854
4873
|
// src/native/showcase.tsx
|
|
4855
4874
|
import * as React36 from "react";
|
|
4856
|
-
import { Animated as Animated21, AppState, Easing as Easing12, FlatList, Pressable as Pressable21, StyleSheet as
|
|
4875
|
+
import { Animated as Animated21, AppState, Easing as Easing12, FlatList, Pressable as Pressable21, StyleSheet as StyleSheet42, View as View50 } from "react-native";
|
|
4857
4876
|
import Svg26, { Path as Path22 } from "react-native-svg";
|
|
4858
|
-
import { jsx as
|
|
4877
|
+
import { jsx as jsx56, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
4859
4878
|
var showcaseLabels = {
|
|
4860
4879
|
previous: "Previous slide",
|
|
4861
4880
|
next: "Next slide",
|
|
@@ -4913,10 +4932,10 @@ function Showcase({ label, items: items2, getId, renderItem, getTitle, interval
|
|
|
4913
4932
|
}, [running, current, interval]);
|
|
4914
4933
|
const item = items2[current];
|
|
4915
4934
|
const title = item !== void 0 ? getTitle?.(item) : void 0;
|
|
4916
|
-
const control = [
|
|
4917
|
-
const icon = (d) => /* @__PURE__ */
|
|
4918
|
-
return /* @__PURE__ */
|
|
4919
|
-
/* @__PURE__ */
|
|
4935
|
+
const control = [styles42.control, { borderColor: theme.borderDefault, backgroundColor: theme.surface1 }];
|
|
4936
|
+
const icon = (d) => /* @__PURE__ */ jsx56(Svg26, { width: 16, height: 16, viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsx56(Path22, { d, stroke: theme.textSecondary, strokeWidth: 2.2, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }) });
|
|
4937
|
+
return /* @__PURE__ */ jsxs50(View50, { role: "group", "aria-label": label, style: [styles42.root, style], children: [
|
|
4938
|
+
/* @__PURE__ */ jsx56(View50, { "aria-live": announce ? "polite" : "off", onLayout: (e) => setWidth(e.nativeEvent.layout.width), children: /* @__PURE__ */ jsx56(
|
|
4920
4939
|
FlatList,
|
|
4921
4940
|
{
|
|
4922
4941
|
ref: list,
|
|
@@ -4937,25 +4956,25 @@ function Showcase({ label, items: items2, getId, renderItem, getTitle, interval
|
|
|
4937
4956
|
onIndexChange?.(next, true);
|
|
4938
4957
|
}
|
|
4939
4958
|
},
|
|
4940
|
-
renderItem: ({ item: slide, index }) => /* @__PURE__ */
|
|
4959
|
+
renderItem: ({ item: slide, index }) => /* @__PURE__ */ jsx56(View50, { role: "group", "aria-label": labels.slide(index + 1, total), style: { width }, children: Math.abs(index - current) <= 1 ? renderItem(slide, { index, active: index === current }) : null })
|
|
4941
4960
|
}
|
|
4942
4961
|
) }),
|
|
4943
|
-
/* @__PURE__ */
|
|
4944
|
-
i < current || i === current && !playing ? /* @__PURE__ */
|
|
4945
|
-
i === current && playing ? /* @__PURE__ */
|
|
4962
|
+
/* @__PURE__ */ jsx56(View50, { style: styles42.segments, children: items2.map((slide, i) => /* @__PURE__ */ jsx56(Pressable21, { role: "button", "aria-label": labels.goTo(i + 1, total), "aria-current": i === current ? true : void 0, onPress: () => go(i, true), style: styles42.segment, children: /* @__PURE__ */ jsxs50(View50, { style: [styles42.track, { backgroundColor: theme.surface3 }], children: [
|
|
4963
|
+
i < current || i === current && !playing ? /* @__PURE__ */ jsx56(View50, { style: [StyleSheet42.absoluteFill, { backgroundColor: theme.accent }] }) : null,
|
|
4964
|
+
i === current && playing ? /* @__PURE__ */ jsx56(Animated21.View, { style: [styles42.fill, { backgroundColor: theme.accent, width: fill.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) }] }) : null
|
|
4946
4965
|
] }) }, getId(slide))) }),
|
|
4947
|
-
/* @__PURE__ */
|
|
4948
|
-
/* @__PURE__ */
|
|
4966
|
+
/* @__PURE__ */ jsxs50(View50, { style: styles42.bar, children: [
|
|
4967
|
+
/* @__PURE__ */ jsxs50(Txt, { variant: "caption", tone: "secondary", numberOfLines: 1, style: styles42.counter, children: [
|
|
4949
4968
|
title ? `${title} \xB7 ` : "",
|
|
4950
4969
|
labels.counter(current + 1, total)
|
|
4951
4970
|
] }),
|
|
4952
|
-
/* @__PURE__ */
|
|
4953
|
-
playing ? /* @__PURE__ */
|
|
4954
|
-
/* @__PURE__ */
|
|
4971
|
+
/* @__PURE__ */ jsx56(Pressable21, { role: "button", "aria-label": labels.previous, disabled: !loop && current === 0, hitSlop: 6, onPress: () => go(current - 1, true), style: control, children: icon("M15 5l-7 7 7 7") }),
|
|
4972
|
+
playing ? /* @__PURE__ */ jsx56(Pressable21, { role: "button", "aria-label": paused ? labels.play : labels.pause, hitSlop: 6, onPress: () => setPaused(!paused), style: control, children: icon(paused ? "M8 5.5v13l10-6.5Z" : "M8 5v14M16 5v14") }) : null,
|
|
4973
|
+
/* @__PURE__ */ jsx56(Pressable21, { role: "button", "aria-label": labels.next, disabled: !loop && current === total - 1, hitSlop: 6, onPress: () => go(current + 1, true), style: control, children: icon("M9 5l7 7-7 7") })
|
|
4955
4974
|
] })
|
|
4956
4975
|
] });
|
|
4957
4976
|
}
|
|
4958
|
-
var
|
|
4977
|
+
var styles42 = StyleSheet42.create({
|
|
4959
4978
|
root: { gap: 8 },
|
|
4960
4979
|
segments: { flexDirection: "row", gap: 4 },
|
|
4961
4980
|
segment: { flex: 1, height: 24, justifyContent: "center" },
|
|
@@ -4969,7 +4988,7 @@ var styles40 = StyleSheet40.create({
|
|
|
4969
4988
|
// src/native/skeleton.tsx
|
|
4970
4989
|
import * as React37 from "react";
|
|
4971
4990
|
import { Animated as Animated22 } from "react-native";
|
|
4972
|
-
import { jsx as
|
|
4991
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
4973
4992
|
var SHAPE = {
|
|
4974
4993
|
text: { width: "100%", height: 12, radius: 4 },
|
|
4975
4994
|
circle: { width: 40, height: 40, radius: 9999 },
|
|
@@ -4995,7 +5014,7 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
4995
5014
|
}, [reduce, opacity]);
|
|
4996
5015
|
const s = SHAPE[shape];
|
|
4997
5016
|
const side = shape === "circle" ? width ?? height ?? s.width : void 0;
|
|
4998
|
-
return /* @__PURE__ */
|
|
5017
|
+
return /* @__PURE__ */ jsx57(
|
|
4999
5018
|
Animated22.View,
|
|
5000
5019
|
{
|
|
5001
5020
|
testID,
|
|
@@ -5010,9 +5029,9 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
5010
5029
|
|
|
5011
5030
|
// src/native/slider.tsx
|
|
5012
5031
|
import * as React38 from "react";
|
|
5013
|
-
import { PanResponder as PanResponder2, StyleSheet as
|
|
5014
|
-
import Svg27, { Defs as Defs14, LinearGradient as
|
|
5015
|
-
import { jsx as
|
|
5032
|
+
import { PanResponder as PanResponder2, StyleSheet as StyleSheet43, Text as Text17, View as View51 } from "react-native";
|
|
5033
|
+
import Svg27, { Defs as Defs14, LinearGradient as LinearGradient11, Rect as Rect4, Stop as Stop14 } from "react-native-svg";
|
|
5034
|
+
import { jsx as jsx58, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
5016
5035
|
var THUMB = 26;
|
|
5017
5036
|
var toArray = (v) => v === void 0 ? void 0 : typeof v === "number" ? [v] : [...v];
|
|
5018
5037
|
function Slider({
|
|
@@ -5104,24 +5123,24 @@ function Slider({
|
|
|
5104
5123
|
const along = (p) => vertical ? { bottom: p * length } : { left: p * length };
|
|
5105
5124
|
const onLayout = (e) => setLength(vertical ? e.nativeEvent.layout.height : e.nativeEvent.layout.width);
|
|
5106
5125
|
const fill = vertical ? { bottom: pct(lo) * length, height: (pct(hi) - pct(lo)) * length, left: 0, right: 0 } : { left: pct(lo) * length, width: (pct(hi) - pct(lo)) * length, top: 0, bottom: 0 };
|
|
5107
|
-
return /* @__PURE__ */
|
|
5108
|
-
showLabel ? /* @__PURE__ */
|
|
5109
|
-
/* @__PURE__ */
|
|
5110
|
-
/* @__PURE__ */
|
|
5126
|
+
return /* @__PURE__ */ jsxs51(View51, { style: [styles43.root, vertical ? styles43.rootVertical : null, disabled ? styles43.disabled : null, style], children: [
|
|
5127
|
+
showLabel ? /* @__PURE__ */ jsxs51(View51, { style: styles43.header, children: [
|
|
5128
|
+
/* @__PURE__ */ jsx58(Text17, { style: [styles43.label, { color: theme.textSecondary }], children: label }),
|
|
5129
|
+
/* @__PURE__ */ jsx58(Text17, { "aria-hidden": true, style: [styles43.value, { color: theme.textSecondary }], children: current.map(formatValue).join(" \u2013 ") })
|
|
5111
5130
|
] }) : null,
|
|
5112
|
-
/* @__PURE__ */
|
|
5113
|
-
/* @__PURE__ */
|
|
5114
|
-
/* @__PURE__ */
|
|
5115
|
-
/* @__PURE__ */
|
|
5116
|
-
/* @__PURE__ */
|
|
5117
|
-
/* @__PURE__ */
|
|
5131
|
+
/* @__PURE__ */ jsxs51(View51, { ...responder.panHandlers, style: vertical ? styles43.controlVertical : styles43.control, children: [
|
|
5132
|
+
/* @__PURE__ */ jsxs51(View51, { onLayout, pointerEvents: "none", style: [vertical ? styles43.trackVertical : styles43.track, { borderRadius: radius3.full, backgroundColor: theme.surface3 }], children: [
|
|
5133
|
+
/* @__PURE__ */ jsx58(View51, { style: [styles43.fill, fill, { borderRadius: radius3.full, overflow: "hidden", backgroundColor: theme.accent }], children: tone3 === "gradient" ? /* @__PURE__ */ jsxs51(Svg27, { width: "100%", height: "100%", "aria-hidden": true, children: [
|
|
5134
|
+
/* @__PURE__ */ jsx58(Defs14, { children: /* @__PURE__ */ jsxs51(LinearGradient11, { id: gradientId, x1: "0", y1: vertical ? "1" : "0", x2: vertical ? "0" : "1", y2: "0", children: [
|
|
5135
|
+
/* @__PURE__ */ jsx58(Stop14, { offset: "0", stopColor: theme.accent }),
|
|
5136
|
+
/* @__PURE__ */ jsx58(Stop14, { offset: "1", stopColor: theme.accent2 })
|
|
5118
5137
|
] }) }),
|
|
5119
|
-
/* @__PURE__ */
|
|
5138
|
+
/* @__PURE__ */ jsx58(Rect4, { width: "100%", height: "100%", fill: `url(#${gradientId})` })
|
|
5120
5139
|
] }) : null }),
|
|
5121
|
-
tickValues.map((t) => /* @__PURE__ */
|
|
5140
|
+
tickValues.map((t) => /* @__PURE__ */ jsx58(View51, { style: [vertical ? styles43.tickVertical : styles43.tick, along(pct(t)), { backgroundColor: t > lo && t < hi ? theme.onAccent : theme.borderStrong }] }, t))
|
|
5122
5141
|
] }),
|
|
5123
|
-
current.map((v, i) => /* @__PURE__ */
|
|
5124
|
-
|
|
5142
|
+
current.map((v, i) => /* @__PURE__ */ jsx58(
|
|
5143
|
+
View51,
|
|
5125
5144
|
{
|
|
5126
5145
|
accessible: true,
|
|
5127
5146
|
role: "slider",
|
|
@@ -5140,16 +5159,16 @@ function Slider({
|
|
|
5140
5159
|
onValueCommit?.(out(values));
|
|
5141
5160
|
},
|
|
5142
5161
|
pointerEvents: "none",
|
|
5143
|
-
style: [
|
|
5144
|
-
children: floatingValue === "always" || floatingValue && dragging === i ? /* @__PURE__ */
|
|
5162
|
+
style: [styles43.thumb, vertical ? { bottom: pct(v) * length, left: (44 - THUMB) / 2, marginLeft: 0, marginTop: 0 } : { left: pct(v) * length - THUMB / 2, top: 0 }, { borderColor: theme.accent, backgroundColor: theme.textOnMedia, shadowColor: theme.scrimStrong }],
|
|
5163
|
+
children: floatingValue === "always" || floatingValue && dragging === i ? /* @__PURE__ */ jsx58(View51, { "aria-hidden": true, style: [vertical ? styles43.bubbleVertical : styles43.bubble, { backgroundColor: theme.textPrimary, borderRadius: radius3.md }], children: /* @__PURE__ */ jsx58(Text17, { style: [styles43.bubbleText, { color: theme.surface0 }], children: formatValue(v) }) }) : null
|
|
5145
5164
|
},
|
|
5146
5165
|
i
|
|
5147
5166
|
))
|
|
5148
5167
|
] }),
|
|
5149
|
-
marks2?.length && !vertical ? /* @__PURE__ */
|
|
5168
|
+
marks2?.length && !vertical ? /* @__PURE__ */ jsx58(View51, { "aria-hidden": true, style: styles43.marks, children: marks2.map((m) => /* @__PURE__ */ jsx58(Text17, { style: [styles43.mark, { left: pct(m.value) * length, color: theme.textSecondary, transform: [{ translateX: m.value === min ? 0 : m.value === max ? -40 : -20 }], textAlign: m.value === min ? "left" : m.value === max ? "right" : "center" }], children: m.label }, m.value)) }) : null
|
|
5150
5169
|
] });
|
|
5151
5170
|
}
|
|
5152
|
-
var
|
|
5171
|
+
var styles43 = StyleSheet43.create({
|
|
5153
5172
|
root: { gap: 8, alignSelf: "stretch" },
|
|
5154
5173
|
rootVertical: { alignSelf: "flex-start", alignItems: "center" },
|
|
5155
5174
|
header: { flexDirection: "row", justifyContent: "space-between", alignItems: "baseline", gap: 12 },
|
|
@@ -5185,10 +5204,10 @@ var styles41 = StyleSheet41.create({
|
|
|
5185
5204
|
|
|
5186
5205
|
// src/native/spinner.tsx
|
|
5187
5206
|
import { ActivityIndicator as ActivityIndicator2 } from "react-native";
|
|
5188
|
-
import { jsx as
|
|
5207
|
+
import { jsx as jsx59 } from "react/jsx-runtime";
|
|
5189
5208
|
function Spinner({ label, size = "md", ...props }) {
|
|
5190
5209
|
const { theme } = useTheme();
|
|
5191
|
-
return /* @__PURE__ */
|
|
5210
|
+
return /* @__PURE__ */ jsx59(
|
|
5192
5211
|
ActivityIndicator2,
|
|
5193
5212
|
{
|
|
5194
5213
|
accessible: true,
|
|
@@ -5204,8 +5223,8 @@ function Spinner({ label, size = "md", ...props }) {
|
|
|
5204
5223
|
|
|
5205
5224
|
// src/native/splash-handoff.tsx
|
|
5206
5225
|
import * as React39 from "react";
|
|
5207
|
-
import { Animated as Animated23, Easing as Easing13, StyleSheet as
|
|
5208
|
-
import { jsx as
|
|
5226
|
+
import { Animated as Animated23, Easing as Easing13, StyleSheet as StyleSheet44, View as View52 } from "react-native";
|
|
5227
|
+
import { jsx as jsx60 } from "react/jsx-runtime";
|
|
5209
5228
|
function SplashHandoff({ product, ready, onShown, onDone, size = 96, background, label, duration = 320, style }) {
|
|
5210
5229
|
const { theme } = useTheme();
|
|
5211
5230
|
const reduce = useReducedMotion();
|
|
@@ -5223,7 +5242,7 @@ function SplashHandoff({ product, ready, onShown, onDone, size = 96, background,
|
|
|
5223
5242
|
return () => animation.stop();
|
|
5224
5243
|
}, [ready, reduce, duration, opacity, onDone]);
|
|
5225
5244
|
if (gone) return null;
|
|
5226
|
-
return /* @__PURE__ */
|
|
5245
|
+
return /* @__PURE__ */ jsx60(
|
|
5227
5246
|
Animated23.View,
|
|
5228
5247
|
{
|
|
5229
5248
|
accessible: true,
|
|
@@ -5232,30 +5251,30 @@ function SplashHandoff({ product, ready, onShown, onDone, size = 96, background,
|
|
|
5232
5251
|
"aria-busy": true,
|
|
5233
5252
|
pointerEvents: ready ? "none" : "auto",
|
|
5234
5253
|
onLayout: onShown,
|
|
5235
|
-
style: [
|
|
5236
|
-
children: /* @__PURE__ */
|
|
5254
|
+
style: [StyleSheet44.absoluteFill, styles44.root, { backgroundColor: background ?? theme.surface0, opacity }, style],
|
|
5255
|
+
children: /* @__PURE__ */ jsx60(View52, { children: /* @__PURE__ */ jsx60(ProductMark, { id: product, size, animated: true }) })
|
|
5237
5256
|
}
|
|
5238
5257
|
);
|
|
5239
5258
|
}
|
|
5240
|
-
var
|
|
5259
|
+
var styles44 = StyleSheet44.create({ root: { alignItems: "center", justifyContent: "center", zIndex: 100 } });
|
|
5241
5260
|
|
|
5242
5261
|
// src/native/step-progress.tsx
|
|
5243
|
-
import { Pressable as Pressable22, StyleSheet as
|
|
5262
|
+
import { Pressable as Pressable22, StyleSheet as StyleSheet45, View as View53 } from "react-native";
|
|
5244
5263
|
import Svg28, { Path as Path23 } from "react-native-svg";
|
|
5245
|
-
import { jsx as
|
|
5264
|
+
import { jsx as jsx61, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
5246
5265
|
function StepProgress({ step, total, label, backLabel, onBack, trailing, style }) {
|
|
5247
5266
|
const { theme, insets } = useTheme();
|
|
5248
5267
|
const words2 = label(step, total);
|
|
5249
|
-
return /* @__PURE__ */
|
|
5250
|
-
/* @__PURE__ */
|
|
5251
|
-
onBack && backLabel ? /* @__PURE__ */
|
|
5252
|
-
/* @__PURE__ */
|
|
5253
|
-
/* @__PURE__ */
|
|
5268
|
+
return /* @__PURE__ */ jsxs52(View53, { style: [styles45.root, { paddingTop: insets.top + 8 }, style], children: [
|
|
5269
|
+
/* @__PURE__ */ jsxs52(View53, { style: styles45.row, children: [
|
|
5270
|
+
onBack && backLabel ? /* @__PURE__ */ jsx61(Pressable22, { role: "button", "aria-label": backLabel, hitSlop: 10, onPress: onBack, style: styles45.back, children: /* @__PURE__ */ jsx61(Svg28, { width: 22, height: 22, viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsx61(Path23, { d: "M15 5l-7 7 7 7", stroke: theme.textPrimary, strokeWidth: 2.4, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }) }) }) : /* @__PURE__ */ jsx61(View53, { style: styles45.back }),
|
|
5271
|
+
/* @__PURE__ */ jsx61(View53, { accessible: true, role: "progressbar", "aria-label": words2, "aria-valuemin": 1, "aria-valuemax": total, "aria-valuenow": step, "aria-valuetext": words2, style: styles45.bars, children: Array.from({ length: total }, (_, i) => /* @__PURE__ */ jsx61(View53, { style: [styles45.bar, { backgroundColor: i < step ? theme.accent : theme.surface3 }] }, i)) }),
|
|
5272
|
+
/* @__PURE__ */ jsx61(View53, { style: styles45.trailing, children: trailing })
|
|
5254
5273
|
] }),
|
|
5255
|
-
/* @__PURE__ */
|
|
5274
|
+
/* @__PURE__ */ jsx61(Txt, { variant: "caption", tone: "secondary", style: styles45.words, "aria-hidden": true, children: words2 })
|
|
5256
5275
|
] });
|
|
5257
5276
|
}
|
|
5258
|
-
var
|
|
5277
|
+
var styles45 = StyleSheet45.create({
|
|
5259
5278
|
root: { paddingHorizontal: 12, gap: 6 },
|
|
5260
5279
|
row: { flexDirection: "row", alignItems: "center", gap: 8 },
|
|
5261
5280
|
back: { width: 40, height: 40, alignItems: "center", justifyContent: "center" },
|
|
@@ -5266,36 +5285,36 @@ var styles43 = StyleSheet43.create({
|
|
|
5266
5285
|
});
|
|
5267
5286
|
|
|
5268
5287
|
// src/native/stepper.tsx
|
|
5269
|
-
import { StyleSheet as
|
|
5288
|
+
import { StyleSheet as StyleSheet46, View as View54 } from "react-native";
|
|
5270
5289
|
import Svg29, { Circle as Circle16, Path as Path24 } from "react-native-svg";
|
|
5271
|
-
import { jsx as
|
|
5290
|
+
import { jsx as jsx62, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
5272
5291
|
var WORDS = { done: "done", current: "in progress", upcoming: "to come", error: "failed" };
|
|
5273
5292
|
function Stepper({ steps, current = 0, orientation = "vertical", statusLabels, "aria-label": label, style }) {
|
|
5274
5293
|
const { theme } = useTheme();
|
|
5275
5294
|
const words2 = { ...WORDS, ...statusLabels };
|
|
5276
5295
|
const vertical = orientation === "vertical";
|
|
5277
|
-
return /* @__PURE__ */
|
|
5296
|
+
return /* @__PURE__ */ jsx62(View54, { role: "list", "aria-label": label, style: [vertical ? styles46.column : styles46.row, style], children: steps.map((step, i) => {
|
|
5278
5297
|
const status = step.status ?? (i < current ? "done" : i === current ? "current" : "upcoming");
|
|
5279
5298
|
const last = i === steps.length - 1;
|
|
5280
|
-
const node = status === "current" ? /* @__PURE__ */
|
|
5281
|
-
/* @__PURE__ */
|
|
5282
|
-
status === "done" ? /* @__PURE__ */
|
|
5299
|
+
const node = status === "current" ? /* @__PURE__ */ jsx62(LoaderGlyph, { value: step.value ?? null, size: 24 }) : status === "error" ? /* @__PURE__ */ jsx62(LoaderGlyph, { state: "error", size: 24 }) : /* @__PURE__ */ jsxs53(Svg29, { width: 24, height: 24, viewBox: "0 0 24 24", "aria-hidden": true, children: [
|
|
5300
|
+
/* @__PURE__ */ jsx62(Circle16, { cx: 12, cy: 12, r: 10, fill: status === "done" ? theme.accent : "none", stroke: status === "done" ? theme.accent : theme.borderStrong, strokeWidth: 2 }),
|
|
5301
|
+
status === "done" ? /* @__PURE__ */ jsx62(Path24, { d: "M7.5 12.3l3 3 6-6.3", stroke: theme.onAccent, strokeWidth: 2.2, fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }) : null
|
|
5283
5302
|
] });
|
|
5284
|
-
const connector = !last ? /* @__PURE__ */
|
|
5285
|
-
return /* @__PURE__ */
|
|
5286
|
-
/* @__PURE__ */
|
|
5303
|
+
const connector = !last ? /* @__PURE__ */ jsx62(View54, { "aria-hidden": true, style: [vertical ? styles46.vLine : styles46.hLine, { backgroundColor: status === "done" ? theme.accent : theme.borderDefault }] }) : null;
|
|
5304
|
+
return /* @__PURE__ */ jsxs53(View54, { role: "listitem", accessible: true, "aria-label": `${step.title}, ${words2[status]}`, style: vertical ? styles46.vStep : styles46.hStep, children: [
|
|
5305
|
+
/* @__PURE__ */ jsxs53(View54, { style: vertical ? styles46.vRail : styles46.hRail, children: [
|
|
5287
5306
|
node,
|
|
5288
5307
|
connector
|
|
5289
5308
|
] }),
|
|
5290
|
-
/* @__PURE__ */
|
|
5291
|
-
/* @__PURE__ */
|
|
5292
|
-
step.description ? /* @__PURE__ */
|
|
5293
|
-
step.content && (status === "current" || status === "error") ? /* @__PURE__ */
|
|
5309
|
+
/* @__PURE__ */ jsxs53(View54, { style: [styles46.body, vertical && !last ? { paddingBottom: 20 } : null], children: [
|
|
5310
|
+
/* @__PURE__ */ jsx62(Txt, { variant: "label", tone: status === "upcoming" ? "secondary" : "text", numberOfLines: vertical ? void 0 : 2, children: step.title }),
|
|
5311
|
+
step.description ? /* @__PURE__ */ jsx62(Txt, { variant: "caption", tone: "secondary", children: step.description }) : null,
|
|
5312
|
+
step.content && (status === "current" || status === "error") ? /* @__PURE__ */ jsx62(View54, { style: styles46.content, children: step.content }) : null
|
|
5294
5313
|
] })
|
|
5295
5314
|
] }, i);
|
|
5296
5315
|
}) });
|
|
5297
5316
|
}
|
|
5298
|
-
var
|
|
5317
|
+
var styles46 = StyleSheet46.create({
|
|
5299
5318
|
column: { gap: 0 },
|
|
5300
5319
|
row: { flexDirection: "row" },
|
|
5301
5320
|
vStep: { flexDirection: "row", gap: 12 },
|
|
@@ -5310,58 +5329,58 @@ var styles44 = StyleSheet44.create({
|
|
|
5310
5329
|
|
|
5311
5330
|
// src/native/swipe-deck.tsx
|
|
5312
5331
|
import * as React40 from "react";
|
|
5313
|
-
import { AccessibilityInfo as AccessibilityInfo14, Animated as Animated24, Image as Image5, PanResponder as PanResponder3, Platform as Platform4, Pressable as Pressable23, StyleSheet as
|
|
5314
|
-
import Svg30, { Defs as Defs15, LinearGradient as
|
|
5315
|
-
import { Fragment as Fragment8, jsx as
|
|
5332
|
+
import { AccessibilityInfo as AccessibilityInfo14, Animated as Animated24, Image as Image5, PanResponder as PanResponder3, Platform as Platform4, Pressable as Pressable23, StyleSheet as StyleSheet47, useWindowDimensions as useWindowDimensions2, View as View55 } from "react-native";
|
|
5333
|
+
import Svg30, { Defs as Defs15, LinearGradient as LinearGradient12, Path as Path25, Rect as Rect5, Stop as Stop15 } from "react-native-svg";
|
|
5334
|
+
import { Fragment as Fragment8, jsx as jsx63, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
5316
5335
|
function PersonCard({ photos, name, age, badge, meta, bio, footer, photoLabel = (n, t) => `Photo ${n} of ${t}`, style }) {
|
|
5317
5336
|
const { theme, radius: radius3 } = useTheme();
|
|
5318
5337
|
const [index, setIndex] = React40.useState(0);
|
|
5319
5338
|
const gradient = useSvgId("kz-profile-");
|
|
5320
5339
|
const [box, setBox] = React40.useState(null);
|
|
5321
5340
|
const photo = photos[index];
|
|
5322
|
-
return /* @__PURE__ */
|
|
5323
|
-
|
|
5341
|
+
return /* @__PURE__ */ jsxs54(
|
|
5342
|
+
View55,
|
|
5324
5343
|
{
|
|
5325
5344
|
accessible: Platform4.OS !== "web",
|
|
5326
5345
|
accessibilityActions: photos.length > 1 ? [{ name: "increment" }, { name: "decrement" }] : [],
|
|
5327
5346
|
onAccessibilityAction: (e) => setIndex((i) => Math.max(0, Math.min(photos.length - 1, i + (e.nativeEvent.actionName === "increment" ? 1 : -1)))),
|
|
5328
5347
|
role: Platform4.OS === "web" ? "group" : "img",
|
|
5329
5348
|
"aria-label": [`${name}${age !== void 0 ? `, ${age}` : ""}`, bio, photos.length > 1 ? photoLabel(index + 1, photos.length) : null].filter(Boolean).join(". "),
|
|
5330
|
-
style: [
|
|
5349
|
+
style: [styles47.card, { borderRadius: radius3.xl, backgroundColor: theme.media }, style],
|
|
5331
5350
|
children: [
|
|
5332
|
-
photo ? /* @__PURE__ */
|
|
5333
|
-
photos.length > 1 ? /* @__PURE__ */
|
|
5334
|
-
/* @__PURE__ */
|
|
5335
|
-
/* @__PURE__ */
|
|
5336
|
-
/* @__PURE__ */
|
|
5351
|
+
photo ? /* @__PURE__ */ jsx63(Image5, { testID: "person-card-photo", source: { uri: photo.uri }, style: StyleSheet47.absoluteFill, resizeMode: "cover" }) : null,
|
|
5352
|
+
photos.length > 1 ? /* @__PURE__ */ jsxs54(Fragment8, { children: [
|
|
5353
|
+
/* @__PURE__ */ jsx63(View55, { style: styles47.bars, "aria-hidden": true, children: photos.map((_, i) => /* @__PURE__ */ jsx63(View55, { style: [styles47.bar, { backgroundColor: theme.textOnMedia, opacity: i === index ? 1 : 0.4 }] }, i)) }),
|
|
5354
|
+
/* @__PURE__ */ jsx63(Pressable23, { "aria-hidden": true, accessible: false, focusable: false, tabIndex: -1, style: [styles47.half, { left: 0 }], onPress: () => setIndex((i) => Math.max(0, i - 1)) }),
|
|
5355
|
+
/* @__PURE__ */ jsx63(Pressable23, { "aria-hidden": true, accessible: false, focusable: false, tabIndex: -1, style: [styles47.half, { right: 0 }], onPress: () => setIndex((i) => Math.min(photos.length - 1, i + 1)) })
|
|
5337
5356
|
] }) : null,
|
|
5338
|
-
/* @__PURE__ */
|
|
5339
|
-
|
|
5357
|
+
/* @__PURE__ */ jsxs54(
|
|
5358
|
+
View55,
|
|
5340
5359
|
{
|
|
5341
5360
|
testID: "person-card-overlay",
|
|
5342
5361
|
pointerEvents: "box-none",
|
|
5343
|
-
style:
|
|
5362
|
+
style: styles47.bottom,
|
|
5344
5363
|
onLayout: (e) => setBox({ width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height }),
|
|
5345
5364
|
children: [
|
|
5346
|
-
box ? /* @__PURE__ */
|
|
5347
|
-
/* @__PURE__ */
|
|
5348
|
-
/* @__PURE__ */
|
|
5349
|
-
/* @__PURE__ */
|
|
5350
|
-
/* @__PURE__ */
|
|
5365
|
+
box ? /* @__PURE__ */ jsxs54(Svg30, { testID: "person-card-scrim", style: styles47.scrim, width: box.width, height: box.height, "aria-hidden": true, children: [
|
|
5366
|
+
/* @__PURE__ */ jsx63(Defs15, { children: /* @__PURE__ */ jsxs54(LinearGradient12, { id: gradient, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
5367
|
+
/* @__PURE__ */ jsx63(Stop15, { offset: "0", stopColor: theme.scrimStrong, stopOpacity: 0 }),
|
|
5368
|
+
/* @__PURE__ */ jsx63(Stop15, { offset: "0.5", stopColor: theme.scrimStrong, stopOpacity: 0.8 }),
|
|
5369
|
+
/* @__PURE__ */ jsx63(Stop15, { offset: "1", stopColor: theme.scrimStrong, stopOpacity: 1 })
|
|
5351
5370
|
] }) }),
|
|
5352
|
-
/* @__PURE__ */
|
|
5371
|
+
/* @__PURE__ */ jsx63(Rect5, { x: 0, y: 0, width: box.width, height: box.height, fill: `url(#${gradient})` })
|
|
5353
5372
|
] }) : null,
|
|
5354
|
-
/* @__PURE__ */
|
|
5355
|
-
/* @__PURE__ */
|
|
5356
|
-
/* @__PURE__ */
|
|
5373
|
+
/* @__PURE__ */ jsxs54(View55, { style: styles47.text, children: [
|
|
5374
|
+
/* @__PURE__ */ jsxs54(View55, { style: styles47.nameRow, children: [
|
|
5375
|
+
/* @__PURE__ */ jsxs54(Txt, { variant: "display", tone: "onMedia", style: styles47.name, numberOfLines: 1, children: [
|
|
5357
5376
|
name,
|
|
5358
|
-
age !== void 0 ? /* @__PURE__ */
|
|
5377
|
+
age !== void 0 ? /* @__PURE__ */ jsx63(Txt, { variant: "display", tone: "onMedia", style: styles47.age, children: ` ${age}` }) : null
|
|
5359
5378
|
] }),
|
|
5360
5379
|
badge
|
|
5361
5380
|
] }),
|
|
5362
5381
|
meta,
|
|
5363
|
-
bio ? /* @__PURE__ */
|
|
5364
|
-
footer ? /* @__PURE__ */
|
|
5382
|
+
bio ? /* @__PURE__ */ jsx63(Txt, { tone: "onMedia", numberOfLines: 2, children: bio }) : null,
|
|
5383
|
+
footer ? /* @__PURE__ */ jsx63(View55, { style: styles47.footer, children: footer }) : null
|
|
5365
5384
|
] })
|
|
5366
5385
|
]
|
|
5367
5386
|
}
|
|
@@ -5405,7 +5424,7 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5405
5424
|
const rotate = x.interpolate({ inputRange: [-width, 0, width], outputRange: ["-14deg", "0deg", "14deg"] });
|
|
5406
5425
|
const likeOpacity = x.interpolate({ inputRange: [0, width / 4], outputRange: [0, 1], extrapolate: "clamp" });
|
|
5407
5426
|
const passOpacity = x.interpolate({ inputRange: [-width / 4, 0], outputRange: [1, 0], extrapolate: "clamp" });
|
|
5408
|
-
const button = (direction) => /* @__PURE__ */
|
|
5427
|
+
const button = (direction) => /* @__PURE__ */ jsx63(
|
|
5409
5428
|
Pressable23,
|
|
5410
5429
|
{
|
|
5411
5430
|
role: "button",
|
|
@@ -5413,18 +5432,18 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5413
5432
|
disabled: !top,
|
|
5414
5433
|
onPress: () => decide(direction),
|
|
5415
5434
|
style: ({ pressed }) => [
|
|
5416
|
-
|
|
5435
|
+
styles47.button,
|
|
5417
5436
|
{ borderColor: direction === "like" ? theme.success : theme.danger, backgroundColor: theme.surface1, transform: [{ scale: pressed ? 0.92 : 1 }], opacity: top ? 1 : 0.4 }
|
|
5418
5437
|
],
|
|
5419
|
-
children: /* @__PURE__ */
|
|
5438
|
+
children: /* @__PURE__ */ jsx63(Svg30, { width: 28, height: 28, viewBox: "0 0 24 24", "aria-hidden": true, children: direction === "like" ? /* @__PURE__ */ jsx63(Path25, { d: "M12 20s-7-4.4-7-10a4 4 0 0 1 7-2.6A4 4 0 0 1 19 10c0 5.6-7 10-7 10z", fill: theme.success }) : /* @__PURE__ */ jsx63(Path25, { d: "M6 6l12 12M18 6 6 18", stroke: theme.danger, strokeWidth: 3, strokeLinecap: "round" }) })
|
|
5420
5439
|
}
|
|
5421
5440
|
);
|
|
5422
|
-
return /* @__PURE__ */
|
|
5423
|
-
/* @__PURE__ */
|
|
5441
|
+
return /* @__PURE__ */ jsxs54(View55, { style: [styles47.deck, style], children: [
|
|
5442
|
+
/* @__PURE__ */ jsxs54(View55, { style: styles47.stack, children: [
|
|
5424
5443
|
!top ? empty2 ?? null : null,
|
|
5425
5444
|
items2.slice(0, 2).reverse().map((item) => {
|
|
5426
5445
|
const isTop = item === top;
|
|
5427
|
-
return /* @__PURE__ */
|
|
5446
|
+
return /* @__PURE__ */ jsxs54(
|
|
5428
5447
|
Animated24.View,
|
|
5429
5448
|
{
|
|
5430
5449
|
...isTop ? pan.panHandlers : {},
|
|
@@ -5433,12 +5452,12 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5433
5452
|
"aria-hidden": !isTop,
|
|
5434
5453
|
importantForAccessibility: isTop ? "auto" : "no-hide-descendants",
|
|
5435
5454
|
pointerEvents: isTop ? "auto" : "none",
|
|
5436
|
-
style: [
|
|
5455
|
+
style: [StyleSheet47.absoluteFill, isTop ? { transform: [{ translateX: x }, { rotate }] } : { transform: [{ scale: 0.96 }], opacity: 0.9 }],
|
|
5437
5456
|
children: [
|
|
5438
5457
|
renderCard(item),
|
|
5439
|
-
isTop ? /* @__PURE__ */
|
|
5440
|
-
/* @__PURE__ */
|
|
5441
|
-
/* @__PURE__ */
|
|
5458
|
+
isTop ? /* @__PURE__ */ jsxs54(Fragment8, { children: [
|
|
5459
|
+
/* @__PURE__ */ jsx63(Animated24.View, { pointerEvents: "none", style: [styles47.stamp, styles47.stampLike, { borderColor: theme.success, opacity: likeOpacity }], "aria-hidden": true, children: /* @__PURE__ */ jsx63(Txt, { variant: "title", style: { color: theme.success }, children: labels.likeStamp ?? labels.like.toUpperCase() }) }),
|
|
5460
|
+
/* @__PURE__ */ jsx63(Animated24.View, { pointerEvents: "none", style: [styles47.stamp, styles47.stampPass, { borderColor: theme.danger, opacity: passOpacity }], "aria-hidden": true, children: /* @__PURE__ */ jsx63(Txt, { variant: "title", style: { color: theme.danger }, children: labels.passStamp ?? labels.pass.toUpperCase() }) })
|
|
5442
5461
|
] }) : null
|
|
5443
5462
|
]
|
|
5444
5463
|
},
|
|
@@ -5446,13 +5465,13 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5446
5465
|
);
|
|
5447
5466
|
})
|
|
5448
5467
|
] }),
|
|
5449
|
-
hideButtons ? null : /* @__PURE__ */
|
|
5468
|
+
hideButtons ? null : /* @__PURE__ */ jsxs54(View55, { style: styles47.buttons, children: [
|
|
5450
5469
|
button("pass"),
|
|
5451
5470
|
button("like")
|
|
5452
5471
|
] })
|
|
5453
5472
|
] });
|
|
5454
5473
|
}
|
|
5455
|
-
var
|
|
5474
|
+
var styles47 = StyleSheet47.create({
|
|
5456
5475
|
card: { flex: 1, overflow: "hidden" },
|
|
5457
5476
|
bars: { position: "absolute", top: 8, left: 8, right: 8, flexDirection: "row", gap: 4 },
|
|
5458
5477
|
bar: { flex: 1, height: 3, borderRadius: 2 },
|
|
@@ -5475,8 +5494,8 @@ var styles45 = StyleSheet45.create({
|
|
|
5475
5494
|
|
|
5476
5495
|
// src/native/swipeable-row.tsx
|
|
5477
5496
|
import * as React41 from "react";
|
|
5478
|
-
import { Animated as Animated25, PanResponder as PanResponder4, Pressable as Pressable24, StyleSheet as
|
|
5479
|
-
import { jsx as
|
|
5497
|
+
import { Animated as Animated25, PanResponder as PanResponder4, Pressable as Pressable24, StyleSheet as StyleSheet48, View as View56 } from "react-native";
|
|
5498
|
+
import { jsx as jsx64, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
5480
5499
|
var toneColor = (t, tone3) => ({ neutral: t.surface3, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger })[tone3 ?? "neutral"];
|
|
5481
5500
|
var toneText = (tone3) => tone3 === "neutral" || tone3 === void 0 ? "text" : "onAccent";
|
|
5482
5501
|
function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6, actionWidth = 80, onActivate, testID, style }) {
|
|
@@ -5524,18 +5543,18 @@ function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6,
|
|
|
5524
5543
|
[trailing, leading, fullSwipe, width, actionWidth]
|
|
5525
5544
|
// eslint-disable-line react-hooks/exhaustive-deps -- run/settle are stable in effect
|
|
5526
5545
|
);
|
|
5527
|
-
const side = (actions, edge) => /* @__PURE__ */
|
|
5546
|
+
const side = (actions, edge) => /* @__PURE__ */ jsx64(View56, { "aria-hidden": true, style: [styles48.side, edge === "left" ? { left: 0 } : { right: 0, flexDirection: "row-reverse" }], children: actions.map((action, i) => (
|
|
5528
5547
|
// eslint-disable-next-line react-hooks/refs -- runs on a press, never during render
|
|
5529
|
-
/* @__PURE__ */
|
|
5548
|
+
/* @__PURE__ */ jsxs55(Pressable24, { focusable: false, tabIndex: -1, onPress: () => run(action), style: [styles48.action, { width: actionWidth, backgroundColor: toneColor(theme, action.tone) }], children: [
|
|
5530
5549
|
action.icon,
|
|
5531
|
-
/* @__PURE__ */
|
|
5550
|
+
/* @__PURE__ */ jsx64(Txt, { variant: "caption", tone: toneText(action.tone), style: styles48.actionText, numberOfLines: 1, children: action.label })
|
|
5532
5551
|
] }, i)
|
|
5533
5552
|
)) });
|
|
5534
5553
|
const all = [...leading, ...trailing];
|
|
5535
|
-
return /* @__PURE__ */
|
|
5554
|
+
return /* @__PURE__ */ jsxs55(View56, { style: [styles48.root, style], onLayout: (e) => setWidth(e.nativeEvent.layout.width), children: [
|
|
5536
5555
|
leading.length > 0 ? side(leading, "left") : null,
|
|
5537
5556
|
trailing.length > 0 ? side(trailing, "right") : null,
|
|
5538
|
-
/* @__PURE__ */
|
|
5557
|
+
/* @__PURE__ */ jsx64(
|
|
5539
5558
|
Animated25.View,
|
|
5540
5559
|
{
|
|
5541
5560
|
...pan.panHandlers,
|
|
@@ -5547,13 +5566,13 @@ function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6,
|
|
|
5547
5566
|
const action = all.find((a) => a.label === e.nativeEvent.actionName);
|
|
5548
5567
|
if (action) action.onPress();
|
|
5549
5568
|
},
|
|
5550
|
-
style: [
|
|
5569
|
+
style: [styles48.front, { backgroundColor: theme.surface0, transform: [{ translateX: x }] }],
|
|
5551
5570
|
children
|
|
5552
5571
|
}
|
|
5553
5572
|
)
|
|
5554
5573
|
] });
|
|
5555
5574
|
}
|
|
5556
|
-
var
|
|
5575
|
+
var styles48 = StyleSheet48.create({
|
|
5557
5576
|
root: { overflow: "hidden" },
|
|
5558
5577
|
side: { position: "absolute", top: 0, bottom: 0, flexDirection: "row" },
|
|
5559
5578
|
action: { alignItems: "center", justifyContent: "center", gap: 4, paddingHorizontal: 6 },
|
|
@@ -5563,8 +5582,8 @@ var styles46 = StyleSheet46.create({
|
|
|
5563
5582
|
|
|
5564
5583
|
// src/native/switch.tsx
|
|
5565
5584
|
import * as React42 from "react";
|
|
5566
|
-
import { Animated as Animated26, Pressable as Pressable25, StyleSheet as
|
|
5567
|
-
import { jsx as
|
|
5585
|
+
import { Animated as Animated26, Pressable as Pressable25, StyleSheet as StyleSheet49, Text as Text18, View as View57 } from "react-native";
|
|
5586
|
+
import { jsx as jsx65, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
5568
5587
|
var SIZES = { sm: { w: 40, h: 24, knob: 18 }, md: { w: 52, h: 32, knob: 26 } };
|
|
5569
5588
|
function Switch({ label, checked, defaultChecked = false, onCheckedChange, description, showLabel, size = "md", error, disabled, style }) {
|
|
5570
5589
|
const { theme, motion: motion3, haptic } = useTheme();
|
|
@@ -5581,11 +5600,11 @@ function Switch({ label, checked, defaultChecked = false, onCheckedChange, descr
|
|
|
5581
5600
|
if (checked === void 0) setOwn(!on);
|
|
5582
5601
|
onCheckedChange?.(!on);
|
|
5583
5602
|
};
|
|
5584
|
-
const track = /* @__PURE__ */
|
|
5603
|
+
const track = /* @__PURE__ */ jsx65(View57, { style: [styles49.track, { width: d.w, height: d.h, borderRadius: d.h / 2, backgroundColor: on ? theme.accent : theme.surface3, borderColor: error ? theme.danger : on ? theme.accent : theme.borderDefault }], children: /* @__PURE__ */ jsx65(
|
|
5585
5604
|
Animated26.View,
|
|
5586
5605
|
{
|
|
5587
5606
|
style: [
|
|
5588
|
-
|
|
5607
|
+
styles49.knob,
|
|
5589
5608
|
{
|
|
5590
5609
|
width: d.knob,
|
|
5591
5610
|
height: d.knob,
|
|
@@ -5607,19 +5626,19 @@ function Switch({ label, checked, defaultChecked = false, onCheckedChange, descr
|
|
|
5607
5626
|
onPress: toggle
|
|
5608
5627
|
};
|
|
5609
5628
|
if (!showLabel)
|
|
5610
|
-
return /* @__PURE__ */
|
|
5611
|
-
return /* @__PURE__ */
|
|
5612
|
-
/* @__PURE__ */
|
|
5613
|
-
/* @__PURE__ */
|
|
5614
|
-
/* @__PURE__ */
|
|
5615
|
-
description ? /* @__PURE__ */
|
|
5629
|
+
return /* @__PURE__ */ jsx65(Pressable25, { ...a11y, hitSlop: { top: (44 - d.h) / 2, bottom: (44 - d.h) / 2, left: Math.max(0, (44 - d.w) / 2), right: Math.max(0, (44 - d.w) / 2) }, style: [disabled ? styles49.disabled : null, style], children: track });
|
|
5630
|
+
return /* @__PURE__ */ jsxs56(View57, { style: [styles49.root, style], children: [
|
|
5631
|
+
/* @__PURE__ */ jsxs56(Pressable25, { ...a11y, style: [styles49.row, disabled ? styles49.disabled : null], children: [
|
|
5632
|
+
/* @__PURE__ */ jsxs56(View57, { style: styles49.text, children: [
|
|
5633
|
+
/* @__PURE__ */ jsx65(Text18, { style: [styles49.label, { color: theme.textPrimary }], children: label }),
|
|
5634
|
+
description ? /* @__PURE__ */ jsx65(Text18, { style: [styles49.description, { color: theme.textSecondary }], children: description }) : null
|
|
5616
5635
|
] }),
|
|
5617
5636
|
track
|
|
5618
5637
|
] }),
|
|
5619
|
-
error ? /* @__PURE__ */
|
|
5638
|
+
error ? /* @__PURE__ */ jsx65(Text18, { role: "alert", "aria-live": "polite", style: [styles49.description, { color: theme.dangerText }], children: error }) : null
|
|
5620
5639
|
] });
|
|
5621
5640
|
}
|
|
5622
|
-
var
|
|
5641
|
+
var styles49 = StyleSheet49.create({
|
|
5623
5642
|
root: { gap: 2, alignSelf: "stretch" },
|
|
5624
5643
|
row: { flexDirection: "row", alignItems: "center", gap: 16, minHeight: 48 },
|
|
5625
5644
|
text: { flex: 1, gap: 2 },
|
|
@@ -5631,15 +5650,15 @@ var styles47 = StyleSheet47.create({
|
|
|
5631
5650
|
});
|
|
5632
5651
|
|
|
5633
5652
|
// src/native/tab-bar.tsx
|
|
5634
|
-
import { Pressable as Pressable26, StyleSheet as
|
|
5635
|
-
import { jsx as
|
|
5653
|
+
import { Pressable as Pressable26, StyleSheet as StyleSheet50, Text as Text19, View as View58 } from "react-native";
|
|
5654
|
+
import { jsx as jsx66, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
5636
5655
|
function TabBar({ items: items2, value, onValueChange, onReselect, "aria-label": label, style }) {
|
|
5637
5656
|
const { theme, insets, haptic } = useTheme();
|
|
5638
|
-
return /* @__PURE__ */
|
|
5657
|
+
return /* @__PURE__ */ jsx66(View58, { role: "tablist", "aria-label": label, style: [styles50.bar, { backgroundColor: theme.glassBg, borderTopColor: theme.glassBorder, paddingBottom: Math.max(6, insets.bottom) }, style], children: items2.map((item) => {
|
|
5639
5658
|
const selected = item.value === value;
|
|
5640
5659
|
const color = selected ? theme.accentText : theme.textSecondary;
|
|
5641
5660
|
const badge = item.badge === true ? "" : typeof item.badge === "number" && item.badge > 0 ? item.badge > 99 ? "99+" : String(item.badge) : null;
|
|
5642
|
-
return /* @__PURE__ */
|
|
5661
|
+
return /* @__PURE__ */ jsxs57(
|
|
5643
5662
|
Pressable26,
|
|
5644
5663
|
{
|
|
5645
5664
|
role: "tab",
|
|
@@ -5649,22 +5668,22 @@ function TabBar({ items: items2, value, onValueChange, onReselect, "aria-label":
|
|
|
5649
5668
|
if (selected) onReselect?.(item.value);
|
|
5650
5669
|
else onValueChange(item.value);
|
|
5651
5670
|
},
|
|
5652
|
-
style: ({ pressed }) => [
|
|
5671
|
+
style: ({ pressed }) => [styles50.item, { opacity: pressed ? 0.7 : 1 }],
|
|
5653
5672
|
children: [
|
|
5654
|
-
/* @__PURE__ */
|
|
5673
|
+
/* @__PURE__ */ jsxs57(View58, { "aria-hidden": true, style: styles50.icon, children: [
|
|
5655
5674
|
item.icon(selected, color),
|
|
5656
|
-
badge !== null ? /* @__PURE__ */
|
|
5675
|
+
badge !== null ? /* @__PURE__ */ jsx66(View58, { style: [badge ? styles50.count : styles50.dot, { backgroundColor: theme.danger, borderColor: theme.surface1 }], children: badge ? /* @__PURE__ */ jsx66(Text19, { style: [styles50.countText, { color: theme.onAccent }], children: badge }) : null }) : null
|
|
5657
5676
|
] }),
|
|
5658
|
-
/* @__PURE__ */
|
|
5659
|
-
badge !== null && item.badgeLabel ? /* @__PURE__ */
|
|
5677
|
+
/* @__PURE__ */ jsx66(Text19, { numberOfLines: 1, style: [styles50.label, { color, fontWeight: selected ? "700" : "500" }], children: item.label }),
|
|
5678
|
+
badge !== null && item.badgeLabel ? /* @__PURE__ */ jsx66(Text19, { style: styles50.unseen, children: `, ${item.badgeLabel}` }) : null
|
|
5660
5679
|
]
|
|
5661
5680
|
},
|
|
5662
5681
|
item.value
|
|
5663
5682
|
);
|
|
5664
5683
|
}) });
|
|
5665
5684
|
}
|
|
5666
|
-
var
|
|
5667
|
-
bar: { flexDirection: "row", borderTopWidth:
|
|
5685
|
+
var styles50 = StyleSheet50.create({
|
|
5686
|
+
bar: { flexDirection: "row", borderTopWidth: StyleSheet50.hairlineWidth, paddingTop: 6 },
|
|
5668
5687
|
item: { flex: 1, alignItems: "center", gap: 2, minHeight: 48, justifyContent: "center" },
|
|
5669
5688
|
icon: { width: 28, height: 26, alignItems: "center", justifyContent: "center" },
|
|
5670
5689
|
label: { fontSize: 11, lineHeight: 14 },
|
|
@@ -5676,8 +5695,8 @@ var styles48 = StyleSheet48.create({
|
|
|
5676
5695
|
|
|
5677
5696
|
// src/native/tabs.tsx
|
|
5678
5697
|
import * as React43 from "react";
|
|
5679
|
-
import { Pressable as Pressable27, ScrollView as ScrollView7, StyleSheet as
|
|
5680
|
-
import { jsx as
|
|
5698
|
+
import { Pressable as Pressable27, ScrollView as ScrollView7, StyleSheet as StyleSheet51, View as View59 } from "react-native";
|
|
5699
|
+
import { jsx as jsx67, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
5681
5700
|
function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label": label, variant = "underline", style }) {
|
|
5682
5701
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
5683
5702
|
const [own, setOwn] = React43.useState(defaultValue ?? items2[0]?.value);
|
|
@@ -5691,7 +5710,7 @@ function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label":
|
|
|
5691
5710
|
const segmented = variant === "segmented";
|
|
5692
5711
|
const tabs = items2.map((item) => {
|
|
5693
5712
|
const selected = item.value === current;
|
|
5694
|
-
return /* @__PURE__ */
|
|
5713
|
+
return /* @__PURE__ */ jsx67(
|
|
5695
5714
|
Pressable27,
|
|
5696
5715
|
{
|
|
5697
5716
|
role: "tab",
|
|
@@ -5700,45 +5719,45 @@ function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label":
|
|
|
5700
5719
|
disabled: item.disabled,
|
|
5701
5720
|
onPress: () => select(item.value),
|
|
5702
5721
|
style: [
|
|
5703
|
-
segmented ?
|
|
5722
|
+
segmented ? styles51.segment : styles51.tab,
|
|
5704
5723
|
segmented && selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault, borderRadius: radius3.sm } : null,
|
|
5705
5724
|
!segmented ? { borderBottomColor: selected ? theme.accent : "transparent" } : null,
|
|
5706
|
-
item.disabled ?
|
|
5725
|
+
item.disabled ? styles51.disabled : null
|
|
5707
5726
|
],
|
|
5708
|
-
children: /* @__PURE__ */
|
|
5727
|
+
children: /* @__PURE__ */ jsxs58(Txt, { variant: "label", tone: selected ? "text" : "secondary", numberOfLines: 1, children: [
|
|
5709
5728
|
item.label,
|
|
5710
|
-
item.count !== void 0 ? /* @__PURE__ */
|
|
5729
|
+
item.count !== void 0 ? /* @__PURE__ */ jsx67(Txt, { variant: "caption", tone: "secondary", children: ` ${item.count}` }) : null
|
|
5711
5730
|
] })
|
|
5712
5731
|
},
|
|
5713
5732
|
item.value
|
|
5714
5733
|
);
|
|
5715
5734
|
});
|
|
5716
5735
|
const panel = items2.find((i) => i.value === current)?.content;
|
|
5717
|
-
return /* @__PURE__ */
|
|
5718
|
-
segmented ? /* @__PURE__ */
|
|
5719
|
-
panel !== void 0 ? /* @__PURE__ */
|
|
5736
|
+
return /* @__PURE__ */ jsxs58(View59, { style: [styles51.root, style], children: [
|
|
5737
|
+
segmented ? /* @__PURE__ */ jsx67(View59, { role: "tablist", "aria-label": label, style: [styles51.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md }], children: tabs }) : /* @__PURE__ */ jsx67(View59, { style: [styles51.underline, { borderBottomColor: theme.borderSubtle }], children: /* @__PURE__ */ jsx67(ScrollView7, { horizontal: true, showsHorizontalScrollIndicator: false, role: "tablist", "aria-label": label, contentContainerStyle: styles51.scroll, children: tabs }) }),
|
|
5738
|
+
panel !== void 0 ? /* @__PURE__ */ jsx67(View59, { role: "tabpanel", children: panel }) : null
|
|
5720
5739
|
] });
|
|
5721
5740
|
}
|
|
5722
|
-
var
|
|
5741
|
+
var styles51 = StyleSheet51.create({
|
|
5723
5742
|
root: { gap: 12 },
|
|
5724
|
-
underline: { borderBottomWidth:
|
|
5743
|
+
underline: { borderBottomWidth: StyleSheet51.hairlineWidth },
|
|
5725
5744
|
scroll: { gap: 4, paddingHorizontal: 4 },
|
|
5726
5745
|
tab: { minHeight: 44, justifyContent: "center", paddingHorizontal: 12, borderBottomWidth: 2 },
|
|
5727
|
-
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth:
|
|
5728
|
-
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth:
|
|
5746
|
+
track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet51.hairlineWidth, height: 40 },
|
|
5747
|
+
segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet51.hairlineWidth, borderColor: "transparent" },
|
|
5729
5748
|
disabled: { opacity: 0.4 }
|
|
5730
5749
|
});
|
|
5731
5750
|
|
|
5732
5751
|
// src/native/tag-selector.tsx
|
|
5733
|
-
import { StyleSheet as
|
|
5734
|
-
import { jsx as
|
|
5752
|
+
import { StyleSheet as StyleSheet52, View as View60 } from "react-native";
|
|
5753
|
+
import { jsx as jsx68, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
5735
5754
|
function TagSelector({ label, options, value, onValueChange, max, countLabel, style }) {
|
|
5736
5755
|
const { haptic } = useTheme();
|
|
5737
5756
|
const full = max !== void 0 && value.length >= max;
|
|
5738
|
-
return /* @__PURE__ */
|
|
5739
|
-
/* @__PURE__ */
|
|
5757
|
+
return /* @__PURE__ */ jsxs59(View60, { style: [styles52.root, style], children: [
|
|
5758
|
+
/* @__PURE__ */ jsx68(View60, { role: "group", "aria-label": label, style: styles52.wrap, children: options.map((option) => {
|
|
5740
5759
|
const on = value.includes(option.value);
|
|
5741
|
-
return /* @__PURE__ */
|
|
5760
|
+
return /* @__PURE__ */ jsx68(
|
|
5742
5761
|
Chip,
|
|
5743
5762
|
{
|
|
5744
5763
|
selected: on,
|
|
@@ -5752,15 +5771,15 @@ function TagSelector({ label, options, value, onValueChange, max, countLabel, st
|
|
|
5752
5771
|
option.value
|
|
5753
5772
|
);
|
|
5754
5773
|
}) }),
|
|
5755
|
-
max !== void 0 && countLabel ? /* @__PURE__ */
|
|
5774
|
+
max !== void 0 && countLabel ? /* @__PURE__ */ jsx68(Txt, { variant: "caption", tone: full ? "accent" : "secondary", "aria-live": "polite", children: countLabel(value.length, max) }) : null
|
|
5756
5775
|
] });
|
|
5757
5776
|
}
|
|
5758
|
-
var
|
|
5777
|
+
var styles52 = StyleSheet52.create({ root: { gap: 8 }, wrap: { flexDirection: "row", flexWrap: "wrap", gap: 8 } });
|
|
5759
5778
|
|
|
5760
5779
|
// src/native/toast.tsx
|
|
5761
5780
|
import * as React44 from "react";
|
|
5762
|
-
import { AccessibilityInfo as AccessibilityInfo15, Animated as Animated27, PanResponder as PanResponder5, Pressable as Pressable28, StyleSheet as
|
|
5763
|
-
import { Fragment as Fragment9, jsx as
|
|
5781
|
+
import { AccessibilityInfo as AccessibilityInfo15, Animated as Animated27, PanResponder as PanResponder5, Pressable as Pressable28, StyleSheet as StyleSheet53, Text as Text20, View as View61 } from "react-native";
|
|
5782
|
+
import { Fragment as Fragment9, jsx as jsx69, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
5764
5783
|
var items = [];
|
|
5765
5784
|
var listeners2 = /* @__PURE__ */ new Set();
|
|
5766
5785
|
var counter = 0;
|
|
@@ -5827,15 +5846,15 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5827
5846
|
return () => clearTimeout(timer2);
|
|
5828
5847
|
}, [item.id, ms]);
|
|
5829
5848
|
const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
|
|
5830
|
-
const text = /* @__PURE__ */
|
|
5831
|
-
item.icon ? /* @__PURE__ */
|
|
5832
|
-
/* @__PURE__ */
|
|
5833
|
-
/* @__PURE__ */
|
|
5834
|
-
item.description ? /* @__PURE__ */
|
|
5849
|
+
const text = /* @__PURE__ */ jsxs60(Fragment9, { children: [
|
|
5850
|
+
item.icon ? /* @__PURE__ */ jsx69(View61, { "aria-hidden": true, children: item.icon }) : null,
|
|
5851
|
+
/* @__PURE__ */ jsxs60(View61, { style: styles53.content, children: [
|
|
5852
|
+
/* @__PURE__ */ jsx69(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
|
|
5853
|
+
item.description ? /* @__PURE__ */ jsx69(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
|
|
5835
5854
|
] })
|
|
5836
5855
|
] });
|
|
5837
|
-
const body = /* @__PURE__ */
|
|
5838
|
-
item.onPress ? /* @__PURE__ */
|
|
5856
|
+
const body = /* @__PURE__ */ jsxs60(Fragment9, { children: [
|
|
5857
|
+
item.onPress ? /* @__PURE__ */ jsx69(
|
|
5839
5858
|
Pressable28,
|
|
5840
5859
|
{
|
|
5841
5860
|
role: "button",
|
|
@@ -5843,11 +5862,11 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5843
5862
|
item.onPress?.();
|
|
5844
5863
|
dismiss(item.id);
|
|
5845
5864
|
},
|
|
5846
|
-
style: ({ pressed }) => [
|
|
5865
|
+
style: ({ pressed }) => [styles53.main, { opacity: pressed ? 0.8 : 1 }],
|
|
5847
5866
|
children: text
|
|
5848
5867
|
}
|
|
5849
|
-
) : /* @__PURE__ */
|
|
5850
|
-
item.action ? /* @__PURE__ */
|
|
5868
|
+
) : /* @__PURE__ */ jsx69(View61, { style: styles53.main, children: text }),
|
|
5869
|
+
item.action ? /* @__PURE__ */ jsx69(
|
|
5851
5870
|
Pressable28,
|
|
5852
5871
|
{
|
|
5853
5872
|
role: "button",
|
|
@@ -5855,33 +5874,33 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5855
5874
|
item.action?.onPress();
|
|
5856
5875
|
dismiss(item.id);
|
|
5857
5876
|
},
|
|
5858
|
-
style: [
|
|
5859
|
-
children: /* @__PURE__ */
|
|
5877
|
+
style: [styles53.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
|
|
5878
|
+
children: /* @__PURE__ */ jsx69(Text20, { style: [styles53.actionLabel, { color: theme.onAccent }], children: item.action.label })
|
|
5860
5879
|
}
|
|
5861
5880
|
) : null,
|
|
5862
|
-
/* @__PURE__ */
|
|
5881
|
+
/* @__PURE__ */ jsx69(Pressable28, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles53.close, children: /* @__PURE__ */ jsx69(Text20, { style: [styles53.cross, { color: theme.textSecondary }], children: "\xD7" }) })
|
|
5863
5882
|
] });
|
|
5864
5883
|
const frame = [
|
|
5865
|
-
|
|
5884
|
+
styles53.toast,
|
|
5866
5885
|
{ backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
|
|
5867
5886
|
];
|
|
5868
5887
|
const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }, { translateX: swipe }] };
|
|
5869
|
-
return /* @__PURE__ */
|
|
5888
|
+
return /* @__PURE__ */ jsx69(Animated27.View, { "aria-live": "polite", style: motion3, ...drag.panHandlers, children: /* @__PURE__ */ jsx69(View61, { style: frame, children: body }) });
|
|
5870
5889
|
}
|
|
5871
5890
|
function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
|
|
5872
5891
|
const all = React44.useSyncExternalStore(subscribe2, snapshot, snapshot);
|
|
5873
5892
|
const shown = all.slice(-max);
|
|
5874
5893
|
if (shown.length === 0) return null;
|
|
5875
|
-
return /* @__PURE__ */
|
|
5894
|
+
return /* @__PURE__ */ jsx69(View61, { pointerEvents: "box-none", style: [styles53.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx69(ToastView, { item, closeLabel, duration }, item.id)) });
|
|
5876
5895
|
}
|
|
5877
|
-
var
|
|
5896
|
+
var styles53 = StyleSheet53.create({
|
|
5878
5897
|
stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
|
|
5879
5898
|
toast: {
|
|
5880
5899
|
flexDirection: "row",
|
|
5881
5900
|
alignItems: "center",
|
|
5882
5901
|
gap: 10,
|
|
5883
5902
|
padding: 12,
|
|
5884
|
-
borderWidth:
|
|
5903
|
+
borderWidth: StyleSheet53.hairlineWidth,
|
|
5885
5904
|
borderLeftWidth: 4,
|
|
5886
5905
|
shadowOpacity: 0.3,
|
|
5887
5906
|
shadowRadius: 16,
|
|
@@ -5896,15 +5915,51 @@ var styles51 = StyleSheet51.create({
|
|
|
5896
5915
|
cross: { fontSize: 18, lineHeight: 20, fontWeight: "700" }
|
|
5897
5916
|
});
|
|
5898
5917
|
|
|
5918
|
+
// src/native/update-prompt.tsx
|
|
5919
|
+
import { StyleSheet as StyleSheet54, View as View62 } from "react-native";
|
|
5920
|
+
import { jsx as jsx70, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
5921
|
+
function UpdatePrompt({ title, message, versionLabel, mark, updateLabel, onUpdate, laterLabel, onLater, style }) {
|
|
5922
|
+
const { theme, radius: radius3 } = useTheme();
|
|
5923
|
+
return /* @__PURE__ */ jsxs61(
|
|
5924
|
+
View62,
|
|
5925
|
+
{
|
|
5926
|
+
role: "region",
|
|
5927
|
+
"aria-label": title,
|
|
5928
|
+
style: [styles54.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style],
|
|
5929
|
+
children: [
|
|
5930
|
+
/* @__PURE__ */ jsxs61(View62, { style: styles54.head, children: [
|
|
5931
|
+
mark ? /* @__PURE__ */ jsx70(View62, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: styles54.mark, children: mark }) : null,
|
|
5932
|
+
/* @__PURE__ */ jsxs61(View62, { style: styles54.text, children: [
|
|
5933
|
+
/* @__PURE__ */ jsx70(Txt, { variant: "label", children: title }),
|
|
5934
|
+
message ? /* @__PURE__ */ jsx70(Txt, { tone: "secondary", children: message }) : null,
|
|
5935
|
+
versionLabel ? /* @__PURE__ */ jsx70(Txt, { variant: "mono", tone: "secondary", children: versionLabel }) : null
|
|
5936
|
+
] })
|
|
5937
|
+
] }),
|
|
5938
|
+
/* @__PURE__ */ jsxs61(View62, { style: styles54.actions, children: [
|
|
5939
|
+
/* @__PURE__ */ jsx70(Button, { label: laterLabel, variant: "ghost", size: "sm", onPress: onLater }),
|
|
5940
|
+
/* @__PURE__ */ jsx70(Button, { label: updateLabel, variant: "primary", size: "sm", onPress: onUpdate })
|
|
5941
|
+
] })
|
|
5942
|
+
]
|
|
5943
|
+
}
|
|
5944
|
+
);
|
|
5945
|
+
}
|
|
5946
|
+
var styles54 = StyleSheet54.create({
|
|
5947
|
+
root: { gap: 12, padding: 16, borderWidth: StyleSheet54.hairlineWidth },
|
|
5948
|
+
head: { flexDirection: "row", gap: 12, alignItems: "center" },
|
|
5949
|
+
mark: { width: 40, height: 40, alignItems: "center", justifyContent: "center" },
|
|
5950
|
+
text: { flex: 1, gap: 2 },
|
|
5951
|
+
actions: { flexDirection: "row", justifyContent: "flex-end", gap: 8 }
|
|
5952
|
+
});
|
|
5953
|
+
|
|
5899
5954
|
// src/native/verified-badge.tsx
|
|
5900
|
-
import { StyleSheet as
|
|
5955
|
+
import { StyleSheet as StyleSheet55, View as View63 } from "react-native";
|
|
5901
5956
|
import Svg31, { Path as Path26 } from "react-native-svg";
|
|
5902
|
-
import { jsx as
|
|
5957
|
+
import { jsx as jsx71, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
5903
5958
|
function VerifiedBadge({ label, showLabel, size = 16, on = "surface" }) {
|
|
5904
5959
|
const { theme } = useTheme();
|
|
5905
|
-
return /* @__PURE__ */
|
|
5906
|
-
/* @__PURE__ */
|
|
5907
|
-
/* @__PURE__ */
|
|
5960
|
+
return /* @__PURE__ */ jsxs62(View63, { accessible: true, role: "img", "aria-label": label, style: styles55.row, children: [
|
|
5961
|
+
/* @__PURE__ */ jsxs62(Svg31, { width: size, height: size, viewBox: "0 0 24 24", "aria-hidden": true, children: [
|
|
5962
|
+
/* @__PURE__ */ jsx71(
|
|
5908
5963
|
Path26,
|
|
5909
5964
|
{
|
|
5910
5965
|
d: "M12 2.5l2.4 1.7 2.9-.1.9 2.8 2.3 1.8-.9 2.8.9 2.8-2.3 1.8-.9 2.8-2.9-.1L12 21.5l-2.4-1.7-2.9.1-.9-2.8-2.3-1.8.9-2.8-.9-2.8 2.3-1.8.9-2.8 2.9.1z",
|
|
@@ -5913,12 +5968,12 @@ function VerifiedBadge({ label, showLabel, size = 16, on = "surface" }) {
|
|
|
5913
5968
|
strokeWidth: 1.2
|
|
5914
5969
|
}
|
|
5915
5970
|
),
|
|
5916
|
-
/* @__PURE__ */
|
|
5971
|
+
/* @__PURE__ */ jsx71(Path26, { d: "M8.3 12.3l2.5 2.5 4.9-5.2", fill: "none", stroke: theme.onAccent, strokeWidth: 2.2, strokeLinecap: "round", strokeLinejoin: "round" })
|
|
5917
5972
|
] }),
|
|
5918
|
-
showLabel ? /* @__PURE__ */
|
|
5973
|
+
showLabel ? /* @__PURE__ */ jsx71(Txt, { variant: "caption", tone: on === "media" ? "onMedia" : "accent", style: styles55.text, children: label }) : null
|
|
5919
5974
|
] });
|
|
5920
5975
|
}
|
|
5921
|
-
var
|
|
5976
|
+
var styles55 = StyleSheet55.create({ row: { flexDirection: "row", alignItems: "center", gap: 4 }, text: { fontWeight: "700" } });
|
|
5922
5977
|
export {
|
|
5923
5978
|
ActionSheet,
|
|
5924
5979
|
ActivityFeed,
|
|
@@ -5951,6 +6006,7 @@ export {
|
|
|
5951
6006
|
EmptyState,
|
|
5952
6007
|
ErrorState,
|
|
5953
6008
|
Fab,
|
|
6009
|
+
ForceUpdateScreen,
|
|
5954
6010
|
GoalGauge,
|
|
5955
6011
|
Header,
|
|
5956
6012
|
IconButton,
|
|
@@ -5960,11 +6016,13 @@ export {
|
|
|
5960
6016
|
Loader,
|
|
5961
6017
|
LoaderGlyph,
|
|
5962
6018
|
LoadingState,
|
|
6019
|
+
MaintenanceScreen,
|
|
5963
6020
|
Mascot,
|
|
5964
6021
|
MascotState,
|
|
5965
6022
|
MatchDialog,
|
|
5966
6023
|
MessageBubble,
|
|
5967
6024
|
MessageComposer,
|
|
6025
|
+
MetaRow,
|
|
5968
6026
|
Meter,
|
|
5969
6027
|
MonthPicker,
|
|
5970
6028
|
NumberTicker,
|
|
@@ -6007,6 +6065,7 @@ export {
|
|
|
6007
6065
|
Toaster,
|
|
6008
6066
|
Txt,
|
|
6009
6067
|
TypingIndicator,
|
|
6068
|
+
UpdatePrompt,
|
|
6010
6069
|
VerifiedBadge,
|
|
6011
6070
|
WelcomeState,
|
|
6012
6071
|
Wheel,
|