@krizaka/ui 3.21.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/app-shell.js +1 -1
- package/dist/argument-card.js +3 -3
- package/dist/{chunk-5MH64NIL.js → chunk-2L67YTNV.js} +2 -2
- 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-LIPK4UCS.js → chunk-YCIBJ6OQ.js} +140 -209
- package/dist/chunk-YCIBJ6OQ.js.map +1 -0
- 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 +3 -3
- 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/marketing-layout.js +1 -1
- package/dist/marketing-layout.js.map +1 -1
- package/dist/media-grid.js +43 -151
- 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 +25 -16
- package/dist/native.js +493 -520
- package/dist/native.js.map +1 -1
- package/dist/nav-bar.js +2 -2
- package/dist/page-hero.js +3 -3
- 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/package.json +61 -4
- 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 +1 -1
- 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/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/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/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/field.json +1 -1
- package/registry/file-upload.json +1 -1
- package/registry/filter-bar.json +1 -1
- package/registry/force-update-screen.json +1 -1
- 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 +130 -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 +1 -1
- 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 +1 -1
- package/registry/meta-row.json +215 -0
- package/registry/meter.json +1 -1
- package/registry/nav-bar.json +13 -13
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/registry/verified-badge.json +1 -1
- package/registry/vertical-video.json +1 -1
- package/registry/video-player.json +1 -1
- 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-5MH64NIL.js.map → chunk-2L67YTNV.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 }) {
|
|
@@ -2879,30 +2870,32 @@ var styles24 = StyleSheet24.create({
|
|
|
2879
2870
|
|
|
2880
2871
|
// src/native/KachizakaMark.tsx
|
|
2881
2872
|
import { View as View23 } from "react-native";
|
|
2882
|
-
import Svg9, { Circle as Circle3, Defs as Defs4,
|
|
2873
|
+
import Svg9, { Circle as Circle3, Defs as Defs4, Path as Path7, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
|
|
2883
2874
|
|
|
2884
2875
|
// src/marks/kachizaka-geometry.ts
|
|
2876
|
+
var cobalt = marks.kachizaka[0][1];
|
|
2885
2877
|
var gold = marks.kachizaka[marks.kachizaka.length - 1][1];
|
|
2886
2878
|
var KACHIZAKA = {
|
|
2887
2879
|
viewBox: "0 0 400 400",
|
|
2888
2880
|
croppedViewBox: "80 80 240 240",
|
|
2889
2881
|
center: 200,
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
/** The
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
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 },
|
|
2901
2894
|
/** The ball: one node on the orbit, that turns with it. */
|
|
2902
|
-
|
|
2895
|
+
ball: { r: 9, at: [200, 40] },
|
|
2903
2896
|
glow: { color: gold, opacity: 0.18 },
|
|
2904
|
-
/** The seal's breathing shadow (web), in the gold. */
|
|
2905
2897
|
pulse: { color: gold, low: 0.35, high: 0.75 },
|
|
2898
|
+
motion: { spin: 28, breath: 3.2 },
|
|
2906
2899
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
2907
2900
|
ring: { r: 134, width: 1 }
|
|
2908
2901
|
};
|
|
@@ -2911,39 +2904,36 @@ var KACHIZAKA = {
|
|
|
2911
2904
|
import { jsx as jsx27, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2912
2905
|
function KachizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
2913
2906
|
const { theme } = useTheme();
|
|
2914
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
2915
|
-
const id = useSvgId("
|
|
2907
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, KACHIZAKA.motion.spin * 1e3);
|
|
2908
|
+
const id = useSvgId("kcm");
|
|
2916
2909
|
const viewBox = size < 48 ? KACHIZAKA.croppedViewBox : KACHIZAKA.viewBox;
|
|
2917
2910
|
const stroke = neutral ?? theme.textMuted;
|
|
2918
|
-
const gradient = /* @__PURE__ */ jsx27(LinearGradient4, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: KACHIZAKA.gradient.x1, y1: KACHIZAKA.gradient.y1, x2: KACHIZAKA.gradient.x2, y2: KACHIZAKA.gradient.y2, children: KACHIZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx27(Stop4, { offset, stopColor: color }, offset)) });
|
|
2919
|
-
const fill = `url(#${id}a)`;
|
|
2920
2911
|
return /* @__PURE__ */ jsxs24(View23, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
2921
2912
|
/* @__PURE__ */ jsxs24(Svg9, { viewBox, style: layer, children: [
|
|
2922
|
-
/* @__PURE__ */
|
|
2923
|
-
/* @__PURE__ */
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
] }),
|
|
2927
|
-
gradient
|
|
2928
|
-
] }),
|
|
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
|
+
] }) }),
|
|
2929
2917
|
size >= 48 ? /* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
2930
2918
|
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.center, cy: KACHIZAKA.center, r: KACHIZAKA.ring.r, stroke, strokeWidth: KACHIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
2931
|
-
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.
|
|
2932
|
-
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.
|
|
2933
|
-
/* @__PURE__ */ jsx27(Path7, { d: KACHIZAKA.
|
|
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 })
|
|
2934
2922
|
] }),
|
|
2935
2923
|
/* @__PURE__ */ jsx27(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs24(Svg9, { viewBox, style: layer, children: [
|
|
2936
|
-
/* @__PURE__ */ jsx27(Defs4, { children: gradient }),
|
|
2937
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" }),
|
|
2938
|
-
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.
|
|
2925
|
+
/* @__PURE__ */ jsx27(Circle3, { cx: KACHIZAKA.ball.at[0], cy: KACHIZAKA.ball.at[1], r: KACHIZAKA.ball.r, fill: KACHIZAKA.gold })
|
|
2939
2926
|
] }) }),
|
|
2940
|
-
/* @__PURE__ */ jsx27(Animated28.View, { style: [layer, pulseStyle], children: /* @__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
|
+
] }) })
|
|
2941
2931
|
] });
|
|
2942
2932
|
}
|
|
2943
2933
|
|
|
2944
2934
|
// src/native/KrizakaMark.tsx
|
|
2945
2935
|
import { View as View24 } from "react-native";
|
|
2946
|
-
import Svg10, { Circle as Circle4, Defs as Defs5, G as Group, LinearGradient as
|
|
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";
|
|
2947
2937
|
|
|
2948
2938
|
// src/marks/krizaka-geometry.ts
|
|
2949
2939
|
var KRIZAKA = {
|
|
@@ -2972,7 +2962,7 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
2972
2962
|
const id = useSvgId("kzm");
|
|
2973
2963
|
const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
|
|
2974
2964
|
const stroke = neutral ?? theme.textMuted;
|
|
2975
|
-
const blue = /* @__PURE__ */ jsx28(
|
|
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)) });
|
|
2976
2966
|
const dot = (c) => /* @__PURE__ */ jsxs25(Fragment5, { children: [
|
|
2977
2967
|
/* @__PURE__ */ jsx28(Circle4, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
|
|
2978
2968
|
/* @__PURE__ */ jsx28(Circle4, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
|
|
@@ -2984,7 +2974,7 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
2984
2974
|
/* @__PURE__ */ jsx28(Stop5, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
|
|
2985
2975
|
/* @__PURE__ */ jsx28(Stop5, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
|
|
2986
2976
|
] }),
|
|
2987
|
-
/* @__PURE__ */ jsxs25(
|
|
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: [
|
|
2988
2978
|
/* @__PURE__ */ jsx28(Stop5, { offset: "0%", stopColor: theme.textSecondary }),
|
|
2989
2979
|
/* @__PURE__ */ jsx28(Stop5, { offset: "100%", stopColor: theme.textPrimary })
|
|
2990
2980
|
] }),
|
|
@@ -3012,7 +3002,7 @@ import Svg16, { Circle as Circle10, Path as Path14 } from "react-native-svg";
|
|
|
3012
3002
|
|
|
3013
3003
|
// src/native/OrazakaMark.tsx
|
|
3014
3004
|
import { View as View25 } from "react-native";
|
|
3015
|
-
import Svg11, { Circle as Circle5, Defs as Defs6, LinearGradient as
|
|
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";
|
|
3016
3006
|
|
|
3017
3007
|
// src/marks/orazaka-geometry.ts
|
|
3018
3008
|
var orange = marks.orazaka[marks.orazaka.length - 1][1];
|
|
@@ -3048,7 +3038,7 @@ function OrazakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
3048
3038
|
const id = useSvgId("ozm");
|
|
3049
3039
|
const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
|
|
3050
3040
|
const stroke = neutral ?? theme.textMuted;
|
|
3051
|
-
const gradient = /* @__PURE__ */ jsx29(
|
|
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)) });
|
|
3052
3042
|
const fill = `url(#${id}a)`;
|
|
3053
3043
|
return /* @__PURE__ */ jsxs26(View25, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3054
3044
|
/* @__PURE__ */ jsxs26(Svg11, { viewBox, style: layer, children: [
|
|
@@ -3075,7 +3065,7 @@ function OrazakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
3075
3065
|
// src/native/OrochiaMark.tsx
|
|
3076
3066
|
import { useEffect as useEffect12, useState as useState20 } from "react";
|
|
3077
3067
|
import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated10, Easing as Easing4, View as View26 } from "react-native";
|
|
3078
|
-
import Svg12, { Circle as Circle6, Defs as Defs7, Ellipse, G as Group2, LinearGradient as
|
|
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";
|
|
3079
3069
|
|
|
3080
3070
|
// src/marks/orochia-geometry.ts
|
|
3081
3071
|
var OROCHIA = {
|
|
@@ -3134,7 +3124,7 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
|
|
|
3134
3124
|
const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
|
|
3135
3125
|
const layer = { position: "absolute", width: size, height: size };
|
|
3136
3126
|
const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
|
|
3137
|
-
const bodyGradient = /* @__PURE__ */ jsx30(
|
|
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)) });
|
|
3138
3128
|
return /* @__PURE__ */ jsxs27(View26, { style: { width: size, height: size }, ...a11y, children: [
|
|
3139
3129
|
/* @__PURE__ */ jsxs27(Svg12, { viewBox, style: layer, children: [
|
|
3140
3130
|
/* @__PURE__ */ jsx30(Defs7, { children: /* @__PURE__ */ jsxs27(RadialGradient5, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
@@ -3157,7 +3147,7 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
|
|
|
3157
3147
|
] })
|
|
3158
3148
|
] }),
|
|
3159
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: [
|
|
3160
|
-
/* @__PURE__ */ jsx30(Defs7, { children: /* @__PURE__ */ jsx30(
|
|
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)) }) }),
|
|
3161
3151
|
/* @__PURE__ */ jsxs27(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
|
|
3162
3152
|
/* @__PURE__ */ jsx30(Circle6, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
|
|
3163
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)" })
|
|
@@ -3167,9 +3157,8 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
|
|
|
3167
3157
|
}
|
|
3168
3158
|
|
|
3169
3159
|
// src/native/YasakiaMark.tsx
|
|
3170
|
-
import React21 from "react";
|
|
3171
3160
|
import { View as View27 } from "react-native";
|
|
3172
|
-
import Svg13, { Circle as Circle7, Defs as Defs8, LinearGradient as
|
|
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";
|
|
3173
3162
|
|
|
3174
3163
|
// src/marks/yasakia-geometry.ts
|
|
3175
3164
|
var turquoise = marks.yasakia[marks.yasakia.length - 1][1];
|
|
@@ -3177,23 +3166,21 @@ var YASAKIA = {
|
|
|
3177
3166
|
viewBox: "0 0 400 400",
|
|
3178
3167
|
croppedViewBox: "80 80 240 240",
|
|
3179
3168
|
center: 200,
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
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"
|
|
3184
3174
|
],
|
|
3185
|
-
/** The
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
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",
|
|
3189
3178
|
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yasakia },
|
|
3190
|
-
/** The
|
|
3191
|
-
|
|
3192
|
-
/** The pair: two nodes on the orbit, opposite each other, that turn with it. */
|
|
3193
|
-
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] },
|
|
3194
3181
|
glow: { color: turquoise, opacity: 0.16 },
|
|
3195
|
-
/** The core's breathing shadow (web), in the mark's turquoise. */
|
|
3196
3182
|
pulse: { color: turquoise, low: 0.3, high: 0.6 },
|
|
3183
|
+
motion: { spin: 30, breath: 3.2 },
|
|
3197
3184
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3198
3185
|
ring: { r: 134, width: 1 }
|
|
3199
3186
|
};
|
|
@@ -3202,11 +3189,11 @@ var YASAKIA = {
|
|
|
3202
3189
|
import { jsx as jsx31, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
3203
3190
|
function YasakiaMark({ size = 48, animated = true, title, neutral }) {
|
|
3204
3191
|
const { theme } = useTheme();
|
|
3205
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
|
|
3192
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YASAKIA.motion.spin * 1e3);
|
|
3206
3193
|
const id = useSvgId("yzm");
|
|
3207
3194
|
const viewBox = size < 48 ? YASAKIA.croppedViewBox : YASAKIA.viewBox;
|
|
3208
3195
|
const stroke = neutral ?? theme.textMuted;
|
|
3209
|
-
const gradient = /* @__PURE__ */ jsx31(
|
|
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)) });
|
|
3210
3197
|
const fill = `url(#${id}a)`;
|
|
3211
3198
|
return /* @__PURE__ */ jsxs28(View27, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3212
3199
|
/* @__PURE__ */ jsxs28(Svg13, { viewBox, style: layer, children: [
|
|
@@ -3219,35 +3206,23 @@ function YasakiaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
3219
3206
|
] }),
|
|
3220
3207
|
size >= 48 ? /* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.center, cy: YASAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3221
3208
|
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.center, cy: YASAKIA.center, r: YASAKIA.ring.r, stroke, strokeWidth: YASAKIA.ring.width, opacity: 0.35, fill: "none" }),
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
/* @__PURE__ */ jsx31(Path11, { d: v.tail, fill }),
|
|
3225
|
-
i === 0 ? /* @__PURE__ */ jsx31(Path11, { d: `${v.body} ${v.tail}`, fill: YASAKIA.shade.color, opacity: YASAKIA.shade.opacity }) : null
|
|
3226
|
-
] }, v.body))
|
|
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 })
|
|
3227
3211
|
] }),
|
|
3228
3212
|
/* @__PURE__ */ jsx31(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs28(Svg13, { viewBox, style: layer, children: [
|
|
3229
3213
|
/* @__PURE__ */ jsx31(Defs8, { children: gradient }),
|
|
3230
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" }),
|
|
3231
|
-
|
|
3215
|
+
/* @__PURE__ */ jsx31(Circle7, { cx: YASAKIA.node.at[0], cy: YASAKIA.node.at[1], r: YASAKIA.node.r, fill })
|
|
3232
3216
|
] }) }),
|
|
3233
|
-
/* @__PURE__ */ jsx31(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */
|
|
3234
|
-
/* @__PURE__ */ jsxs28(Defs8, { children: [
|
|
3235
|
-
gradient,
|
|
3236
|
-
/* @__PURE__ */ jsxs28(LinearGradient8, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YASAKIA.lens.y1, x2: 0, y2: YASAKIA.lens.y2, children: [
|
|
3237
|
-
/* @__PURE__ */ jsx31(Stop8, { offset: "0%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.from }),
|
|
3238
|
-
/* @__PURE__ */ jsx31(Stop8, { offset: "100%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.to })
|
|
3239
|
-
] })
|
|
3240
|
-
] }),
|
|
3241
|
-
/* @__PURE__ */ jsx31(Path11, { d: YASAKIA.lens.d, fill }),
|
|
3242
|
-
/* @__PURE__ */ jsx31(Path11, { d: YASAKIA.lens.d, fill: `url(#${id}l)` })
|
|
3243
|
-
] }) })
|
|
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" }) }) })
|
|
3244
3218
|
] });
|
|
3245
3219
|
}
|
|
3246
3220
|
var YazakiaMark = YasakiaMark;
|
|
3247
3221
|
|
|
3248
3222
|
// src/native/YomizakaMark.tsx
|
|
3223
|
+
import React21 from "react";
|
|
3249
3224
|
import { View as View28 } from "react-native";
|
|
3250
|
-
import Svg14, { Circle as Circle8, Defs as Defs9, LinearGradient as
|
|
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";
|
|
3251
3226
|
|
|
3252
3227
|
// src/marks/yomizaka-geometry.ts
|
|
3253
3228
|
var indigo = marks.yomizaka[marks.yomizaka.length - 1][1];
|
|
@@ -3255,26 +3230,26 @@ var YOMIZAKA = {
|
|
|
3255
3230
|
viewBox: "0 0 400 400",
|
|
3256
3231
|
croppedViewBox: "80 80 240 240",
|
|
3257
3232
|
center: 200,
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
/**
|
|
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. */
|
|
3274
3249
|
node: { r: 9, at: [200, 40] },
|
|
3275
3250
|
glow: { color: indigo, opacity: 0.18 },
|
|
3276
|
-
/** The lens' breathing shadow (web), in the indigo. */
|
|
3277
3251
|
pulse: { color: indigo, low: 0.3, high: 0.6 },
|
|
3252
|
+
motion: { spin: 32, breath: 3.6 },
|
|
3278
3253
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3279
3254
|
ring: { r: 134, width: 1 }
|
|
3280
3255
|
};
|
|
@@ -3283,11 +3258,11 @@ var YOMIZAKA = {
|
|
|
3283
3258
|
import { jsx as jsx32, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
3284
3259
|
function YomizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
3285
3260
|
const { theme } = useTheme();
|
|
3286
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
3261
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YOMIZAKA.motion.spin * 1e3);
|
|
3287
3262
|
const id = useSvgId("ymm");
|
|
3288
3263
|
const viewBox = size < 48 ? YOMIZAKA.croppedViewBox : YOMIZAKA.viewBox;
|
|
3289
3264
|
const stroke = neutral ?? theme.textMuted;
|
|
3290
|
-
const gradient = /* @__PURE__ */ jsx32(
|
|
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)) });
|
|
3291
3266
|
const fill = `url(#${id}a)`;
|
|
3292
3267
|
return /* @__PURE__ */ jsxs29(View28, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3293
3268
|
/* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
@@ -3300,9 +3275,8 @@ function YomizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
3300
3275
|
] }),
|
|
3301
3276
|
size >= 48 ? /* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.center, cy: YOMIZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3302
3277
|
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.center, cy: YOMIZAKA.center, r: YOMIZAKA.ring.r, stroke, strokeWidth: YOMIZAKA.ring.width, opacity: 0.35, fill: "none" }),
|
|
3303
|
-
/* @__PURE__ */ jsx32(Path12, { d: YOMIZAKA.
|
|
3304
|
-
/* @__PURE__ */ jsx32(
|
|
3305
|
-
/* @__PURE__ */ jsx32(Path12, { d: YOMIZAKA.handle, stroke: fill, strokeWidth: YOMIZAKA.handleWidth, strokeLinecap: "round", 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))
|
|
3306
3280
|
] }),
|
|
3307
3281
|
/* @__PURE__ */ jsx32(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
3308
3282
|
/* @__PURE__ */ jsx32(Defs9, { children: gradient }),
|
|
@@ -3310,19 +3284,18 @@ function YomizakaMark({ size = 48, animated = true, title, neutral }) {
|
|
|
3310
3284
|
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.node.at[0], cy: YOMIZAKA.node.at[1], r: YOMIZAKA.node.r, fill })
|
|
3311
3285
|
] }) }),
|
|
3312
3286
|
/* @__PURE__ */ jsx32(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs29(Svg14, { viewBox, style: layer, children: [
|
|
3313
|
-
/* @__PURE__ */
|
|
3314
|
-
|
|
3315
|
-
/* @__PURE__ */ jsx32(
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
/* @__PURE__ */ jsx32(Circle8, { cx: YOMIZAKA.lens.glint.cx, cy: YOMIZAKA.lens.glint.cy, r: YOMIZAKA.lens.glint.r, fill: YOMIZAKA.highlight })
|
|
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))
|
|
3319
3292
|
] }) })
|
|
3320
3293
|
] });
|
|
3321
3294
|
}
|
|
3322
3295
|
|
|
3323
3296
|
// src/native/YororisMark.tsx
|
|
3324
3297
|
import { View as View29 } from "react-native";
|
|
3325
|
-
import Svg15, { Circle as Circle9, Defs as Defs10,
|
|
3298
|
+
import Svg15, { Circle as Circle9, Defs as Defs10, Path as Path13, RadialGradient as RadialGradient8, Stop as Stop10 } from "react-native-svg";
|
|
3326
3299
|
|
|
3327
3300
|
// src/marks/yororis-geometry.ts
|
|
3328
3301
|
var sand = marks.yororis[0][1];
|
|
@@ -3331,28 +3304,20 @@ var YORORIS = {
|
|
|
3331
3304
|
viewBox: "0 0 400 400",
|
|
3332
3305
|
croppedViewBox: "80 80 240 240",
|
|
3333
3306
|
center: 200,
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
/**
|
|
3340
|
-
|
|
3341
|
-
vein: { color: "#fbf6ea", opacity: 0.45, width: 3, dash: "2 14" },
|
|
3342
|
-
/** The stem, from the junction down. */
|
|
3343
|
-
stem: "M200 244 L200 312",
|
|
3344
|
-
stroke: 30,
|
|
3345
|
-
gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks.yororis },
|
|
3346
|
-
/** The core's warm light: from the mark's sand (below) to a light sand (above). */
|
|
3347
|
-
coreGradient: { stops: [["0%", sand], ["100%", "#e6c993"]] },
|
|
3348
|
-
/** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */
|
|
3349
|
-
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 },
|
|
3350
3314
|
highlight: "#fbf6ea",
|
|
3351
|
-
|
|
3352
|
-
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] },
|
|
3353
3318
|
glow: { color: sage, opacity: 0.18 },
|
|
3354
|
-
/** The core's breathing shadow (web), in the core's warm sand. */
|
|
3355
3319
|
pulse: { color: sand, low: 0.3, high: 0.6 },
|
|
3320
|
+
motion: { spin: 36, breath: 4.2 },
|
|
3356
3321
|
orbit: { r: 160, dash: "8 8", width: 1.5 },
|
|
3357
3322
|
ring: { r: 134, width: 1 }
|
|
3358
3323
|
};
|
|
@@ -3361,35 +3326,26 @@ var YORORIS = {
|
|
|
3361
3326
|
import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
3362
3327
|
function YororisMark({ size = 48, animated = true, title, neutral }) {
|
|
3363
3328
|
const { theme } = useTheme();
|
|
3364
|
-
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated,
|
|
3329
|
+
const { Animated: Animated28, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, YORORIS.motion.spin * 1e3);
|
|
3365
3330
|
const id = useSvgId("yrm");
|
|
3366
3331
|
const viewBox = size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox;
|
|
3367
3332
|
const stroke = neutral ?? theme.textMuted;
|
|
3368
|
-
const gradient = /* @__PURE__ */ jsx33(LinearGradient10, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx33(Stop10, { offset, stopColor: color }, offset)) });
|
|
3369
|
-
const fill = `url(#${id}a)`;
|
|
3370
3333
|
return /* @__PURE__ */ jsxs30(View29, { style: { width: size, height: size }, ...markA11y(title), children: [
|
|
3371
3334
|
/* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3372
|
-
/* @__PURE__ */
|
|
3373
|
-
/* @__PURE__ */
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
] }),
|
|
3377
|
-
gradient
|
|
3378
|
-
] }),
|
|
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
|
+
] }) }),
|
|
3379
3339
|
size >= 48 ? /* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
|
|
3380
3340
|
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
|
|
3381
|
-
/* @__PURE__ */ jsx33(Path13, { d: YORORIS.
|
|
3382
|
-
YORORIS.leaves.map((d) => /* @__PURE__ */ jsx33(Path13, { d, fill }, d)),
|
|
3383
|
-
/* @__PURE__ */ jsx33(Path13, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
|
|
3341
|
+
/* @__PURE__ */ jsx33(Path13, { d: YORORIS.hands, stroke: YORORIS.sage, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" })
|
|
3384
3342
|
] }),
|
|
3385
3343
|
/* @__PURE__ */ jsx33(Animated28.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3386
|
-
/* @__PURE__ */ jsx33(Defs10, { children: gradient }),
|
|
3387
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" }),
|
|
3388
|
-
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.
|
|
3345
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.node.at[0], cy: YORORIS.node.at[1], r: YORORIS.node.r, fill: YORORIS.sage })
|
|
3389
3346
|
] }) }),
|
|
3390
3347
|
/* @__PURE__ */ jsx33(Animated28.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs30(Svg15, { viewBox, style: layer, children: [
|
|
3391
|
-
/* @__PURE__ */ jsx33(
|
|
3392
|
-
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id}c)` }),
|
|
3348
|
+
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: YORORIS.sand }),
|
|
3393
3349
|
/* @__PURE__ */ jsx33(Circle9, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
|
|
3394
3350
|
] }) })
|
|
3395
3351
|
] });
|
|
@@ -3536,7 +3492,7 @@ import { AccessibilityInfo as AccessibilityInfo9, Animated as Animated13, Easing
|
|
|
3536
3492
|
// src/native/mascots.tsx
|
|
3537
3493
|
import { useEffect as useEffect14, useState as useState22 } from "react";
|
|
3538
3494
|
import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated12, Easing as Easing6, View as View32 } from "react-native";
|
|
3539
|
-
import Svg17, { Circle as Circle11, Defs as Defs11, Ellipse as Ellipse2, G, LinearGradient as
|
|
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";
|
|
3540
3496
|
|
|
3541
3497
|
// src/mascots/geometry.ts
|
|
3542
3498
|
var mirror = (d) => d.replace(/(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/g, (_, x, y) => `${120 - Number(x)} ${y}`);
|
|
@@ -3773,7 +3729,7 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone3 = "brand", size =
|
|
|
3773
3729
|
const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
|
|
3774
3730
|
const [wl, wr] = g.wings;
|
|
3775
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: [
|
|
3776
|
-
/* @__PURE__ */ jsx37(Defs11, { children: /* @__PURE__ */ jsxs33(
|
|
3732
|
+
/* @__PURE__ */ jsx37(Defs11, { children: /* @__PURE__ */ jsxs33(LinearGradient8, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
3777
3733
|
/* @__PURE__ */ jsx37(Stop11, { offset: "0%", stopColor: p.from }),
|
|
3778
3734
|
/* @__PURE__ */ jsx37(Stop11, { offset: "100%", stopColor: p.to })
|
|
3779
3735
|
] }) }),
|
|
@@ -3794,7 +3750,7 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone3 = "brand", size =
|
|
|
3794
3750
|
g.neck && /* @__PURE__ */ jsx37(Path15, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
|
|
3795
3751
|
g.head.r > 0 && /* @__PURE__ */ jsx37(Circle11, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
|
|
3796
3752
|
g.details.map((d) => /* @__PURE__ */ jsx37(Path15, { d, fill: p.detail, ...line }, d)),
|
|
3797
|
-
g.visor && /* @__PURE__ */ jsx37(
|
|
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 }),
|
|
3798
3754
|
g.eyes.at.map(
|
|
3799
3755
|
(at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs33(G, { children: [
|
|
3800
3756
|
/* @__PURE__ */ jsx37(Circle11, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
|
|
@@ -3931,10 +3887,26 @@ var styles28 = StyleSheet28.create({
|
|
|
3931
3887
|
secondary: { minHeight: 48, borderRadius: 999, borderWidth: 1.5, alignItems: "center", justifyContent: "center" }
|
|
3932
3888
|
});
|
|
3933
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
|
+
|
|
3934
3906
|
// src/native/meter.tsx
|
|
3935
|
-
import { StyleSheet as StyleSheet29, View as
|
|
3907
|
+
import { StyleSheet as StyleSheet29, View as View36 } from "react-native";
|
|
3936
3908
|
import Svg19, { Circle as Circle12 } from "react-native-svg";
|
|
3937
|
-
import { jsx as
|
|
3909
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
3938
3910
|
var THICK = { sm: 6, md: 8, lg: 12 };
|
|
3939
3911
|
var RING = { sm: 56, md: 96, lg: 144 };
|
|
3940
3912
|
var partColor = (t, i) => [t.accent, t.warning, t.success, t.textSecondary, t.danger][i % 5];
|
|
@@ -3947,10 +3919,10 @@ function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, op
|
|
|
3947
3919
|
const words2 = valueText ?? `${Math.round(ratio * 100)} %`;
|
|
3948
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)} %` }));
|
|
3949
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 };
|
|
3950
|
-
const legend = parts ? /* @__PURE__ */
|
|
3951
|
-
/* @__PURE__ */
|
|
3952
|
-
/* @__PURE__ */
|
|
3953
|
-
/* @__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 })
|
|
3954
3926
|
] }, i)) }) : null;
|
|
3955
3927
|
if (variant === "ring") {
|
|
3956
3928
|
const side = RING[size];
|
|
@@ -3962,23 +3934,23 @@ function Meter({ label, value = 0, min = 0, max = 100, valueText, thresholds, op
|
|
|
3962
3934
|
offset += p.ratio;
|
|
3963
3935
|
return arc;
|
|
3964
3936
|
}) : [{ color: tone3, len: ratio, start: 0 }];
|
|
3965
|
-
return /* @__PURE__ */
|
|
3966
|
-
/* @__PURE__ */
|
|
3967
|
-
/* @__PURE__ */
|
|
3968
|
-
/* @__PURE__ */
|
|
3969
|
-
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))
|
|
3970
3942
|
] }),
|
|
3971
|
-
children !== void 0 ? /* @__PURE__ */
|
|
3943
|
+
children !== void 0 ? /* @__PURE__ */ jsx41(View36, { style: [StyleSheet29.absoluteFill, styles29.center], children }) : null
|
|
3972
3944
|
] }),
|
|
3973
3945
|
legend
|
|
3974
3946
|
] });
|
|
3975
3947
|
}
|
|
3976
|
-
return /* @__PURE__ */
|
|
3977
|
-
showLabel ? /* @__PURE__ */
|
|
3978
|
-
/* @__PURE__ */
|
|
3979
|
-
!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
|
|
3980
3952
|
] }) : null,
|
|
3981
|
-
/* @__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 }] }) }),
|
|
3982
3954
|
legend
|
|
3983
3955
|
] });
|
|
3984
3956
|
}
|
|
@@ -3998,7 +3970,7 @@ var styles29 = StyleSheet29.create({
|
|
|
3998
3970
|
// src/native/number-ticker.tsx
|
|
3999
3971
|
import * as React26 from "react";
|
|
4000
3972
|
import { AccessibilityInfo as AccessibilityInfo11, Animated as Animated15, Easing as Easing9, Text as Text13 } from "react-native";
|
|
4001
|
-
import { jsx as
|
|
3973
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
4002
3974
|
function NumberTicker({ value, locale, format, trigger = "mount", duration = 1100, announce, variant = "display", tone: tone3 = "text", style }) {
|
|
4003
3975
|
const reduce = useReducedMotion();
|
|
4004
3976
|
const writer = React26.useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);
|
|
@@ -4026,13 +3998,13 @@ function NumberTicker({ value, locale, format, trigger = "mount", duration = 110
|
|
|
4026
3998
|
};
|
|
4027
3999
|
}, [value, reduce, trigger, duration, announce, anim, writer]);
|
|
4028
4000
|
const digits = Number.isInteger(value) ? Math.round(shown) : shown;
|
|
4029
|
-
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) }) });
|
|
4030
4002
|
}
|
|
4031
4003
|
|
|
4032
4004
|
// src/native/onboarding.tsx
|
|
4033
4005
|
import * as React27 from "react";
|
|
4034
|
-
import { ScrollView as ScrollView5, StyleSheet as StyleSheet30, View as
|
|
4035
|
-
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";
|
|
4036
4008
|
function Onboarding({ slides, labels, onDone, style }) {
|
|
4037
4009
|
const { theme, insets, haptic } = useTheme();
|
|
4038
4010
|
const [width, setWidth] = React27.useState(0);
|
|
@@ -4047,15 +4019,15 @@ function Onboarding({ slides, labels, onDone, style }) {
|
|
|
4047
4019
|
const onScroll = (e) => {
|
|
4048
4020
|
if (width > 0) setPage(Math.round(e.nativeEvent.contentOffset.x / width));
|
|
4049
4021
|
};
|
|
4050
|
-
return /* @__PURE__ */
|
|
4051
|
-
/* @__PURE__ */
|
|
4052
|
-
/* @__PURE__ */
|
|
4053
|
-
slide.visual ? /* @__PURE__ */
|
|
4054
|
-
/* @__PURE__ */
|
|
4055
|
-
/* @__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 })
|
|
4056
4028
|
] }, i)) }),
|
|
4057
|
-
/* @__PURE__ */
|
|
4058
|
-
/* @__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) }) })
|
|
4059
4031
|
] });
|
|
4060
4032
|
}
|
|
4061
4033
|
var styles30 = StyleSheet30.create({
|
|
@@ -4074,8 +4046,8 @@ var styles30 = StyleSheet30.create({
|
|
|
4074
4046
|
|
|
4075
4047
|
// src/native/otp-input.tsx
|
|
4076
4048
|
import * as React28 from "react";
|
|
4077
|
-
import { Platform as Platform2, Pressable as Pressable15, StyleSheet as StyleSheet31, TextInput as TextInput5, View as
|
|
4078
|
-
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";
|
|
4079
4051
|
function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode = "numeric", invalid, disabled, autoFocus, style }) {
|
|
4080
4052
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
4081
4053
|
const [own, setOwn] = React28.useState("");
|
|
@@ -4094,11 +4066,11 @@ function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode =
|
|
|
4094
4066
|
onComplete?.(next);
|
|
4095
4067
|
}
|
|
4096
4068
|
};
|
|
4097
|
-
return /* @__PURE__ */
|
|
4098
|
-
/* @__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) => {
|
|
4099
4071
|
const active = focused && i === Math.min(code.length, length - 1);
|
|
4100
|
-
return /* @__PURE__ */
|
|
4101
|
-
|
|
4072
|
+
return /* @__PURE__ */ jsx44(
|
|
4073
|
+
View38,
|
|
4102
4074
|
{
|
|
4103
4075
|
style: [
|
|
4104
4076
|
styles31.box,
|
|
@@ -4109,12 +4081,12 @@ function OtpInput({ label, length = 6, value, onValueChange, onComplete, mode =
|
|
|
4109
4081
|
borderWidth: invalid || active ? 2 : 1
|
|
4110
4082
|
}
|
|
4111
4083
|
],
|
|
4112
|
-
children: /* @__PURE__ */
|
|
4084
|
+
children: /* @__PURE__ */ jsx44(Txt, { variant: "title", children: code[i] ?? "" })
|
|
4113
4085
|
},
|
|
4114
4086
|
i
|
|
4115
4087
|
);
|
|
4116
4088
|
}) }),
|
|
4117
|
-
/* @__PURE__ */
|
|
4089
|
+
/* @__PURE__ */ jsx44(
|
|
4118
4090
|
TextInput5,
|
|
4119
4091
|
{
|
|
4120
4092
|
ref: input,
|
|
@@ -4146,11 +4118,11 @@ var styles31 = StyleSheet31.create({
|
|
|
4146
4118
|
});
|
|
4147
4119
|
|
|
4148
4120
|
// src/native/pagination.tsx
|
|
4149
|
-
import { Pressable as Pressable16, StyleSheet as StyleSheet32, Text as Text14, View as
|
|
4121
|
+
import { Pressable as Pressable16, StyleSheet as StyleSheet32, Text as Text14, View as View39 } from "react-native";
|
|
4150
4122
|
import Svg20, { Path as Path17 } from "react-native-svg";
|
|
4151
|
-
import { jsx as
|
|
4123
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
4152
4124
|
function Chevron3({ direction, color }) {
|
|
4153
|
-
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" }) });
|
|
4154
4126
|
}
|
|
4155
4127
|
function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }) {
|
|
4156
4128
|
const { theme, radius: radius3 } = useTheme();
|
|
@@ -4159,7 +4131,7 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
4159
4131
|
const current = Math.min(Math.max(1, page), count);
|
|
4160
4132
|
const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));
|
|
4161
4133
|
const canNext = !disabled && (paged ? current < count : Boolean(hasNext));
|
|
4162
|
-
const button = (direction, enabled, onPress, label) => /* @__PURE__ */
|
|
4134
|
+
const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx45(
|
|
4163
4135
|
Pressable16,
|
|
4164
4136
|
{
|
|
4165
4137
|
role: "button",
|
|
@@ -4172,13 +4144,13 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
|
|
|
4172
4144
|
styles32.button,
|
|
4173
4145
|
{ borderRadius: radius3.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? pressed ? 0.8 : 1 : 0.4 }
|
|
4174
4146
|
],
|
|
4175
|
-
children: /* @__PURE__ */
|
|
4147
|
+
children: /* @__PURE__ */ jsx45(Chevron3, { direction, color: theme.textPrimary })
|
|
4176
4148
|
}
|
|
4177
4149
|
);
|
|
4178
4150
|
const text = status ?? (paged ? labels.compact(current, count) : null);
|
|
4179
|
-
return /* @__PURE__ */
|
|
4151
|
+
return /* @__PURE__ */ jsxs40(View39, { role: "navigation", style: [styles32.row, style], children: [
|
|
4180
4152
|
button("left", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous),
|
|
4181
|
-
text ? /* @__PURE__ */
|
|
4153
|
+
text ? /* @__PURE__ */ jsx45(Text14, { "aria-live": "polite", style: [styles32.status, { color: theme.textSecondary }], children: text }) : null,
|
|
4182
4154
|
button("right", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)
|
|
4183
4155
|
] });
|
|
4184
4156
|
}
|
|
@@ -4189,8 +4161,8 @@ var styles32 = StyleSheet32.create({
|
|
|
4189
4161
|
});
|
|
4190
4162
|
|
|
4191
4163
|
// src/native/permission-prompt.tsx
|
|
4192
|
-
import { StyleSheet as StyleSheet33, View as
|
|
4193
|
-
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";
|
|
4194
4166
|
function PermissionPrompt({
|
|
4195
4167
|
status,
|
|
4196
4168
|
title,
|
|
@@ -4207,15 +4179,15 @@ function PermissionPrompt({
|
|
|
4207
4179
|
style
|
|
4208
4180
|
}) {
|
|
4209
4181
|
const { theme, radius: radius3 } = useTheme();
|
|
4210
|
-
if (status === "granted") return /* @__PURE__ */
|
|
4182
|
+
if (status === "granted") return /* @__PURE__ */ jsx46(Fragment6, { children: children ?? null });
|
|
4211
4183
|
const blocked = status === "blocked" || status === "denied" && Boolean(onOpenSettings);
|
|
4212
|
-
return /* @__PURE__ */
|
|
4213
|
-
/* @__PURE__ */
|
|
4214
|
-
/* @__PURE__ */
|
|
4215
|
-
/* @__PURE__ */
|
|
4216
|
-
/* @__PURE__ */
|
|
4217
|
-
blocked && settingsLabel && onOpenSettings ? /* @__PURE__ */
|
|
4218
|
-
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
|
|
4219
4191
|
] })
|
|
4220
4192
|
] });
|
|
4221
4193
|
}
|
|
@@ -4227,8 +4199,8 @@ var styles33 = StyleSheet33.create({
|
|
|
4227
4199
|
|
|
4228
4200
|
// src/native/phoenix.tsx
|
|
4229
4201
|
import { useEffect as useEffect19, useState as useState28 } from "react";
|
|
4230
|
-
import { AccessibilityInfo as AccessibilityInfo12, Animated as Animated16, Easing as Easing10, View as
|
|
4231
|
-
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";
|
|
4232
4204
|
|
|
4233
4205
|
// src/mascots/phoenix-geometry.ts
|
|
4234
4206
|
var PHOENIX = {
|
|
@@ -4251,7 +4223,7 @@ var PHOENIX_PALETTES = {
|
|
|
4251
4223
|
};
|
|
4252
4224
|
|
|
4253
4225
|
// src/native/phoenix.tsx
|
|
4254
|
-
import { jsx as
|
|
4226
|
+
import { jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
4255
4227
|
function useFloat(animated) {
|
|
4256
4228
|
const [y] = useState28(() => new Animated16.Value(0));
|
|
4257
4229
|
useEffect19(() => {
|
|
@@ -4276,37 +4248,37 @@ function Phoenix({ tone: tone3 = "own", size = 120, animated = true, title, styl
|
|
|
4276
4248
|
const id = useSvgId("kzp");
|
|
4277
4249
|
const y = useFloat(animated);
|
|
4278
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;
|
|
4279
|
-
return /* @__PURE__ */
|
|
4280
|
-
/* @__PURE__ */
|
|
4281
|
-
/* @__PURE__ */
|
|
4282
|
-
/* @__PURE__ */
|
|
4283
|
-
/* @__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] })
|
|
4284
4256
|
] }),
|
|
4285
|
-
/* @__PURE__ */
|
|
4286
|
-
/* @__PURE__ */
|
|
4287
|
-
/* @__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] })
|
|
4288
4260
|
] }),
|
|
4289
|
-
/* @__PURE__ */
|
|
4290
|
-
/* @__PURE__ */
|
|
4291
|
-
/* @__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 })
|
|
4292
4264
|
] })
|
|
4293
4265
|
] }),
|
|
4294
|
-
/* @__PURE__ */
|
|
4295
|
-
/* @__PURE__ */
|
|
4296
|
-
/* @__PURE__ */
|
|
4297
|
-
/* @__PURE__ */
|
|
4298
|
-
/* @__PURE__ */
|
|
4299
|
-
/* @__PURE__ */
|
|
4300
|
-
/* @__PURE__ */
|
|
4301
|
-
/* @__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" })
|
|
4302
4274
|
] }) }) });
|
|
4303
4275
|
}
|
|
4304
4276
|
|
|
4305
4277
|
// src/native/photo-grid.tsx
|
|
4306
4278
|
import * as React30 from "react";
|
|
4307
|
-
import { Image as Image4, Pressable as Pressable17, StyleSheet as StyleSheet34, View as
|
|
4279
|
+
import { Image as Image4, Pressable as Pressable17, StyleSheet as StyleSheet34, View as View42 } from "react-native";
|
|
4308
4280
|
import Svg22, { Path as Path19 } from "react-native-svg";
|
|
4309
|
-
import { jsx as
|
|
4281
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
4310
4282
|
function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, columns = 3, labels, style }) {
|
|
4311
4283
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
4312
4284
|
const [menu, setMenu] = React30.useState(null);
|
|
@@ -4323,11 +4295,11 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4323
4295
|
onValueChange(value.filter((_, j) => j !== i));
|
|
4324
4296
|
};
|
|
4325
4297
|
const width = `${100 / columns}%`;
|
|
4326
|
-
return /* @__PURE__ */
|
|
4298
|
+
return /* @__PURE__ */ jsxs43(View42, { style: [styles34.grid, style], children: [
|
|
4327
4299
|
Array.from({ length: slots }, (_, i) => {
|
|
4328
4300
|
const photo = value[i];
|
|
4329
4301
|
const cell = [styles34.slot, { borderRadius: radius3.lg, aspectRatio: 3 / 4 }];
|
|
4330
|
-
return /* @__PURE__ */
|
|
4302
|
+
return /* @__PURE__ */ jsx48(View42, { style: [styles34.cell, { width }], children: photo ? /* @__PURE__ */ jsxs43(
|
|
4331
4303
|
Pressable17,
|
|
4332
4304
|
{
|
|
4333
4305
|
role: "button",
|
|
@@ -4351,11 +4323,11 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4351
4323
|
},
|
|
4352
4324
|
style: [...cell, { backgroundColor: theme.surface3, overflow: "hidden" }],
|
|
4353
4325
|
children: [
|
|
4354
|
-
/* @__PURE__ */
|
|
4355
|
-
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
|
|
4356
4328
|
]
|
|
4357
4329
|
}
|
|
4358
|
-
) : /* @__PURE__ */
|
|
4330
|
+
) : /* @__PURE__ */ jsx48(
|
|
4359
4331
|
Pressable17,
|
|
4360
4332
|
{
|
|
4361
4333
|
role: "button",
|
|
@@ -4367,11 +4339,11 @@ function PhotoGrid({ value, onValueChange, onAdd, slots = 6, required = 1, colum
|
|
|
4367
4339
|
styles34.empty,
|
|
4368
4340
|
{ borderColor: i < required ? theme.accent : theme.borderStrong, backgroundColor: pressed ? theme.surface2 : theme.surface1, opacity: i > value.length ? 0.5 : 1 }
|
|
4369
4341
|
],
|
|
4370
|
-
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" }) }) })
|
|
4371
4343
|
}
|
|
4372
4344
|
) }, photo?.id ?? `empty-${i}`);
|
|
4373
4345
|
}),
|
|
4374
|
-
/* @__PURE__ */
|
|
4346
|
+
/* @__PURE__ */ jsx48(
|
|
4375
4347
|
ActionSheet,
|
|
4376
4348
|
{
|
|
4377
4349
|
open: menu !== null,
|
|
@@ -4399,16 +4371,16 @@ var styles34 = StyleSheet34.create({
|
|
|
4399
4371
|
|
|
4400
4372
|
// src/native/profile-card.tsx
|
|
4401
4373
|
import * as React31 from "react";
|
|
4402
|
-
import { Animated as Animated17, StyleSheet as StyleSheet35, View as
|
|
4403
|
-
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";
|
|
4404
4376
|
var ratioOf = (value, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));
|
|
4405
4377
|
function Bar({ label, ratio, words: words2, animated, delay }) {
|
|
4406
4378
|
const { theme } = useTheme();
|
|
4407
4379
|
const t = useEntrance(animated, delay, 900);
|
|
4408
4380
|
const [width, setWidth] = React31.useState(0);
|
|
4409
4381
|
const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });
|
|
4410
|
-
return /* @__PURE__ */
|
|
4411
|
-
|
|
4382
|
+
return /* @__PURE__ */ jsx49(
|
|
4383
|
+
View43,
|
|
4412
4384
|
{
|
|
4413
4385
|
accessible: true,
|
|
4414
4386
|
role: "meter",
|
|
@@ -4419,37 +4391,37 @@ function Bar({ label, ratio, words: words2, animated, delay }) {
|
|
|
4419
4391
|
"aria-valuetext": words2,
|
|
4420
4392
|
onLayout: (e) => setWidth(e.nativeEvent.layout.width),
|
|
4421
4393
|
style: [styles35.track, { backgroundColor: theme.surface3 }],
|
|
4422
|
-
children: /* @__PURE__ */
|
|
4394
|
+
children: /* @__PURE__ */ jsx49(Animated17.View, { style: [styles35.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
|
|
4423
4395
|
}
|
|
4424
4396
|
);
|
|
4425
4397
|
}
|
|
4426
4398
|
function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }) {
|
|
4427
4399
|
const { theme, radius: radius3 } = useTheme();
|
|
4428
4400
|
const ratio = ratioOf(value);
|
|
4429
|
-
return /* @__PURE__ */
|
|
4430
|
-
/* @__PURE__ */
|
|
4431
|
-
/* @__PURE__ */
|
|
4432
|
-
/* @__PURE__ */
|
|
4433
|
-
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: [
|
|
4434
4406
|
statLabel,
|
|
4435
4407
|
" ",
|
|
4436
|
-
/* @__PURE__ */
|
|
4408
|
+
/* @__PURE__ */ jsx49(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
|
|
4437
4409
|
] }) : null
|
|
4438
4410
|
] }),
|
|
4439
|
-
statLabel ? /* @__PURE__ */
|
|
4411
|
+
statLabel ? /* @__PURE__ */ jsx49(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
|
|
4440
4412
|
stats?.map((s, i) => {
|
|
4441
4413
|
const r = ratioOf(s.value, s.max);
|
|
4442
4414
|
const words2 = s.valueText ?? `${Math.round(r * 100)} %`;
|
|
4443
|
-
return /* @__PURE__ */
|
|
4444
|
-
/* @__PURE__ */
|
|
4445
|
-
/* @__PURE__ */
|
|
4446
|
-
/* @__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 })
|
|
4447
4419
|
] }),
|
|
4448
|
-
/* @__PURE__ */
|
|
4420
|
+
/* @__PURE__ */ jsx49(Bar, { label: s.label, ratio: r, words: words2, animated, delay: 320 + i * 120 })
|
|
4449
4421
|
] }, s.label);
|
|
4450
4422
|
}),
|
|
4451
|
-
caption ? /* @__PURE__ */
|
|
4452
|
-
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
|
|
4453
4425
|
] });
|
|
4454
4426
|
}
|
|
4455
4427
|
var styles35 = StyleSheet35.create({
|
|
@@ -4467,9 +4439,9 @@ var styles35 = StyleSheet35.create({
|
|
|
4467
4439
|
|
|
4468
4440
|
// src/native/progress.tsx
|
|
4469
4441
|
import * as React32 from "react";
|
|
4470
|
-
import { Animated as Animated18, Easing as Easing11, StyleSheet as StyleSheet36, View as
|
|
4471
|
-
import Svg23, { Circle as Circle14, Defs as Defs13, LinearGradient as
|
|
4472
|
-
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";
|
|
4473
4445
|
var AnimatedCircle = Animated18.createAnimatedComponent(Circle14);
|
|
4474
4446
|
var BAR2 = { sm: 4, md: 8, lg: 12 };
|
|
4475
4447
|
var RING2 = { sm: 40, md: 80, lg: 144 };
|
|
@@ -4511,9 +4483,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4511
4483
|
"aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
|
|
4512
4484
|
"aria-valuetext": known ? valueText ?? `${percent}%` : valueText
|
|
4513
4485
|
};
|
|
4514
|
-
const gradient = /* @__PURE__ */
|
|
4515
|
-
/* @__PURE__ */
|
|
4516
|
-
/* @__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 })
|
|
4517
4489
|
] }) });
|
|
4518
4490
|
if (variant === "ring") {
|
|
4519
4491
|
const side = RING2[size];
|
|
@@ -4522,11 +4494,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4522
4494
|
const circumference = 2 * Math.PI * r;
|
|
4523
4495
|
const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
|
|
4524
4496
|
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
|
|
4525
|
-
return /* @__PURE__ */
|
|
4526
|
-
/* @__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: [
|
|
4527
4499
|
gradient,
|
|
4528
|
-
/* @__PURE__ */
|
|
4529
|
-
/* @__PURE__ */
|
|
4500
|
+
/* @__PURE__ */ jsx50(Circle14, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
|
|
4501
|
+
/* @__PURE__ */ jsx50(
|
|
4530
4502
|
AnimatedCircle,
|
|
4531
4503
|
{
|
|
4532
4504
|
cx: 50,
|
|
@@ -4546,15 +4518,15 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
|
|
|
4546
4518
|
}
|
|
4547
4519
|
const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
|
|
4548
4520
|
const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
|
|
4549
|
-
return /* @__PURE__ */
|
|
4550
|
-
|
|
4521
|
+
return /* @__PURE__ */ jsx50(
|
|
4522
|
+
View44,
|
|
4551
4523
|
{
|
|
4552
4524
|
...a11y,
|
|
4553
4525
|
onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
|
|
4554
4526
|
style: [styles36.bar, { height: BAR2[size], backgroundColor: theme.surface3 }, style],
|
|
4555
|
-
children: /* @__PURE__ */
|
|
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: [
|
|
4556
4528
|
gradient,
|
|
4557
|
-
/* @__PURE__ */
|
|
4529
|
+
/* @__PURE__ */ jsx50(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
|
|
4558
4530
|
] }) })
|
|
4559
4531
|
}
|
|
4560
4532
|
);
|
|
@@ -4567,11 +4539,11 @@ var styles36 = StyleSheet36.create({
|
|
|
4567
4539
|
|
|
4568
4540
|
// src/native/pull-to-refresh.tsx
|
|
4569
4541
|
import * as React33 from "react";
|
|
4570
|
-
import { AccessibilityInfo as AccessibilityInfo13, Animated as Animated19, RefreshControl, StyleSheet as StyleSheet37, View as
|
|
4571
|
-
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";
|
|
4572
4544
|
function PullToRefresh({ label, ...props }) {
|
|
4573
4545
|
const { theme } = useTheme();
|
|
4574
|
-
return /* @__PURE__ */
|
|
4546
|
+
return /* @__PURE__ */ jsx51(RefreshControl, { ...props, tintColor: theme.accent, colors: [theme.accent], progressBackgroundColor: theme.surface2, title: label, titleColor: theme.textSecondary });
|
|
4575
4547
|
}
|
|
4576
4548
|
var pullProgress = (offset, threshold) => Math.min(1, Math.max(0, -offset / threshold));
|
|
4577
4549
|
function BrandedRefresh({ product, refreshing, onRefresh, label, children, threshold = 72 }) {
|
|
@@ -4588,14 +4560,14 @@ function BrandedRefresh({ product, refreshing, onRefresh, label, children, thres
|
|
|
4588
4560
|
const shown = refreshing ? 1 : pull;
|
|
4589
4561
|
const scale = refreshing || reduce ? 1 : pull.interpolate({ inputRange: [0, 1], outputRange: [0.4, 1] });
|
|
4590
4562
|
const rotate = refreshing || reduce ? "0deg" : pull.interpolate({ inputRange: [0, 1], outputRange: ["-90deg", "0deg"] });
|
|
4591
|
-
return /* @__PURE__ */
|
|
4563
|
+
return /* @__PURE__ */ jsxs46(View45, { style: styles37.root, children: [
|
|
4592
4564
|
children({
|
|
4593
4565
|
// The platform's control does the gesture and the haptics, drawn transparent: the mark is ours.
|
|
4594
|
-
refreshControl: /* @__PURE__ */
|
|
4566
|
+
refreshControl: /* @__PURE__ */ jsx51(RefreshControl, { refreshing, onRefresh, tintColor: "transparent", colors: ["transparent"], progressBackgroundColor: "transparent" }),
|
|
4595
4567
|
onScroll,
|
|
4596
4568
|
scrollEventThrottle: 16
|
|
4597
4569
|
}),
|
|
4598
|
-
/* @__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 }) })
|
|
4599
4571
|
] });
|
|
4600
4572
|
}
|
|
4601
4573
|
var styles37 = StyleSheet37.create({
|
|
@@ -4605,11 +4577,11 @@ var styles37 = StyleSheet37.create({
|
|
|
4605
4577
|
|
|
4606
4578
|
// src/native/radio-group.tsx
|
|
4607
4579
|
import * as React34 from "react";
|
|
4608
|
-
import { Animated as Animated20, Pressable as Pressable18, StyleSheet as StyleSheet38, Text as Text15, View as
|
|
4580
|
+
import { Animated as Animated20, Pressable as Pressable18, StyleSheet as StyleSheet38, Text as Text15, View as View46 } from "react-native";
|
|
4609
4581
|
import Svg24, { Path as Path20 } from "react-native-svg";
|
|
4610
|
-
import { jsx as
|
|
4582
|
+
import { jsx as jsx52, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
4611
4583
|
function Check({ color }) {
|
|
4612
|
-
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" }) });
|
|
4613
4585
|
}
|
|
4614
4586
|
function Key({ option, checked, disabled, onPress }) {
|
|
4615
4587
|
const { theme, radius: radius3, motion: motion3 } = useTheme();
|
|
@@ -4619,7 +4591,7 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4619
4591
|
React34.useEffect(() => {
|
|
4620
4592
|
Animated20.timing(sink, { toValue: down ? 1 : 0, duration: motion3.duration.fast, useNativeDriver: true }).start();
|
|
4621
4593
|
}, [down, sink, motion3.duration.fast]);
|
|
4622
|
-
return /* @__PURE__ */
|
|
4594
|
+
return /* @__PURE__ */ jsxs47(
|
|
4623
4595
|
Pressable18,
|
|
4624
4596
|
{
|
|
4625
4597
|
role: "radio",
|
|
@@ -4632,8 +4604,8 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4632
4604
|
onPressOut: () => setHeld(false),
|
|
4633
4605
|
style: [styles38.keySlot, disabled ? styles38.disabled : null],
|
|
4634
4606
|
children: [
|
|
4635
|
-
/* @__PURE__ */
|
|
4636
|
-
/* @__PURE__ */
|
|
4607
|
+
/* @__PURE__ */ jsx52(View46, { style: [styles38.ledge, { borderRadius: radius3.lg, backgroundColor: checked ? theme.accentHover : theme.borderStrong }] }),
|
|
4608
|
+
/* @__PURE__ */ jsxs47(
|
|
4637
4609
|
Animated20.View,
|
|
4638
4610
|
{
|
|
4639
4611
|
style: [
|
|
@@ -4646,8 +4618,8 @@ function Key({ option, checked, disabled, onPress }) {
|
|
|
4646
4618
|
}
|
|
4647
4619
|
],
|
|
4648
4620
|
children: [
|
|
4649
|
-
/* @__PURE__ */
|
|
4650
|
-
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
|
|
4651
4623
|
]
|
|
4652
4624
|
}
|
|
4653
4625
|
)
|
|
@@ -4668,9 +4640,9 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4668
4640
|
const checked = o.value === value;
|
|
4669
4641
|
const off = Boolean(disabled || o.disabled);
|
|
4670
4642
|
const name = o.description ? `${o.label}, ${o.description}` : o.label;
|
|
4671
|
-
if (variant === "buttons") return /* @__PURE__ */
|
|
4643
|
+
if (variant === "buttons") return /* @__PURE__ */ jsx52(Key, { option: o, checked, disabled: off, onPress: () => pick(o.value) }, o.value);
|
|
4672
4644
|
if (variant === "segmented")
|
|
4673
|
-
return /* @__PURE__ */
|
|
4645
|
+
return /* @__PURE__ */ jsx52(
|
|
4674
4646
|
Pressable18,
|
|
4675
4647
|
{
|
|
4676
4648
|
role: "radio",
|
|
@@ -4680,12 +4652,12 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4680
4652
|
disabled: off,
|
|
4681
4653
|
onPress: () => pick(o.value),
|
|
4682
4654
|
style: [styles38.segment, { borderRadius: radius3.md }, checked ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null, off ? styles38.disabled : null],
|
|
4683
|
-
children: /* @__PURE__ */
|
|
4655
|
+
children: /* @__PURE__ */ jsx52(Text15, { numberOfLines: 1, style: [styles38.segmentLabel, { color: checked ? theme.textPrimary : theme.textSecondary }], children: o.label })
|
|
4684
4656
|
},
|
|
4685
4657
|
o.value
|
|
4686
4658
|
);
|
|
4687
4659
|
if (variant === "cards")
|
|
4688
|
-
return /* @__PURE__ */
|
|
4660
|
+
return /* @__PURE__ */ jsxs47(
|
|
4689
4661
|
Pressable18,
|
|
4690
4662
|
{
|
|
4691
4663
|
role: "radio",
|
|
@@ -4700,24 +4672,24 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4700
4672
|
off ? styles38.disabled : null
|
|
4701
4673
|
],
|
|
4702
4674
|
children: [
|
|
4703
|
-
/* @__PURE__ */
|
|
4704
|
-
/* @__PURE__ */
|
|
4705
|
-
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
|
|
4706
4678
|
]
|
|
4707
4679
|
},
|
|
4708
4680
|
o.value
|
|
4709
4681
|
);
|
|
4710
|
-
return /* @__PURE__ */
|
|
4711
|
-
/* @__PURE__ */
|
|
4712
|
-
/* @__PURE__ */
|
|
4713
|
-
/* @__PURE__ */
|
|
4714
|
-
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
|
|
4715
4687
|
] })
|
|
4716
4688
|
] }, o.value);
|
|
4717
4689
|
});
|
|
4718
|
-
return /* @__PURE__ */
|
|
4719
|
-
/* @__PURE__ */
|
|
4720
|
-
|
|
4690
|
+
return /* @__PURE__ */ jsxs47(View46, { style: [styles38.root, style], children: [
|
|
4691
|
+
/* @__PURE__ */ jsx52(
|
|
4692
|
+
View46,
|
|
4721
4693
|
{
|
|
4722
4694
|
role: "radiogroup",
|
|
4723
4695
|
"aria-label": label,
|
|
@@ -4725,7 +4697,7 @@ function RadioGroup({ label, options, value: valueProp, defaultValue = null, onV
|
|
|
4725
4697
|
children: body
|
|
4726
4698
|
}
|
|
4727
4699
|
),
|
|
4728
|
-
error ? /* @__PURE__ */
|
|
4700
|
+
error ? /* @__PURE__ */ jsx52(Text15, { role: "alert", "aria-live": "polite", style: [styles38.error, { color: theme.dangerText }], children: error }) : null
|
|
4729
4701
|
] });
|
|
4730
4702
|
}
|
|
4731
4703
|
var styles38 = StyleSheet38.create({
|
|
@@ -4755,26 +4727,26 @@ var styles38 = StyleSheet38.create({
|
|
|
4755
4727
|
});
|
|
4756
4728
|
|
|
4757
4729
|
// src/native/screen.tsx
|
|
4758
|
-
import { KeyboardAvoidingView, Platform as Platform3, ScrollView as ScrollView6, StyleSheet as StyleSheet39, View as
|
|
4759
|
-
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";
|
|
4760
4732
|
function Screen({ header, footer, children, scroll = true, keyboard = true, padding = 16, surface = "surface0", contentStyle }) {
|
|
4761
4733
|
const { theme, insets } = useTheme();
|
|
4762
|
-
const body = scroll ? /* @__PURE__ */
|
|
4763
|
-
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: [
|
|
4764
4736
|
header,
|
|
4765
4737
|
body,
|
|
4766
4738
|
footer
|
|
4767
4739
|
] });
|
|
4768
|
-
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 });
|
|
4769
4741
|
}
|
|
4770
4742
|
var styles39 = StyleSheet39.create({ flex: { flex: 1 } });
|
|
4771
4743
|
|
|
4772
4744
|
// src/native/search-field.tsx
|
|
4773
4745
|
import { useDebouncedCallback } from "@krizaka/pacer/react";
|
|
4774
4746
|
import * as React35 from "react";
|
|
4775
|
-
import { Pressable as Pressable19, StyleSheet as StyleSheet40, TextInput as TextInput6, View as
|
|
4747
|
+
import { Pressable as Pressable19, StyleSheet as StyleSheet40, TextInput as TextInput6, View as View48 } from "react-native";
|
|
4776
4748
|
import Svg25, { Circle as Circle15, Path as Path21 } from "react-native-svg";
|
|
4777
|
-
import { jsx as
|
|
4749
|
+
import { jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
4778
4750
|
function SearchField({ label, value, defaultValue = "", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, cancelLabel, onCancel, style, placeholder, onFocus, onBlur, ...props }) {
|
|
4779
4751
|
const [focused, setFocused] = React35.useState(false);
|
|
4780
4752
|
const input = React35.useRef(null);
|
|
@@ -4788,12 +4760,12 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4788
4760
|
search.cancel();
|
|
4789
4761
|
if (onSearch) search(next);
|
|
4790
4762
|
};
|
|
4791
|
-
const field = /* @__PURE__ */
|
|
4792
|
-
/* @__PURE__ */
|
|
4793
|
-
/* @__PURE__ */
|
|
4794
|
-
/* @__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" })
|
|
4795
4767
|
] }),
|
|
4796
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ jsx54(
|
|
4797
4769
|
TextInput6,
|
|
4798
4770
|
{
|
|
4799
4771
|
ref: input,
|
|
@@ -4824,12 +4796,12 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4824
4796
|
...props
|
|
4825
4797
|
}
|
|
4826
4798
|
),
|
|
4827
|
-
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
|
|
4828
4800
|
] });
|
|
4829
4801
|
if (!cancelLabel || !onCancel) return field;
|
|
4830
|
-
return /* @__PURE__ */
|
|
4831
|
-
/* @__PURE__ */
|
|
4832
|
-
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(
|
|
4833
4805
|
Pressable19,
|
|
4834
4806
|
{
|
|
4835
4807
|
role: "button",
|
|
@@ -4840,7 +4812,7 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
|
|
|
4840
4812
|
},
|
|
4841
4813
|
hitSlop: 8,
|
|
4842
4814
|
style: styles40.cancel,
|
|
4843
|
-
children: /* @__PURE__ */
|
|
4815
|
+
children: /* @__PURE__ */ jsx54(Txt, { variant: "label", tone: "accent", children: cancelLabel })
|
|
4844
4816
|
}
|
|
4845
4817
|
) : null
|
|
4846
4818
|
] });
|
|
@@ -4855,19 +4827,19 @@ var styles40 = StyleSheet40.create({
|
|
|
4855
4827
|
});
|
|
4856
4828
|
|
|
4857
4829
|
// src/native/segmented.tsx
|
|
4858
|
-
import { Pressable as Pressable20, StyleSheet as StyleSheet41, Text as Text16, View as
|
|
4859
|
-
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";
|
|
4860
4832
|
function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
|
|
4861
4833
|
const { theme, radius: radius3 } = useTheme();
|
|
4862
|
-
return /* @__PURE__ */
|
|
4863
|
-
|
|
4834
|
+
return /* @__PURE__ */ jsx55(
|
|
4835
|
+
View49,
|
|
4864
4836
|
{
|
|
4865
4837
|
role: "tablist",
|
|
4866
4838
|
"aria-label": label,
|
|
4867
4839
|
style: [styles41.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
|
|
4868
4840
|
children: options.map((option) => {
|
|
4869
4841
|
const selected = option.value === value;
|
|
4870
|
-
return /* @__PURE__ */
|
|
4842
|
+
return /* @__PURE__ */ jsx55(
|
|
4871
4843
|
Pressable20,
|
|
4872
4844
|
{
|
|
4873
4845
|
role: "tab",
|
|
@@ -4883,7 +4855,7 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
|
|
|
4883
4855
|
selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
|
|
4884
4856
|
option.disabled ? styles41.disabled : null
|
|
4885
4857
|
],
|
|
4886
|
-
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 })
|
|
4887
4859
|
},
|
|
4888
4860
|
option.value
|
|
4889
4861
|
);
|
|
@@ -4900,9 +4872,9 @@ var styles41 = StyleSheet41.create({
|
|
|
4900
4872
|
|
|
4901
4873
|
// src/native/showcase.tsx
|
|
4902
4874
|
import * as React36 from "react";
|
|
4903
|
-
import { Animated as Animated21, AppState, Easing as Easing12, FlatList, Pressable as Pressable21, StyleSheet as StyleSheet42, View as
|
|
4875
|
+
import { Animated as Animated21, AppState, Easing as Easing12, FlatList, Pressable as Pressable21, StyleSheet as StyleSheet42, View as View50 } from "react-native";
|
|
4904
4876
|
import Svg26, { Path as Path22 } from "react-native-svg";
|
|
4905
|
-
import { jsx as
|
|
4877
|
+
import { jsx as jsx56, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
4906
4878
|
var showcaseLabels = {
|
|
4907
4879
|
previous: "Previous slide",
|
|
4908
4880
|
next: "Next slide",
|
|
@@ -4961,9 +4933,9 @@ function Showcase({ label, items: items2, getId, renderItem, getTitle, interval
|
|
|
4961
4933
|
const item = items2[current];
|
|
4962
4934
|
const title = item !== void 0 ? getTitle?.(item) : void 0;
|
|
4963
4935
|
const control = [styles42.control, { borderColor: theme.borderDefault, backgroundColor: theme.surface1 }];
|
|
4964
|
-
const icon = (d) => /* @__PURE__ */
|
|
4965
|
-
return /* @__PURE__ */
|
|
4966
|
-
/* @__PURE__ */
|
|
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(
|
|
4967
4939
|
FlatList,
|
|
4968
4940
|
{
|
|
4969
4941
|
ref: list,
|
|
@@ -4984,21 +4956,21 @@ function Showcase({ label, items: items2, getId, renderItem, getTitle, interval
|
|
|
4984
4956
|
onIndexChange?.(next, true);
|
|
4985
4957
|
}
|
|
4986
4958
|
},
|
|
4987
|
-
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 })
|
|
4988
4960
|
}
|
|
4989
4961
|
) }),
|
|
4990
|
-
/* @__PURE__ */
|
|
4991
|
-
i < current || i === current && !playing ? /* @__PURE__ */
|
|
4992
|
-
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
|
|
4993
4965
|
] }) }, getId(slide))) }),
|
|
4994
|
-
/* @__PURE__ */
|
|
4995
|
-
/* @__PURE__ */
|
|
4966
|
+
/* @__PURE__ */ jsxs50(View50, { style: styles42.bar, children: [
|
|
4967
|
+
/* @__PURE__ */ jsxs50(Txt, { variant: "caption", tone: "secondary", numberOfLines: 1, style: styles42.counter, children: [
|
|
4996
4968
|
title ? `${title} \xB7 ` : "",
|
|
4997
4969
|
labels.counter(current + 1, total)
|
|
4998
4970
|
] }),
|
|
4999
|
-
/* @__PURE__ */
|
|
5000
|
-
playing ? /* @__PURE__ */
|
|
5001
|
-
/* @__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") })
|
|
5002
4974
|
] })
|
|
5003
4975
|
] });
|
|
5004
4976
|
}
|
|
@@ -5016,7 +4988,7 @@ var styles42 = StyleSheet42.create({
|
|
|
5016
4988
|
// src/native/skeleton.tsx
|
|
5017
4989
|
import * as React37 from "react";
|
|
5018
4990
|
import { Animated as Animated22 } from "react-native";
|
|
5019
|
-
import { jsx as
|
|
4991
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
5020
4992
|
var SHAPE = {
|
|
5021
4993
|
text: { width: "100%", height: 12, radius: 4 },
|
|
5022
4994
|
circle: { width: 40, height: 40, radius: 9999 },
|
|
@@ -5042,7 +5014,7 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
5042
5014
|
}, [reduce, opacity]);
|
|
5043
5015
|
const s = SHAPE[shape];
|
|
5044
5016
|
const side = shape === "circle" ? width ?? height ?? s.width : void 0;
|
|
5045
|
-
return /* @__PURE__ */
|
|
5017
|
+
return /* @__PURE__ */ jsx57(
|
|
5046
5018
|
Animated22.View,
|
|
5047
5019
|
{
|
|
5048
5020
|
testID,
|
|
@@ -5057,9 +5029,9 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
|
|
|
5057
5029
|
|
|
5058
5030
|
// src/native/slider.tsx
|
|
5059
5031
|
import * as React38 from "react";
|
|
5060
|
-
import { PanResponder as PanResponder2, StyleSheet as StyleSheet43, Text as Text17, View as
|
|
5061
|
-
import Svg27, { Defs as Defs14, LinearGradient as
|
|
5062
|
-
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";
|
|
5063
5035
|
var THUMB = 26;
|
|
5064
5036
|
var toArray = (v) => v === void 0 ? void 0 : typeof v === "number" ? [v] : [...v];
|
|
5065
5037
|
function Slider({
|
|
@@ -5151,24 +5123,24 @@ function Slider({
|
|
|
5151
5123
|
const along = (p) => vertical ? { bottom: p * length } : { left: p * length };
|
|
5152
5124
|
const onLayout = (e) => setLength(vertical ? e.nativeEvent.layout.height : e.nativeEvent.layout.width);
|
|
5153
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 };
|
|
5154
|
-
return /* @__PURE__ */
|
|
5155
|
-
showLabel ? /* @__PURE__ */
|
|
5156
|
-
/* @__PURE__ */
|
|
5157
|
-
/* @__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 ") })
|
|
5158
5130
|
] }) : null,
|
|
5159
|
-
/* @__PURE__ */
|
|
5160
|
-
/* @__PURE__ */
|
|
5161
|
-
/* @__PURE__ */
|
|
5162
|
-
/* @__PURE__ */
|
|
5163
|
-
/* @__PURE__ */
|
|
5164
|
-
/* @__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 })
|
|
5165
5137
|
] }) }),
|
|
5166
|
-
/* @__PURE__ */
|
|
5138
|
+
/* @__PURE__ */ jsx58(Rect4, { width: "100%", height: "100%", fill: `url(#${gradientId})` })
|
|
5167
5139
|
] }) : null }),
|
|
5168
|
-
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))
|
|
5169
5141
|
] }),
|
|
5170
|
-
current.map((v, i) => /* @__PURE__ */
|
|
5171
|
-
|
|
5142
|
+
current.map((v, i) => /* @__PURE__ */ jsx58(
|
|
5143
|
+
View51,
|
|
5172
5144
|
{
|
|
5173
5145
|
accessible: true,
|
|
5174
5146
|
role: "slider",
|
|
@@ -5188,12 +5160,12 @@ function Slider({
|
|
|
5188
5160
|
},
|
|
5189
5161
|
pointerEvents: "none",
|
|
5190
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 }],
|
|
5191
|
-
children: floatingValue === "always" || floatingValue && dragging === i ? /* @__PURE__ */
|
|
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
|
|
5192
5164
|
},
|
|
5193
5165
|
i
|
|
5194
5166
|
))
|
|
5195
5167
|
] }),
|
|
5196
|
-
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
|
|
5197
5169
|
] });
|
|
5198
5170
|
}
|
|
5199
5171
|
var styles43 = StyleSheet43.create({
|
|
@@ -5232,10 +5204,10 @@ var styles43 = StyleSheet43.create({
|
|
|
5232
5204
|
|
|
5233
5205
|
// src/native/spinner.tsx
|
|
5234
5206
|
import { ActivityIndicator as ActivityIndicator2 } from "react-native";
|
|
5235
|
-
import { jsx as
|
|
5207
|
+
import { jsx as jsx59 } from "react/jsx-runtime";
|
|
5236
5208
|
function Spinner({ label, size = "md", ...props }) {
|
|
5237
5209
|
const { theme } = useTheme();
|
|
5238
|
-
return /* @__PURE__ */
|
|
5210
|
+
return /* @__PURE__ */ jsx59(
|
|
5239
5211
|
ActivityIndicator2,
|
|
5240
5212
|
{
|
|
5241
5213
|
accessible: true,
|
|
@@ -5251,8 +5223,8 @@ function Spinner({ label, size = "md", ...props }) {
|
|
|
5251
5223
|
|
|
5252
5224
|
// src/native/splash-handoff.tsx
|
|
5253
5225
|
import * as React39 from "react";
|
|
5254
|
-
import { Animated as Animated23, Easing as Easing13, StyleSheet as StyleSheet44, View as
|
|
5255
|
-
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";
|
|
5256
5228
|
function SplashHandoff({ product, ready, onShown, onDone, size = 96, background, label, duration = 320, style }) {
|
|
5257
5229
|
const { theme } = useTheme();
|
|
5258
5230
|
const reduce = useReducedMotion();
|
|
@@ -5270,7 +5242,7 @@ function SplashHandoff({ product, ready, onShown, onDone, size = 96, background,
|
|
|
5270
5242
|
return () => animation.stop();
|
|
5271
5243
|
}, [ready, reduce, duration, opacity, onDone]);
|
|
5272
5244
|
if (gone) return null;
|
|
5273
|
-
return /* @__PURE__ */
|
|
5245
|
+
return /* @__PURE__ */ jsx60(
|
|
5274
5246
|
Animated23.View,
|
|
5275
5247
|
{
|
|
5276
5248
|
accessible: true,
|
|
@@ -5280,26 +5252,26 @@ function SplashHandoff({ product, ready, onShown, onDone, size = 96, background,
|
|
|
5280
5252
|
pointerEvents: ready ? "none" : "auto",
|
|
5281
5253
|
onLayout: onShown,
|
|
5282
5254
|
style: [StyleSheet44.absoluteFill, styles44.root, { backgroundColor: background ?? theme.surface0, opacity }, style],
|
|
5283
|
-
children: /* @__PURE__ */
|
|
5255
|
+
children: /* @__PURE__ */ jsx60(View52, { children: /* @__PURE__ */ jsx60(ProductMark, { id: product, size, animated: true }) })
|
|
5284
5256
|
}
|
|
5285
5257
|
);
|
|
5286
5258
|
}
|
|
5287
5259
|
var styles44 = StyleSheet44.create({ root: { alignItems: "center", justifyContent: "center", zIndex: 100 } });
|
|
5288
5260
|
|
|
5289
5261
|
// src/native/step-progress.tsx
|
|
5290
|
-
import { Pressable as Pressable22, StyleSheet as StyleSheet45, View as
|
|
5262
|
+
import { Pressable as Pressable22, StyleSheet as StyleSheet45, View as View53 } from "react-native";
|
|
5291
5263
|
import Svg28, { Path as Path23 } from "react-native-svg";
|
|
5292
|
-
import { jsx as
|
|
5264
|
+
import { jsx as jsx61, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
5293
5265
|
function StepProgress({ step, total, label, backLabel, onBack, trailing, style }) {
|
|
5294
5266
|
const { theme, insets } = useTheme();
|
|
5295
5267
|
const words2 = label(step, total);
|
|
5296
|
-
return /* @__PURE__ */
|
|
5297
|
-
/* @__PURE__ */
|
|
5298
|
-
onBack && backLabel ? /* @__PURE__ */
|
|
5299
|
-
/* @__PURE__ */
|
|
5300
|
-
/* @__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 })
|
|
5301
5273
|
] }),
|
|
5302
|
-
/* @__PURE__ */
|
|
5274
|
+
/* @__PURE__ */ jsx61(Txt, { variant: "caption", tone: "secondary", style: styles45.words, "aria-hidden": true, children: words2 })
|
|
5303
5275
|
] });
|
|
5304
5276
|
}
|
|
5305
5277
|
var styles45 = StyleSheet45.create({
|
|
@@ -5313,31 +5285,31 @@ var styles45 = StyleSheet45.create({
|
|
|
5313
5285
|
});
|
|
5314
5286
|
|
|
5315
5287
|
// src/native/stepper.tsx
|
|
5316
|
-
import { StyleSheet as StyleSheet46, View as
|
|
5288
|
+
import { StyleSheet as StyleSheet46, View as View54 } from "react-native";
|
|
5317
5289
|
import Svg29, { Circle as Circle16, Path as Path24 } from "react-native-svg";
|
|
5318
|
-
import { jsx as
|
|
5290
|
+
import { jsx as jsx62, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
5319
5291
|
var WORDS = { done: "done", current: "in progress", upcoming: "to come", error: "failed" };
|
|
5320
5292
|
function Stepper({ steps, current = 0, orientation = "vertical", statusLabels, "aria-label": label, style }) {
|
|
5321
5293
|
const { theme } = useTheme();
|
|
5322
5294
|
const words2 = { ...WORDS, ...statusLabels };
|
|
5323
5295
|
const vertical = orientation === "vertical";
|
|
5324
|
-
return /* @__PURE__ */
|
|
5296
|
+
return /* @__PURE__ */ jsx62(View54, { role: "list", "aria-label": label, style: [vertical ? styles46.column : styles46.row, style], children: steps.map((step, i) => {
|
|
5325
5297
|
const status = step.status ?? (i < current ? "done" : i === current ? "current" : "upcoming");
|
|
5326
5298
|
const last = i === steps.length - 1;
|
|
5327
|
-
const node = status === "current" ? /* @__PURE__ */
|
|
5328
|
-
/* @__PURE__ */
|
|
5329
|
-
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
|
|
5330
5302
|
] });
|
|
5331
|
-
const connector = !last ? /* @__PURE__ */
|
|
5332
|
-
return /* @__PURE__ */
|
|
5333
|
-
/* @__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: [
|
|
5334
5306
|
node,
|
|
5335
5307
|
connector
|
|
5336
5308
|
] }),
|
|
5337
|
-
/* @__PURE__ */
|
|
5338
|
-
/* @__PURE__ */
|
|
5339
|
-
step.description ? /* @__PURE__ */
|
|
5340
|
-
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
|
|
5341
5313
|
] })
|
|
5342
5314
|
] }, i);
|
|
5343
5315
|
}) });
|
|
@@ -5357,17 +5329,17 @@ var styles46 = StyleSheet46.create({
|
|
|
5357
5329
|
|
|
5358
5330
|
// src/native/swipe-deck.tsx
|
|
5359
5331
|
import * as React40 from "react";
|
|
5360
|
-
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
|
|
5361
|
-
import Svg30, { Defs as Defs15, LinearGradient as
|
|
5362
|
-
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";
|
|
5363
5335
|
function PersonCard({ photos, name, age, badge, meta, bio, footer, photoLabel = (n, t) => `Photo ${n} of ${t}`, style }) {
|
|
5364
5336
|
const { theme, radius: radius3 } = useTheme();
|
|
5365
5337
|
const [index, setIndex] = React40.useState(0);
|
|
5366
5338
|
const gradient = useSvgId("kz-profile-");
|
|
5367
5339
|
const [box, setBox] = React40.useState(null);
|
|
5368
5340
|
const photo = photos[index];
|
|
5369
|
-
return /* @__PURE__ */
|
|
5370
|
-
|
|
5341
|
+
return /* @__PURE__ */ jsxs54(
|
|
5342
|
+
View55,
|
|
5371
5343
|
{
|
|
5372
5344
|
accessible: Platform4.OS !== "web",
|
|
5373
5345
|
accessibilityActions: photos.length > 1 ? [{ name: "increment" }, { name: "decrement" }] : [],
|
|
@@ -5376,39 +5348,39 @@ function PersonCard({ photos, name, age, badge, meta, bio, footer, photoLabel =
|
|
|
5376
5348
|
"aria-label": [`${name}${age !== void 0 ? `, ${age}` : ""}`, bio, photos.length > 1 ? photoLabel(index + 1, photos.length) : null].filter(Boolean).join(". "),
|
|
5377
5349
|
style: [styles47.card, { borderRadius: radius3.xl, backgroundColor: theme.media }, style],
|
|
5378
5350
|
children: [
|
|
5379
|
-
photo ? /* @__PURE__ */
|
|
5380
|
-
photos.length > 1 ? /* @__PURE__ */
|
|
5381
|
-
/* @__PURE__ */
|
|
5382
|
-
/* @__PURE__ */
|
|
5383
|
-
/* @__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)) })
|
|
5384
5356
|
] }) : null,
|
|
5385
|
-
/* @__PURE__ */
|
|
5386
|
-
|
|
5357
|
+
/* @__PURE__ */ jsxs54(
|
|
5358
|
+
View55,
|
|
5387
5359
|
{
|
|
5388
5360
|
testID: "person-card-overlay",
|
|
5389
5361
|
pointerEvents: "box-none",
|
|
5390
5362
|
style: styles47.bottom,
|
|
5391
5363
|
onLayout: (e) => setBox({ width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height }),
|
|
5392
5364
|
children: [
|
|
5393
|
-
box ? /* @__PURE__ */
|
|
5394
|
-
/* @__PURE__ */
|
|
5395
|
-
/* @__PURE__ */
|
|
5396
|
-
/* @__PURE__ */
|
|
5397
|
-
/* @__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 })
|
|
5398
5370
|
] }) }),
|
|
5399
|
-
/* @__PURE__ */
|
|
5371
|
+
/* @__PURE__ */ jsx63(Rect5, { x: 0, y: 0, width: box.width, height: box.height, fill: `url(#${gradient})` })
|
|
5400
5372
|
] }) : null,
|
|
5401
|
-
/* @__PURE__ */
|
|
5402
|
-
/* @__PURE__ */
|
|
5403
|
-
/* @__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: [
|
|
5404
5376
|
name,
|
|
5405
|
-
age !== void 0 ? /* @__PURE__ */
|
|
5377
|
+
age !== void 0 ? /* @__PURE__ */ jsx63(Txt, { variant: "display", tone: "onMedia", style: styles47.age, children: ` ${age}` }) : null
|
|
5406
5378
|
] }),
|
|
5407
5379
|
badge
|
|
5408
5380
|
] }),
|
|
5409
5381
|
meta,
|
|
5410
|
-
bio ? /* @__PURE__ */
|
|
5411
|
-
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
|
|
5412
5384
|
] })
|
|
5413
5385
|
]
|
|
5414
5386
|
}
|
|
@@ -5452,7 +5424,7 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5452
5424
|
const rotate = x.interpolate({ inputRange: [-width, 0, width], outputRange: ["-14deg", "0deg", "14deg"] });
|
|
5453
5425
|
const likeOpacity = x.interpolate({ inputRange: [0, width / 4], outputRange: [0, 1], extrapolate: "clamp" });
|
|
5454
5426
|
const passOpacity = x.interpolate({ inputRange: [-width / 4, 0], outputRange: [1, 0], extrapolate: "clamp" });
|
|
5455
|
-
const button = (direction) => /* @__PURE__ */
|
|
5427
|
+
const button = (direction) => /* @__PURE__ */ jsx63(
|
|
5456
5428
|
Pressable23,
|
|
5457
5429
|
{
|
|
5458
5430
|
role: "button",
|
|
@@ -5463,15 +5435,15 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5463
5435
|
styles47.button,
|
|
5464
5436
|
{ borderColor: direction === "like" ? theme.success : theme.danger, backgroundColor: theme.surface1, transform: [{ scale: pressed ? 0.92 : 1 }], opacity: top ? 1 : 0.4 }
|
|
5465
5437
|
],
|
|
5466
|
-
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" }) })
|
|
5467
5439
|
}
|
|
5468
5440
|
);
|
|
5469
|
-
return /* @__PURE__ */
|
|
5470
|
-
/* @__PURE__ */
|
|
5441
|
+
return /* @__PURE__ */ jsxs54(View55, { style: [styles47.deck, style], children: [
|
|
5442
|
+
/* @__PURE__ */ jsxs54(View55, { style: styles47.stack, children: [
|
|
5471
5443
|
!top ? empty2 ?? null : null,
|
|
5472
5444
|
items2.slice(0, 2).reverse().map((item) => {
|
|
5473
5445
|
const isTop = item === top;
|
|
5474
|
-
return /* @__PURE__ */
|
|
5446
|
+
return /* @__PURE__ */ jsxs54(
|
|
5475
5447
|
Animated24.View,
|
|
5476
5448
|
{
|
|
5477
5449
|
...isTop ? pan.panHandlers : {},
|
|
@@ -5483,9 +5455,9 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5483
5455
|
style: [StyleSheet47.absoluteFill, isTop ? { transform: [{ translateX: x }, { rotate }] } : { transform: [{ scale: 0.96 }], opacity: 0.9 }],
|
|
5484
5456
|
children: [
|
|
5485
5457
|
renderCard(item),
|
|
5486
|
-
isTop ? /* @__PURE__ */
|
|
5487
|
-
/* @__PURE__ */
|
|
5488
|
-
/* @__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() }) })
|
|
5489
5461
|
] }) : null
|
|
5490
5462
|
]
|
|
5491
5463
|
},
|
|
@@ -5493,7 +5465,7 @@ function SwipeDeck({ items: items2, getId, renderCard, onSwipe, empty: empty2, l
|
|
|
5493
5465
|
);
|
|
5494
5466
|
})
|
|
5495
5467
|
] }),
|
|
5496
|
-
hideButtons ? null : /* @__PURE__ */
|
|
5468
|
+
hideButtons ? null : /* @__PURE__ */ jsxs54(View55, { style: styles47.buttons, children: [
|
|
5497
5469
|
button("pass"),
|
|
5498
5470
|
button("like")
|
|
5499
5471
|
] })
|
|
@@ -5522,8 +5494,8 @@ var styles47 = StyleSheet47.create({
|
|
|
5522
5494
|
|
|
5523
5495
|
// src/native/swipeable-row.tsx
|
|
5524
5496
|
import * as React41 from "react";
|
|
5525
|
-
import { Animated as Animated25, PanResponder as PanResponder4, Pressable as Pressable24, StyleSheet as StyleSheet48, View as
|
|
5526
|
-
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";
|
|
5527
5499
|
var toneColor = (t, tone3) => ({ neutral: t.surface3, accent: t.accent, success: t.success, warning: t.warning, danger: t.danger })[tone3 ?? "neutral"];
|
|
5528
5500
|
var toneText = (tone3) => tone3 === "neutral" || tone3 === void 0 ? "text" : "onAccent";
|
|
5529
5501
|
function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6, actionWidth = 80, onActivate, testID, style }) {
|
|
@@ -5571,18 +5543,18 @@ function SwipeableRow({ children, trailing = [], leading = [], fullSwipe = 0.6,
|
|
|
5571
5543
|
[trailing, leading, fullSwipe, width, actionWidth]
|
|
5572
5544
|
// eslint-disable-line react-hooks/exhaustive-deps -- run/settle are stable in effect
|
|
5573
5545
|
);
|
|
5574
|
-
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) => (
|
|
5575
5547
|
// eslint-disable-next-line react-hooks/refs -- runs on a press, never during render
|
|
5576
|
-
/* @__PURE__ */
|
|
5548
|
+
/* @__PURE__ */ jsxs55(Pressable24, { focusable: false, tabIndex: -1, onPress: () => run(action), style: [styles48.action, { width: actionWidth, backgroundColor: toneColor(theme, action.tone) }], children: [
|
|
5577
5549
|
action.icon,
|
|
5578
|
-
/* @__PURE__ */
|
|
5550
|
+
/* @__PURE__ */ jsx64(Txt, { variant: "caption", tone: toneText(action.tone), style: styles48.actionText, numberOfLines: 1, children: action.label })
|
|
5579
5551
|
] }, i)
|
|
5580
5552
|
)) });
|
|
5581
5553
|
const all = [...leading, ...trailing];
|
|
5582
|
-
return /* @__PURE__ */
|
|
5554
|
+
return /* @__PURE__ */ jsxs55(View56, { style: [styles48.root, style], onLayout: (e) => setWidth(e.nativeEvent.layout.width), children: [
|
|
5583
5555
|
leading.length > 0 ? side(leading, "left") : null,
|
|
5584
5556
|
trailing.length > 0 ? side(trailing, "right") : null,
|
|
5585
|
-
/* @__PURE__ */
|
|
5557
|
+
/* @__PURE__ */ jsx64(
|
|
5586
5558
|
Animated25.View,
|
|
5587
5559
|
{
|
|
5588
5560
|
...pan.panHandlers,
|
|
@@ -5610,8 +5582,8 @@ var styles48 = StyleSheet48.create({
|
|
|
5610
5582
|
|
|
5611
5583
|
// src/native/switch.tsx
|
|
5612
5584
|
import * as React42 from "react";
|
|
5613
|
-
import { Animated as Animated26, Pressable as Pressable25, StyleSheet as StyleSheet49, Text as Text18, View as
|
|
5614
|
-
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";
|
|
5615
5587
|
var SIZES = { sm: { w: 40, h: 24, knob: 18 }, md: { w: 52, h: 32, knob: 26 } };
|
|
5616
5588
|
function Switch({ label, checked, defaultChecked = false, onCheckedChange, description, showLabel, size = "md", error, disabled, style }) {
|
|
5617
5589
|
const { theme, motion: motion3, haptic } = useTheme();
|
|
@@ -5628,7 +5600,7 @@ function Switch({ label, checked, defaultChecked = false, onCheckedChange, descr
|
|
|
5628
5600
|
if (checked === void 0) setOwn(!on);
|
|
5629
5601
|
onCheckedChange?.(!on);
|
|
5630
5602
|
};
|
|
5631
|
-
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(
|
|
5632
5604
|
Animated26.View,
|
|
5633
5605
|
{
|
|
5634
5606
|
style: [
|
|
@@ -5654,16 +5626,16 @@ function Switch({ label, checked, defaultChecked = false, onCheckedChange, descr
|
|
|
5654
5626
|
onPress: toggle
|
|
5655
5627
|
};
|
|
5656
5628
|
if (!showLabel)
|
|
5657
|
-
return /* @__PURE__ */
|
|
5658
|
-
return /* @__PURE__ */
|
|
5659
|
-
/* @__PURE__ */
|
|
5660
|
-
/* @__PURE__ */
|
|
5661
|
-
/* @__PURE__ */
|
|
5662
|
-
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
|
|
5663
5635
|
] }),
|
|
5664
5636
|
track
|
|
5665
5637
|
] }),
|
|
5666
|
-
error ? /* @__PURE__ */
|
|
5638
|
+
error ? /* @__PURE__ */ jsx65(Text18, { role: "alert", "aria-live": "polite", style: [styles49.description, { color: theme.dangerText }], children: error }) : null
|
|
5667
5639
|
] });
|
|
5668
5640
|
}
|
|
5669
5641
|
var styles49 = StyleSheet49.create({
|
|
@@ -5678,15 +5650,15 @@ var styles49 = StyleSheet49.create({
|
|
|
5678
5650
|
});
|
|
5679
5651
|
|
|
5680
5652
|
// src/native/tab-bar.tsx
|
|
5681
|
-
import { Pressable as Pressable26, StyleSheet as StyleSheet50, Text as Text19, View as
|
|
5682
|
-
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";
|
|
5683
5655
|
function TabBar({ items: items2, value, onValueChange, onReselect, "aria-label": label, style }) {
|
|
5684
5656
|
const { theme, insets, haptic } = useTheme();
|
|
5685
|
-
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) => {
|
|
5686
5658
|
const selected = item.value === value;
|
|
5687
5659
|
const color = selected ? theme.accentText : theme.textSecondary;
|
|
5688
5660
|
const badge = item.badge === true ? "" : typeof item.badge === "number" && item.badge > 0 ? item.badge > 99 ? "99+" : String(item.badge) : null;
|
|
5689
|
-
return /* @__PURE__ */
|
|
5661
|
+
return /* @__PURE__ */ jsxs57(
|
|
5690
5662
|
Pressable26,
|
|
5691
5663
|
{
|
|
5692
5664
|
role: "tab",
|
|
@@ -5698,12 +5670,12 @@ function TabBar({ items: items2, value, onValueChange, onReselect, "aria-label":
|
|
|
5698
5670
|
},
|
|
5699
5671
|
style: ({ pressed }) => [styles50.item, { opacity: pressed ? 0.7 : 1 }],
|
|
5700
5672
|
children: [
|
|
5701
|
-
/* @__PURE__ */
|
|
5673
|
+
/* @__PURE__ */ jsxs57(View58, { "aria-hidden": true, style: styles50.icon, children: [
|
|
5702
5674
|
item.icon(selected, color),
|
|
5703
|
-
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
|
|
5704
5676
|
] }),
|
|
5705
|
-
/* @__PURE__ */
|
|
5706
|
-
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
|
|
5707
5679
|
]
|
|
5708
5680
|
},
|
|
5709
5681
|
item.value
|
|
@@ -5723,8 +5695,8 @@ var styles50 = StyleSheet50.create({
|
|
|
5723
5695
|
|
|
5724
5696
|
// src/native/tabs.tsx
|
|
5725
5697
|
import * as React43 from "react";
|
|
5726
|
-
import { Pressable as Pressable27, ScrollView as ScrollView7, StyleSheet as StyleSheet51, View as
|
|
5727
|
-
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";
|
|
5728
5700
|
function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label": label, variant = "underline", style }) {
|
|
5729
5701
|
const { theme, radius: radius3, haptic } = useTheme();
|
|
5730
5702
|
const [own, setOwn] = React43.useState(defaultValue ?? items2[0]?.value);
|
|
@@ -5738,7 +5710,7 @@ function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label":
|
|
|
5738
5710
|
const segmented = variant === "segmented";
|
|
5739
5711
|
const tabs = items2.map((item) => {
|
|
5740
5712
|
const selected = item.value === current;
|
|
5741
|
-
return /* @__PURE__ */
|
|
5713
|
+
return /* @__PURE__ */ jsx67(
|
|
5742
5714
|
Pressable27,
|
|
5743
5715
|
{
|
|
5744
5716
|
role: "tab",
|
|
@@ -5752,18 +5724,18 @@ function Tabs({ items: items2, value, defaultValue, onValueChange, "aria-label":
|
|
|
5752
5724
|
!segmented ? { borderBottomColor: selected ? theme.accent : "transparent" } : null,
|
|
5753
5725
|
item.disabled ? styles51.disabled : null
|
|
5754
5726
|
],
|
|
5755
|
-
children: /* @__PURE__ */
|
|
5727
|
+
children: /* @__PURE__ */ jsxs58(Txt, { variant: "label", tone: selected ? "text" : "secondary", numberOfLines: 1, children: [
|
|
5756
5728
|
item.label,
|
|
5757
|
-
item.count !== void 0 ? /* @__PURE__ */
|
|
5729
|
+
item.count !== void 0 ? /* @__PURE__ */ jsx67(Txt, { variant: "caption", tone: "secondary", children: ` ${item.count}` }) : null
|
|
5758
5730
|
] })
|
|
5759
5731
|
},
|
|
5760
5732
|
item.value
|
|
5761
5733
|
);
|
|
5762
5734
|
});
|
|
5763
5735
|
const panel = items2.find((i) => i.value === current)?.content;
|
|
5764
|
-
return /* @__PURE__ */
|
|
5765
|
-
segmented ? /* @__PURE__ */
|
|
5766
|
-
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
|
|
5767
5739
|
] });
|
|
5768
5740
|
}
|
|
5769
5741
|
var styles51 = StyleSheet51.create({
|
|
@@ -5777,15 +5749,15 @@ var styles51 = StyleSheet51.create({
|
|
|
5777
5749
|
});
|
|
5778
5750
|
|
|
5779
5751
|
// src/native/tag-selector.tsx
|
|
5780
|
-
import { StyleSheet as StyleSheet52, View as
|
|
5781
|
-
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";
|
|
5782
5754
|
function TagSelector({ label, options, value, onValueChange, max, countLabel, style }) {
|
|
5783
5755
|
const { haptic } = useTheme();
|
|
5784
5756
|
const full = max !== void 0 && value.length >= max;
|
|
5785
|
-
return /* @__PURE__ */
|
|
5786
|
-
/* @__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) => {
|
|
5787
5759
|
const on = value.includes(option.value);
|
|
5788
|
-
return /* @__PURE__ */
|
|
5760
|
+
return /* @__PURE__ */ jsx68(
|
|
5789
5761
|
Chip,
|
|
5790
5762
|
{
|
|
5791
5763
|
selected: on,
|
|
@@ -5799,15 +5771,15 @@ function TagSelector({ label, options, value, onValueChange, max, countLabel, st
|
|
|
5799
5771
|
option.value
|
|
5800
5772
|
);
|
|
5801
5773
|
}) }),
|
|
5802
|
-
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
|
|
5803
5775
|
] });
|
|
5804
5776
|
}
|
|
5805
5777
|
var styles52 = StyleSheet52.create({ root: { gap: 8 }, wrap: { flexDirection: "row", flexWrap: "wrap", gap: 8 } });
|
|
5806
5778
|
|
|
5807
5779
|
// src/native/toast.tsx
|
|
5808
5780
|
import * as React44 from "react";
|
|
5809
|
-
import { AccessibilityInfo as AccessibilityInfo15, Animated as Animated27, PanResponder as PanResponder5, Pressable as Pressable28, StyleSheet as StyleSheet53, Text as Text20, View as
|
|
5810
|
-
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";
|
|
5811
5783
|
var items = [];
|
|
5812
5784
|
var listeners2 = /* @__PURE__ */ new Set();
|
|
5813
5785
|
var counter = 0;
|
|
@@ -5874,15 +5846,15 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5874
5846
|
return () => clearTimeout(timer2);
|
|
5875
5847
|
}, [item.id, ms]);
|
|
5876
5848
|
const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
|
|
5877
|
-
const text = /* @__PURE__ */
|
|
5878
|
-
item.icon ? /* @__PURE__ */
|
|
5879
|
-
/* @__PURE__ */
|
|
5880
|
-
/* @__PURE__ */
|
|
5881
|
-
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
|
|
5882
5854
|
] })
|
|
5883
5855
|
] });
|
|
5884
|
-
const body = /* @__PURE__ */
|
|
5885
|
-
item.onPress ? /* @__PURE__ */
|
|
5856
|
+
const body = /* @__PURE__ */ jsxs60(Fragment9, { children: [
|
|
5857
|
+
item.onPress ? /* @__PURE__ */ jsx69(
|
|
5886
5858
|
Pressable28,
|
|
5887
5859
|
{
|
|
5888
5860
|
role: "button",
|
|
@@ -5893,8 +5865,8 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5893
5865
|
style: ({ pressed }) => [styles53.main, { opacity: pressed ? 0.8 : 1 }],
|
|
5894
5866
|
children: text
|
|
5895
5867
|
}
|
|
5896
|
-
) : /* @__PURE__ */
|
|
5897
|
-
item.action ? /* @__PURE__ */
|
|
5868
|
+
) : /* @__PURE__ */ jsx69(View61, { style: styles53.main, children: text }),
|
|
5869
|
+
item.action ? /* @__PURE__ */ jsx69(
|
|
5898
5870
|
Pressable28,
|
|
5899
5871
|
{
|
|
5900
5872
|
role: "button",
|
|
@@ -5903,23 +5875,23 @@ function ToastView({ item, closeLabel, duration }) {
|
|
|
5903
5875
|
dismiss(item.id);
|
|
5904
5876
|
},
|
|
5905
5877
|
style: [styles53.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
|
|
5906
|
-
children: /* @__PURE__ */
|
|
5878
|
+
children: /* @__PURE__ */ jsx69(Text20, { style: [styles53.actionLabel, { color: theme.onAccent }], children: item.action.label })
|
|
5907
5879
|
}
|
|
5908
5880
|
) : null,
|
|
5909
|
-
/* @__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" }) })
|
|
5910
5882
|
] });
|
|
5911
5883
|
const frame = [
|
|
5912
5884
|
styles53.toast,
|
|
5913
5885
|
{ backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
|
|
5914
5886
|
];
|
|
5915
5887
|
const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }, { translateX: swipe }] };
|
|
5916
|
-
return /* @__PURE__ */
|
|
5888
|
+
return /* @__PURE__ */ jsx69(Animated27.View, { "aria-live": "polite", style: motion3, ...drag.panHandlers, children: /* @__PURE__ */ jsx69(View61, { style: frame, children: body }) });
|
|
5917
5889
|
}
|
|
5918
5890
|
function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
|
|
5919
5891
|
const all = React44.useSyncExternalStore(subscribe2, snapshot, snapshot);
|
|
5920
5892
|
const shown = all.slice(-max);
|
|
5921
5893
|
if (shown.length === 0) return null;
|
|
5922
|
-
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)) });
|
|
5923
5895
|
}
|
|
5924
5896
|
var styles53 = StyleSheet53.create({
|
|
5925
5897
|
stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
|
|
@@ -5944,28 +5916,28 @@ var styles53 = StyleSheet53.create({
|
|
|
5944
5916
|
});
|
|
5945
5917
|
|
|
5946
5918
|
// src/native/update-prompt.tsx
|
|
5947
|
-
import { StyleSheet as StyleSheet54, View as
|
|
5948
|
-
import { jsx as
|
|
5919
|
+
import { StyleSheet as StyleSheet54, View as View62 } from "react-native";
|
|
5920
|
+
import { jsx as jsx70, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
5949
5921
|
function UpdatePrompt({ title, message, versionLabel, mark, updateLabel, onUpdate, laterLabel, onLater, style }) {
|
|
5950
5922
|
const { theme, radius: radius3 } = useTheme();
|
|
5951
|
-
return /* @__PURE__ */
|
|
5952
|
-
|
|
5923
|
+
return /* @__PURE__ */ jsxs61(
|
|
5924
|
+
View62,
|
|
5953
5925
|
{
|
|
5954
5926
|
role: "region",
|
|
5955
5927
|
"aria-label": title,
|
|
5956
5928
|
style: [styles54.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style],
|
|
5957
5929
|
children: [
|
|
5958
|
-
/* @__PURE__ */
|
|
5959
|
-
mark ? /* @__PURE__ */
|
|
5960
|
-
/* @__PURE__ */
|
|
5961
|
-
/* @__PURE__ */
|
|
5962
|
-
message ? /* @__PURE__ */
|
|
5963
|
-
versionLabel ? /* @__PURE__ */
|
|
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
|
|
5964
5936
|
] })
|
|
5965
5937
|
] }),
|
|
5966
|
-
/* @__PURE__ */
|
|
5967
|
-
/* @__PURE__ */
|
|
5968
|
-
/* @__PURE__ */
|
|
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 })
|
|
5969
5941
|
] })
|
|
5970
5942
|
]
|
|
5971
5943
|
}
|
|
@@ -5980,14 +5952,14 @@ var styles54 = StyleSheet54.create({
|
|
|
5980
5952
|
});
|
|
5981
5953
|
|
|
5982
5954
|
// src/native/verified-badge.tsx
|
|
5983
|
-
import { StyleSheet as StyleSheet55, View as
|
|
5955
|
+
import { StyleSheet as StyleSheet55, View as View63 } from "react-native";
|
|
5984
5956
|
import Svg31, { Path as Path26 } from "react-native-svg";
|
|
5985
|
-
import { jsx as
|
|
5957
|
+
import { jsx as jsx71, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
5986
5958
|
function VerifiedBadge({ label, showLabel, size = 16, on = "surface" }) {
|
|
5987
5959
|
const { theme } = useTheme();
|
|
5988
|
-
return /* @__PURE__ */
|
|
5989
|
-
/* @__PURE__ */
|
|
5990
|
-
/* @__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(
|
|
5991
5963
|
Path26,
|
|
5992
5964
|
{
|
|
5993
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",
|
|
@@ -5996,9 +5968,9 @@ function VerifiedBadge({ label, showLabel, size = 16, on = "surface" }) {
|
|
|
5996
5968
|
strokeWidth: 1.2
|
|
5997
5969
|
}
|
|
5998
5970
|
),
|
|
5999
|
-
/* @__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" })
|
|
6000
5972
|
] }),
|
|
6001
|
-
showLabel ? /* @__PURE__ */
|
|
5973
|
+
showLabel ? /* @__PURE__ */ jsx71(Txt, { variant: "caption", tone: on === "media" ? "onMedia" : "accent", style: styles55.text, children: label }) : null
|
|
6002
5974
|
] });
|
|
6003
5975
|
}
|
|
6004
5976
|
var styles55 = StyleSheet55.create({ row: { flexDirection: "row", alignItems: "center", gap: 4 }, text: { fontWeight: "700" } });
|
|
@@ -6050,6 +6022,7 @@ export {
|
|
|
6050
6022
|
MatchDialog,
|
|
6051
6023
|
MessageBubble,
|
|
6052
6024
|
MessageComposer,
|
|
6025
|
+
MetaRow,
|
|
6053
6026
|
Meter,
|
|
6054
6027
|
MonthPicker,
|
|
6055
6028
|
NumberTicker,
|