@krizaka/ui 3.1.0 → 3.2.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.
Files changed (135) hide show
  1. package/dist/achievement.js +1 -1
  2. package/dist/action-bar.js +1 -1
  3. package/dist/app-shell.js +1 -1
  4. package/dist/argument-card.js +2 -2
  5. package/dist/card-grid.js +1 -1
  6. package/dist/card.js +1 -1
  7. package/dist/choice-grid.js +1 -1
  8. package/dist/{chunk-OGJI5X4W.js → chunk-2PUDI7JS.js} +2 -2
  9. package/dist/chunk-4LOMIQVX.js +21 -0
  10. package/dist/chunk-4LOMIQVX.js.map +1 -0
  11. package/dist/{chunk-K3SWZXYT.js → chunk-DGQMDJXK.js} +2 -2
  12. package/dist/chunk-G3ETON2A.js +22 -0
  13. package/dist/chunk-G3ETON2A.js.map +1 -0
  14. package/dist/chunk-I5RVM5CW.js +27 -0
  15. package/dist/chunk-I5RVM5CW.js.map +1 -0
  16. package/dist/chunk-IZ7MV6HM.js +26 -0
  17. package/dist/chunk-IZ7MV6HM.js.map +1 -0
  18. package/dist/chunk-ZNMFG62E.js +20 -0
  19. package/dist/chunk-ZNMFG62E.js.map +1 -0
  20. package/dist/cn.d.ts +9 -1
  21. package/dist/cn.js +5 -3
  22. package/dist/code-block.js +1 -1
  23. package/dist/command.js +1 -1
  24. package/dist/confirm-button.js +1 -1
  25. package/dist/continue-prompt.js +1 -1
  26. package/dist/cta-panel.js +1 -1
  27. package/dist/data-table.js +2 -2
  28. package/dist/date-picker.d.ts +650 -61
  29. package/dist/date-picker.js +918 -122
  30. package/dist/date-picker.js.map +1 -1
  31. package/dist/decision-list.js +1 -1
  32. package/dist/dropdown-menu.js +1 -1
  33. package/dist/error-page.js +1 -1
  34. package/dist/field.js +1 -1
  35. package/dist/filter-bar.js +2 -2
  36. package/dist/form.js.map +1 -1
  37. package/dist/gallery-page.js +1 -1
  38. package/dist/glow-card.js +1 -1
  39. package/dist/goal-gauge.js +1 -1
  40. package/dist/how-it-works-page.js +1 -1
  41. package/dist/landscape.js +1 -1
  42. package/dist/link-card.js +1 -1
  43. package/dist/longform-page.js +1 -1
  44. package/dist/marquee.js +1 -1
  45. package/dist/mascot-quote.js +1 -1
  46. package/dist/motion.css +18 -1
  47. package/dist/native/form.js.map +1 -1
  48. package/dist/native.d.ts +239 -2
  49. package/dist/native.js +955 -379
  50. package/dist/native.js.map +1 -1
  51. package/dist/nav-bar.js +1 -1
  52. package/dist/page-hero.js +2 -2
  53. package/dist/page.js +2 -2
  54. package/dist/popover.js +1 -1
  55. package/dist/pricing-page.js +1 -1
  56. package/dist/product-page.js +1 -1
  57. package/dist/profile-card.js +1 -1
  58. package/dist/promise-card.js +1 -1
  59. package/dist/scroll-stage.js +1 -1
  60. package/dist/stage-banner.js +1 -1
  61. package/dist/terminal-replay.js +1 -1
  62. package/dist/toast.js +1 -1
  63. package/dist/toc.js +1 -1
  64. package/dist/tooltip.js +1 -1
  65. package/package.json +7 -7
  66. package/registry/cn.json +1 -1
  67. package/registry/date-picker.json +1721 -284
  68. package/registry/examples/date-picker/birth-date-wheel.d.ts +4 -0
  69. package/registry/examples/date-picker/birth-date-wheel.js +13 -0
  70. package/registry/examples/date-picker/birth-date-wheel.tsx +11 -0
  71. package/registry/examples/date-picker/birth-date.d.ts +4 -0
  72. package/registry/examples/date-picker/birth-date.js +25 -0
  73. package/registry/examples/date-picker/birth-date.tsx +21 -0
  74. package/registry/examples/date-picker/calendar.js +1 -1
  75. package/registry/examples/date-picker/calendar.tsx +2 -6
  76. package/registry/examples/date-picker/day-strip.d.ts +4 -0
  77. package/registry/examples/date-picker/day-strip.js +28 -0
  78. package/registry/examples/date-picker/day-strip.tsx +27 -0
  79. package/registry/examples/date-picker/month-year.d.ts +4 -0
  80. package/registry/examples/date-picker/month-year.js +13 -0
  81. package/registry/examples/date-picker/month-year.tsx +10 -0
  82. package/registry/examples/date-picker/native/birth-date-wheel.d.ts +4 -0
  83. package/registry/examples/date-picker/native/birth-date-wheel.dark.png +0 -0
  84. package/registry/examples/date-picker/native/birth-date-wheel.js +13 -0
  85. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  86. package/registry/examples/date-picker/native/birth-date-wheel.tsx +9 -0
  87. package/registry/examples/date-picker/native/calendar.d.ts +4 -0
  88. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  89. package/registry/examples/date-picker/native/calendar.js +13 -0
  90. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  91. package/registry/examples/date-picker/native/calendar.tsx +8 -0
  92. package/registry/examples/date-picker/native/day-strip.d.ts +4 -0
  93. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  94. package/registry/examples/date-picker/native/day-strip.js +29 -0
  95. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  96. package/registry/examples/date-picker/native/day-strip.tsx +26 -0
  97. package/registry/examples/date-picker/native/month-year.d.ts +4 -0
  98. package/registry/examples/date-picker/native/month-year.dark.png +0 -0
  99. package/registry/examples/date-picker/native/month-year.js +13 -0
  100. package/registry/examples/date-picker/native/month-year.light.png +0 -0
  101. package/registry/examples/date-picker/native/month-year.tsx +8 -0
  102. package/registry/examples/date-picker/native/time-slots.d.ts +4 -0
  103. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  104. package/registry/examples/date-picker/native/time-slots.js +15 -0
  105. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  106. package/registry/examples/date-picker/native/time-slots.tsx +15 -0
  107. package/registry/examples/date-picker/native/time-wheel.d.ts +4 -0
  108. package/registry/examples/date-picker/native/time-wheel.dark.png +0 -0
  109. package/registry/examples/date-picker/native/time-wheel.js +13 -0
  110. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  111. package/registry/examples/date-picker/native/time-wheel.tsx +8 -0
  112. package/registry/examples/date-picker/time-slots.d.ts +4 -0
  113. package/registry/examples/date-picker/time-slots.js +26 -0
  114. package/registry/examples/date-picker/time-slots.tsx +25 -0
  115. package/registry/examples/date-picker/time-wheel.d.ts +4 -0
  116. package/registry/examples/date-picker/time-wheel.js +13 -0
  117. package/registry/examples/date-picker/time-wheel.tsx +10 -0
  118. package/registry/examples/date-picker/wheel.d.ts +4 -0
  119. package/registry/examples/date-picker/wheel.js +14 -0
  120. package/registry/examples/date-picker/wheel.tsx +16 -0
  121. package/registry/index.json +6 -5
  122. package/registry/theme.json +7 -0
  123. package/skills/date-picker/SKILL.md +43 -0
  124. package/dist/chunk-2USC2YT6.js +0 -17
  125. package/dist/chunk-2USC2YT6.js.map +0 -1
  126. package/dist/chunk-5AXLA4LK.js +0 -13
  127. package/dist/chunk-5AXLA4LK.js.map +0 -1
  128. package/dist/chunk-FJDSLNXK.js +0 -11
  129. package/dist/chunk-FJDSLNXK.js.map +0 -1
  130. package/dist/chunk-KNBYZGSQ.js +0 -11
  131. package/dist/chunk-KNBYZGSQ.js.map +0 -1
  132. package/dist/chunk-VCAAHCHL.js +0 -17
  133. package/dist/chunk-VCAAHCHL.js.map +0 -1
  134. /package/dist/{chunk-OGJI5X4W.js.map → chunk-2PUDI7JS.js.map} +0 -0
  135. /package/dist/{chunk-K3SWZXYT.js.map → chunk-DGQMDJXK.js.map} +0 -0
package/dist/native.js CHANGED
@@ -55,6 +55,101 @@ function isRealDate(value) {
55
55
  function latestBirthDate(age, today = /* @__PURE__ */ new Date()) {
56
56
  return new Date(Date.UTC(today.getFullYear() - age, today.getMonth(), today.getDate())).toISOString().slice(0, 10);
57
57
  }
58
+ function daysInMonth(year, month) {
59
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
60
+ }
61
+ function isoParts(iso) {
62
+ const [year = 0, month = 0, day = 0] = iso.split("-").map(Number);
63
+ return { year, month, day };
64
+ }
65
+ function isoOf(year, month, day) {
66
+ const d = Math.min(Math.max(day, 1), daysInMonth(year, month));
67
+ return `${String(year).padStart(4, "0")}-${String(month).padStart(2, "0")}-${String(d).padStart(2, "0")}`;
68
+ }
69
+ function todayIso(now = /* @__PURE__ */ new Date()) {
70
+ return isoOf(now.getFullYear(), now.getMonth() + 1, now.getDate());
71
+ }
72
+ function ageOn(birth, today = todayIso()) {
73
+ const b = isoParts(birth);
74
+ const t = isoParts(today);
75
+ return t.year - b.year - (t.month < b.month || t.month === b.month && t.day < b.day ? 1 : 0);
76
+ }
77
+ function monthNames(locale, style = "long") {
78
+ const format = new Intl.DateTimeFormat(locale, { month: style, timeZone: "UTC" });
79
+ return Array.from({ length: 12 }, (_, i) => format.format(new Date(Date.UTC(2001, i, 1))));
80
+ }
81
+ function yearRange(from, to) {
82
+ const step = from <= to ? 1 : -1;
83
+ return Array.from({ length: Math.abs(to - from) + 1 }, (_, i) => from + i * step);
84
+ }
85
+ function timeToMinutes(value) {
86
+ const m = /^(\d{1,2}):(\d{1,2})$/.exec(value ?? "");
87
+ if (!m) return null;
88
+ const h = Number(m[1]);
89
+ const min = Number(m[2]);
90
+ return h < 24 && min < 60 ? h * 60 + min : null;
91
+ }
92
+ function minutesToTime(minutes) {
93
+ const m = (Math.round(minutes) % 1440 + 1440) % 1440;
94
+ return `${String(Math.floor(m / 60)).padStart(2, "0")}:${String(m % 60).padStart(2, "0")}`;
95
+ }
96
+ function timeSlots(start, end, step = 30) {
97
+ const a = timeToMinutes(start);
98
+ const b = timeToMinutes(end);
99
+ if (a === null || b === null || step <= 0) return [];
100
+ const slots = [];
101
+ for (let m = a; m < b; m += step) slots.push(minutesToTime(m));
102
+ return slots;
103
+ }
104
+ function uses12Hours(locale) {
105
+ try {
106
+ const options = new Intl.DateTimeFormat(locale, { hour: "numeric" }).resolvedOptions();
107
+ return options.hourCycle ? options.hourCycle === "h12" || options.hourCycle === "h11" : Boolean(options.hour12);
108
+ } catch {
109
+ return false;
110
+ }
111
+ }
112
+ function dayPeriods(locale) {
113
+ const format = new Intl.DateTimeFormat(locale, { hour: "numeric", hour12: true, timeZone: "UTC" });
114
+ const period = (h) => format.formatToParts(new Date(Date.UTC(2001, 0, 1, h))).find((p) => p.type === "dayPeriod")?.value ?? (h < 12 ? "AM" : "PM");
115
+ return [period(9), period(15)];
116
+ }
117
+ function formatTime(locale, value) {
118
+ const minutes = timeToMinutes(value);
119
+ if (minutes === null) return "";
120
+ return new Intl.DateTimeFormat(locale, { hour: "numeric", minute: "2-digit", timeZone: "UTC" }).format(new Date(Date.UTC(2001, 0, 1, 0, minutes)));
121
+ }
122
+ var toLocalDate = (iso) => {
123
+ const { year, month, day } = isoParts(iso);
124
+ return new Date(year, month - 1, day);
125
+ };
126
+ var toIsoDate = (date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`;
127
+ var addDays = (iso, days) => {
128
+ const date = toLocalDate(iso);
129
+ date.setDate(date.getDate() + days);
130
+ return toIsoDate(date);
131
+ };
132
+ var addMonths = (iso, months) => {
133
+ const { year, month, day } = isoParts(iso);
134
+ const first = new Date(year, month - 1 + months, 1);
135
+ return isoOf(first.getFullYear(), first.getMonth() + 1, day);
136
+ };
137
+ function weekStartOf(locale) {
138
+ try {
139
+ const info = new Intl.Locale(locale);
140
+ const firstDay = info.getWeekInfo?.().firstDay ?? info.weekInfo?.firstDay;
141
+ return firstDay ? firstDay % 7 : 1;
142
+ } catch {
143
+ return 1;
144
+ }
145
+ }
146
+ function monthGrid(month, weekStartsOn) {
147
+ const first = `${month.slice(0, 7)}-01`;
148
+ const lead = (toLocalDate(first).getDay() - weekStartsOn + 7) % 7;
149
+ const start = addDays(first, -lead);
150
+ const days = Array.from({ length: 42 }, (_, i) => addDays(start, i));
151
+ return Array.from({ length: 6 }, (_, w) => days.slice(w * 7, w * 7 + 7)).filter((week, w) => w < 5 || week[0].slice(0, 7) === first.slice(0, 7));
152
+ }
58
153
 
59
154
  // src/native/avatar.tsx
60
155
  import * as React2 from "react";
@@ -227,11 +322,12 @@ var radius2 = radius;
227
322
  var motion2 = motion;
228
323
  var stillMotion = { ...motion2, duration: { instant: 0, fast: 0, base: 0 } };
229
324
  var ThemeContext = React.createContext(null);
325
+ var noop = () => void 0;
230
326
  function resolve(mode, system) {
231
327
  if (mode === "system") return system === "light" ? "light" : "dark";
232
328
  return mode;
233
329
  }
234
- function ThemeProvider({ children, mode: controlled, defaultMode = "system", onModeChange, overrides, fonts }) {
330
+ function ThemeProvider({ children, mode: controlled, defaultMode = "system", onModeChange, overrides, fonts, haptics }) {
235
331
  const system = useColorScheme();
236
332
  const [own, setOwn] = React.useState(defaultMode);
237
333
  const mode = controlled ?? own;
@@ -247,18 +343,17 @@ function ThemeProvider({ children, mode: controlled, defaultMode = "system", onM
247
343
  const reduce = useReducedMotion();
248
344
  const theme = React.useMemo(() => override ? { ...themes2[scheme], ...override } : themes2[scheme], [scheme, override]);
249
345
  const value = React.useMemo(
250
- () => ({ mode, setMode, scheme, theme, radius: radius2, motion: reduce ? stillMotion : motion2, fonts: fonts ?? {} }),
251
- [mode, setMode, scheme, theme, fonts, reduce]
346
+ () => ({ mode, setMode, scheme, theme, radius: radius2, motion: reduce ? stillMotion : motion2, fonts: fonts ?? {}, haptic: haptics ?? noop }),
347
+ [mode, setMode, scheme, theme, fonts, reduce, haptics]
252
348
  );
253
349
  return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
254
350
  }
255
- var noop = () => void 0;
256
351
  function useTheme() {
257
352
  const context = React.useContext(ThemeContext);
258
353
  const system = useColorScheme();
259
354
  if (context) return context;
260
355
  const scheme = resolve("system", system);
261
- return { mode: "system", setMode: noop, scheme, theme: themes2[scheme], radius: radius2, motion: motion2, fonts: {} };
356
+ return { mode: "system", setMode: noop, scheme, theme: themes2[scheme], radius: radius2, motion: motion2, fonts: {}, haptic: noop };
262
357
  }
263
358
  function useReducedMotion() {
264
359
  const [reduce, setReduce] = React.useState(false);
@@ -877,19 +972,481 @@ var styles9 = StyleSheet9.create({
877
972
  disabled: { opacity: 0.5 }
878
973
  });
879
974
 
880
- // src/native/empty-state.tsx
881
- import { StyleSheet as StyleSheet10, View as View7 } from "react-native";
975
+ // src/native/date-time.tsx
976
+ import * as React10 from "react";
977
+ import { Pressable as Pressable6, ScrollView as ScrollView3, StyleSheet as StyleSheet11, Text as Text9, View as View8 } from "react-native";
978
+ import Svg3, { Path as Path2 } from "react-native-svg";
979
+
980
+ // src/native/wheel.tsx
981
+ import * as React9 from "react";
982
+ import { Pressable as Pressable5, ScrollView as ScrollView2, StyleSheet as StyleSheet10, Text as Text8, View as View7 } from "react-native";
882
983
  import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
984
+ var ITEM = 44;
985
+ var VisibleContext = React9.createContext(5);
986
+ function WheelPicker({ label, children, visible = 5, invalid, style }) {
987
+ const { theme, radius: radius3 } = useTheme();
988
+ return /* @__PURE__ */ jsx11(VisibleContext.Provider, { value: visible, children: /* @__PURE__ */ jsxs8(
989
+ View7,
990
+ {
991
+ role: "group",
992
+ "aria-label": label,
993
+ style: [styles10.root, { height: ITEM * visible, borderRadius: radius3.xl, backgroundColor: theme.surface1, borderColor: invalid ? theme.danger : theme.borderDefault }, style],
994
+ children: [
995
+ /* @__PURE__ */ jsx11(View7, { pointerEvents: "none", style: [styles10.band, { top: ITEM * (visible - 1) / 2, height: ITEM, borderRadius: radius3.lg, backgroundColor: theme.surface3, borderColor: theme.borderSubtle }] }),
996
+ children
997
+ ]
998
+ }
999
+ ) });
1000
+ }
1001
+ function WheelDivider({ children }) {
1002
+ const { theme } = useTheme();
1003
+ return /* @__PURE__ */ jsx11(Text8, { "aria-hidden": true, style: [styles10.divider, { color: theme.textSecondary }], children });
1004
+ }
1005
+ var nearestEnabled = (options, index) => {
1006
+ for (let d = 0; d < options.length; d++) {
1007
+ if (options[index + d] && !options[index + d].disabled) return index + d;
1008
+ if (options[index - d] && !options[index - d].disabled) return index - d;
1009
+ }
1010
+ return index;
1011
+ };
1012
+ function Wheel({ label, options, value: valueProp, defaultValue, onValueChange, disabled, style }) {
1013
+ const { theme, haptic } = useTheme();
1014
+ const visible = React9.useContext(VisibleContext);
1015
+ const [own, setOwn] = React9.useState(defaultValue ?? options[0]?.value ?? "");
1016
+ const value = valueProp ?? own;
1017
+ const index = Math.max(0, options.findIndex((o) => o.value === value));
1018
+ const scroller = React9.useRef(null);
1019
+ const passing = React9.useRef(index);
1020
+ const [shown, setShown] = React9.useState(index);
1021
+ const [seen, setSeen] = React9.useState(index);
1022
+ if (seen !== index) {
1023
+ setSeen(index);
1024
+ setShown(index);
1025
+ }
1026
+ const commit = (i) => {
1027
+ const target = nearestEnabled(options, Math.min(options.length - 1, Math.max(0, i)));
1028
+ const option = options[target];
1029
+ if (!option) return;
1030
+ if (target !== i) scroller.current?.scrollTo({ y: target * ITEM, animated: true });
1031
+ if (valueProp === void 0) setOwn(option.value);
1032
+ if (option.value !== value) onValueChange?.(option.value);
1033
+ };
1034
+ React9.useEffect(() => {
1035
+ passing.current = index;
1036
+ scroller.current?.scrollTo({ y: index * ITEM, animated: false });
1037
+ }, [index]);
1038
+ const onScroll = (e) => {
1039
+ const i = Math.round(e.nativeEvent.contentOffset.y / ITEM);
1040
+ if (i !== passing.current && i >= 0 && i < options.length) {
1041
+ passing.current = i;
1042
+ setShown(i);
1043
+ haptic("selection");
1044
+ }
1045
+ };
1046
+ const settle = (e) => commit(Math.round(e.nativeEvent.contentOffset.y / ITEM));
1047
+ const step = (by) => {
1048
+ let i = index + by;
1049
+ while (options[i]?.disabled) i += by;
1050
+ if (options[i]) commit(i);
1051
+ };
1052
+ const pad = (visible - 1) / 2 * ITEM;
1053
+ return /* @__PURE__ */ jsx11(
1054
+ View7,
1055
+ {
1056
+ accessible: true,
1057
+ role: "spinbutton",
1058
+ "aria-label": label,
1059
+ "aria-valuetext": options[index]?.label,
1060
+ "aria-valuenow": index,
1061
+ "aria-valuemin": 0,
1062
+ "aria-valuemax": Math.max(0, options.length - 1),
1063
+ "aria-disabled": disabled || void 0,
1064
+ accessibilityActions: [{ name: "increment" }, { name: "decrement" }],
1065
+ onAccessibilityAction: (e) => step(e.nativeEvent.actionName === "increment" ? 1 : -1),
1066
+ style: [styles10.column, disabled ? styles10.disabled : null, style],
1067
+ children: /* @__PURE__ */ jsx11(
1068
+ ScrollView2,
1069
+ {
1070
+ ref: scroller,
1071
+ "aria-hidden": true,
1072
+ importantForAccessibility: "no-hide-descendants",
1073
+ scrollEnabled: !disabled,
1074
+ showsVerticalScrollIndicator: false,
1075
+ snapToInterval: ITEM,
1076
+ decelerationRate: "fast",
1077
+ contentOffset: { x: 0, y: index * ITEM },
1078
+ contentContainerStyle: { paddingVertical: pad },
1079
+ scrollEventThrottle: 16,
1080
+ onScroll,
1081
+ onMomentumScrollEnd: settle,
1082
+ onScrollEndDrag: (e) => {
1083
+ if (Math.abs(e.nativeEvent.velocity?.y ?? 0) < 0.05) settle(e);
1084
+ },
1085
+ children: options.map((o, i) => {
1086
+ const distance = Math.abs(i - shown);
1087
+ return /* @__PURE__ */ jsx11(Pressable5, { focusable: false, tabIndex: -1, disabled: disabled || o.disabled, onPress: () => commit(i), style: [styles10.item, { height: ITEM }], children: /* @__PURE__ */ jsx11(
1088
+ Text8,
1089
+ {
1090
+ numberOfLines: 1,
1091
+ style: [
1092
+ styles10.itemText,
1093
+ {
1094
+ color: o.disabled ? theme.textMuted : i === shown ? theme.textPrimary : theme.textSecondary,
1095
+ fontWeight: i === shown ? "600" : "400",
1096
+ opacity: distance === 0 ? 1 : distance === 1 ? 0.7 : 0.4,
1097
+ transform: [{ scale: distance === 0 ? 1 : 0.92 }],
1098
+ textDecorationLine: o.disabled ? "line-through" : "none"
1099
+ }
1100
+ ],
1101
+ children: o.label
1102
+ }
1103
+ ) }, o.value);
1104
+ })
1105
+ }
1106
+ )
1107
+ }
1108
+ );
1109
+ }
1110
+ var styles10 = StyleSheet10.create({
1111
+ root: { flexDirection: "row", alignItems: "stretch", borderWidth: StyleSheet10.hairlineWidth, paddingHorizontal: 6, gap: 4, overflow: "hidden", alignSelf: "flex-start" },
1112
+ band: { position: "absolute", left: 6, right: 6, borderWidth: StyleSheet10.hairlineWidth },
1113
+ column: { minWidth: 56, flexGrow: 1 },
1114
+ item: { alignItems: "center", justifyContent: "center", paddingHorizontal: 8 },
1115
+ itemText: { fontSize: 18, fontVariant: ["tabular-nums"] },
1116
+ divider: { alignSelf: "center", fontSize: 18, fontWeight: "600" },
1117
+ disabled: { opacity: 0.4 }
1118
+ });
1119
+
1120
+ // src/native/date-time.tsx
1121
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1122
+ var longDate = (locale, iso) => new Intl.DateTimeFormat(locale, { dateStyle: "long" }).format(toLocalDate(iso));
1123
+ var useOwn = (value, initial) => {
1124
+ const [own, setOwn] = React10.useState(initial);
1125
+ return [value !== void 0 ? value : own, (next) => value === void 0 && setOwn(next)];
1126
+ };
1127
+ function Chevron({ direction, color }) {
1128
+ return /* @__PURE__ */ jsx12(Svg3, { 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__ */ jsx12(Path2, { d: direction === "left" ? "m15 18-6-6 6-6" : "m9 18 6-6-6-6" }) });
1129
+ }
1130
+ function NavButton({ label, direction, disabled, onPress }) {
1131
+ const { theme, radius: radius3 } = useTheme();
1132
+ return /* @__PURE__ */ jsx12(
1133
+ Pressable6,
1134
+ {
1135
+ role: "button",
1136
+ "aria-label": label,
1137
+ "aria-disabled": disabled || void 0,
1138
+ disabled,
1139
+ hitSlop: 6,
1140
+ onPress,
1141
+ style: ({ pressed }) => [styles11.nav, { borderRadius: radius3.md, backgroundColor: pressed ? theme.surface3 : theme.surface2, borderColor: theme.borderSubtle }, disabled ? styles11.disabled : null],
1142
+ children: /* @__PURE__ */ jsx12(Chevron, { direction, color: theme.textSecondary })
1143
+ }
1144
+ );
1145
+ }
1146
+ function Node({ color, style }) {
1147
+ return /* @__PURE__ */ jsx12(View8, { "aria-hidden": true, style: [styles11.node, { backgroundColor: color }, style] });
1148
+ }
1149
+ var calendarLabels = { previousMonth: "Previous month", nextMonth: "Next month" };
1150
+ function Calendar({ locale, value, range, onSelect, defaultMonth, min, max, isDateDisabled, weekStartsOn, today: todayProp, labels: given, style }) {
1151
+ const labels = { ...calendarLabels, ...given };
1152
+ const { theme, radius: radius3, haptic } = useTheme();
1153
+ const today = todayProp ?? todayIso();
1154
+ const [month, setMonth] = React10.useState(`${(defaultMonth ?? value ?? range?.start ?? today).slice(0, 7)}-01`);
1155
+ const start = weekStartsOn ?? weekStartOf(locale);
1156
+ const weeks = monthGrid(month, start);
1157
+ const weekday = new Intl.DateTimeFormat(locale, { weekday: "narrow" });
1158
+ const title = new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" }).format(toLocalDate(month));
1159
+ const [lo, hi] = range?.end ? range.start <= range.end ? [range.start, range.end] : [range.end, range.start] : [null, null];
1160
+ const off = (iso) => Boolean(min && iso < min || max && iso > max || isDateDisabled?.(iso));
1161
+ return /* @__PURE__ */ jsxs9(View8, { style: [styles11.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius3.xl }, style], children: [
1162
+ /* @__PURE__ */ jsxs9(View8, { style: styles11.header, children: [
1163
+ /* @__PURE__ */ jsx12(NavButton, { label: labels.previousMonth, direction: "left", disabled: Boolean(min && addDays(month, -1) < min), onPress: () => setMonth(addMonths(month, -1)) }),
1164
+ /* @__PURE__ */ jsx12(Text9, { role: "heading", "aria-live": "polite", style: [styles11.title, { color: theme.textPrimary }], children: title }),
1165
+ /* @__PURE__ */ jsx12(NavButton, { label: labels.nextMonth, direction: "right", disabled: Boolean(max && addMonths(month, 1) > max), onPress: () => setMonth(addMonths(month, 1)) })
1166
+ ] }),
1167
+ /* @__PURE__ */ jsx12(View8, { style: styles11.week, "aria-hidden": true, children: weeks[0].map((iso) => /* @__PURE__ */ jsx12(Text9, { style: [styles11.weekday, { color: theme.textSecondary }], children: weekday.format(toLocalDate(iso)) }, iso)) }),
1168
+ /* @__PURE__ */ jsx12(View8, { role: "radiogroup", "aria-label": title, children: weeks.map((week) => /* @__PURE__ */ jsx12(View8, { style: styles11.week, children: week.map((iso) => {
1169
+ const outside = iso.slice(0, 7) !== month.slice(0, 7);
1170
+ const selected = iso === value || Boolean(range && (iso === range.start || iso === range.end));
1171
+ const disabled = off(iso);
1172
+ const band = lo && hi && lo !== hi && iso >= lo && iso <= hi;
1173
+ return /* @__PURE__ */ jsx12(
1174
+ View8,
1175
+ {
1176
+ style: [
1177
+ styles11.cell,
1178
+ band ? { backgroundColor: theme.accentSoft } : null,
1179
+ band && iso === lo ? { borderTopLeftRadius: radius3.lg, borderBottomLeftRadius: radius3.lg } : null,
1180
+ band && iso === hi ? { borderTopRightRadius: radius3.lg, borderBottomRightRadius: radius3.lg } : null
1181
+ ],
1182
+ children: /* @__PURE__ */ jsxs9(
1183
+ Pressable6,
1184
+ {
1185
+ role: "radio",
1186
+ "aria-label": longDate(locale, iso),
1187
+ "aria-checked": selected,
1188
+ "aria-disabled": disabled || void 0,
1189
+ "aria-current": iso === today ? "date" : void 0,
1190
+ disabled,
1191
+ onPress: () => {
1192
+ haptic("selection");
1193
+ onSelect?.(iso);
1194
+ },
1195
+ style: ({ pressed }) => [
1196
+ styles11.day,
1197
+ { borderRadius: radius3.lg },
1198
+ selected ? { backgroundColor: theme.accent } : pressed ? { backgroundColor: theme.surface3 } : null
1199
+ ],
1200
+ children: [
1201
+ /* @__PURE__ */ jsx12(
1202
+ Text9,
1203
+ {
1204
+ style: [
1205
+ styles11.dayText,
1206
+ {
1207
+ color: selected ? theme.onAccent : disabled ? theme.textMuted : iso === today ? theme.accentText : outside ? theme.textSecondary : theme.textPrimary,
1208
+ fontWeight: selected || iso === today ? "700" : "400",
1209
+ textDecorationLine: disabled ? "line-through" : "none"
1210
+ }
1211
+ ],
1212
+ children: Number(iso.slice(8))
1213
+ }
1214
+ ),
1215
+ iso === today ? /* @__PURE__ */ jsx12(Node, { color: selected ? theme.onAccent : theme.accent, style: styles11.todayNode }) : null
1216
+ ]
1217
+ }
1218
+ )
1219
+ },
1220
+ iso
1221
+ );
1222
+ }) }, week[0])) })
1223
+ ] });
1224
+ }
1225
+ function MonthPicker({ locale, value, onValueChange, min, max, labels, style }) {
1226
+ const { theme, radius: radius3, haptic } = useTheme();
1227
+ const [year, setYear] = React10.useState(Number((value ?? todayIso()).slice(0, 4)));
1228
+ const names = monthNames(locale, "short").map((n) => n.replace(/\.$/, ""));
1229
+ const long = monthNames(locale, "long");
1230
+ return /* @__PURE__ */ jsxs9(View8, { style: [styles11.calendar, { backgroundColor: theme.surface1, borderColor: theme.borderDefault, borderRadius: radius3.xl }, style], children: [
1231
+ /* @__PURE__ */ jsxs9(View8, { style: styles11.header, children: [
1232
+ /* @__PURE__ */ jsx12(NavButton, { label: labels?.previousYear ?? "Previous year", direction: "left", disabled: Boolean(min && year - 1 < Number(min.slice(0, 4))), onPress: () => setYear(year - 1) }),
1233
+ /* @__PURE__ */ jsx12(Text9, { role: "heading", "aria-live": "polite", style: [styles11.title, { color: theme.textPrimary }], children: year }),
1234
+ /* @__PURE__ */ jsx12(NavButton, { label: labels?.nextYear ?? "Next year", direction: "right", disabled: Boolean(max && year + 1 > Number(max.slice(0, 4))), onPress: () => setYear(year + 1) })
1235
+ ] }),
1236
+ /* @__PURE__ */ jsx12(View8, { role: "radiogroup", "aria-label": String(year), style: styles11.months, children: names.map((name, i) => {
1237
+ const id = `${year}-${String(i + 1).padStart(2, "0")}`;
1238
+ const selected = id === value;
1239
+ const disabled = Boolean(min && id < min || max && id > max);
1240
+ return /* @__PURE__ */ jsx12(
1241
+ Pressable6,
1242
+ {
1243
+ role: "radio",
1244
+ "aria-checked": selected,
1245
+ "aria-label": `${long[i]} ${year}`,
1246
+ "aria-disabled": disabled || void 0,
1247
+ disabled,
1248
+ onPress: () => {
1249
+ haptic("selection");
1250
+ onValueChange?.(id);
1251
+ },
1252
+ style: ({ pressed }) => [styles11.month, { borderRadius: radius3.lg, backgroundColor: selected ? theme.accent : pressed ? theme.surface3 : "transparent" }, disabled ? styles11.disabled : null],
1253
+ children: /* @__PURE__ */ jsx12(Text9, { style: [styles11.monthText, { color: selected ? theme.onAccent : theme.textPrimary, fontWeight: selected ? "700" : "500" }], children: name })
1254
+ },
1255
+ id
1256
+ );
1257
+ }) })
1258
+ ] });
1259
+ }
1260
+ function DayStrip({ label, locale, value: valueProp, defaultValue = null, onValueChange, start, days = 14, isDateDisabled, isDateMarked, markedLabel = "has events", today: todayProp, style }) {
1261
+ const { theme, radius: radius3, haptic } = useTheme();
1262
+ const today = todayProp ?? todayIso();
1263
+ const first = start ?? today;
1264
+ const [value, setValue] = useOwn(valueProp, defaultValue);
1265
+ const weekday = new Intl.DateTimeFormat(locale, { weekday: "short" });
1266
+ const list = Array.from({ length: days }, (_, i) => addDays(first, i));
1267
+ return /* @__PURE__ */ jsx12(ScrollView3, { horizontal: true, showsHorizontalScrollIndicator: false, role: "radiogroup", "aria-label": label, contentContainerStyle: styles11.strip, style, children: list.map((iso) => {
1268
+ const selected = iso === value;
1269
+ const disabled = Boolean(isDateDisabled?.(iso));
1270
+ const marked = Boolean(isDateMarked?.(iso));
1271
+ const name = longDate(locale, iso);
1272
+ return /* @__PURE__ */ jsxs9(
1273
+ Pressable6,
1274
+ {
1275
+ role: "radio",
1276
+ "aria-checked": selected,
1277
+ "aria-label": marked ? `${name}, ${markedLabel}` : name,
1278
+ "aria-disabled": disabled || void 0,
1279
+ "aria-current": iso === today ? "date" : void 0,
1280
+ disabled,
1281
+ onPress: () => {
1282
+ haptic("selection");
1283
+ setValue(iso);
1284
+ onValueChange?.(iso);
1285
+ },
1286
+ style: ({ pressed }) => [
1287
+ styles11.stripDay,
1288
+ {
1289
+ borderRadius: radius3.xl,
1290
+ backgroundColor: selected ? theme.accent : disabled ? "transparent" : theme.surface2,
1291
+ borderColor: selected ? theme.accent : theme.borderDefault,
1292
+ borderStyle: disabled ? "dashed" : "solid",
1293
+ transform: [{ scale: pressed ? 0.95 : 1 }]
1294
+ }
1295
+ ],
1296
+ children: [
1297
+ iso === today ? /* @__PURE__ */ jsx12(Node, { color: selected ? theme.onAccent : theme.accent, style: styles11.stripNode }) : null,
1298
+ /* @__PURE__ */ jsx12(Text9, { style: [styles11.stripWeekday, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textSecondary }], children: weekday.format(toLocalDate(iso)).replace(/\.$/, "").toUpperCase() }),
1299
+ /* @__PURE__ */ jsx12(Text9, { style: [styles11.stripNumber, { color: selected ? theme.onAccent : disabled ? theme.textMuted : theme.textPrimary }], children: Number(iso.slice(8)) }),
1300
+ /* @__PURE__ */ jsx12(View8, { style: [styles11.dot, marked ? { backgroundColor: selected ? theme.onAccent : theme.textSecondary } : null] })
1301
+ ]
1302
+ },
1303
+ iso
1304
+ );
1305
+ }) });
1306
+ }
1307
+ function TimePicker({ label, locale, value: valueProp, defaultValue = null, onValueChange, variant = "wheel", minuteStep = 5, hour12, labels: given, slots = [], isTimeDisabled, disabled, style }) {
1308
+ const { theme, radius: radius3, haptic } = useTheme();
1309
+ const [value, setOwn] = useOwn(valueProp, defaultValue);
1310
+ const set = (next) => {
1311
+ setOwn(next);
1312
+ onValueChange?.(next);
1313
+ };
1314
+ if (variant === "slots")
1315
+ return /* @__PURE__ */ jsx12(View8, { role: "radiogroup", "aria-label": label, style: [styles11.slots, style], children: slots.map((t) => {
1316
+ const selected = t === value;
1317
+ const off = disabled || Boolean(isTimeDisabled?.(t));
1318
+ return /* @__PURE__ */ jsx12(
1319
+ Pressable6,
1320
+ {
1321
+ role: "radio",
1322
+ "aria-checked": selected,
1323
+ "aria-label": formatTime(locale, t),
1324
+ "aria-disabled": off || void 0,
1325
+ disabled: off,
1326
+ onPress: () => {
1327
+ haptic("selection");
1328
+ set(t);
1329
+ },
1330
+ style: ({ pressed }) => [
1331
+ styles11.slot,
1332
+ {
1333
+ borderRadius: radius3.lg,
1334
+ backgroundColor: selected ? theme.accent : off ? "transparent" : theme.surface2,
1335
+ borderColor: selected ? theme.accent : theme.borderDefault,
1336
+ borderStyle: off ? "dashed" : "solid",
1337
+ transform: [{ scale: pressed ? 0.97 : 1 }]
1338
+ }
1339
+ ],
1340
+ children: /* @__PURE__ */ jsx12(Text9, { style: [styles11.slotText, { color: selected ? theme.onAccent : off ? theme.textMuted : theme.textPrimary, textDecorationLine: off ? "line-through" : "none" }], children: formatTime(locale, t) })
1341
+ },
1342
+ t
1343
+ );
1344
+ }) });
1345
+ const labels = { hours: "Hours", minutes: "Minutes", period: "AM/PM", ...given };
1346
+ const twelve = hour12 ?? uses12Hours(locale);
1347
+ const total = timeToMinutes(value) ?? 9 * 60;
1348
+ const h24 = Math.floor(total / 60);
1349
+ const minute = total % 60;
1350
+ const pm = h24 >= 12;
1351
+ const two = (n) => String(n).padStart(2, "0");
1352
+ const put = (h, m) => set(`${two(h)}:${two(m)}`);
1353
+ const hours = twelve ? [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((h) => ({ value: String(h), label: String(h) })) : Array.from({ length: 24 }, (_, h) => ({ value: String(h), label: two(h) }));
1354
+ const minutes = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => ({ value: String(i * minuteStep), label: two(i * minuteStep) }));
1355
+ const [am, pmLabel] = dayPeriods(locale);
1356
+ return /* @__PURE__ */ jsxs9(WheelPicker, { label: value ? `${label}, ${formatTime(locale, value)}` : label, style, children: [
1357
+ /* @__PURE__ */ jsx12(Wheel, { label: labels.hours, options: hours, disabled, value: twelve ? String(h24 % 12 === 0 ? 12 : h24 % 12) : String(h24), onValueChange: (v) => put(twelve ? Number(v) % 12 + (pm ? 12 : 0) : Number(v), minute) }),
1358
+ /* @__PURE__ */ jsx12(WheelDivider, { children: ":" }),
1359
+ /* @__PURE__ */ jsx12(Wheel, { label: labels.minutes, options: minutes, disabled, value: String(Math.min(60 - minuteStep, Math.round(minute / minuteStep) * minuteStep)), onValueChange: (v) => put(h24, Number(v)) }),
1360
+ twelve ? /* @__PURE__ */ jsx12(
1361
+ Wheel,
1362
+ {
1363
+ label: labels.period,
1364
+ options: [
1365
+ { value: "am", label: am },
1366
+ { value: "pm", label: pmLabel }
1367
+ ],
1368
+ disabled,
1369
+ value: pm ? "pm" : "am",
1370
+ onValueChange: (v) => put(h24 % 12 + (v === "pm" ? 12 : 0), minute)
1371
+ }
1372
+ ) : null
1373
+ ] });
1374
+ }
1375
+ function DateWheel({ label, locale, value: valueProp, defaultValue = null, onValueChange, min, max, defaultView, hint, error, labels: given, disabled, style }) {
1376
+ const { theme } = useTheme();
1377
+ const names = { day: "Day", month: "Month", year: "Year", ...given };
1378
+ const [value, setOwn] = useOwn(valueProp, defaultValue);
1379
+ const today = todayIso();
1380
+ const hi = max ?? today;
1381
+ const lo = min ?? isoOf(Number(today.slice(0, 4)) - 120, 1, 1);
1382
+ const { year, month, day } = isoParts(value || defaultView || hi);
1383
+ const months = monthNames(locale, "long");
1384
+ const set = (y, m, d) => {
1385
+ let next = isoOf(y, m, d);
1386
+ if (next > hi) next = hi;
1387
+ if (next < lo) next = lo;
1388
+ setOwn(next);
1389
+ onValueChange?.(next);
1390
+ };
1391
+ const last = daysInMonth(year, month);
1392
+ const columns = {
1393
+ day: /* @__PURE__ */ jsx12(Wheel, { label: names.day, disabled, options: Array.from({ length: last }, (_, i) => ({ value: String(i + 1), label: String(i + 1), disabled: isoOf(year, month, i + 1) > hi || isoOf(year, month, i + 1) < lo })), value: String(Math.min(day, last)), onValueChange: (v) => set(year, month, Number(v)), style: styles11.dayWheel }, "day"),
1394
+ month: /* @__PURE__ */ jsx12(Wheel, { label: names.month, disabled, options: months.map((n, i) => ({ value: String(i + 1), label: n, disabled: isoOf(year, i + 1, 1) > hi || isoOf(year, i + 1, daysInMonth(year, i + 1)) < lo })), value: String(month), onValueChange: (v) => set(year, Number(v), day), style: styles11.monthWheel }, "month"),
1395
+ year: /* @__PURE__ */ jsx12(Wheel, { label: names.year, disabled, options: yearRange(Number(hi.slice(0, 4)), Number(lo.slice(0, 4))).map((y) => ({ value: String(y), label: String(y) })), value: String(year), onValueChange: (v) => set(Number(v), month, day), style: styles11.yearWheel }, "year")
1396
+ };
1397
+ const caption = error ?? hint;
1398
+ return /* @__PURE__ */ jsxs9(View8, { style: [styles11.field, style], children: [
1399
+ /* @__PURE__ */ jsx12(Text9, { "aria-hidden": true, style: [styles11.fieldLabel, { color: theme.textSecondary }], children: label }),
1400
+ /* @__PURE__ */ jsx12(WheelPicker, { label, invalid: Boolean(error), children: datePartsOrder(locale).map((part) => columns[part]) }),
1401
+ caption ? /* @__PURE__ */ jsx12(Text9, { role: error ? "alert" : void 0, "aria-live": error ? "polite" : void 0, style: [styles11.caption, { color: error ? theme.dangerText : theme.textSecondary }], children: caption }) : null
1402
+ ] });
1403
+ }
1404
+ var styles11 = StyleSheet11.create({
1405
+ calendar: { padding: 12, gap: 4, borderWidth: StyleSheet11.hairlineWidth, alignSelf: "flex-start" },
1406
+ header: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", marginBottom: 6, gap: 8 },
1407
+ title: { fontSize: 15, fontWeight: "700", textTransform: "capitalize" },
1408
+ nav: { width: 36, height: 36, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet11.hairlineWidth },
1409
+ week: { flexDirection: "row" },
1410
+ weekday: { width: 44, textAlign: "center", fontSize: 11, fontWeight: "700", paddingBottom: 4 },
1411
+ cell: { width: 44, height: 44, marginVertical: 1 },
1412
+ day: { flex: 1, alignItems: "center", justifyContent: "center" },
1413
+ dayText: { fontSize: 15, fontVariant: ["tabular-nums"] },
1414
+ node: { width: 5, height: 5, borderRadius: 1, transform: [{ rotate: "45deg" }] },
1415
+ todayNode: { position: "absolute", bottom: 5 },
1416
+ months: { flexDirection: "row", flexWrap: "wrap", width: 264, gap: 6 },
1417
+ month: { width: 84, height: 44, alignItems: "center", justifyContent: "center" },
1418
+ monthText: { fontSize: 14, textTransform: "capitalize" },
1419
+ strip: { gap: 8, paddingVertical: 4 },
1420
+ stripDay: { width: 56, height: 72, alignItems: "center", justifyContent: "center", gap: 2, borderWidth: 1 },
1421
+ stripNode: { position: "absolute", top: 6 },
1422
+ stripWeekday: { fontSize: 11, fontWeight: "700", letterSpacing: 0.5 },
1423
+ stripNumber: { fontSize: 19, fontWeight: "700", fontVariant: ["tabular-nums"] },
1424
+ dot: { width: 6, height: 6, borderRadius: 3 },
1425
+ slots: { flexDirection: "row", flexWrap: "wrap", gap: 8, alignSelf: "stretch" },
1426
+ slot: { minWidth: 88, height: 44, paddingHorizontal: 12, alignItems: "center", justifyContent: "center", borderWidth: 1 },
1427
+ slotText: { fontSize: 15, fontWeight: "600", fontVariant: ["tabular-nums"] },
1428
+ field: { gap: 6, alignSelf: "stretch" },
1429
+ fieldLabel: { fontSize: 12, lineHeight: 16, fontWeight: "600" },
1430
+ caption: { fontSize: 12, lineHeight: 16 },
1431
+ dayWheel: { minWidth: 56 },
1432
+ monthWheel: { minWidth: 128 },
1433
+ yearWheel: { minWidth: 76 },
1434
+ disabled: { opacity: 0.4 }
1435
+ });
1436
+
1437
+ // src/native/empty-state.tsx
1438
+ import { StyleSheet as StyleSheet12, View as View9 } from "react-native";
1439
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
883
1440
  function EmptyState({ icon, title, description, action, style, ...props }) {
884
1441
  const { theme } = useTheme();
885
- return /* @__PURE__ */ jsxs8(View7, { ...props, style: [styles10.root, style], children: [
886
- icon ? /* @__PURE__ */ jsx11(View7, { "aria-hidden": true, style: [styles10.icon, { backgroundColor: theme.surface2 }], children: icon }) : null,
887
- /* @__PURE__ */ jsx11(Txt, { variant: "label", role: "heading", style: styles10.center, children: title }),
888
- description ? /* @__PURE__ */ jsx11(Txt, { tone: "secondary", style: styles10.center, children: description }) : null,
889
- action ? /* @__PURE__ */ jsx11(View7, { style: styles10.action, children: action }) : null
1442
+ return /* @__PURE__ */ jsxs10(View9, { ...props, style: [styles12.root, style], children: [
1443
+ icon ? /* @__PURE__ */ jsx13(View9, { "aria-hidden": true, style: [styles12.icon, { backgroundColor: theme.surface2 }], children: icon }) : null,
1444
+ /* @__PURE__ */ jsx13(Txt, { variant: "label", role: "heading", style: styles12.center, children: title }),
1445
+ description ? /* @__PURE__ */ jsx13(Txt, { tone: "secondary", style: styles12.center, children: description }) : null,
1446
+ action ? /* @__PURE__ */ jsx13(View9, { style: styles12.action, children: action }) : null
890
1447
  ] });
891
1448
  }
892
- var styles10 = StyleSheet10.create({
1449
+ var styles12 = StyleSheet12.create({
893
1450
  root: { alignItems: "center", justifyContent: "center", gap: 8, paddingVertical: 40, paddingHorizontal: 24 },
894
1451
  icon: { width: 48, height: 48, borderRadius: 24, alignItems: "center", justifyContent: "center", marginBottom: 4 },
895
1452
  center: { textAlign: "center", maxWidth: 360 },
@@ -897,18 +1454,18 @@ var styles10 = StyleSheet10.create({
897
1454
  });
898
1455
 
899
1456
  // src/native/field.tsx
900
- import * as React9 from "react";
901
- import { StyleSheet as StyleSheet11, Text as Text8, TextInput as TextInput2, View as View8 } from "react-native";
902
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1457
+ import * as React11 from "react";
1458
+ import { StyleSheet as StyleSheet13, Text as Text10, TextInput as TextInput2, View as View10 } from "react-native";
1459
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
903
1460
  function TextField({ label, hint, error, value, defaultValue, onValueChange, disabled, end, inputRef, style, multiline, onFocus, onBlur, ...props }) {
904
1461
  const { theme, radius: radius3 } = useTheme();
905
- const [focused, setFocused] = React9.useState(false);
1462
+ const [focused, setFocused] = React11.useState(false);
906
1463
  const caption = error ?? hint;
907
1464
  const border = error ? theme.danger : focused ? theme.accent : theme.borderDefault;
908
- return /* @__PURE__ */ jsxs9(View8, { style: [styles11.root, disabled ? styles11.disabled : null, style], children: [
909
- /* @__PURE__ */ jsx12(Text8, { style: [styles11.label, { color: theme.textSecondary }], children: label }),
910
- /* @__PURE__ */ jsxs9(View8, { style: [styles11.frame, multiline ? styles11.multiline : null, { borderRadius: radius3.md, borderColor: border, backgroundColor: theme.surface2 }], children: [
911
- /* @__PURE__ */ jsx12(
1465
+ return /* @__PURE__ */ jsxs11(View10, { style: [styles13.root, disabled ? styles13.disabled : null, style], children: [
1466
+ /* @__PURE__ */ jsx14(Text10, { style: [styles13.label, { color: theme.textSecondary }], children: label }),
1467
+ /* @__PURE__ */ jsxs11(View10, { style: [styles13.frame, multiline ? styles13.multiline : null, { borderRadius: radius3.md, borderColor: border, backgroundColor: theme.surface2 }], children: [
1468
+ /* @__PURE__ */ jsx14(
912
1469
  TextInput2,
913
1470
  {
914
1471
  ref: inputRef,
@@ -930,16 +1487,16 @@ function TextField({ label, hint, error, value, defaultValue, onValueChange, dis
930
1487
  setFocused(false);
931
1488
  onBlur?.(event);
932
1489
  },
933
- style: [styles11.input, multiline ? styles11.inputMultiline : null, { color: theme.textPrimary }],
1490
+ style: [styles13.input, multiline ? styles13.inputMultiline : null, { color: theme.textPrimary }],
934
1491
  ...props
935
1492
  }
936
1493
  ),
937
- end ? /* @__PURE__ */ jsx12(View8, { style: styles11.end, children: end }) : null
1494
+ end ? /* @__PURE__ */ jsx14(View10, { style: styles13.end, children: end }) : null
938
1495
  ] }),
939
- caption ? /* @__PURE__ */ jsx12(Text8, { role: error ? "alert" : void 0, "aria-live": error ? "polite" : void 0, style: [styles11.caption, { color: error ? theme.dangerText : theme.textSecondary }], children: caption }) : null
1496
+ caption ? /* @__PURE__ */ jsx14(Text10, { role: error ? "alert" : void 0, "aria-live": error ? "polite" : void 0, style: [styles13.caption, { color: error ? theme.dangerText : theme.textSecondary }], children: caption }) : null
940
1497
  ] });
941
1498
  }
942
- var styles11 = StyleSheet11.create({
1499
+ var styles13 = StyleSheet13.create({
943
1500
  root: { gap: 6, alignSelf: "stretch" },
944
1501
  label: { fontSize: 12, lineHeight: 16, fontWeight: "600" },
945
1502
  frame: { flexDirection: "row", alignItems: "center", minHeight: 44, paddingHorizontal: 12, borderWidth: 1 },
@@ -952,14 +1509,14 @@ var styles11 = StyleSheet11.create({
952
1509
  });
953
1510
 
954
1511
  // src/native/goal-gauge.tsx
955
- import { Animated as Animated4, StyleSheet as StyleSheet12, View as View9 } from "react-native";
1512
+ import { Animated as Animated4, StyleSheet as StyleSheet14, View as View11 } from "react-native";
956
1513
 
957
1514
  // src/native/story-motion.ts
958
- import * as React10 from "react";
1515
+ import * as React12 from "react";
959
1516
  import { AccessibilityInfo as AccessibilityInfo2, Animated as Animated3, Easing } from "react-native";
960
1517
  function useEntrance(animated, delay = 0, duration = 700) {
961
- const [value] = React10.useState(() => new Animated3.Value(animated ? 0 : 1));
962
- React10.useEffect(() => {
1518
+ const [value] = React12.useState(() => new Animated3.Value(animated ? 0 : 1));
1519
+ React12.useEffect(() => {
963
1520
  if (!animated) return;
964
1521
  let cancelled = false;
965
1522
  void AccessibilityInfo2.isReduceMotionEnabled().then((reduce) => {
@@ -975,17 +1532,17 @@ function useEntrance(animated, delay = 0, duration = 700) {
975
1532
  }
976
1533
 
977
1534
  // src/native/goal-gauge.tsx
978
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1535
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
979
1536
  function Cell({ lit, animate, order, animated, arcade }) {
980
1537
  const { theme } = useTheme();
981
1538
  const t = useEntrance(animated && animate, 300 + order * 100, 350);
982
1539
  const spentOpacity = arcade ? 0.14 : 1;
983
1540
  const opacity = !animate ? 1 : lit ? t.interpolate({ inputRange: [0, 1], outputRange: [0.25, 1] }) : t.interpolate({ inputRange: [0, 1], outputRange: [1, arcade ? 0.14 : 1] });
984
1541
  const color = lit || arcade ? theme.accent : theme.surface3;
985
- return /* @__PURE__ */ jsx13(
1542
+ return /* @__PURE__ */ jsx15(
986
1543
  Animated4.View,
987
1544
  {
988
- style: [styles12.cell, arcade ? styles12.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]
1545
+ style: [styles14.cell, arcade ? styles14.cellArcade : null, { backgroundColor: color, opacity: lit || animate ? opacity : spentOpacity }]
989
1546
  }
990
1547
  );
991
1548
  }
@@ -995,8 +1552,8 @@ function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel
995
1552
  const lit = Math.min(total, Math.max(0, Math.round(value ?? total)));
996
1553
  const words = valueText ?? `${lit} / ${total}`;
997
1554
  const arcade = variant === "arcade";
998
- return /* @__PURE__ */ jsxs10(
999
- View9,
1555
+ return /* @__PURE__ */ jsxs12(
1556
+ View11,
1000
1557
  {
1001
1558
  accessible: true,
1002
1559
  role: "meter",
@@ -1006,22 +1563,22 @@ function GoalGauge({ label, segments, value, valueText, mode = "fill", showLabel
1006
1563
  "aria-valuenow": lit,
1007
1564
  "aria-valuetext": words,
1008
1565
  ...props,
1009
- style: [styles12.root, style],
1566
+ style: [styles14.root, style],
1010
1567
  children: [
1011
- showLabel ? /* @__PURE__ */ jsxs10(View9, { "aria-hidden": true, style: [styles12.head, arcade ? styles12.headArcade : null], children: [
1012
- /* @__PURE__ */ jsx13(Txt, { variant: arcade ? "mono" : "caption", tone: "secondary", children: arcade ? label.toUpperCase() : label }),
1013
- arcade ? null : /* @__PURE__ */ jsx13(Txt, { variant: "caption", children: words })
1568
+ showLabel ? /* @__PURE__ */ jsxs12(View11, { "aria-hidden": true, style: [styles14.head, arcade ? styles14.headArcade : null], children: [
1569
+ /* @__PURE__ */ jsx15(Txt, { variant: arcade ? "mono" : "caption", tone: "secondary", children: arcade ? label.toUpperCase() : label }),
1570
+ arcade ? null : /* @__PURE__ */ jsx15(Txt, { variant: "caption", children: words })
1014
1571
  ] }) : null,
1015
- /* @__PURE__ */ jsx13(View9, { "aria-hidden": true, style: [styles12.cells, arcade ? [styles12.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null], children: Array.from({ length: total }, (_, i) => {
1572
+ /* @__PURE__ */ jsx15(View11, { "aria-hidden": true, style: [styles14.cells, arcade ? [styles14.cellsArcade, { borderColor: theme.borderSubtle, backgroundColor: theme.surface1 }] : null], children: Array.from({ length: total }, (_, i) => {
1016
1573
  const on = i < lit;
1017
1574
  const animate = mode === "fill" ? on : !on;
1018
- return /* @__PURE__ */ jsx13(Cell, { lit: on, animate, order: mode === "fill" ? i : i - lit, animated, arcade }, i);
1575
+ return /* @__PURE__ */ jsx15(Cell, { lit: on, animate, order: mode === "fill" ? i : i - lit, animated, arcade }, i);
1019
1576
  }) })
1020
1577
  ]
1021
1578
  }
1022
1579
  );
1023
1580
  }
1024
- var styles12 = StyleSheet12.create({
1581
+ var styles14 = StyleSheet14.create({
1025
1582
  root: { alignSelf: "stretch", gap: 8 },
1026
1583
  head: { flexDirection: "row", justifyContent: "space-between", alignItems: "baseline", gap: 12 },
1027
1584
  headArcade: { justifyContent: "center" },
@@ -1032,8 +1589,8 @@ var styles12 = StyleSheet12.create({
1032
1589
  });
1033
1590
 
1034
1591
  // src/native/KrizakaMark.tsx
1035
- import { View as View10 } from "react-native";
1036
- import Svg3, { Circle, Defs as Defs2, G as Group, LinearGradient as LinearGradient2, Path as Path2, RadialGradient, Stop as Stop2 } from "react-native-svg";
1592
+ import { View as View12 } from "react-native";
1593
+ import Svg4, { Circle, Defs as Defs2, G as Group, LinearGradient as LinearGradient2, Path as Path3, RadialGradient, Stop as Stop2 } from "react-native-svg";
1037
1594
 
1038
1595
  // src/marks/krizaka-geometry.ts
1039
1596
  var KRIZAKA = {
@@ -1055,13 +1612,13 @@ var KRIZAKA = {
1055
1612
  };
1056
1613
 
1057
1614
  // src/native/mark-motion.ts
1058
- import { useEffect as useEffect5, useState as useState10 } from "react";
1615
+ import { useEffect as useEffect6, useState as useState12 } from "react";
1059
1616
  import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated5, Easing as Easing2 } from "react-native";
1060
1617
  var markA11y = (title) => title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
1061
1618
  function useMarkMotion(size, animated, spinMs = 3e4) {
1062
- const [spin] = useState10(() => new Animated5.Value(0));
1063
- const [pulse] = useState10(() => new Animated5.Value(0));
1064
- useEffect5(() => {
1619
+ const [spin] = useState12(() => new Animated5.Value(0));
1620
+ const [pulse] = useState12(() => new Animated5.Value(0));
1621
+ useEffect6(() => {
1065
1622
  if (!animated) return;
1066
1623
  let loops = [];
1067
1624
  let cancelled = false;
@@ -1092,39 +1649,39 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
1092
1649
  }
1093
1650
 
1094
1651
  // src/native/KrizakaMark.tsx
1095
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1652
+ import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1096
1653
  function KrizakaMark({ size = 48, animated = true, title, neutral }) {
1097
1654
  const { theme } = useTheme();
1098
1655
  const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1099
1656
  const id = useSvgId("kzm");
1100
1657
  const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
1101
1658
  const stroke = neutral ?? theme.textMuted;
1102
- const blue = /* @__PURE__ */ jsx14(LinearGradient2, { id: `${id}b`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1 + KRIZAKA.offset, y1: KRIZAKA.blue.y1 + KRIZAKA.offset, x2: KRIZAKA.blue.x2 + KRIZAKA.offset, y2: KRIZAKA.blue.y2 + KRIZAKA.offset, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx14(Stop2, { offset, stopColor: color }, offset)) });
1103
- const dot = (c) => /* @__PURE__ */ jsxs11(Fragment2, { children: [
1104
- /* @__PURE__ */ jsx14(Circle, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
1105
- /* @__PURE__ */ jsx14(Circle, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
1659
+ const blue = /* @__PURE__ */ jsx16(LinearGradient2, { id: `${id}b`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1 + KRIZAKA.offset, y1: KRIZAKA.blue.y1 + KRIZAKA.offset, x2: KRIZAKA.blue.x2 + KRIZAKA.offset, y2: KRIZAKA.blue.y2 + KRIZAKA.offset, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx16(Stop2, { offset, stopColor: color }, offset)) });
1660
+ const dot = (c) => /* @__PURE__ */ jsxs13(Fragment2, { children: [
1661
+ /* @__PURE__ */ jsx16(Circle, { cx: c.cx, cy: c.cy, r: c.r, fill: `url(#${id}b)` }),
1662
+ /* @__PURE__ */ jsx16(Circle, { cx: c.cx, cy: c.cy, r: c.inner, fill: KRIZAKA.highlight })
1106
1663
  ] });
1107
- return /* @__PURE__ */ jsxs11(View10, { style: { width: size, height: size }, ...markA11y(title), children: [
1108
- /* @__PURE__ */ jsxs11(Svg3, { viewBox, style: layer, children: [
1109
- /* @__PURE__ */ jsxs11(Defs2, { children: [
1110
- /* @__PURE__ */ jsxs11(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1111
- /* @__PURE__ */ jsx14(Stop2, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
1112
- /* @__PURE__ */ jsx14(Stop2, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
1664
+ return /* @__PURE__ */ jsxs13(View12, { style: { width: size, height: size }, ...markA11y(title), children: [
1665
+ /* @__PURE__ */ jsxs13(Svg4, { viewBox, style: layer, children: [
1666
+ /* @__PURE__ */ jsxs13(Defs2, { children: [
1667
+ /* @__PURE__ */ jsxs13(RadialGradient, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1668
+ /* @__PURE__ */ jsx16(Stop2, { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
1669
+ /* @__PURE__ */ jsx16(Stop2, { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: 0 })
1113
1670
  ] }),
1114
- /* @__PURE__ */ jsxs11(LinearGradient2, { id: `${id}i`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1 + KRIZAKA.offset, y1: KRIZAKA.ink.y1 + KRIZAKA.offset, x2: KRIZAKA.ink.x2 + KRIZAKA.offset, y2: KRIZAKA.ink.y2 + KRIZAKA.offset, children: [
1115
- /* @__PURE__ */ jsx14(Stop2, { offset: "0%", stopColor: theme.textSecondary }),
1116
- /* @__PURE__ */ jsx14(Stop2, { offset: "100%", stopColor: theme.textPrimary })
1671
+ /* @__PURE__ */ jsxs13(LinearGradient2, { id: `${id}i`, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1 + KRIZAKA.offset, y1: KRIZAKA.ink.y1 + KRIZAKA.offset, x2: KRIZAKA.ink.x2 + KRIZAKA.offset, y2: KRIZAKA.ink.y2 + KRIZAKA.offset, children: [
1672
+ /* @__PURE__ */ jsx16(Stop2, { offset: "0%", stopColor: theme.textSecondary }),
1673
+ /* @__PURE__ */ jsx16(Stop2, { offset: "100%", stopColor: theme.textPrimary })
1117
1674
  ] }),
1118
1675
  blue
1119
1676
  ] }),
1120
- size >= 48 ? /* @__PURE__ */ jsx14(Circle, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
1121
- /* @__PURE__ */ jsx14(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
1122
- /* @__PURE__ */ jsx14(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx14(Path2, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
1677
+ size >= 48 ? /* @__PURE__ */ jsx16(Circle, { cx: 200, cy: 200, r: 190, fill: `url(#${id}g)` }) : null,
1678
+ /* @__PURE__ */ jsx16(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
1679
+ /* @__PURE__ */ jsx16(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx16(Path3, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
1123
1680
  ] }),
1124
- /* @__PURE__ */ jsx14(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx14(Svg3, { viewBox, style: layer, children: /* @__PURE__ */ jsx14(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1125
- /* @__PURE__ */ jsx14(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs11(Svg3, { viewBox, style: layer, children: [
1126
- /* @__PURE__ */ jsx14(Defs2, { children: blue }),
1127
- /* @__PURE__ */ jsxs11(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
1681
+ /* @__PURE__ */ jsx16(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx16(Svg4, { viewBox, style: layer, children: /* @__PURE__ */ jsx16(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1682
+ /* @__PURE__ */ jsx16(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs13(Svg4, { viewBox, style: layer, children: [
1683
+ /* @__PURE__ */ jsx16(Defs2, { children: blue }),
1684
+ /* @__PURE__ */ jsxs13(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
1128
1685
  dot(KRIZAKA.node),
1129
1686
  dot(KRIZAKA.core)
1130
1687
  ] })
@@ -1133,13 +1690,13 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
1133
1690
  }
1134
1691
 
1135
1692
  // src/native/mascot-state.tsx
1136
- import * as React12 from "react";
1137
- import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated7, Easing as Easing4, StyleSheet as StyleSheet13, View as View12 } from "react-native";
1693
+ import * as React14 from "react";
1694
+ import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated7, Easing as Easing4, StyleSheet as StyleSheet15, View as View14 } from "react-native";
1138
1695
 
1139
1696
  // src/native/mascots.tsx
1140
- import { useEffect as useEffect6, useState as useState11 } from "react";
1141
- import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated6, Easing as Easing3, View as View11 } from "react-native";
1142
- import Svg4, { Circle as Circle2, Defs as Defs3, Ellipse, G, LinearGradient as LinearGradient3, Path as Path3, Rect as Rect2, Stop as Stop3 } from "react-native-svg";
1697
+ import { useEffect as useEffect7, useState as useState13 } from "react";
1698
+ import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated6, Easing as Easing3, View as View13 } from "react-native";
1699
+ import Svg5, { Circle as Circle2, Defs as Defs3, Ellipse, G, LinearGradient as LinearGradient3, Path as Path4, Rect as Rect2, Stop as Stop3 } from "react-native-svg";
1143
1700
 
1144
1701
  // src/mascots/geometry.ts
1145
1702
  var mirror = (d) => d.replace(/(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/g, (_, x, y) => `${120 - Number(x)} ${y}`);
@@ -1297,10 +1854,10 @@ var SHADE = "#000000";
1297
1854
  var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
1298
1855
 
1299
1856
  // src/native/mascots.tsx
1300
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1857
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1301
1858
  function useBob(animated) {
1302
- const [y] = useState11(() => new Animated6.Value(0));
1303
- useEffect6(() => {
1859
+ const [y] = useState13(() => new Animated6.Value(0));
1860
+ useEffect7(() => {
1304
1861
  if (!animated) return;
1305
1862
  let loop;
1306
1863
  let cancelled = false;
@@ -1331,56 +1888,56 @@ function Mascot({ bird = "owl", mood = "welcome", tone: tone2 = "brand", size =
1331
1888
  const look3 = mood === "thinking" ? 1.4 : 0;
1332
1889
  const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
1333
1890
  const [wl, wr] = g.wings;
1334
- return /* @__PURE__ */ jsx15(View11, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx15(Animated6.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs12(Svg4, { width: size, height: size, viewBox: "0 0 120 120", children: [
1335
- /* @__PURE__ */ jsx15(Defs3, { children: /* @__PURE__ */ jsxs12(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
1336
- /* @__PURE__ */ jsx15(Stop3, { offset: "0%", stopColor: p.from }),
1337
- /* @__PURE__ */ jsx15(Stop3, { offset: "100%", stopColor: p.to })
1891
+ return /* @__PURE__ */ jsx17(View13, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx17(Animated6.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs14(Svg5, { width: size, height: size, viewBox: "0 0 120 120", children: [
1892
+ /* @__PURE__ */ jsx17(Defs3, { children: /* @__PURE__ */ jsxs14(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
1893
+ /* @__PURE__ */ jsx17(Stop3, { offset: "0%", stopColor: p.from }),
1894
+ /* @__PURE__ */ jsx17(Stop3, { offset: "100%", stopColor: p.to })
1338
1895
  ] }) }),
1339
- /* @__PURE__ */ jsx15(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
1340
- mood === "empty" && /* @__PURE__ */ jsx15(Path3, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
1341
- g.legs.map((d) => /* @__PURE__ */ jsx15(Path3, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
1342
- g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx15(Path3, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx15(Path3, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
1343
- g.parcel?.map((d, i) => /* @__PURE__ */ jsx15(Path3, { d, fill: PARCEL[i], ...line }, d)),
1344
- /* @__PURE__ */ jsx15(Path3, { d: g.body, fill: body, ...line }),
1345
- /* @__PURE__ */ jsx15(Path3, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
1896
+ /* @__PURE__ */ jsx17(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
1897
+ mood === "empty" && /* @__PURE__ */ jsx17(Path4, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
1898
+ g.legs.map((d) => /* @__PURE__ */ jsx17(Path4, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
1899
+ g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx17(Path4, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx17(Path4, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
1900
+ g.parcel?.map((d, i) => /* @__PURE__ */ jsx17(Path4, { d, fill: PARCEL[i], ...line }, d)),
1901
+ /* @__PURE__ */ jsx17(Path4, { d: g.body, fill: body, ...line }),
1902
+ /* @__PURE__ */ jsx17(Path4, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
1346
1903
  [wl, wr].map((w, i) => {
1347
1904
  const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
1348
- return /* @__PURE__ */ jsxs12(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
1349
- /* @__PURE__ */ jsx15(Path3, { d: w.d, fill: p.wing, ...line }),
1350
- /* @__PURE__ */ jsx15(Path3, { d: w.d, fill: SHADE, opacity: 0.16 })
1905
+ return /* @__PURE__ */ jsxs14(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
1906
+ /* @__PURE__ */ jsx17(Path4, { d: w.d, fill: p.wing, ...line }),
1907
+ /* @__PURE__ */ jsx17(Path4, { d: w.d, fill: SHADE, opacity: 0.16 })
1351
1908
  ] }, i);
1352
1909
  }),
1353
- g.neck && /* @__PURE__ */ jsx15(Path3, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
1354
- g.head.r > 0 && /* @__PURE__ */ jsx15(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
1355
- g.details.map((d) => /* @__PURE__ */ jsx15(Path3, { d, fill: p.detail, ...line }, d)),
1356
- g.visor && /* @__PURE__ */ jsx15(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
1910
+ g.neck && /* @__PURE__ */ jsx17(Path4, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
1911
+ g.head.r > 0 && /* @__PURE__ */ jsx17(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
1912
+ g.details.map((d) => /* @__PURE__ */ jsx17(Path4, { d, fill: p.detail, ...line }, d)),
1913
+ g.visor && /* @__PURE__ */ jsx17(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
1357
1914
  g.eyes.at.map(
1358
- (at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs12(G, { children: [
1359
- /* @__PURE__ */ jsx15(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1360
- /* @__PURE__ */ jsx15(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
1361
- /* @__PURE__ */ jsx15(Path3, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
1362
- ] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx15(Path3, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs12(G, { children: [
1363
- g.eyes.white > 0 && /* @__PURE__ */ jsx15(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1364
- /* @__PURE__ */ jsx15(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
1915
+ (at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs14(G, { children: [
1916
+ /* @__PURE__ */ jsx17(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1917
+ /* @__PURE__ */ jsx17(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
1918
+ /* @__PURE__ */ jsx17(Path4, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
1919
+ ] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx17(Path4, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs14(G, { children: [
1920
+ g.eyes.white > 0 && /* @__PURE__ */ jsx17(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
1921
+ /* @__PURE__ */ jsx17(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
1365
1922
  ] }, i)
1366
1923
  ),
1367
- g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx15(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
1368
- mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx15(Path3, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
1369
- /* @__PURE__ */ jsx15(Path3, { d: g.beak, fill: p.beak, ...line }),
1370
- mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx15(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
1371
- (mood === "success" || mood === "error") && /* @__PURE__ */ jsx15(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
1372
- mood === "success" && /* @__PURE__ */ jsx15(Path3, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
1373
- mood === "error" && /* @__PURE__ */ jsx15(Path3, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
1374
- mood === "error" && /* @__PURE__ */ jsx15(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
1924
+ g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx17(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
1925
+ mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx17(Path4, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
1926
+ /* @__PURE__ */ jsx17(Path4, { d: g.beak, fill: p.beak, ...line }),
1927
+ mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx17(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
1928
+ (mood === "success" || mood === "error") && /* @__PURE__ */ jsx17(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
1929
+ mood === "success" && /* @__PURE__ */ jsx17(Path4, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
1930
+ mood === "error" && /* @__PURE__ */ jsx17(Path4, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
1931
+ mood === "error" && /* @__PURE__ */ jsx17(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
1375
1932
  ] }) }) });
1376
1933
  }
1377
1934
 
1378
1935
  // src/native/mascot-state.tsx
1379
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1936
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1380
1937
  var SIZE = { sm: 64, md: 96, lg: 128 };
1381
1938
  function useArrival(animated) {
1382
- const [value] = React12.useState(() => new Animated7.Value(animated ? 0 : 1));
1383
- React12.useEffect(() => {
1939
+ const [value] = React14.useState(() => new Animated7.Value(animated ? 0 : 1));
1940
+ React14.useEffect(() => {
1384
1941
  if (!animated) return;
1385
1942
  let cancelled = false;
1386
1943
  void AccessibilityInfo5.isReduceMotionEnabled().then((reduce) => {
@@ -1397,30 +1954,30 @@ function useArrival(animated) {
1397
1954
  function MascotState({ bird = "owl", mood = "empty", title, description, action, size = "md", layout = "stacked", tone: tone2, animated = true, style, ...props }) {
1398
1955
  const opacity = useArrival(animated);
1399
1956
  const inline = layout === "inline";
1400
- return /* @__PURE__ */ jsxs13(
1957
+ return /* @__PURE__ */ jsxs15(
1401
1958
  Animated7.View,
1402
1959
  {
1403
1960
  role: mood === "error" ? "alert" : "status",
1404
1961
  accessibilityLiveRegion: mood === "error" ? "assertive" : "polite",
1405
1962
  "aria-busy": mood === "thinking" ? true : void 0,
1406
1963
  ...props,
1407
- style: [inline ? styles13.inline : styles13.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
1964
+ style: [inline ? styles15.inline : styles15.stacked, { opacity, transform: [{ translateY: opacity.interpolate({ inputRange: [0, 1], outputRange: [6, 0] }) }] }, style],
1408
1965
  children: [
1409
- /* @__PURE__ */ jsx16(Mascot, { bird, mood, tone: tone2, size: SIZE[size], animated }),
1410
- /* @__PURE__ */ jsxs13(View12, { style: inline ? styles13.wordsInline : styles13.words, children: [
1411
- /* @__PURE__ */ jsx16(Txt, { variant: "label", role: "heading", style: inline ? null : styles13.center, children: title }),
1412
- description ? /* @__PURE__ */ jsx16(Txt, { tone: "secondary", style: inline ? null : styles13.center, children: description }) : null,
1413
- action ? /* @__PURE__ */ jsx16(View12, { style: [styles13.action, inline ? null : styles13.actionCentred], children: action }) : null
1966
+ /* @__PURE__ */ jsx18(Mascot, { bird, mood, tone: tone2, size: SIZE[size], animated }),
1967
+ /* @__PURE__ */ jsxs15(View14, { style: inline ? styles15.wordsInline : styles15.words, children: [
1968
+ /* @__PURE__ */ jsx18(Txt, { variant: "label", role: "heading", style: inline ? null : styles15.center, children: title }),
1969
+ description ? /* @__PURE__ */ jsx18(Txt, { tone: "secondary", style: inline ? null : styles15.center, children: description }) : null,
1970
+ action ? /* @__PURE__ */ jsx18(View14, { style: [styles15.action, inline ? null : styles15.actionCentred], children: action }) : null
1414
1971
  ] })
1415
1972
  ]
1416
1973
  }
1417
1974
  );
1418
1975
  }
1419
- var ErrorState = (props) => /* @__PURE__ */ jsx16(MascotState, { mood: "error", ...props });
1420
- var SuccessState = (props) => /* @__PURE__ */ jsx16(MascotState, { mood: "success", ...props });
1421
- var LoadingState = (props) => /* @__PURE__ */ jsx16(MascotState, { mood: "thinking", ...props });
1422
- var WelcomeState = (props) => /* @__PURE__ */ jsx16(MascotState, { mood: "welcome", ...props });
1423
- var styles13 = StyleSheet13.create({
1976
+ var ErrorState = (props) => /* @__PURE__ */ jsx18(MascotState, { mood: "error", ...props });
1977
+ var SuccessState = (props) => /* @__PURE__ */ jsx18(MascotState, { mood: "success", ...props });
1978
+ var LoadingState = (props) => /* @__PURE__ */ jsx18(MascotState, { mood: "thinking", ...props });
1979
+ var WelcomeState = (props) => /* @__PURE__ */ jsx18(MascotState, { mood: "welcome", ...props });
1980
+ var styles15 = StyleSheet15.create({
1424
1981
  stacked: { alignItems: "center", justifyContent: "center", gap: 12, paddingVertical: 40, paddingHorizontal: 24 },
1425
1982
  inline: { flexDirection: "row", alignItems: "center", gap: 16 },
1426
1983
  words: { alignItems: "center", gap: 6 },
@@ -1431,8 +1988,8 @@ var styles13 = StyleSheet13.create({
1431
1988
  });
1432
1989
 
1433
1990
  // src/native/OrazakaMark.tsx
1434
- import { View as View13 } from "react-native";
1435
- import Svg5, { Circle as Circle3, Defs as Defs4, LinearGradient as LinearGradient4, Path as Path4, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
1991
+ import { View as View15 } from "react-native";
1992
+ import Svg6, { Circle as Circle3, Defs as Defs4, LinearGradient as LinearGradient4, Path as Path5, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
1436
1993
 
1437
1994
  // src/marks/orazaka-geometry.ts
1438
1995
  var orange = marks.orazaka[marks.orazaka.length - 1][1];
@@ -1461,41 +2018,41 @@ var ORAZAKA = {
1461
2018
  };
1462
2019
 
1463
2020
  // src/native/OrazakaMark.tsx
1464
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
2021
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1465
2022
  function OrazakaMark({ size = 48, animated = true, title, neutral }) {
1466
2023
  const { theme } = useTheme();
1467
2024
  const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1468
2025
  const id = useSvgId("ozm");
1469
2026
  const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
1470
2027
  const stroke = neutral ?? theme.textMuted;
1471
- const gradient = /* @__PURE__ */ jsx17(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__ */ jsx17(Stop4, { offset, stopColor: color }, offset)) });
2028
+ const gradient = /* @__PURE__ */ jsx19(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__ */ jsx19(Stop4, { offset, stopColor: color }, offset)) });
1472
2029
  const fill = `url(#${id}a)`;
1473
- return /* @__PURE__ */ jsxs14(View13, { style: { width: size, height: size }, ...markA11y(title), children: [
1474
- /* @__PURE__ */ jsxs14(Svg5, { viewBox, style: layer, children: [
1475
- /* @__PURE__ */ jsx17(Defs4, { children: /* @__PURE__ */ jsxs14(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1476
- /* @__PURE__ */ jsx17(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
1477
- /* @__PURE__ */ jsx17(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
2030
+ return /* @__PURE__ */ jsxs16(View15, { style: { width: size, height: size }, ...markA11y(title), children: [
2031
+ /* @__PURE__ */ jsxs16(Svg6, { viewBox, style: layer, children: [
2032
+ /* @__PURE__ */ jsx19(Defs4, { children: /* @__PURE__ */ jsxs16(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
2033
+ /* @__PURE__ */ jsx19(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
2034
+ /* @__PURE__ */ jsx19(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
1478
2035
  ] }) }),
1479
- size >= 48 ? /* @__PURE__ */ jsx17(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
1480
- /* @__PURE__ */ jsx17(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
1481
- /* @__PURE__ */ jsx17(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
2036
+ size >= 48 ? /* @__PURE__ */ jsx19(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
2037
+ /* @__PURE__ */ jsx19(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
2038
+ /* @__PURE__ */ jsx19(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
1482
2039
  ] }),
1483
- /* @__PURE__ */ jsx17(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs14(Svg5, { viewBox, style: layer, children: [
1484
- /* @__PURE__ */ jsx17(Defs4, { children: gradient }),
1485
- ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx17(Path4, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
2040
+ /* @__PURE__ */ jsx19(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs16(Svg6, { viewBox, style: layer, children: [
2041
+ /* @__PURE__ */ jsx19(Defs4, { children: gradient }),
2042
+ ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx19(Path5, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
1486
2043
  ] }) }),
1487
- /* @__PURE__ */ jsx17(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs14(Svg5, { viewBox, style: layer, children: [
1488
- /* @__PURE__ */ jsx17(Defs4, { children: gradient }),
1489
- /* @__PURE__ */ jsx17(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
1490
- /* @__PURE__ */ jsx17(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
2044
+ /* @__PURE__ */ jsx19(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs16(Svg6, { viewBox, style: layer, children: [
2045
+ /* @__PURE__ */ jsx19(Defs4, { children: gradient }),
2046
+ /* @__PURE__ */ jsx19(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
2047
+ /* @__PURE__ */ jsx19(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
1491
2048
  ] }) })
1492
2049
  ] });
1493
2050
  }
1494
2051
 
1495
2052
  // src/native/OrochiaMark.tsx
1496
- import { useEffect as useEffect8, useState as useState13 } from "react";
1497
- import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated8, Easing as Easing5, View as View14 } from "react-native";
1498
- import Svg6, { Circle as Circle4, Defs as Defs5, Ellipse as Ellipse2, G as Group2, LinearGradient as LinearGradient5, Path as Path5, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
2053
+ import { useEffect as useEffect9, useState as useState15 } from "react";
2054
+ import { AccessibilityInfo as AccessibilityInfo6, Animated as Animated8, Easing as Easing5, View as View16 } from "react-native";
2055
+ import Svg7, { Circle as Circle4, Defs as Defs5, Ellipse as Ellipse2, G as Group2, LinearGradient as LinearGradient5, Path as Path6, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
1499
2056
 
1500
2057
  // src/marks/orochia-geometry.ts
1501
2058
  var OROCHIA = {
@@ -1522,14 +2079,14 @@ var OROCHIA = {
1522
2079
  };
1523
2080
 
1524
2081
  // src/native/OrochiaMark.tsx
1525
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
2082
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1526
2083
  var CENTER = OROCHIA.offset + 180;
1527
2084
  function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }) {
1528
2085
  const { theme } = useTheme();
1529
2086
  const neutral = neutralProp ?? theme.textMuted;
1530
- const [spin] = useState13(() => new Animated8.Value(0));
1531
- const [pulse] = useState13(() => new Animated8.Value(0));
1532
- useEffect8(() => {
2087
+ const [spin] = useState15(() => new Animated8.Value(0));
2088
+ const [pulse] = useState15(() => new Animated8.Value(0));
2089
+ useEffect9(() => {
1533
2090
  if (!animated) return;
1534
2091
  let loops = [];
1535
2092
  let cancelled = false;
@@ -1554,44 +2111,44 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
1554
2111
  const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
1555
2112
  const layer = { position: "absolute", width: size, height: size };
1556
2113
  const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
1557
- const bodyGradient = /* @__PURE__ */ jsx18(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__ */ jsx18(Stop5, { offset, stopColor: color }, offset)) });
1558
- return /* @__PURE__ */ jsxs15(View14, { style: { width: size, height: size }, ...a11y, children: [
1559
- /* @__PURE__ */ jsxs15(Svg6, { viewBox, style: layer, children: [
1560
- /* @__PURE__ */ jsx18(Defs5, { children: /* @__PURE__ */ jsxs15(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
1561
- /* @__PURE__ */ jsx18(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
1562
- /* @__PURE__ */ jsx18(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
2114
+ const bodyGradient = /* @__PURE__ */ jsx20(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__ */ jsx20(Stop5, { offset, stopColor: color }, offset)) });
2115
+ return /* @__PURE__ */ jsxs17(View16, { style: { width: size, height: size }, ...a11y, children: [
2116
+ /* @__PURE__ */ jsxs17(Svg7, { viewBox, style: layer, children: [
2117
+ /* @__PURE__ */ jsx20(Defs5, { children: /* @__PURE__ */ jsxs17(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
2118
+ /* @__PURE__ */ jsx20(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
2119
+ /* @__PURE__ */ jsx20(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
1563
2120
  ] }) }),
1564
- /* @__PURE__ */ jsx18(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
1565
- /* @__PURE__ */ jsx18(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
2121
+ /* @__PURE__ */ jsx20(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
2122
+ /* @__PURE__ */ jsx20(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
1566
2123
  ] }),
1567
- /* @__PURE__ */ jsx18(Animated8.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx18(Svg6, { viewBox, style: layer, children: /* @__PURE__ */ jsx18(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1568
- /* @__PURE__ */ jsxs15(Svg6, { viewBox, style: layer, children: [
1569
- /* @__PURE__ */ jsx18(Defs5, { children: bodyGradient }),
1570
- /* @__PURE__ */ jsxs15(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1571
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
1572
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
1573
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
1574
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
1575
- /* @__PURE__ */ jsx18(Ellipse2, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
1576
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
2124
+ /* @__PURE__ */ jsx20(Animated8.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx20(Svg7, { viewBox, style: layer, children: /* @__PURE__ */ jsx20(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
2125
+ /* @__PURE__ */ jsxs17(Svg7, { viewBox, style: layer, children: [
2126
+ /* @__PURE__ */ jsx20(Defs5, { children: bodyGradient }),
2127
+ /* @__PURE__ */ jsxs17(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
2128
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
2129
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
2130
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
2131
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
2132
+ /* @__PURE__ */ jsx20(Ellipse2, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
2133
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
1577
2134
  ] })
1578
2135
  ] }),
1579
- /* @__PURE__ */ jsx18(Animated8.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs15(Svg6, { viewBox, style: layer, children: [
1580
- /* @__PURE__ */ jsx18(Defs5, { children: /* @__PURE__ */ jsx18(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx18(Stop5, { offset, stopColor: color }, offset)) }) }),
1581
- /* @__PURE__ */ jsxs15(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1582
- /* @__PURE__ */ jsx18(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
1583
- /* @__PURE__ */ jsx18(Path5, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
2136
+ /* @__PURE__ */ jsx20(Animated8.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs17(Svg7, { viewBox, style: layer, children: [
2137
+ /* @__PURE__ */ jsx20(Defs5, { children: /* @__PURE__ */ jsx20(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx20(Stop5, { offset, stopColor: color }, offset)) }) }),
2138
+ /* @__PURE__ */ jsxs17(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
2139
+ /* @__PURE__ */ jsx20(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
2140
+ /* @__PURE__ */ jsx20(Path6, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
1584
2141
  ] })
1585
2142
  ] }) })
1586
2143
  ] });
1587
2144
  }
1588
2145
 
1589
2146
  // src/native/pagination.tsx
1590
- import { Pressable as Pressable5, StyleSheet as StyleSheet14, Text as Text9, View as View15 } from "react-native";
1591
- import Svg7, { Path as Path6 } from "react-native-svg";
1592
- import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1593
- function Chevron({ direction, color }) {
1594
- return /* @__PURE__ */ jsx19(Svg7, { 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__ */ jsx19(Path6, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
2147
+ import { Pressable as Pressable7, StyleSheet as StyleSheet16, Text as Text11, View as View17 } from "react-native";
2148
+ import Svg8, { Path as Path7 } from "react-native-svg";
2149
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
2150
+ function Chevron2({ direction, color }) {
2151
+ return /* @__PURE__ */ jsx21(Svg8, { 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__ */ jsx21(Path7, { d: direction === "left" ? "m15 6-6 6 6 6" : "m9 6 6 6-6 6" }) });
1595
2152
  }
1596
2153
  function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, onPrevious, onNext, status, disabled, labels, style }) {
1597
2154
  const { theme, radius: radius3 } = useTheme();
@@ -1600,8 +2157,8 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
1600
2157
  const current = Math.min(Math.max(1, page), count);
1601
2158
  const canPrevious = !disabled && (paged ? current > 1 : Boolean(hasPrevious));
1602
2159
  const canNext = !disabled && (paged ? current < count : Boolean(hasNext));
1603
- const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx19(
1604
- Pressable5,
2160
+ const button = (direction, enabled, onPress, label) => /* @__PURE__ */ jsx21(
2161
+ Pressable7,
1605
2162
  {
1606
2163
  role: "button",
1607
2164
  "aria-label": label,
@@ -1610,29 +2167,29 @@ function Pagination({ page = 1, pageCount, onPageChange, hasPrevious, hasNext, o
1610
2167
  hitSlop: 6,
1611
2168
  onPress,
1612
2169
  style: ({ pressed }) => [
1613
- styles14.button,
2170
+ styles16.button,
1614
2171
  { borderRadius: radius3.sm, borderColor: theme.borderDefault, backgroundColor: theme.surface1, opacity: enabled ? pressed ? 0.8 : 1 : 0.4 }
1615
2172
  ],
1616
- children: /* @__PURE__ */ jsx19(Chevron, { direction, color: theme.textPrimary })
2173
+ children: /* @__PURE__ */ jsx21(Chevron2, { direction, color: theme.textPrimary })
1617
2174
  }
1618
2175
  );
1619
2176
  const text = status ?? (paged ? labels.compact(current, count) : null);
1620
- return /* @__PURE__ */ jsxs16(View15, { role: "navigation", style: [styles14.row, style], children: [
2177
+ return /* @__PURE__ */ jsxs18(View17, { role: "navigation", style: [styles16.row, style], children: [
1621
2178
  button("left", canPrevious, paged ? () => onPageChange?.(current - 1) : onPrevious, labels.previous),
1622
- text ? /* @__PURE__ */ jsx19(Text9, { "aria-live": "polite", style: [styles14.status, { color: theme.textSecondary }], children: text }) : null,
2179
+ text ? /* @__PURE__ */ jsx21(Text11, { "aria-live": "polite", style: [styles16.status, { color: theme.textSecondary }], children: text }) : null,
1623
2180
  button("right", canNext, paged ? () => onPageChange?.(current + 1) : onNext, labels.next)
1624
2181
  ] });
1625
2182
  }
1626
- var styles14 = StyleSheet14.create({
2183
+ var styles16 = StyleSheet16.create({
1627
2184
  row: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 12 },
1628
- button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet14.hairlineWidth },
2185
+ button: { width: 44, height: 44, alignItems: "center", justifyContent: "center", borderWidth: StyleSheet16.hairlineWidth },
1629
2186
  status: { fontSize: 13, fontWeight: "600", fontVariant: ["tabular-nums"] }
1630
2187
  });
1631
2188
 
1632
2189
  // src/native/phoenix.tsx
1633
- import { useEffect as useEffect9, useState as useState14 } from "react";
1634
- import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated9, Easing as Easing6, View as View16 } from "react-native";
1635
- import Svg8, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient6, Path as Path7, RadialGradient as RadialGradient4, Stop as Stop6 } from "react-native-svg";
2190
+ import { useEffect as useEffect10, useState as useState16 } from "react";
2191
+ import { AccessibilityInfo as AccessibilityInfo7, Animated as Animated9, Easing as Easing6, View as View18 } from "react-native";
2192
+ import Svg9, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient6, Path as Path8, RadialGradient as RadialGradient4, Stop as Stop6 } from "react-native-svg";
1636
2193
 
1637
2194
  // src/mascots/phoenix-geometry.ts
1638
2195
  var PHOENIX = {
@@ -1655,10 +2212,10 @@ var PHOENIX_PALETTES = {
1655
2212
  };
1656
2213
 
1657
2214
  // src/native/phoenix.tsx
1658
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
2215
+ import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
1659
2216
  function useFloat(animated) {
1660
- const [y] = useState14(() => new Animated9.Value(0));
1661
- useEffect9(() => {
2217
+ const [y] = useState16(() => new Animated9.Value(0));
2218
+ useEffect10(() => {
1662
2219
  if (!animated) return;
1663
2220
  let loop;
1664
2221
  let cancelled = false;
@@ -1680,36 +2237,36 @@ function Phoenix({ tone: tone2 = "own", size = 120, animated = true, title, styl
1680
2237
  const id = useSvgId("kzp");
1681
2238
  const y = useFloat(animated);
1682
2239
  const p = tone2 === "brand" ? { left: [theme.accent2, theme.accent], right: [theme.accent, theme.accent2], core: ["#ffffff", theme.accent], body: theme.surface3, edge: theme.borderStrong, crest: theme.accent } : PHOENIX_PALETTES.own;
1683
- return /* @__PURE__ */ jsx20(View16, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx20(Animated9.View, { style: { transform: [{ translateY: y }] }, children: /* @__PURE__ */ jsxs17(Svg8, { width: size, height: size, viewBox: "0 0 120 120", children: [
1684
- /* @__PURE__ */ jsxs17(Defs6, { children: [
1685
- /* @__PURE__ */ jsxs17(LinearGradient6, { id: `${id}l`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
1686
- /* @__PURE__ */ jsx20(Stop6, { offset: "0%", stopColor: p.left[0] }),
1687
- /* @__PURE__ */ jsx20(Stop6, { offset: "100%", stopColor: p.left[1] })
2240
+ return /* @__PURE__ */ jsx22(View18, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx22(Animated9.View, { style: { transform: [{ translateY: y }] }, children: /* @__PURE__ */ jsxs19(Svg9, { width: size, height: size, viewBox: "0 0 120 120", children: [
2241
+ /* @__PURE__ */ jsxs19(Defs6, { children: [
2242
+ /* @__PURE__ */ jsxs19(LinearGradient6, { id: `${id}l`, x1: "1", y1: "0", x2: "0", y2: "1", children: [
2243
+ /* @__PURE__ */ jsx22(Stop6, { offset: "0%", stopColor: p.left[0] }),
2244
+ /* @__PURE__ */ jsx22(Stop6, { offset: "100%", stopColor: p.left[1] })
1688
2245
  ] }),
1689
- /* @__PURE__ */ jsxs17(LinearGradient6, { id: `${id}r`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
1690
- /* @__PURE__ */ jsx20(Stop6, { offset: "0%", stopColor: p.right[0] }),
1691
- /* @__PURE__ */ jsx20(Stop6, { offset: "100%", stopColor: p.right[1] })
2246
+ /* @__PURE__ */ jsxs19(LinearGradient6, { id: `${id}r`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
2247
+ /* @__PURE__ */ jsx22(Stop6, { offset: "0%", stopColor: p.right[0] }),
2248
+ /* @__PURE__ */ jsx22(Stop6, { offset: "100%", stopColor: p.right[1] })
1692
2249
  ] }),
1693
- /* @__PURE__ */ jsxs17(RadialGradient4, { id: `${id}c`, children: [
1694
- /* @__PURE__ */ jsx20(Stop6, { offset: "0%", stopColor: p.core[0] }),
1695
- /* @__PURE__ */ jsx20(Stop6, { offset: "100%", stopColor: p.core[1], stopOpacity: 0 })
2250
+ /* @__PURE__ */ jsxs19(RadialGradient4, { id: `${id}c`, children: [
2251
+ /* @__PURE__ */ jsx22(Stop6, { offset: "0%", stopColor: p.core[0] }),
2252
+ /* @__PURE__ */ jsx22(Stop6, { offset: "100%", stopColor: p.core[1], stopOpacity: 0 })
1696
2253
  ] })
1697
2254
  ] }),
1698
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.wingL, fill: `url(#${id}l)` }),
1699
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.wingR, fill: `url(#${id}r)` }),
1700
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.tailL, fill: `url(#${id}l)`, opacity: 0.7 }),
1701
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.tailR, fill: `url(#${id}r)`, opacity: 0.7 }),
1702
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: 0.5 }),
1703
- /* @__PURE__ */ jsx20(Circle5, { cx: 60, cy: 58, r: 12, fill: `url(#${id}c)` }),
1704
- /* @__PURE__ */ jsx20(Circle5, { cx: 60, cy: 58, r: 3.5, fill: "#ffffff" }),
1705
- /* @__PURE__ */ jsx20(Path7, { d: PHOENIX.crest, stroke: p.crest, strokeWidth: 2, strokeLinecap: "round" })
2255
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.wingL, fill: `url(#${id}l)` }),
2256
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.wingR, fill: `url(#${id}r)` }),
2257
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.tailL, fill: `url(#${id}l)`, opacity: 0.7 }),
2258
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.tailR, fill: `url(#${id}r)`, opacity: 0.7 }),
2259
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.body, fill: p.body, stroke: p.edge, strokeOpacity: 0.5 }),
2260
+ /* @__PURE__ */ jsx22(Circle5, { cx: 60, cy: 58, r: 12, fill: `url(#${id}c)` }),
2261
+ /* @__PURE__ */ jsx22(Circle5, { cx: 60, cy: 58, r: 3.5, fill: "#ffffff" }),
2262
+ /* @__PURE__ */ jsx22(Path8, { d: PHOENIX.crest, stroke: p.crest, strokeWidth: 2, strokeLinecap: "round" })
1706
2263
  ] }) }) });
1707
2264
  }
1708
2265
 
1709
2266
  // src/native/YazakiaMark.tsx
1710
- import React15 from "react";
1711
- import { View as View17 } from "react-native";
1712
- import Svg9, { Circle as Circle6, Defs as Defs7, LinearGradient as LinearGradient7, Path as Path8, RadialGradient as RadialGradient5, Stop as Stop7 } from "react-native-svg";
2267
+ import React17 from "react";
2268
+ import { View as View19 } from "react-native";
2269
+ import Svg10, { Circle as Circle6, Defs as Defs7, LinearGradient as LinearGradient7, Path as Path9, RadialGradient as RadialGradient5, Stop as Stop7 } from "react-native-svg";
1713
2270
 
1714
2271
  // src/marks/yazakia-geometry.ts
1715
2272
  var turquoise = marks.yazakia[marks.yazakia.length - 1][1];
@@ -1739,54 +2296,54 @@ var YAZAKIA = {
1739
2296
  };
1740
2297
 
1741
2298
  // src/native/YazakiaMark.tsx
1742
- import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
2299
+ import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
1743
2300
  function YazakiaMark({ size = 48, animated = true, title, neutral }) {
1744
2301
  const { theme } = useTheme();
1745
2302
  const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1746
2303
  const id = useSvgId("yzm");
1747
2304
  const viewBox = size < 48 ? YAZAKIA.croppedViewBox : YAZAKIA.viewBox;
1748
2305
  const stroke = neutral ?? theme.textMuted;
1749
- const gradient = /* @__PURE__ */ jsx21(LinearGradient7, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YAZAKIA.gradient.x1, y1: YAZAKIA.gradient.y1, x2: YAZAKIA.gradient.x2, y2: YAZAKIA.gradient.y2, children: YAZAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx21(Stop7, { offset, stopColor: color }, offset)) });
2306
+ const gradient = /* @__PURE__ */ jsx23(LinearGradient7, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YAZAKIA.gradient.x1, y1: YAZAKIA.gradient.y1, x2: YAZAKIA.gradient.x2, y2: YAZAKIA.gradient.y2, children: YAZAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx23(Stop7, { offset, stopColor: color }, offset)) });
1750
2307
  const fill = `url(#${id}a)`;
1751
- return /* @__PURE__ */ jsxs18(View17, { style: { width: size, height: size }, ...markA11y(title), children: [
1752
- /* @__PURE__ */ jsxs18(Svg9, { viewBox, style: layer, children: [
1753
- /* @__PURE__ */ jsxs18(Defs7, { children: [
1754
- /* @__PURE__ */ jsxs18(RadialGradient5, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1755
- /* @__PURE__ */ jsx21(Stop7, { offset: "0%", stopColor: YAZAKIA.glow.color, stopOpacity: YAZAKIA.glow.opacity }),
1756
- /* @__PURE__ */ jsx21(Stop7, { offset: "100%", stopColor: YAZAKIA.glow.color, stopOpacity: 0 })
2308
+ return /* @__PURE__ */ jsxs20(View19, { style: { width: size, height: size }, ...markA11y(title), children: [
2309
+ /* @__PURE__ */ jsxs20(Svg10, { viewBox, style: layer, children: [
2310
+ /* @__PURE__ */ jsxs20(Defs7, { children: [
2311
+ /* @__PURE__ */ jsxs20(RadialGradient5, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
2312
+ /* @__PURE__ */ jsx23(Stop7, { offset: "0%", stopColor: YAZAKIA.glow.color, stopOpacity: YAZAKIA.glow.opacity }),
2313
+ /* @__PURE__ */ jsx23(Stop7, { offset: "100%", stopColor: YAZAKIA.glow.color, stopOpacity: 0 })
1757
2314
  ] }),
1758
2315
  gradient
1759
2316
  ] }),
1760
- size >= 48 ? /* @__PURE__ */ jsx21(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
1761
- /* @__PURE__ */ jsx21(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.ring.r, stroke, strokeWidth: YAZAKIA.ring.width, opacity: 0.35, fill: "none" }),
1762
- YAZAKIA.voices.map((v, i) => /* @__PURE__ */ jsxs18(React15.Fragment, { children: [
1763
- /* @__PURE__ */ jsx21(Path8, { d: v.body, fill }),
1764
- /* @__PURE__ */ jsx21(Path8, { d: v.tail, fill }),
1765
- i === 0 ? /* @__PURE__ */ jsx21(Path8, { d: `${v.body} ${v.tail}`, fill: YAZAKIA.shade.color, opacity: YAZAKIA.shade.opacity }) : null
2317
+ size >= 48 ? /* @__PURE__ */ jsx23(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: 190, fill: `url(#${id}g)` }) : null,
2318
+ /* @__PURE__ */ jsx23(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.ring.r, stroke, strokeWidth: YAZAKIA.ring.width, opacity: 0.35, fill: "none" }),
2319
+ YAZAKIA.voices.map((v, i) => /* @__PURE__ */ jsxs20(React17.Fragment, { children: [
2320
+ /* @__PURE__ */ jsx23(Path9, { d: v.body, fill }),
2321
+ /* @__PURE__ */ jsx23(Path9, { d: v.tail, fill }),
2322
+ i === 0 ? /* @__PURE__ */ jsx23(Path9, { d: `${v.body} ${v.tail}`, fill: YAZAKIA.shade.color, opacity: YAZAKIA.shade.opacity }) : null
1766
2323
  ] }, v.body))
1767
2324
  ] }),
1768
- /* @__PURE__ */ jsx21(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs18(Svg9, { viewBox, style: layer, children: [
1769
- /* @__PURE__ */ jsx21(Defs7, { children: gradient }),
1770
- /* @__PURE__ */ jsx21(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.orbit.r, stroke, strokeWidth: YAZAKIA.orbit.width, strokeDasharray: YAZAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
1771
- YAZAKIA.pair.at.map(([cx, cy]) => /* @__PURE__ */ jsx21(Circle6, { cx, cy, r: YAZAKIA.pair.r, fill }, cx))
2325
+ /* @__PURE__ */ jsx23(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs20(Svg10, { viewBox, style: layer, children: [
2326
+ /* @__PURE__ */ jsx23(Defs7, { children: gradient }),
2327
+ /* @__PURE__ */ jsx23(Circle6, { cx: YAZAKIA.center, cy: YAZAKIA.center, r: YAZAKIA.orbit.r, stroke, strokeWidth: YAZAKIA.orbit.width, strokeDasharray: YAZAKIA.orbit.dash, opacity: 0.6, fill: "none" }),
2328
+ YAZAKIA.pair.at.map(([cx, cy]) => /* @__PURE__ */ jsx23(Circle6, { cx, cy, r: YAZAKIA.pair.r, fill }, cx))
1772
2329
  ] }) }),
1773
- /* @__PURE__ */ jsx21(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs18(Svg9, { viewBox, style: layer, children: [
1774
- /* @__PURE__ */ jsxs18(Defs7, { children: [
2330
+ /* @__PURE__ */ jsx23(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs20(Svg10, { viewBox, style: layer, children: [
2331
+ /* @__PURE__ */ jsxs20(Defs7, { children: [
1775
2332
  gradient,
1776
- /* @__PURE__ */ jsxs18(LinearGradient7, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YAZAKIA.lens.y1, x2: 0, y2: YAZAKIA.lens.y2, children: [
1777
- /* @__PURE__ */ jsx21(Stop7, { offset: "0%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.from }),
1778
- /* @__PURE__ */ jsx21(Stop7, { offset: "100%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.to })
2333
+ /* @__PURE__ */ jsxs20(LinearGradient7, { id: `${id}l`, gradientUnits: "userSpaceOnUse", x1: 0, y1: YAZAKIA.lens.y1, x2: 0, y2: YAZAKIA.lens.y2, children: [
2334
+ /* @__PURE__ */ jsx23(Stop7, { offset: "0%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.from }),
2335
+ /* @__PURE__ */ jsx23(Stop7, { offset: "100%", stopColor: YAZAKIA.highlight.color, stopOpacity: YAZAKIA.highlight.to })
1779
2336
  ] })
1780
2337
  ] }),
1781
- /* @__PURE__ */ jsx21(Path8, { d: YAZAKIA.lens.d, fill }),
1782
- /* @__PURE__ */ jsx21(Path8, { d: YAZAKIA.lens.d, fill: `url(#${id}l)` })
2338
+ /* @__PURE__ */ jsx23(Path9, { d: YAZAKIA.lens.d, fill }),
2339
+ /* @__PURE__ */ jsx23(Path9, { d: YAZAKIA.lens.d, fill: `url(#${id}l)` })
1783
2340
  ] }) })
1784
2341
  ] });
1785
2342
  }
1786
2343
 
1787
2344
  // src/native/YororisMark.tsx
1788
- import { View as View18 } from "react-native";
1789
- import Svg10, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient8, Path as Path9, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
2345
+ import { View as View20 } from "react-native";
2346
+ import Svg11, { Circle as Circle7, Defs as Defs8, LinearGradient as LinearGradient8, Path as Path10, RadialGradient as RadialGradient6, Stop as Stop8 } from "react-native-svg";
1790
2347
 
1791
2348
  // src/marks/yororis-geometry.ts
1792
2349
  var sand = marks.yororis[0][1];
@@ -1822,65 +2379,65 @@ var YORORIS = {
1822
2379
  };
1823
2380
 
1824
2381
  // src/native/YororisMark.tsx
1825
- import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
2382
+ import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
1826
2383
  function YororisMark({ size = 48, animated = true, title, neutral }) {
1827
2384
  const { theme } = useTheme();
1828
2385
  const { Animated: Animated14, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated, 36e3);
1829
2386
  const id = useSvgId("yrm");
1830
2387
  const viewBox = size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox;
1831
2388
  const stroke = neutral ?? theme.textMuted;
1832
- const gradient = /* @__PURE__ */ jsx22(LinearGradient8, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx22(Stop8, { offset, stopColor: color }, offset)) });
2389
+ const gradient = /* @__PURE__ */ jsx24(LinearGradient8, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx24(Stop8, { offset, stopColor: color }, offset)) });
1833
2390
  const fill = `url(#${id}a)`;
1834
- return /* @__PURE__ */ jsxs19(View18, { style: { width: size, height: size }, ...markA11y(title), children: [
1835
- /* @__PURE__ */ jsxs19(Svg10, { viewBox, style: layer, children: [
1836
- /* @__PURE__ */ jsxs19(Defs8, { children: [
1837
- /* @__PURE__ */ jsxs19(RadialGradient6, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1838
- /* @__PURE__ */ jsx22(Stop8, { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
1839
- /* @__PURE__ */ jsx22(Stop8, { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: 0 })
2391
+ return /* @__PURE__ */ jsxs21(View20, { style: { width: size, height: size }, ...markA11y(title), children: [
2392
+ /* @__PURE__ */ jsxs21(Svg11, { viewBox, style: layer, children: [
2393
+ /* @__PURE__ */ jsxs21(Defs8, { children: [
2394
+ /* @__PURE__ */ jsxs21(RadialGradient6, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
2395
+ /* @__PURE__ */ jsx24(Stop8, { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
2396
+ /* @__PURE__ */ jsx24(Stop8, { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: 0 })
1840
2397
  ] }),
1841
2398
  gradient
1842
2399
  ] }),
1843
- size >= 48 ? /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
1844
- /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
1845
- /* @__PURE__ */ jsx22(Path9, { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" }),
1846
- YORORIS.leaves.map((d) => /* @__PURE__ */ jsx22(Path9, { d, fill }, d)),
1847
- /* @__PURE__ */ jsx22(Path9, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
2400
+ size >= 48 ? /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: 190, fill: `url(#${id}g)` }) : null,
2401
+ /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke, strokeWidth: YORORIS.ring.width, opacity: 0.35, fill: "none" }),
2402
+ /* @__PURE__ */ jsx24(Path10, { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round", fill: "none" }),
2403
+ YORORIS.leaves.map((d) => /* @__PURE__ */ jsx24(Path10, { d, fill }, d)),
2404
+ /* @__PURE__ */ jsx24(Path10, { d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash, fill: "none" })
1848
2405
  ] }),
1849
- /* @__PURE__ */ jsx22(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs19(Svg10, { viewBox, style: layer, children: [
1850
- /* @__PURE__ */ jsx22(Defs8, { children: gradient }),
1851
- /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke, strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: 0.6, fill: "none" }),
1852
- /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
2406
+ /* @__PURE__ */ jsx24(Animated14.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs21(Svg11, { viewBox, style: layer, children: [
2407
+ /* @__PURE__ */ jsx24(Defs8, { children: gradient }),
2408
+ /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke, strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: 0.6, fill: "none" }),
2409
+ /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
1853
2410
  ] }) }),
1854
- /* @__PURE__ */ jsx22(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs19(Svg10, { viewBox, style: layer, children: [
1855
- /* @__PURE__ */ jsx22(Defs8, { children: /* @__PURE__ */ jsx22(LinearGradient8, { id: `${id}c`, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: YORORIS.coreGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx22(Stop8, { offset, stopColor: color }, offset)) }) }),
1856
- /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id}c)` }),
1857
- /* @__PURE__ */ jsx22(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
2411
+ /* @__PURE__ */ jsx24(Animated14.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs21(Svg11, { viewBox, style: layer, children: [
2412
+ /* @__PURE__ */ jsx24(Defs8, { children: /* @__PURE__ */ jsx24(LinearGradient8, { id: `${id}c`, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: YORORIS.coreGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx24(Stop8, { offset, stopColor: color }, offset)) }) }),
2413
+ /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id}c)` }),
2414
+ /* @__PURE__ */ jsx24(Circle7, { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
1858
2415
  ] }) })
1859
2416
  ] });
1860
2417
  }
1861
2418
 
1862
2419
  // src/native/ProductMark.tsx
1863
- import { jsx as jsx23 } from "react/jsx-runtime";
2420
+ import { jsx as jsx25 } from "react/jsx-runtime";
1864
2421
  function ProductMark({ id, ...props }) {
1865
- if (id === "krizaka") return /* @__PURE__ */ jsx23(KrizakaMark, { ...props });
1866
- if (id === "orazaka") return /* @__PURE__ */ jsx23(OrazakaMark, { ...props });
1867
- if (id === "yazakia") return /* @__PURE__ */ jsx23(YazakiaMark, { ...props });
1868
- if (id === "yororis") return /* @__PURE__ */ jsx23(YororisMark, { ...props });
1869
- return /* @__PURE__ */ jsx23(OrochiaMark, { ...props });
2422
+ if (id === "krizaka") return /* @__PURE__ */ jsx25(KrizakaMark, { ...props });
2423
+ if (id === "orazaka") return /* @__PURE__ */ jsx25(OrazakaMark, { ...props });
2424
+ if (id === "yazakia") return /* @__PURE__ */ jsx25(YazakiaMark, { ...props });
2425
+ if (id === "yororis") return /* @__PURE__ */ jsx25(YororisMark, { ...props });
2426
+ return /* @__PURE__ */ jsx25(OrochiaMark, { ...props });
1870
2427
  }
1871
2428
 
1872
2429
  // src/native/profile-card.tsx
1873
- import * as React16 from "react";
1874
- import { Animated as Animated10, StyleSheet as StyleSheet15, View as View19 } from "react-native";
1875
- import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
2430
+ import * as React18 from "react";
2431
+ import { Animated as Animated10, StyleSheet as StyleSheet17, View as View21 } from "react-native";
2432
+ import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
1876
2433
  var ratioOf = (value, max = 100) => Math.min(1, Math.max(0, value / (max || 1)));
1877
2434
  function Bar({ label, ratio, words, animated, delay }) {
1878
2435
  const { theme } = useTheme();
1879
2436
  const t = useEntrance(animated, delay, 900);
1880
- const [width, setWidth] = React16.useState(0);
2437
+ const [width, setWidth] = React18.useState(0);
1881
2438
  const translateX = t.interpolate({ inputRange: [0, 1], outputRange: [-width * ratio, 0] });
1882
- return /* @__PURE__ */ jsx24(
1883
- View19,
2439
+ return /* @__PURE__ */ jsx26(
2440
+ View21,
1884
2441
  {
1885
2442
  accessible: true,
1886
2443
  role: "meter",
@@ -1890,42 +2447,42 @@ function Bar({ label, ratio, words, animated, delay }) {
1890
2447
  "aria-valuenow": Math.round(ratio * 100),
1891
2448
  "aria-valuetext": words,
1892
2449
  onLayout: (e) => setWidth(e.nativeEvent.layout.width),
1893
- style: [styles15.track, { backgroundColor: theme.surface3 }],
1894
- children: /* @__PURE__ */ jsx24(Animated10.View, { style: [styles15.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
2450
+ style: [styles17.track, { backgroundColor: theme.surface3 }],
2451
+ children: /* @__PURE__ */ jsx26(Animated10.View, { style: [styles17.fill, { width: `${ratio * 100}%`, backgroundColor: theme.accent, transform: [{ translateX }] }] })
1895
2452
  }
1896
2453
  );
1897
2454
  }
1898
2455
  function ProfileCard({ visual, name, statLabel, value = 100, valueText, stats, caption, children, animated = true, style, ...props }) {
1899
2456
  const { theme, radius: radius3 } = useTheme();
1900
2457
  const ratio = ratioOf(value);
1901
- return /* @__PURE__ */ jsxs20(View19, { ...props, style: [styles15.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
1902
- /* @__PURE__ */ jsx24(View19, { "aria-hidden": true, style: [styles15.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }], children: visual }),
1903
- /* @__PURE__ */ jsxs20(View19, { style: styles15.head, children: [
1904
- /* @__PURE__ */ jsx24(Txt, { variant: "title", style: styles15.name, children: name }),
1905
- statLabel ? /* @__PURE__ */ jsxs20(Txt, { variant: "caption", tone: "secondary", children: [
2458
+ return /* @__PURE__ */ jsxs22(View21, { ...props, style: [styles17.root, { backgroundColor: theme.surface1, borderColor: theme.borderSubtle, borderRadius: radius3.xl }, style], children: [
2459
+ /* @__PURE__ */ jsx26(View21, { "aria-hidden": true, style: [styles17.disc, { backgroundColor: theme.surface2, borderColor: theme.accentSoft }], children: visual }),
2460
+ /* @__PURE__ */ jsxs22(View21, { style: styles17.head, children: [
2461
+ /* @__PURE__ */ jsx26(Txt, { variant: "title", style: styles17.name, children: name }),
2462
+ statLabel ? /* @__PURE__ */ jsxs22(Txt, { variant: "caption", tone: "secondary", children: [
1906
2463
  statLabel,
1907
2464
  " ",
1908
- /* @__PURE__ */ jsx24(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
2465
+ /* @__PURE__ */ jsx26(Txt, { variant: "caption", children: valueText ?? `${Math.round(ratio * 100)} %` })
1909
2466
  ] }) : null
1910
2467
  ] }),
1911
- statLabel ? /* @__PURE__ */ jsx24(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
2468
+ statLabel ? /* @__PURE__ */ jsx26(Bar, { label: statLabel, ratio, words: valueText ?? `${Math.round(ratio * 100)} %`, animated, delay: 200 }) : null,
1912
2469
  stats?.map((s, i) => {
1913
2470
  const r = ratioOf(s.value, s.max);
1914
2471
  const words = s.valueText ?? `${Math.round(r * 100)} %`;
1915
- return /* @__PURE__ */ jsxs20(View19, { style: styles15.stat, children: [
1916
- /* @__PURE__ */ jsxs20(View19, { "aria-hidden": true, style: styles15.statHead, children: [
1917
- /* @__PURE__ */ jsx24(Txt, { variant: "caption", tone: "secondary", children: s.label }),
1918
- /* @__PURE__ */ jsx24(Txt, { variant: "caption", children: words })
2472
+ return /* @__PURE__ */ jsxs22(View21, { style: styles17.stat, children: [
2473
+ /* @__PURE__ */ jsxs22(View21, { "aria-hidden": true, style: styles17.statHead, children: [
2474
+ /* @__PURE__ */ jsx26(Txt, { variant: "caption", tone: "secondary", children: s.label }),
2475
+ /* @__PURE__ */ jsx26(Txt, { variant: "caption", children: words })
1919
2476
  ] }),
1920
- /* @__PURE__ */ jsx24(Bar, { label: s.label, ratio: r, words, animated, delay: 320 + i * 120 })
2477
+ /* @__PURE__ */ jsx26(Bar, { label: s.label, ratio: r, words, animated, delay: 320 + i * 120 })
1921
2478
  ] }, s.label);
1922
2479
  }),
1923
- caption ? /* @__PURE__ */ jsx24(Txt, { variant: "caption", tone: "secondary", style: styles15.caption, children: caption }) : null,
1924
- children ? /* @__PURE__ */ jsx24(View19, { style: styles15.extra, children }) : null
2480
+ caption ? /* @__PURE__ */ jsx26(Txt, { variant: "caption", tone: "secondary", style: styles17.caption, children: caption }) : null,
2481
+ children ? /* @__PURE__ */ jsx26(View21, { style: styles17.extra, children }) : null
1925
2482
  ] });
1926
2483
  }
1927
- var styles15 = StyleSheet15.create({
1928
- root: { alignItems: "center", gap: 12, padding: 20, borderWidth: StyleSheet15.hairlineWidth },
2484
+ var styles17 = StyleSheet17.create({
2485
+ root: { alignItems: "center", gap: 12, padding: 20, borderWidth: StyleSheet17.hairlineWidth },
1929
2486
  disc: { width: 104, height: 104, borderRadius: 52, borderWidth: 1, alignItems: "center", justifyContent: "center", overflow: "hidden" },
1930
2487
  head: { flexDirection: "row", alignSelf: "stretch", alignItems: "center", justifyContent: "space-between", gap: 8 },
1931
2488
  name: { flexShrink: 1, fontSize: 17 },
@@ -1938,10 +2495,10 @@ var styles15 = StyleSheet15.create({
1938
2495
  });
1939
2496
 
1940
2497
  // src/native/progress.tsx
1941
- import * as React17 from "react";
1942
- import { Animated as Animated11, Easing as Easing7, StyleSheet as StyleSheet16, View as View20 } from "react-native";
1943
- import Svg11, { Circle as Circle8, Defs as Defs9, LinearGradient as LinearGradient9, Rect as Rect3, Stop as Stop9 } from "react-native-svg";
1944
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
2498
+ import * as React19 from "react";
2499
+ import { Animated as Animated11, Easing as Easing7, StyleSheet as StyleSheet18, View as View22 } from "react-native";
2500
+ import Svg12, { Circle as Circle8, Defs as Defs9, LinearGradient as LinearGradient9, Rect as Rect3, Stop as Stop9 } from "react-native-svg";
2501
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
1945
2502
  var AnimatedCircle = Animated11.createAnimatedComponent(Circle8);
1946
2503
  var BAR = { sm: 4, md: 8, lg: 12 };
1947
2504
  var RING = { sm: 40, md: 80, lg: 144 };
@@ -1953,10 +2510,10 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1953
2510
  const known = typeof value === "number" && Number.isFinite(value);
1954
2511
  const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;
1955
2512
  const percent = Math.round(ratio * 100);
1956
- const [progress] = React17.useState(() => new Animated11.Value(ratio));
1957
- const [spin] = React17.useState(() => new Animated11.Value(0));
1958
- const [track, setTrack] = React17.useState(0);
1959
- React17.useEffect(() => {
2513
+ const [progress] = React19.useState(() => new Animated11.Value(ratio));
2514
+ const [spin] = React19.useState(() => new Animated11.Value(0));
2515
+ const [track, setTrack] = React19.useState(0);
2516
+ React19.useEffect(() => {
1960
2517
  if (reduce) {
1961
2518
  progress.setValue(ratio);
1962
2519
  return;
@@ -1965,7 +2522,7 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1965
2522
  animation.start();
1966
2523
  return () => animation.stop();
1967
2524
  }, [ratio, reduce, progress]);
1968
- React17.useEffect(() => {
2525
+ React19.useEffect(() => {
1969
2526
  if (known || reduce) return;
1970
2527
  const loop = Animated11.loop(Animated11.timing(spin, { toValue: 1, duration: 1200, easing: Easing7.linear, useNativeDriver: true }));
1971
2528
  loop.start();
@@ -1983,9 +2540,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1983
2540
  "aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
1984
2541
  "aria-valuetext": known ? valueText ?? `${percent}%` : valueText
1985
2542
  };
1986
- const gradient = /* @__PURE__ */ jsx25(Defs9, { children: /* @__PURE__ */ jsxs21(LinearGradient9, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
1987
- /* @__PURE__ */ jsx25(Stop9, { offset: "0", stopColor: theme.accent }),
1988
- /* @__PURE__ */ jsx25(Stop9, { offset: "1", stopColor: theme.accent2 })
2543
+ const gradient = /* @__PURE__ */ jsx27(Defs9, { children: /* @__PURE__ */ jsxs23(LinearGradient9, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
2544
+ /* @__PURE__ */ jsx27(Stop9, { offset: "0", stopColor: theme.accent }),
2545
+ /* @__PURE__ */ jsx27(Stop9, { offset: "1", stopColor: theme.accent2 })
1989
2546
  ] }) });
1990
2547
  if (variant === "ring") {
1991
2548
  const side = RING[size];
@@ -1994,11 +2551,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1994
2551
  const circumference = 2 * Math.PI * r;
1995
2552
  const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
1996
2553
  const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
1997
- return /* @__PURE__ */ jsxs21(View20, { ...a11y, style: [styles16.ring, { width: side, height: side }, style], children: [
1998
- /* @__PURE__ */ jsx25(Animated11.View, { style: [StyleSheet16.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs21(Svg11, { width: side, height: side, viewBox: "0 0 100 100", children: [
2554
+ return /* @__PURE__ */ jsxs23(View22, { ...a11y, style: [styles18.ring, { width: side, height: side }, style], children: [
2555
+ /* @__PURE__ */ jsx27(Animated11.View, { style: [StyleSheet18.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs23(Svg12, { width: side, height: side, viewBox: "0 0 100 100", children: [
1999
2556
  gradient,
2000
- /* @__PURE__ */ jsx25(Circle8, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
2001
- /* @__PURE__ */ jsx25(
2557
+ /* @__PURE__ */ jsx27(Circle8, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
2558
+ /* @__PURE__ */ jsx27(
2002
2559
  AnimatedCircle,
2003
2560
  {
2004
2561
  cx: 50,
@@ -2018,48 +2575,48 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
2018
2575
  }
2019
2576
  const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
2020
2577
  const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
2021
- return /* @__PURE__ */ jsx25(
2022
- View20,
2578
+ return /* @__PURE__ */ jsx27(
2579
+ View22,
2023
2580
  {
2024
2581
  ...a11y,
2025
2582
  onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
2026
- style: [styles16.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
2027
- children: /* @__PURE__ */ jsx25(Animated11.View, { style: [styles16.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs21(Svg11, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
2583
+ style: [styles18.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
2584
+ children: /* @__PURE__ */ jsx27(Animated11.View, { style: [styles18.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs23(Svg12, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
2028
2585
  gradient,
2029
- /* @__PURE__ */ jsx25(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
2586
+ /* @__PURE__ */ jsx27(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
2030
2587
  ] }) })
2031
2588
  }
2032
2589
  );
2033
2590
  }
2034
- var styles16 = StyleSheet16.create({
2591
+ var styles18 = StyleSheet18.create({
2035
2592
  ring: { alignItems: "center", justifyContent: "center" },
2036
2593
  bar: { width: "100%", overflow: "hidden", borderRadius: 9999 },
2037
2594
  fill: { height: "100%", overflow: "hidden", borderRadius: 9999 }
2038
2595
  });
2039
2596
 
2040
2597
  // src/native/search-field.tsx
2041
- import * as React18 from "react";
2042
- import { Pressable as Pressable6, StyleSheet as StyleSheet17, TextInput as TextInput3, View as View21 } from "react-native";
2043
- import Svg12, { Circle as Circle9, Path as Path10 } from "react-native-svg";
2044
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
2598
+ import * as React20 from "react";
2599
+ import { Pressable as Pressable8, StyleSheet as StyleSheet19, TextInput as TextInput3, View as View23 } from "react-native";
2600
+ import Svg13, { Circle as Circle9, Path as Path11 } from "react-native-svg";
2601
+ import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
2045
2602
  function SearchField({ label, value, defaultValue = "", onValueChange, onSearch, debounce = 300, onSubmit, clearLabel, style, placeholder, ...props }) {
2046
2603
  const { theme, radius: radius3 } = useTheme();
2047
- const [own, setOwn] = React18.useState(defaultValue);
2604
+ const [own, setOwn] = React20.useState(defaultValue);
2048
2605
  const query = value ?? own;
2049
- const timer2 = React18.useRef(void 0);
2050
- React18.useEffect(() => () => clearTimeout(timer2.current), []);
2606
+ const timer2 = React20.useRef(void 0);
2607
+ React20.useEffect(() => () => clearTimeout(timer2.current), []);
2051
2608
  const change = (next) => {
2052
2609
  if (value === void 0) setOwn(next);
2053
2610
  onValueChange?.(next);
2054
2611
  clearTimeout(timer2.current);
2055
2612
  if (onSearch) timer2.current = setTimeout(() => onSearch(next), debounce);
2056
2613
  };
2057
- return /* @__PURE__ */ jsxs22(View21, { style: [styles17.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
2058
- /* @__PURE__ */ jsxs22(Svg12, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
2059
- /* @__PURE__ */ jsx26(Circle9, { cx: 11, cy: 11, r: 7 }),
2060
- /* @__PURE__ */ jsx26(Path10, { d: "m20 20-3.5-3.5" })
2614
+ return /* @__PURE__ */ jsxs24(View23, { style: [styles19.frame, { borderRadius: radius3.md, borderColor: theme.borderDefault, backgroundColor: theme.surface2 }, style], children: [
2615
+ /* @__PURE__ */ jsxs24(Svg13, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2, strokeLinecap: "round", "aria-hidden": true, children: [
2616
+ /* @__PURE__ */ jsx28(Circle9, { cx: 11, cy: 11, r: 7 }),
2617
+ /* @__PURE__ */ jsx28(Path11, { d: "m20 20-3.5-3.5" })
2061
2618
  ] }),
2062
- /* @__PURE__ */ jsx26(
2619
+ /* @__PURE__ */ jsx28(
2063
2620
  TextInput3,
2064
2621
  {
2065
2622
  role: "searchbox",
@@ -2077,34 +2634,34 @@ function SearchField({ label, value, defaultValue = "", onValueChange, onSearch,
2077
2634
  onSearch?.(query);
2078
2635
  onSubmit?.(query);
2079
2636
  },
2080
- style: [styles17.input, { color: theme.textPrimary }],
2637
+ style: [styles19.input, { color: theme.textPrimary }],
2081
2638
  ...props
2082
2639
  }
2083
2640
  ),
2084
- query ? /* @__PURE__ */ jsx26(Pressable6, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles17.clear, children: /* @__PURE__ */ jsx26(Svg12, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx26(Path10, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
2641
+ query ? /* @__PURE__ */ jsx28(Pressable8, { role: "button", "aria-label": clearLabel, hitSlop: 10, onPress: () => change(""), style: styles19.clear, children: /* @__PURE__ */ jsx28(Svg13, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", stroke: theme.textSecondary, strokeWidth: 2.4, strokeLinecap: "round", "aria-hidden": true, children: /* @__PURE__ */ jsx28(Path11, { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
2085
2642
  ] });
2086
2643
  }
2087
- var styles17 = StyleSheet17.create({
2088
- frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet17.hairlineWidth },
2644
+ var styles19 = StyleSheet19.create({
2645
+ frame: { flexDirection: "row", alignItems: "center", gap: 8, height: 44, paddingLeft: 12, paddingRight: 6, borderWidth: StyleSheet19.hairlineWidth },
2089
2646
  input: { flex: 1, height: "100%", fontSize: 15, paddingVertical: 0 },
2090
2647
  clear: { width: 32, height: 32, alignItems: "center", justifyContent: "center" }
2091
2648
  });
2092
2649
 
2093
2650
  // src/native/segmented.tsx
2094
- import { Pressable as Pressable7, StyleSheet as StyleSheet18, Text as Text10, View as View22 } from "react-native";
2095
- import { jsx as jsx27 } from "react/jsx-runtime";
2651
+ import { Pressable as Pressable9, StyleSheet as StyleSheet20, Text as Text12, View as View24 } from "react-native";
2652
+ import { jsx as jsx29 } from "react/jsx-runtime";
2096
2653
  function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
2097
2654
  const { theme, radius: radius3 } = useTheme();
2098
- return /* @__PURE__ */ jsx27(
2099
- View22,
2655
+ return /* @__PURE__ */ jsx29(
2656
+ View24,
2100
2657
  {
2101
2658
  role: "tablist",
2102
2659
  "aria-label": label,
2103
- style: [styles18.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
2660
+ style: [styles20.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
2104
2661
  children: options.map((option) => {
2105
2662
  const selected = option.value === value;
2106
- return /* @__PURE__ */ jsx27(
2107
- Pressable7,
2663
+ return /* @__PURE__ */ jsx29(
2664
+ Pressable9,
2108
2665
  {
2109
2666
  role: "tab",
2110
2667
  "aria-selected": selected,
@@ -2114,12 +2671,12 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
2114
2671
  if (!selected) onValueChange(option.value);
2115
2672
  },
2116
2673
  style: [
2117
- styles18.segment,
2674
+ styles20.segment,
2118
2675
  { borderRadius: radius3.sm },
2119
2676
  selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
2120
- option.disabled ? styles18.disabled : null
2677
+ option.disabled ? styles20.disabled : null
2121
2678
  ],
2122
- children: /* @__PURE__ */ jsx27(Text10, { numberOfLines: 1, style: [styles18.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
2679
+ children: /* @__PURE__ */ jsx29(Text12, { numberOfLines: 1, style: [styles20.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
2123
2680
  },
2124
2681
  option.value
2125
2682
  );
@@ -2127,17 +2684,17 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
2127
2684
  }
2128
2685
  );
2129
2686
  }
2130
- var styles18 = StyleSheet18.create({
2131
- track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet18.hairlineWidth },
2132
- segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet18.hairlineWidth, borderColor: "transparent" },
2687
+ var styles20 = StyleSheet20.create({
2688
+ track: { flexDirection: "row", padding: 3, gap: 3, borderWidth: StyleSheet20.hairlineWidth },
2689
+ segment: { flex: 1, alignItems: "center", justifyContent: "center", paddingHorizontal: 8, borderWidth: StyleSheet20.hairlineWidth, borderColor: "transparent" },
2133
2690
  label: { fontWeight: "600" },
2134
2691
  disabled: { opacity: 0.4 }
2135
2692
  });
2136
2693
 
2137
2694
  // src/native/skeleton.tsx
2138
- import * as React19 from "react";
2695
+ import * as React21 from "react";
2139
2696
  import { Animated as Animated12 } from "react-native";
2140
- import { jsx as jsx28 } from "react/jsx-runtime";
2697
+ import { jsx as jsx30 } from "react/jsx-runtime";
2141
2698
  var SHAPE = {
2142
2699
  text: { width: "100%", height: 12, radius: 4 },
2143
2700
  circle: { width: 40, height: 40, radius: 9999 },
@@ -2146,8 +2703,8 @@ var SHAPE = {
2146
2703
  function Skeleton({ shape = "text", width, height, style, testID }) {
2147
2704
  const { theme } = useTheme();
2148
2705
  const reduce = useReducedMotion();
2149
- const [opacity] = React19.useState(() => new Animated12.Value(1));
2150
- React19.useEffect(() => {
2706
+ const [opacity] = React21.useState(() => new Animated12.Value(1));
2707
+ React21.useEffect(() => {
2151
2708
  if (reduce) return;
2152
2709
  const loop = Animated12.loop(
2153
2710
  Animated12.sequence([
@@ -2163,7 +2720,7 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
2163
2720
  }, [reduce, opacity]);
2164
2721
  const s = SHAPE[shape];
2165
2722
  const side = shape === "circle" ? width ?? height ?? s.width : void 0;
2166
- return /* @__PURE__ */ jsx28(
2723
+ return /* @__PURE__ */ jsx30(
2167
2724
  Animated12.View,
2168
2725
  {
2169
2726
  testID,
@@ -2178,10 +2735,10 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
2178
2735
 
2179
2736
  // src/native/spinner.tsx
2180
2737
  import { ActivityIndicator as ActivityIndicator2 } from "react-native";
2181
- import { jsx as jsx29 } from "react/jsx-runtime";
2738
+ import { jsx as jsx31 } from "react/jsx-runtime";
2182
2739
  function Spinner({ label, size = "md", ...props }) {
2183
2740
  const { theme } = useTheme();
2184
- return /* @__PURE__ */ jsx29(
2741
+ return /* @__PURE__ */ jsx31(
2185
2742
  ActivityIndicator2,
2186
2743
  {
2187
2744
  accessible: true,
@@ -2196,9 +2753,9 @@ function Spinner({ label, size = "md", ...props }) {
2196
2753
  }
2197
2754
 
2198
2755
  // src/native/toast.tsx
2199
- import * as React20 from "react";
2200
- import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated13, Pressable as Pressable8, StyleSheet as StyleSheet19, Text as Text11, View as View23 } from "react-native";
2201
- import { Fragment as Fragment3, jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
2756
+ import * as React22 from "react";
2757
+ import { AccessibilityInfo as AccessibilityInfo8, Animated as Animated13, Pressable as Pressable10, StyleSheet as StyleSheet21, Text as Text13, View as View25 } from "react-native";
2758
+ import { Fragment as Fragment3, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
2202
2759
  var items = [];
2203
2760
  var listeners2 = /* @__PURE__ */ new Set();
2204
2761
  var counter = 0;
@@ -2233,76 +2790,76 @@ var toast = Object.assign(show, {
2233
2790
  function ToastView({ item, closeLabel, duration }) {
2234
2791
  const { theme, radius: radius3 } = useTheme();
2235
2792
  const reduce = useReducedMotion();
2236
- const [enter] = React20.useState(() => new Animated13.Value(reduce ? 1 : 0));
2237
- React20.useEffect(() => {
2793
+ const [enter] = React22.useState(() => new Animated13.Value(reduce ? 1 : 0));
2794
+ React22.useEffect(() => {
2238
2795
  if (reduce) enter.setValue(1);
2239
2796
  else Animated13.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
2240
2797
  }, [enter, reduce]);
2241
- React20.useEffect(() => {
2798
+ React22.useEffect(() => {
2242
2799
  AccessibilityInfo8.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
2243
2800
  }, [item.title, item.description]);
2244
2801
  const ms = item.duration ?? duration;
2245
- React20.useEffect(() => {
2802
+ React22.useEffect(() => {
2246
2803
  if (!Number.isFinite(ms)) return;
2247
2804
  const timer2 = setTimeout(() => dismiss(item.id), ms);
2248
2805
  return () => clearTimeout(timer2);
2249
2806
  }, [item.id, ms]);
2250
2807
  const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
2251
- const text = /* @__PURE__ */ jsxs23(Fragment3, { children: [
2252
- item.icon ? /* @__PURE__ */ jsx30(View23, { "aria-hidden": true, children: item.icon }) : null,
2253
- /* @__PURE__ */ jsxs23(View23, { style: styles19.content, children: [
2254
- /* @__PURE__ */ jsx30(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
2255
- item.description ? /* @__PURE__ */ jsx30(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
2808
+ const text = /* @__PURE__ */ jsxs25(Fragment3, { children: [
2809
+ item.icon ? /* @__PURE__ */ jsx32(View25, { "aria-hidden": true, children: item.icon }) : null,
2810
+ /* @__PURE__ */ jsxs25(View25, { style: styles21.content, children: [
2811
+ /* @__PURE__ */ jsx32(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
2812
+ item.description ? /* @__PURE__ */ jsx32(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
2256
2813
  ] })
2257
2814
  ] });
2258
- const body = /* @__PURE__ */ jsxs23(Fragment3, { children: [
2259
- item.onPress ? /* @__PURE__ */ jsx30(
2260
- Pressable8,
2815
+ const body = /* @__PURE__ */ jsxs25(Fragment3, { children: [
2816
+ item.onPress ? /* @__PURE__ */ jsx32(
2817
+ Pressable10,
2261
2818
  {
2262
2819
  role: "button",
2263
2820
  onPress: () => {
2264
2821
  item.onPress?.();
2265
2822
  dismiss(item.id);
2266
2823
  },
2267
- style: ({ pressed }) => [styles19.main, { opacity: pressed ? 0.8 : 1 }],
2824
+ style: ({ pressed }) => [styles21.main, { opacity: pressed ? 0.8 : 1 }],
2268
2825
  children: text
2269
2826
  }
2270
- ) : /* @__PURE__ */ jsx30(View23, { style: styles19.main, children: text }),
2271
- item.action ? /* @__PURE__ */ jsx30(
2272
- Pressable8,
2827
+ ) : /* @__PURE__ */ jsx32(View25, { style: styles21.main, children: text }),
2828
+ item.action ? /* @__PURE__ */ jsx32(
2829
+ Pressable10,
2273
2830
  {
2274
2831
  role: "button",
2275
2832
  onPress: () => {
2276
2833
  item.action?.onPress();
2277
2834
  dismiss(item.id);
2278
2835
  },
2279
- style: [styles19.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
2280
- children: /* @__PURE__ */ jsx30(Text11, { style: [styles19.actionLabel, { color: theme.onAccent }], children: item.action.label })
2836
+ style: [styles21.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
2837
+ children: /* @__PURE__ */ jsx32(Text13, { style: [styles21.actionLabel, { color: theme.onAccent }], children: item.action.label })
2281
2838
  }
2282
2839
  ) : null,
2283
- /* @__PURE__ */ jsx30(Pressable8, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles19.close, children: /* @__PURE__ */ jsx30(Text11, { style: [styles19.cross, { color: theme.textSecondary }], children: "\xD7" }) })
2840
+ /* @__PURE__ */ jsx32(Pressable10, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles21.close, children: /* @__PURE__ */ jsx32(Text13, { style: [styles21.cross, { color: theme.textSecondary }], children: "\xD7" }) })
2284
2841
  ] });
2285
2842
  const frame = [
2286
- styles19.toast,
2843
+ styles21.toast,
2287
2844
  { backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
2288
2845
  ];
2289
2846
  const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };
2290
- return /* @__PURE__ */ jsx30(Animated13.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx30(View23, { style: frame, children: body }) });
2847
+ return /* @__PURE__ */ jsx32(Animated13.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx32(View25, { style: frame, children: body }) });
2291
2848
  }
2292
2849
  function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
2293
- const all = React20.useSyncExternalStore(subscribe2, snapshot, snapshot);
2850
+ const all = React22.useSyncExternalStore(subscribe2, snapshot, snapshot);
2294
2851
  const shown = all.slice(-max);
2295
2852
  if (shown.length === 0) return null;
2296
- return /* @__PURE__ */ jsx30(View23, { pointerEvents: "box-none", style: [styles19.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx30(ToastView, { item, closeLabel, duration }, item.id)) });
2853
+ return /* @__PURE__ */ jsx32(View25, { pointerEvents: "box-none", style: [styles21.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx32(ToastView, { item, closeLabel, duration }, item.id)) });
2297
2854
  }
2298
- var styles19 = StyleSheet19.create({
2855
+ var styles21 = StyleSheet21.create({
2299
2856
  stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
2300
2857
  toast: {
2301
2858
  flexDirection: "row",
2302
2859
  alignItems: "center",
2303
2860
  gap: 10,
2304
2861
  padding: 12,
2305
- borderWidth: StyleSheet19.hairlineWidth,
2862
+ borderWidth: StyleSheet21.hairlineWidth,
2306
2863
  borderLeftWidth: 4,
2307
2864
  shadowOpacity: 0.3,
2308
2865
  shadowRadius: 16,
@@ -2322,6 +2879,7 @@ export {
2322
2879
  AvatarRoot,
2323
2880
  Badge,
2324
2881
  Button,
2882
+ Calendar,
2325
2883
  Card,
2326
2884
  CardBody,
2327
2885
  CardDescription,
@@ -2335,6 +2893,8 @@ export {
2335
2893
  Chip,
2336
2894
  Countdown,
2337
2895
  DateField,
2896
+ DateWheel,
2897
+ DayStrip,
2338
2898
  EmptyState,
2339
2899
  ErrorState,
2340
2900
  GoalGauge,
@@ -2343,6 +2903,7 @@ export {
2343
2903
  LoadingState,
2344
2904
  Mascot,
2345
2905
  MascotState,
2906
+ MonthPicker,
2346
2907
  OrazakaMark,
2347
2908
  OrochiaMark,
2348
2909
  Pagination,
@@ -2357,22 +2918,37 @@ export {
2357
2918
  SuccessState,
2358
2919
  TextField,
2359
2920
  ThemeProvider,
2921
+ TimePicker,
2360
2922
  Toaster,
2361
2923
  Txt,
2362
2924
  WelcomeState,
2925
+ Wheel,
2926
+ WheelDivider,
2927
+ WheelPicker,
2363
2928
  YazakiaMark,
2364
2929
  YororisMark,
2930
+ addDays,
2931
+ addMonths,
2932
+ ageOn,
2365
2933
  alpha,
2934
+ calendarLabels,
2366
2935
  composeDate,
2367
2936
  dateFieldLabels,
2368
2937
  datePartsOrder,
2938
+ daysInMonth,
2939
+ formatTime,
2369
2940
  isRealDate,
2370
2941
  latestBirthDate,
2942
+ monthNames,
2371
2943
  splitDuration,
2372
2944
  textStyles,
2945
+ timeSlots,
2946
+ timeToMinutes,
2373
2947
  toast,
2948
+ todayIso,
2374
2949
  useCountdown,
2375
2950
  useReducedMotion,
2376
- useTheme
2951
+ useTheme,
2952
+ uses12Hours
2377
2953
  };
2378
2954
  //# sourceMappingURL=native.js.map