@krizaka/ui 2.0.0 → 2.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 (67) hide show
  1. package/README.md +12 -6
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +52 -10
  4. package/dist/index.js.map +1 -1
  5. package/dist/mascots.d.ts +40 -0
  6. package/dist/mascots.js +253 -0
  7. package/dist/mascots.js.map +1 -0
  8. package/dist/native.d.ts +40 -1
  9. package/dist/native.js +373 -233
  10. package/dist/native.js.map +1 -1
  11. package/dist/theme.d.ts +18 -8
  12. package/dist/theme.js +7 -4
  13. package/dist/theme.js.map +1 -1
  14. package/package.json +14 -4
  15. package/registry/alert.json +1 -1
  16. package/registry/avatar.json +1 -1
  17. package/registry/badge.json +1 -1
  18. package/registry/button.json +1 -1
  19. package/registry/card.json +1 -1
  20. package/registry/checkbox.json +1 -1
  21. package/registry/chip.json +1 -1
  22. package/registry/command.json +1 -1
  23. package/registry/confirm-button.json +1 -1
  24. package/registry/countdown.json +1 -1
  25. package/registry/dialog.json +1 -1
  26. package/registry/dropdown-menu.json +1 -1
  27. package/registry/empty-state.json +1 -1
  28. package/registry/examples/mascots/empty-state.d.ts +4 -0
  29. package/registry/examples/mascots/empty-state.js +24 -0
  30. package/registry/examples/mascots/empty-state.tsx +18 -0
  31. package/registry/examples/mascots/flock.d.ts +4 -0
  32. package/registry/examples/mascots/flock.js +14 -0
  33. package/registry/examples/mascots/flock.tsx +15 -0
  34. package/registry/examples/mascots/long-task.d.ts +4 -0
  35. package/registry/examples/mascots/long-task.js +18 -0
  36. package/registry/examples/mascots/long-task.tsx +15 -0
  37. package/registry/examples/mascots/moods.d.ts +4 -0
  38. package/registry/examples/mascots/moods.js +14 -0
  39. package/registry/examples/mascots/moods.tsx +15 -0
  40. package/registry/examples/mascots/native/default.d.ts +4 -0
  41. package/registry/examples/mascots/native/default.dark.png +0 -0
  42. package/registry/examples/mascots/native/default.js +25 -0
  43. package/registry/examples/mascots/native/default.light.png +0 -0
  44. package/registry/examples/mascots/native/default.tsx +22 -0
  45. package/registry/examples/mascots/own-tone.d.ts +4 -0
  46. package/registry/examples/mascots/own-tone.js +11 -0
  47. package/registry/examples/mascots/own-tone.tsx +12 -0
  48. package/registry/field.json +1 -1
  49. package/registry/index.json +17 -1
  50. package/registry/kbd.json +1 -1
  51. package/registry/mascots.json +314 -0
  52. package/registry/page-header.json +1 -1
  53. package/registry/popover.json +1 -1
  54. package/registry/progress.json +1 -1
  55. package/registry/radio-group.json +1 -1
  56. package/registry/section-backdrop.json +1 -1
  57. package/registry/separator.json +1 -1
  58. package/registry/skeleton.json +1 -1
  59. package/registry/slider.json +1 -1
  60. package/registry/slot.json +1 -1
  61. package/registry/spinner.json +1 -1
  62. package/registry/stat.json +1 -1
  63. package/registry/switch.json +1 -1
  64. package/registry/tabs.json +1 -1
  65. package/registry/theme.json +23 -8
  66. package/registry/toast.json +1 -1
  67. package/registry/tooltip.json +1 -1
package/dist/native.js CHANGED
@@ -33,7 +33,7 @@ import { Image, StyleSheet, Text, View } from "react-native";
33
33
  import { SvgUri } from "react-native-svg";
34
34
 
35
35
  // ../tokens/dist/native.js
36
- var themes = Object.freeze({ dark: Object.freeze({
36
+ var themes = /* @__PURE__ */ Object.freeze({ dark: /* @__PURE__ */ Object.freeze({
37
37
  "surface0": "#0c0c0e",
38
38
  "surface1": "#161618",
39
39
  "surface2": "#1f1f23",
@@ -67,7 +67,7 @@ var themes = Object.freeze({ dark: Object.freeze({
67
67
  "scrim": "rgba(0,0,0,0.6)",
68
68
  "scrimStrong": "rgba(0,0,0,0.8)",
69
69
  "overlay": "rgba(0,0,0,0.7)"
70
- }), light: Object.freeze({
70
+ }), light: /* @__PURE__ */ Object.freeze({
71
71
  "surface0": "#fafafa",
72
72
  "surface1": "#ffffff",
73
73
  "surface2": "#f1f1f3",
@@ -102,110 +102,49 @@ var themes = Object.freeze({ dark: Object.freeze({
102
102
  "scrimStrong": "rgba(0,0,0,0.8)",
103
103
  "overlay": "rgba(0,0,0,0.7)"
104
104
  }) });
105
- var radius = Object.freeze({
105
+ var radius = /* @__PURE__ */ Object.freeze({
106
106
  "sm": 8,
107
107
  "md": 12,
108
108
  "lg": 16,
109
109
  "xl": 20,
110
110
  "full": 9999
111
111
  });
112
- var typography = Object.freeze({
113
- "sans": "Inter",
114
- "display": "Inter",
115
- "mono": "JetBrains Mono"
116
- });
117
- var motion = Object.freeze({ ease: Object.freeze([0.16, 1, 0.3, 1]) });
118
- var brands = Object.freeze({
119
- "krizaka": {
120
- "dark": {
121
- "accent": "#196df5",
122
- "accentHover": "#0e5bd8",
123
- "accentSoft": "rgba(25,109,245,0.1)",
124
- "accentText": "#629cf8",
125
- "accent2": "#196df5",
126
- "onAccent": "#ffffff",
127
- "ring": "#196df5",
128
- "info": "#196df5",
129
- "infoText": "#629cf8",
130
- "brandGradientFrom": "#0e1525",
131
- "brandGradientVia": "#0e0f16",
132
- "brandGradientTo": "#0c0c0e"
133
- },
134
- "light": {
135
- "accent": "#0a64f5",
136
- "accentHover": "#0d55c9",
137
- "accentSoft": "rgba(10,100,245,0.08)",
138
- "accentText": "#0954ce",
139
- "accent2": "#0a64f5",
140
- "onAccent": "#ffffff",
141
- "ring": "#0a64f5",
142
- "info": "#0a64f5",
143
- "infoText": "#0954ce",
144
- "brandGradientFrom": "#dcebfe",
145
- "brandGradientVia": "#f3f6fc",
146
- "brandGradientTo": "#fafafa"
147
- }
148
- },
149
- "orazaka": {
150
- "dark": {
151
- "accent": "#f67e23",
152
- "accentHover": "#f79245",
153
- "accentSoft": "rgba(246,126,35,0.12)",
154
- "accentText": "#f78c3b",
155
- "accent2": "#f59e0b",
156
- "onAccent": "#0c0c0e",
157
- "ring": "#f67e23",
158
- "info": "#3b83f7",
159
- "infoText": "#629cf8",
160
- "brandGradientFrom": "#28170b",
161
- "brandGradientVia": "#17130c",
162
- "brandGradientTo": "#0c0c0e"
163
- },
164
- "light": {
165
- "accent": "#b45309",
166
- "accentHover": "#964608",
167
- "accentSoft": "rgba(180,83,9,0.08)",
168
- "accentText": "#9b4808",
169
- "accent2": "#a45904",
170
- "onAccent": "#ffffff",
171
- "ring": "#b45309",
172
- "info": "#0a64f5",
173
- "infoText": "#0954ce",
174
- "brandGradientFrom": "#ffebd6",
175
- "brandGradientVia": "#fdf7ed",
176
- "brandGradientTo": "#fafafa"
177
- }
178
- },
179
- "orochia": {
180
- "dark": {
181
- "accent": "#7c3aed",
182
- "accentHover": "#6d28d9",
183
- "accentSoft": "rgba(139,92,246,0.12)",
184
- "accentText": "#a78bfa",
185
- "accent2": "#db2777",
186
- "onAccent": "#ffffff",
187
- "ring": "#a78bfa",
188
- "info": "#7c3aed",
189
- "infoText": "#a78bfa",
190
- "brandGradientFrom": "#1a0e2a",
191
- "brandGradientVia": "#1c0d17",
192
- "brandGradientTo": "#0c0c0e"
193
- },
194
- "light": {
195
- "accent": "#7c3aed",
196
- "accentHover": "#6d28d9",
197
- "accentSoft": "rgba(124,58,237,0.08)",
198
- "accentText": "#6d28d9",
199
- "accent2": "#db2777",
200
- "onAccent": "#ffffff",
201
- "ring": "#7c3aed",
202
- "info": "#7c3aed",
203
- "infoText": "#6d28d9",
204
- "brandGradientFrom": "#efe7fe",
205
- "brandGradientVia": "#fdedf5",
206
- "brandGradientTo": "#fafafa"
207
- }
208
- }
112
+ var motion = /* @__PURE__ */ Object.freeze({ ease: /* @__PURE__ */ Object.freeze([0.16, 1, 0.3, 1]) });
113
+ var marks = /* @__PURE__ */ Object.freeze({
114
+ "krizaka": [
115
+ [
116
+ "0%",
117
+ "#196df5"
118
+ ],
119
+ [
120
+ "100%",
121
+ "#629cf8"
122
+ ]
123
+ ],
124
+ "orazaka": [
125
+ [
126
+ "0%",
127
+ "#b45309"
128
+ ],
129
+ [
130
+ "100%",
131
+ "#dc6509"
132
+ ]
133
+ ],
134
+ "orochia": [
135
+ [
136
+ "0%",
137
+ "#7c3aed"
138
+ ],
139
+ [
140
+ "55%",
141
+ "#d946ef"
142
+ ],
143
+ [
144
+ "100%",
145
+ "#f472b6"
146
+ ]
147
+ ]
209
148
  });
210
149
 
211
150
  // src/native/theme.tsx
@@ -759,7 +698,7 @@ var KRIZAKA = {
759
698
  shield: "M259.7,134 L259.7,226 L180,272 L100.3,226 L100.3,134 L180,88 L212,106.5",
760
699
  stroke: 22,
761
700
  ink: { x1: 70, y1: 290, x2: 290, y2: 70 },
762
- blue: { x1: 180, y1: 180, x2: 300, y2: 60, stops: [["0%", "#196df5"], ["100%", "#629cf8"]] },
701
+ blue: { x1: 180, y1: 180, x2: 300, y2: 60, stops: marks.krizaka },
763
702
  /** The vertex where the shield opens: a node (the serpent's head in Orochia's grammar). */
764
703
  node: { cx: 259.7, cy: 134, r: 19, inner: 6 },
765
704
  core: { cx: 180, cy: 180, r: 24, inner: 8 },
@@ -810,7 +749,7 @@ function useMarkMotion(size, animated, spinMs = 3e4) {
810
749
  import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
811
750
  function KrizakaMark({ size = 48, animated = true, title, neutral }) {
812
751
  const { theme } = useTheme();
813
- const { Animated: Animated8, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
752
+ const { Animated: Animated9, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
814
753
  const id = useSvgId("kzm");
815
754
  const viewBox = size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox;
816
755
  const stroke = neutral ?? theme.textMuted;
@@ -836,8 +775,8 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
836
775
  /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: KRIZAKA.ring.r, stroke, strokeWidth: KRIZAKA.ring.width, opacity: 0.35, fill: "none" }),
837
776
  /* @__PURE__ */ jsx10(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: /* @__PURE__ */ jsx10(Path, { d: KRIZAKA.shield, stroke: `url(#${id}i)`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
838
777
  ] }),
839
- /* @__PURE__ */ jsx10(Animated8.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx10(Svg2, { viewBox, style: layer, children: /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
840
- /* @__PURE__ */ jsx10(Animated8.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs7(Svg2, { viewBox, style: layer, children: [
778
+ /* @__PURE__ */ jsx10(Animated9.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsx10(Svg2, { viewBox, style: layer, children: /* @__PURE__ */ jsx10(Circle, { cx: 200, cy: 200, r: KRIZAKA.orbit.r, stroke, strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
779
+ /* @__PURE__ */ jsx10(Animated9.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs7(Svg2, { viewBox, style: layer, children: [
841
780
  /* @__PURE__ */ jsx10(Defs2, { children: blue }),
842
781
  /* @__PURE__ */ jsxs7(Group, { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
843
782
  dot(KRIZAKA.node),
@@ -847,11 +786,209 @@ function KrizakaMark({ size = 48, animated = true, title, neutral }) {
847
786
  ] });
848
787
  }
849
788
 
789
+ // src/native/mascots.tsx
790
+ import { useEffect as useEffect5, useState as useState7 } from "react";
791
+ import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated4, Easing as Easing2, View as View7 } from "react-native";
792
+ import Svg3, { Circle as Circle2, Defs as Defs3, Ellipse, G, LinearGradient as LinearGradient3, Path as Path2, Rect as Rect2, Stop as Stop3 } from "react-native-svg";
793
+
794
+ // src/mascots/geometry.ts
795
+ var mirror = (d) => d.replace(/(-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)/g, (_, x, y) => `${120 - Number(x)} ${y}`);
796
+ var falconWing = "M29 58 C17 68 19 88 37 86 C31 76 31 66 29 58 Z";
797
+ var pigeonWing = "M36 58 C20 50 16 80 38 84 C34 74 34 66 36 58 Z";
798
+ var BIRDS = {
799
+ falcon: {
800
+ shadow: [60, 110, 26, 3.5],
801
+ legs: ["M51 94 L48 108 M44 108 L52 108", "M69 94 L72 108 M68 108 L76 108"],
802
+ body: "M30 62 C30 42 90 42 90 62 C90 88 78 98 60 98 C42 98 30 88 30 62 Z",
803
+ belly: "M41 66 C41 55 79 55 79 66 C79 82 71 90 60 90 C49 90 41 82 41 66 Z",
804
+ wings: [
805
+ { d: falconWing, pivot: [29, 58] },
806
+ { d: mirror(falconWing), pivot: [91, 58] }
807
+ ],
808
+ head: { cx: 60, cy: 38, r: 22 },
809
+ details: ["M46 20 L52 10 L56 19 Z", "M74 20 L68 10 L64 19 Z"],
810
+ visor: { x: 41, y: 29, w: 38, h: 13 },
811
+ beak: "M54 45 L66 45 L60 57 Z",
812
+ eyes: { at: [[50, 35.5], [70, 35.5]], white: 0, pupil: 3.2 }
813
+ },
814
+ owl: {
815
+ shadow: [60, 110, 24, 3.5],
816
+ legs: ["M53 100 L51 107 M47 107 L55 107", "M67 100 L69 107 M65 107 L73 107"],
817
+ body: "M28 52 C28 20 92 20 92 52 C92 86 82 102 60 102 C38 102 28 86 28 52 Z",
818
+ belly: "M42 66 C42 52 78 52 78 66 C78 86 72 94 60 94 C48 94 42 86 42 66 Z",
819
+ wings: [
820
+ { d: "M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z", pivot: [29, 58] },
821
+ { d: mirror("M29 58 C18 68 20 88 36 90 C32 78 32 68 29 58 Z"), pivot: [91, 58] }
822
+ ],
823
+ head: { cx: 60, cy: 42, r: 0 },
824
+ details: ["M31 20 L47 31 L31 41 Z", "M89 20 L73 31 L89 41 Z"],
825
+ beak: "M55 50 L65 50 L60 59 Z",
826
+ eyes: { at: [[47, 41], [73, 41]], white: 10, pupil: 4 }
827
+ },
828
+ duck: {
829
+ shadow: [60, 110, 30, 3.5],
830
+ legs: [],
831
+ back: ["M88 80 C100 76 104 66 96 62 C98 70 94 74 88 74 Z"],
832
+ body: "M26 80 C26 62 94 62 94 80 C94 100 82 106 60 106 C38 106 26 100 26 80 Z",
833
+ belly: "M38 84 C38 72 82 72 82 84 C82 96 74 101 60 101 C46 101 38 96 38 84 Z",
834
+ wings: [
835
+ { d: "M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z", pivot: [27, 74] },
836
+ { d: mirror("M27 74 C14 80 18 98 35 96 C31 88 29 80 27 74 Z"), pivot: [93, 74] }
837
+ ],
838
+ head: { cx: 60, cy: 42, r: 23 },
839
+ details: ["M57 20 C54 11 63 8 66 14 C62 13 60 16 61 20 Z"],
840
+ glasses: true,
841
+ beak: "M43 51 C43 46 55 45 60 45 C65 45 77 46 77 51 C77 56 66 60 60 60 C54 60 43 56 43 51 Z",
842
+ eyes: { at: [[51, 37], [69, 37]], white: 0, pupil: 2.6 }
843
+ },
844
+ flamingo: {
845
+ shadow: [60, 110, 20, 3],
846
+ legs: ["M56 86 L55 97 L58 108 M53 108 L62 108", "M65 86 L66 108 M62 108 L71 108"],
847
+ body: "M38 70 C38 54 88 54 88 70 C88 86 76 90 62 90 C48 90 38 86 38 70 Z",
848
+ belly: "M46 72 C46 63 80 63 80 72 C80 82 72 85 63 85 C54 85 46 82 46 72 Z",
849
+ wings: [
850
+ { d: "M42 64 C30 68 32 84 47 84 C43 76 43 70 42 64 Z", pivot: [42, 64] },
851
+ { d: "M84 64 C96 68 94 84 79 84 C83 76 83 70 84 64 Z", pivot: [84, 64] }
852
+ ],
853
+ neck: { d: "M58 60 C58 42 40 34 46 22", width: 7 },
854
+ head: { cx: 48, cy: 18, r: 11 },
855
+ details: [],
856
+ beak: "M38 16 C28 18 29 28 24 33 C33 28 38 23 40 20 Z",
857
+ eyes: { at: [[46, 15]], white: 3.2, pupil: 1.8 }
858
+ },
859
+ pigeon: {
860
+ shadow: [60, 112, 22, 3],
861
+ legs: ["M52 94 L51 99 M48 99 L54 99", "M68 94 L69 99 M66 99 L72 99"],
862
+ back: ["M53 98 L52 103", "M67 98 L68 103", "M30 68 C16 72 14 62 28 56 C17 57 15 49 32 48 Z"],
863
+ body: "M34 64 C34 44 86 44 86 64 C86 86 74 96 60 96 C46 96 34 86 34 64 Z",
864
+ belly: "M43 68 C43 57 77 57 77 68 C77 82 70 88 60 88 C50 88 43 82 43 68 Z",
865
+ wings: [
866
+ { d: pigeonWing, pivot: [36, 58] },
867
+ { d: mirror(pigeonWing), pivot: [84, 58] }
868
+ ],
869
+ head: { cx: 60, cy: 36, r: 19 },
870
+ details: ["M54 18 C56 12 64 12 66 18 C63 16 57 16 54 18 Z"],
871
+ beak: "M55 41 L65 41 L60 50 Z",
872
+ eyes: { at: [[52, 33], [68, 33]], white: 5, pupil: 2.4 },
873
+ parcel: ["M60 100 L71 105 L60 110 L49 105 Z", "M49 105 L60 110 L60 118 L49 113 Z", "M71 105 L60 110 L60 118 L71 113 Z"]
874
+ }
875
+ };
876
+ var MOOD_PARTS = {
877
+ /** The badge of `success` and `error`, top right. */
878
+ badge: { cx: 98, cy: 22, r: 11 },
879
+ check: "M92.5 22.5 L96.8 26.6 L103.6 18.4",
880
+ bang: { line: "M98 15.5 L98 23.5", dot: [98, 28] },
881
+ /** `thinking`: three dots rising to the right of the head. */
882
+ dots: [
883
+ [88, 26, 2.6],
884
+ [96, 19, 3.2],
885
+ [105, 11, 3.8]
886
+ ],
887
+ /** `empty`: an open tray beside the bird. */
888
+ tray: "M90 96 L110 96 L107 108 L93 108 Z",
889
+ /** `success`: two sparkles. */
890
+ sparkles: ["M16 26 L18 31 L23 33 L18 35 L16 40 L14 35 L9 33 L14 31 Z", "M104 52 L105.2 55 L108 56 L105.2 57 L104 60 L102.8 57 L100 56 L102.8 55 Z"]
891
+ };
892
+ var archEye = ([x, y], r) => `M${x - r} ${y + r * 0.45} Q${x} ${y - r * 1.15} ${x + r} ${y + r * 0.45}`;
893
+ var lidEye = ([x, y], r) => `M${x - r} ${y + 0.4} L${x + r} ${y + 0.4}`;
894
+ var upperLid = ([x, y], r) => `M${x - r} ${y} A${r} ${r} 0 0 1 ${x + r} ${y} Z`;
895
+ var brow = ([x, y], r, side) => `M${x - r * 1.1} ${y - r * 1.25 - (side < 0 ? 0 : r * 0.7)} L${x + r * 1.1} ${y - r * 1.5 - (side < 0 ? r * 0.7 : 0)}`;
896
+ var OWN_PALETTES = {
897
+ falcon: { from: "#ff9f00", to: "#ff2a00", wing: "#d84315", detail: "#b4320d", beak: "#ffb300", eye: "#00c8d4" },
898
+ owl: { from: "#a78bfa", to: "#6d28d9", wing: "#7c3aed", detail: "#5b21b6", beak: "#fbbf24", eye: "#1f2937" },
899
+ duck: { from: "#f43f5e", to: "#be123c", wing: "#db2777", detail: "#9f1239", beak: "#fbbf24", eye: "#1f2937" },
900
+ flamingo: { from: "#f9a8d4", to: "#db2777", wing: "#ec4899", detail: "#be185d", beak: "#fbbf24", eye: "#1f2937" },
901
+ pigeon: { from: "#22d3ee", to: "#6366f1", wing: "#a855f7", detail: "#4338ca", beak: "#f59e0b", eye: "#1f2937" }
902
+ };
903
+ var LIGHT = "#ffffff";
904
+ var SHADE = "#000000";
905
+ var PARCEL = ["#f59e0b", "#d97706", "#b45309"];
906
+
907
+ // src/native/mascots.tsx
908
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
909
+ function useBob(animated) {
910
+ const [y] = useState7(() => new Animated4.Value(0));
911
+ useEffect5(() => {
912
+ if (!animated) return;
913
+ let loop;
914
+ let cancelled = false;
915
+ void AccessibilityInfo3.isReduceMotionEnabled().then((reduce) => {
916
+ if (reduce || cancelled) return;
917
+ const step = (toValue) => Animated4.timing(y, { toValue, duration: 1800, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true });
918
+ loop = Animated4.loop(Animated4.sequence([step(-2.5), step(0)]));
919
+ loop.start();
920
+ });
921
+ return () => {
922
+ cancelled = true;
923
+ loop?.stop();
924
+ };
925
+ }, [animated, y]);
926
+ return y;
927
+ }
928
+ function Mascot({ bird = "owl", mood = "welcome", tone: tone2 = "brand", size = 96, animated = true, title, style }) {
929
+ const { theme } = useTheme();
930
+ const id = useSvgId("kzb");
931
+ const bob = useBob(animated);
932
+ const g = BIRDS[bird];
933
+ const brand = { from: theme.accent2, to: theme.accent, wing: theme.accent, detail: theme.accent2, beak: theme.warning, eye: theme.textPrimary };
934
+ const p = tone2 === "own" ? OWN_PALETTES[bird] : brand;
935
+ const outline = theme.borderStrong;
936
+ const body = `url(#${id})`;
937
+ const line = { stroke: outline, strokeWidth: 1.4, strokeLinejoin: "round" };
938
+ const eyeR = g.eyes.white || g.eyes.pupil * 1.2;
939
+ const look3 = mood === "thinking" ? 1.4 : 0;
940
+ const rot = (deg, [x, y]) => `rotate(${deg} ${x} ${y})`;
941
+ const [wl, wr] = g.wings;
942
+ return /* @__PURE__ */ jsx11(View7, { style: [{ width: size, height: size }, style], ...markA11y(title), children: /* @__PURE__ */ jsx11(Animated4.View, { style: { transform: [{ translateY: bob }] }, children: /* @__PURE__ */ jsxs8(Svg3, { width: size, height: size, viewBox: "0 0 120 120", children: [
943
+ /* @__PURE__ */ jsx11(Defs3, { children: /* @__PURE__ */ jsxs8(LinearGradient3, { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
944
+ /* @__PURE__ */ jsx11(Stop3, { offset: "0%", stopColor: p.from }),
945
+ /* @__PURE__ */ jsx11(Stop3, { offset: "100%", stopColor: p.to })
946
+ ] }) }),
947
+ /* @__PURE__ */ jsx11(Ellipse, { cx: g.shadow[0], cy: g.shadow[1], rx: g.shadow[2], ry: g.shadow[3], fill: SHADE, opacity: 0.14 }),
948
+ mood === "empty" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.tray, stroke: outline, strokeWidth: 1.6, strokeDasharray: "3 3", fill: "none" }),
949
+ g.legs.map((d) => /* @__PURE__ */ jsx11(Path2, { d, stroke: p.beak, strokeWidth: 2.6, strokeLinecap: "round", fill: "none" }, d)),
950
+ g.back?.map((d) => d.endsWith("Z") ? /* @__PURE__ */ jsx11(Path2, { d, fill: p.detail, ...line }, d) : /* @__PURE__ */ jsx11(Path2, { d, stroke: outline, strokeWidth: 1.4, fill: "none" }, d)),
951
+ g.parcel?.map((d, i) => /* @__PURE__ */ jsx11(Path2, { d, fill: PARCEL[i], ...line }, d)),
952
+ /* @__PURE__ */ jsx11(Path2, { d: g.body, fill: body, ...line }),
953
+ /* @__PURE__ */ jsx11(Path2, { d: g.belly, fill: LIGHT, opacity: 0.28 }),
954
+ [wl, wr].map((w, i) => {
955
+ const turn = mood === "success" ? i === 0 ? 28 : -28 : mood === "welcome" && i === 1 ? -20 : 0;
956
+ return /* @__PURE__ */ jsxs8(G, { transform: turn ? rot(turn, w.pivot) : void 0, children: [
957
+ /* @__PURE__ */ jsx11(Path2, { d: w.d, fill: p.wing, ...line }),
958
+ /* @__PURE__ */ jsx11(Path2, { d: w.d, fill: SHADE, opacity: 0.16 })
959
+ ] }, i);
960
+ }),
961
+ g.neck && /* @__PURE__ */ jsx11(Path2, { d: g.neck.d, stroke: body, strokeWidth: g.neck.width, strokeLinecap: "round", fill: "none" }),
962
+ g.head.r > 0 && /* @__PURE__ */ jsx11(Circle2, { cx: g.head.cx, cy: g.head.cy, r: g.head.r, fill: body, ...line }),
963
+ g.details.map((d) => /* @__PURE__ */ jsx11(Path2, { d, fill: p.detail, ...line }, d)),
964
+ g.visor && /* @__PURE__ */ jsx11(Rect2, { x: g.visor.x, y: g.visor.y, width: g.visor.w, height: g.visor.h, rx: 4, fill: theme.surface0, ...line }),
965
+ g.eyes.at.map(
966
+ (at, i) => mood === "empty" && g.eyes.white > 0 ? /* @__PURE__ */ jsxs8(G, { children: [
967
+ /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
968
+ /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1] + g.eyes.pupil * 0.7, r: g.eyes.pupil, fill: SHADE }),
969
+ /* @__PURE__ */ jsx11(Path2, { d: upperLid(at, g.eyes.white), fill: p.detail, ...line })
970
+ ] }, i) : mood === "success" || mood === "empty" ? /* @__PURE__ */ jsx11(Path2, { d: mood === "success" ? archEye(at, eyeR * 0.85) : lidEye(at, eyeR * 0.8), stroke: g.visor ? p.eye : outline, strokeWidth: 2.2, strokeLinecap: "round", fill: "none" }, i) : /* @__PURE__ */ jsxs8(G, { children: [
971
+ g.eyes.white > 0 && /* @__PURE__ */ jsx11(Circle2, { cx: at[0], cy: at[1], r: g.eyes.white, fill: LIGHT, ...line }),
972
+ /* @__PURE__ */ jsx11(Circle2, { cx: at[0] + look3, cy: at[1] - look3, r: g.eyes.pupil, fill: g.visor ? p.eye : SHADE })
973
+ ] }, i)
974
+ ),
975
+ g.glasses && g.eyes.at.map(([x, y]) => /* @__PURE__ */ jsx11(Circle2, { cx: x, cy: y, r: 6.5, fill: "none", stroke: outline, strokeWidth: 1.3 }, x)),
976
+ mood === "error" && g.eyes.at.map((at, i) => /* @__PURE__ */ jsx11(Path2, { d: brow(at, eyeR, g.eyes.at.length === 1 ? 1 : i === 0 ? -1 : 1), stroke: outline, strokeWidth: 2, strokeLinecap: "round" }, i)),
977
+ /* @__PURE__ */ jsx11(Path2, { d: g.beak, fill: p.beak, ...line }),
978
+ mood === "thinking" && MOOD_PARTS.dots.map(([cx, cy, r], i) => /* @__PURE__ */ jsx11(Circle2, { cx, cy, r, fill: theme.textSecondary, opacity: 0.5 + i * 0.25 }, cx)),
979
+ (mood === "success" || mood === "error") && /* @__PURE__ */ jsx11(Circle2, { cx: MOOD_PARTS.badge.cx, cy: MOOD_PARTS.badge.cy, r: MOOD_PARTS.badge.r, fill: mood === "success" ? theme.success : theme.danger }),
980
+ mood === "success" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.check, stroke: theme.surface0, strokeWidth: 2.6, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }),
981
+ mood === "error" && /* @__PURE__ */ jsx11(Path2, { d: MOOD_PARTS.bang.line, stroke: theme.surface0, strokeWidth: 2.8, strokeLinecap: "round" }),
982
+ mood === "error" && /* @__PURE__ */ jsx11(Circle2, { cx: MOOD_PARTS.bang.dot[0], cy: MOOD_PARTS.bang.dot[1], r: 1.6, fill: theme.surface0 })
983
+ ] }) }) });
984
+ }
985
+
850
986
  // src/native/OrazakaMark.tsx
851
- import { View as View7 } from "react-native";
852
- import Svg3, { Circle as Circle2, Defs as Defs3, LinearGradient as LinearGradient3, Path as Path2, RadialGradient as RadialGradient2, Stop as Stop3 } from "react-native-svg";
987
+ import { View as View8 } from "react-native";
988
+ import Svg4, { Circle as Circle3, Defs as Defs4, LinearGradient as LinearGradient4, Path as Path3, RadialGradient as RadialGradient2, Stop as Stop4 } from "react-native-svg";
853
989
 
854
990
  // src/marks/orazaka-geometry.ts
991
+ var orange = marks.orazaka[marks.orazaka.length - 1][1];
855
992
  var ORAZAKA = {
856
993
  viewBox: "0 0 400 400",
857
994
  croppedViewBox: "76 76 248 248",
@@ -866,57 +1003,59 @@ var ORAZAKA = {
866
1003
  "M154.5,278.9 L108.8,252.6 L108.9,199.9 L137.7,183.3 L156.8,194.3 L128,210.9 L127.9,241.6 L154.6,257 L183.4,240.3 L183.3,262.3 Z"
867
1004
  ],
868
1005
  shardStroke: 5.7,
869
- amber: { x1: 90, y1: 310, x2: 310, y2: 90, stops: [["0%", "#b45309"], ["100%", "#f59e0b"]] },
1006
+ gradient: { x1: 90, y1: 310, x2: 310, y2: 90, stops: marks.orazaka },
870
1007
  core: { r: 21, inner: 7.6 },
871
- highlight: "#fffbeb",
872
- glow: { color: "#f59e0b", opacity: 0.16 },
1008
+ highlight: "#fff7ed",
1009
+ glow: { color: orange, opacity: 0.16 },
1010
+ /** The core's breathing shadow (web), in the mark's orange. */
1011
+ pulse: { color: orange, low: 0.3, high: 0.6 },
873
1012
  orbit: { r: 160, dash: "8 8", width: 1.5 },
874
1013
  ring: { r: 134, width: 1 }
875
1014
  };
876
1015
 
877
1016
  // src/native/OrazakaMark.tsx
878
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1017
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
879
1018
  function OrazakaMark({ size = 48, animated = true, title, neutral }) {
880
1019
  const { theme } = useTheme();
881
- const { Animated: Animated8, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
1020
+ const { Animated: Animated9, layer, spinStyle, pulseStyle } = useMarkMotion(size, animated);
882
1021
  const id = useSvgId("ozm");
883
1022
  const viewBox = size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox;
884
1023
  const stroke = neutral ?? theme.textMuted;
885
- const amber = /* @__PURE__ */ jsx11(LinearGradient3, { id: `${id}a`, gradientUnits: "userSpaceOnUse", x1: ORAZAKA.amber.x1, y1: ORAZAKA.amber.y1, x2: ORAZAKA.amber.x2, y2: ORAZAKA.amber.y2, children: ORAZAKA.amber.stops.map(([offset, color]) => /* @__PURE__ */ jsx11(Stop3, { offset, stopColor: color }, offset)) });
1024
+ const gradient = /* @__PURE__ */ jsx12(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__ */ jsx12(Stop4, { offset, stopColor: color }, offset)) });
886
1025
  const fill = `url(#${id}a)`;
887
- return /* @__PURE__ */ jsxs8(View7, { style: { width: size, height: size }, ...markA11y(title), children: [
888
- /* @__PURE__ */ jsxs8(Svg3, { viewBox, style: layer, children: [
889
- /* @__PURE__ */ jsx11(Defs3, { children: /* @__PURE__ */ jsxs8(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
890
- /* @__PURE__ */ jsx11(Stop3, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
891
- /* @__PURE__ */ jsx11(Stop3, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
1026
+ return /* @__PURE__ */ jsxs9(View8, { style: { width: size, height: size }, ...markA11y(title), children: [
1027
+ /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
1028
+ /* @__PURE__ */ jsx12(Defs4, { children: /* @__PURE__ */ jsxs9(RadialGradient2, { id: `${id}g`, cx: "50%", cy: "50%", r: "50%", children: [
1029
+ /* @__PURE__ */ jsx12(Stop4, { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
1030
+ /* @__PURE__ */ jsx12(Stop4, { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: 0 })
892
1031
  ] }) }),
893
- size >= 48 ? /* @__PURE__ */ jsx11(Circle2, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
894
- /* @__PURE__ */ jsx11(Circle2, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke, strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: 0.6, fill: "none" }),
895
- /* @__PURE__ */ jsx11(Circle2, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
1032
+ size >= 48 ? /* @__PURE__ */ jsx12(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: 190, fill: `url(#${id}g)` }) : null,
1033
+ /* @__PURE__ */ jsx12(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" }),
1034
+ /* @__PURE__ */ jsx12(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke, strokeWidth: ORAZAKA.ring.width, opacity: 0.35, fill: "none" })
896
1035
  ] }),
897
- /* @__PURE__ */ jsx11(Animated8.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs8(Svg3, { viewBox, style: layer, children: [
898
- /* @__PURE__ */ jsx11(Defs3, { children: amber }),
899
- ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx11(Path2, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
1036
+ /* @__PURE__ */ jsx12(Animated9.View, { style: [layer, spinStyle], children: /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
1037
+ /* @__PURE__ */ jsx12(Defs4, { children: gradient }),
1038
+ ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx12(Path3, { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d))
900
1039
  ] }) }),
901
- /* @__PURE__ */ jsx11(Animated8.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs8(Svg3, { viewBox, style: layer, children: [
902
- /* @__PURE__ */ jsx11(Defs3, { children: amber }),
903
- /* @__PURE__ */ jsx11(Circle2, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
904
- /* @__PURE__ */ jsx11(Circle2, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
1040
+ /* @__PURE__ */ jsx12(Animated9.View, { style: [layer, pulseStyle], children: /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
1041
+ /* @__PURE__ */ jsx12(Defs4, { children: gradient }),
1042
+ /* @__PURE__ */ jsx12(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
1043
+ /* @__PURE__ */ jsx12(Circle3, { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
905
1044
  ] }) })
906
1045
  ] });
907
1046
  }
908
1047
 
909
1048
  // src/native/OrochiaMark.tsx
910
- import { useEffect as useEffect5, useState as useState7 } from "react";
911
- import { AccessibilityInfo as AccessibilityInfo3, Animated as Animated4, Easing as Easing2, View as View8 } from "react-native";
912
- import Svg4, { Circle as Circle3, Defs as Defs4, Ellipse, G as Group2, LinearGradient as LinearGradient4, Path as Path3, RadialGradient as RadialGradient3, Stop as Stop4 } from "react-native-svg";
1049
+ import { useEffect as useEffect6, useState as useState8 } from "react";
1050
+ import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated5, Easing as Easing3, View as View9 } from "react-native";
1051
+ import Svg5, { Circle as Circle4, Defs as Defs5, Ellipse as Ellipse2, G as Group2, LinearGradient as LinearGradient5, Path as Path4, RadialGradient as RadialGradient3, Stop as Stop5 } from "react-native-svg";
913
1052
 
914
1053
  // src/marks/orochia-geometry.ts
915
1054
  var OROCHIA = {
916
1055
  viewBox: "0 0 400 400",
917
1056
  croppedViewBox: "86 82 228 228",
918
1057
  offset: 20,
919
- body: { x1: 70, y1: 290, x2: 290, y2: 70, stops: [["0%", "#7c3aed"], ["55%", "#d946ef"], ["100%", "#f472b6"]] },
1058
+ body: { x1: 70, y1: 290, x2: 290, y2: 70, stops: marks.orochia },
920
1059
  flameGradient: { stops: [["0%", "#a855f7"], ["100%", "#f9a8d4"]] },
921
1060
  glow: { color: "#d946ef", opacity: 0.18 },
922
1061
  orbit: { r: 160, dash: "8 8", width: 1.5 },
@@ -936,25 +1075,25 @@ var OROCHIA = {
936
1075
  };
937
1076
 
938
1077
  // src/native/OrochiaMark.tsx
939
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1078
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
940
1079
  var CENTER = OROCHIA.offset + 180;
941
1080
  function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }) {
942
1081
  const { theme } = useTheme();
943
1082
  const neutral = neutralProp ?? theme.textMuted;
944
- const [spin] = useState7(() => new Animated4.Value(0));
945
- const [pulse] = useState7(() => new Animated4.Value(0));
946
- useEffect5(() => {
1083
+ const [spin] = useState8(() => new Animated5.Value(0));
1084
+ const [pulse] = useState8(() => new Animated5.Value(0));
1085
+ useEffect6(() => {
947
1086
  if (!animated) return;
948
1087
  let loops = [];
949
1088
  let cancelled = false;
950
- void AccessibilityInfo3.isReduceMotionEnabled().then((reduce) => {
1089
+ void AccessibilityInfo4.isReduceMotionEnabled().then((reduce) => {
951
1090
  if (reduce || cancelled) return;
952
1091
  loops = [
953
- Animated4.loop(Animated4.timing(spin, { toValue: 1, duration: 3e4, easing: Easing2.linear, useNativeDriver: true })),
954
- Animated4.loop(
955
- Animated4.sequence([
956
- Animated4.timing(pulse, { toValue: 1, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true }),
957
- Animated4.timing(pulse, { toValue: 0, duration: 1600, easing: Easing2.inOut(Easing2.ease), useNativeDriver: true })
1092
+ Animated5.loop(Animated5.timing(spin, { toValue: 1, duration: 3e4, easing: Easing3.linear, useNativeDriver: true })),
1093
+ Animated5.loop(
1094
+ Animated5.sequence([
1095
+ Animated5.timing(pulse, { toValue: 1, duration: 1600, easing: Easing3.inOut(Easing3.ease), useNativeDriver: true }),
1096
+ Animated5.timing(pulse, { toValue: 0, duration: 1600, easing: Easing3.inOut(Easing3.ease), useNativeDriver: true })
958
1097
  ])
959
1098
  )
960
1099
  ];
@@ -968,52 +1107,52 @@ function OrochiaMark({ size = 48, animated = true, title, neutral: neutralProp }
968
1107
  const viewBox = size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox;
969
1108
  const layer = { position: "absolute", width: size, height: size };
970
1109
  const a11y = title ? { accessible: true, accessibilityRole: "image", accessibilityLabel: title } : { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants" };
971
- const bodyGradient = /* @__PURE__ */ jsx12(LinearGradient4, { 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__ */ jsx12(Stop4, { offset, stopColor: color }, offset)) });
972
- return /* @__PURE__ */ jsxs9(View8, { style: { width: size, height: size }, ...a11y, children: [
973
- /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
974
- /* @__PURE__ */ jsx12(Defs4, { children: /* @__PURE__ */ jsxs9(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
975
- /* @__PURE__ */ jsx12(Stop4, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
976
- /* @__PURE__ */ jsx12(Stop4, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
1110
+ const bodyGradient = /* @__PURE__ */ jsx13(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__ */ jsx13(Stop5, { offset, stopColor: color }, offset)) });
1111
+ return /* @__PURE__ */ jsxs10(View9, { style: { width: size, height: size }, ...a11y, children: [
1112
+ /* @__PURE__ */ jsxs10(Svg5, { viewBox, style: layer, children: [
1113
+ /* @__PURE__ */ jsx13(Defs5, { children: /* @__PURE__ */ jsxs10(RadialGradient3, { id: "glow", cx: "50%", cy: "50%", r: "50%", children: [
1114
+ /* @__PURE__ */ jsx13(Stop5, { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
1115
+ /* @__PURE__ */ jsx13(Stop5, { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: 0 })
977
1116
  ] }) }),
978
- /* @__PURE__ */ jsx12(Circle3, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
979
- /* @__PURE__ */ jsx12(Circle3, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
1117
+ /* @__PURE__ */ jsx13(Circle4, { cx: CENTER, cy: CENTER, r: 170, fill: "url(#glow)" }),
1118
+ /* @__PURE__ */ jsx13(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.ring.r, stroke: neutral, strokeWidth: OROCHIA.ring.width, opacity: 0.35, fill: "none" })
980
1119
  ] }),
981
- /* @__PURE__ */ jsx12(Animated4.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx12(Svg4, { viewBox, style: layer, children: /* @__PURE__ */ jsx12(Circle3, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
982
- /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
983
- /* @__PURE__ */ jsx12(Defs4, { children: bodyGradient }),
984
- /* @__PURE__ */ jsxs9(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
985
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
986
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
987
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
988
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
989
- /* @__PURE__ */ jsx12(Ellipse, { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, rotation: OROCHIA.head.rotate, origin: `${OROCHIA.head.cx}, ${OROCHIA.head.cy}`, fill: "url(#body)" }),
990
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
1120
+ /* @__PURE__ */ jsx13(Animated5.View, { style: [layer, { transform: [{ rotate: spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] }) }] }], children: /* @__PURE__ */ jsx13(Svg5, { viewBox, style: layer, children: /* @__PURE__ */ jsx13(Circle4, { cx: CENTER, cy: CENTER, r: OROCHIA.orbit.r, stroke: neutral, strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: 0.6, fill: "none" }) }) }),
1121
+ /* @__PURE__ */ jsxs10(Svg5, { viewBox, style: layer, children: [
1122
+ /* @__PURE__ */ jsx13(Defs5, { children: bodyGradient }),
1123
+ /* @__PURE__ */ jsxs10(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1124
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.arc, stroke: "url(#body)", strokeWidth: 22, strokeLinecap: "round", fill: "none" }),
1125
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash, fill: "none" }),
1126
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.neck, stroke: "url(#body)", strokeWidth: 14, strokeLinecap: "round", fill: "none" }),
1127
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.tail, stroke: "url(#body)", strokeWidth: 6, strokeLinecap: "round", fill: "none" }),
1128
+ /* @__PURE__ */ jsx13(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)" }),
1129
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: 3, strokeLinecap: "round", fill: "none" })
991
1130
  ] })
992
1131
  ] }),
993
- /* @__PURE__ */ jsx12(Animated4.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs9(Svg4, { viewBox, style: layer, children: [
994
- /* @__PURE__ */ jsx12(Defs4, { children: /* @__PURE__ */ jsx12(LinearGradient4, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx12(Stop4, { offset, stopColor: color }, offset)) }) }),
995
- /* @__PURE__ */ jsxs9(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
996
- /* @__PURE__ */ jsx12(Circle3, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
997
- /* @__PURE__ */ jsx12(Path3, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
1132
+ /* @__PURE__ */ jsx13(Animated5.View, { style: [layer, { opacity: pulse.interpolate({ inputRange: [0, 1], outputRange: [0.85, 1] }) }], children: /* @__PURE__ */ jsxs10(Svg5, { viewBox, style: layer, children: [
1133
+ /* @__PURE__ */ jsx13(Defs5, { children: /* @__PURE__ */ jsx13(LinearGradient5, { id: "flame", x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx13(Stop5, { offset, stopColor: color }, offset)) }) }),
1134
+ /* @__PURE__ */ jsxs10(Group2, { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
1135
+ /* @__PURE__ */ jsx13(Circle4, { cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
1136
+ /* @__PURE__ */ jsx13(Path4, { d: OROCHIA.flame.d, transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, fill: "url(#flame)" })
998
1137
  ] })
999
1138
  ] }) })
1000
1139
  ] });
1001
1140
  }
1002
1141
 
1003
1142
  // src/native/ProductMark.tsx
1004
- import { jsx as jsx13 } from "react/jsx-runtime";
1143
+ import { jsx as jsx14 } from "react/jsx-runtime";
1005
1144
  function ProductMark({ id, ...props }) {
1006
- if (id === "krizaka") return /* @__PURE__ */ jsx13(KrizakaMark, { ...props });
1007
- if (id === "orazaka") return /* @__PURE__ */ jsx13(OrazakaMark, { ...props });
1008
- return /* @__PURE__ */ jsx13(OrochiaMark, { ...props });
1145
+ if (id === "krizaka") return /* @__PURE__ */ jsx14(KrizakaMark, { ...props });
1146
+ if (id === "orazaka") return /* @__PURE__ */ jsx14(OrazakaMark, { ...props });
1147
+ return /* @__PURE__ */ jsx14(OrochiaMark, { ...props });
1009
1148
  }
1010
1149
 
1011
1150
  // src/native/progress.tsx
1012
- import * as React8 from "react";
1013
- import { Animated as Animated5, Easing as Easing3, StyleSheet as StyleSheet9, View as View9 } from "react-native";
1014
- import Svg5, { Circle as Circle4, Defs as Defs5, LinearGradient as LinearGradient5, Rect as Rect2, Stop as Stop5 } from "react-native-svg";
1015
- import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
1016
- var AnimatedCircle = Animated5.createAnimatedComponent(Circle4);
1151
+ import * as React9 from "react";
1152
+ import { Animated as Animated6, Easing as Easing4, StyleSheet as StyleSheet9, View as View10 } from "react-native";
1153
+ import Svg6, { Circle as Circle5, Defs as Defs6, LinearGradient as LinearGradient6, Rect as Rect3, Stop as Stop6 } from "react-native-svg";
1154
+ import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
1155
+ var AnimatedCircle = Animated6.createAnimatedComponent(Circle5);
1017
1156
  var BAR = { sm: 4, md: 8, lg: 12 };
1018
1157
  var RING = { sm: 40, md: 80, lg: 144 };
1019
1158
  var STROKE = { sm: 12, md: 9, lg: 7 };
@@ -1024,21 +1163,21 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1024
1163
  const known = typeof value === "number" && Number.isFinite(value);
1025
1164
  const ratio = known ? Math.min(1, Math.max(0, value / (max || 1))) : 0;
1026
1165
  const percent = Math.round(ratio * 100);
1027
- const [progress] = React8.useState(() => new Animated5.Value(ratio));
1028
- const [spin] = React8.useState(() => new Animated5.Value(0));
1029
- const [track, setTrack] = React8.useState(0);
1030
- React8.useEffect(() => {
1166
+ const [progress] = React9.useState(() => new Animated6.Value(ratio));
1167
+ const [spin] = React9.useState(() => new Animated6.Value(0));
1168
+ const [track, setTrack] = React9.useState(0);
1169
+ React9.useEffect(() => {
1031
1170
  if (reduce) {
1032
1171
  progress.setValue(ratio);
1033
1172
  return;
1034
1173
  }
1035
- const animation = Animated5.timing(progress, { toValue: ratio, duration: 700, easing: Easing3.out(Easing3.cubic), useNativeDriver: false });
1174
+ const animation = Animated6.timing(progress, { toValue: ratio, duration: 700, easing: Easing4.out(Easing4.cubic), useNativeDriver: false });
1036
1175
  animation.start();
1037
1176
  return () => animation.stop();
1038
1177
  }, [ratio, reduce, progress]);
1039
- React8.useEffect(() => {
1178
+ React9.useEffect(() => {
1040
1179
  if (known || reduce) return;
1041
- const loop = Animated5.loop(Animated5.timing(spin, { toValue: 1, duration: 1200, easing: Easing3.linear, useNativeDriver: true }));
1180
+ const loop = Animated6.loop(Animated6.timing(spin, { toValue: 1, duration: 1200, easing: Easing4.linear, useNativeDriver: true }));
1042
1181
  loop.start();
1043
1182
  return () => {
1044
1183
  loop.stop();
@@ -1054,9 +1193,9 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1054
1193
  "aria-valuenow": known ? Math.min(max, Math.max(0, value)) : void 0,
1055
1194
  "aria-valuetext": known ? valueText ?? `${percent}%` : valueText
1056
1195
  };
1057
- const gradient = /* @__PURE__ */ jsx14(Defs5, { children: /* @__PURE__ */ jsxs10(LinearGradient5, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
1058
- /* @__PURE__ */ jsx14(Stop5, { offset: "0", stopColor: theme.accent }),
1059
- /* @__PURE__ */ jsx14(Stop5, { offset: "1", stopColor: theme.accent2 })
1196
+ const gradient = /* @__PURE__ */ jsx15(Defs6, { children: /* @__PURE__ */ jsxs11(LinearGradient6, { id, x1: "0", y1: "0", x2: "1", y2: variant === "ring" ? "1" : "0", children: [
1197
+ /* @__PURE__ */ jsx15(Stop6, { offset: "0", stopColor: theme.accent }),
1198
+ /* @__PURE__ */ jsx15(Stop6, { offset: "1", stopColor: theme.accent2 })
1060
1199
  ] }) });
1061
1200
  if (variant === "ring") {
1062
1201
  const side = RING[size];
@@ -1065,11 +1204,11 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1065
1204
  const circumference = 2 * Math.PI * r;
1066
1205
  const offset = known ? progress.interpolate({ inputRange: [0, 1], outputRange: [circumference, 0] }) : circumference * 0.75;
1067
1206
  const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "360deg"] });
1068
- return /* @__PURE__ */ jsxs10(View9, { ...a11y, style: [styles9.ring, { width: side, height: side }, style], children: [
1069
- /* @__PURE__ */ jsx14(Animated5.View, { style: [StyleSheet9.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs10(Svg5, { width: side, height: side, viewBox: "0 0 100 100", children: [
1207
+ return /* @__PURE__ */ jsxs11(View10, { ...a11y, style: [styles9.ring, { width: side, height: side }, style], children: [
1208
+ /* @__PURE__ */ jsx15(Animated6.View, { style: [StyleSheet9.absoluteFill, { transform: [{ rotate: known ? "-90deg" : rotate }] }], children: /* @__PURE__ */ jsxs11(Svg6, { width: side, height: side, viewBox: "0 0 100 100", children: [
1070
1209
  gradient,
1071
- /* @__PURE__ */ jsx14(Circle4, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
1072
- /* @__PURE__ */ jsx14(
1210
+ /* @__PURE__ */ jsx15(Circle5, { cx: 50, cy: 50, r, fill: "none", stroke: theme.borderDefault, strokeWidth: stroke }),
1211
+ /* @__PURE__ */ jsx15(
1073
1212
  AnimatedCircle,
1074
1213
  {
1075
1214
  cx: 50,
@@ -1089,15 +1228,15 @@ function Progress({ variant = "bar", size = "md", value, max = 100, label, value
1089
1228
  }
1090
1229
  const width = known ? progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) : "40%";
1091
1230
  const translate = spin.interpolate({ inputRange: [0, 1], outputRange: [-0.4 * track, track] });
1092
- return /* @__PURE__ */ jsx14(
1093
- View9,
1231
+ return /* @__PURE__ */ jsx15(
1232
+ View10,
1094
1233
  {
1095
1234
  ...a11y,
1096
1235
  onLayout: known ? void 0 : (event) => setTrack(event.nativeEvent.layout.width),
1097
1236
  style: [styles9.bar, { height: BAR[size], backgroundColor: theme.surface3 }, style],
1098
- children: /* @__PURE__ */ jsx14(Animated5.View, { style: [styles9.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs10(Svg5, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
1237
+ children: /* @__PURE__ */ jsx15(Animated6.View, { style: [styles9.fill, { width }, known || reduce ? null : { transform: [{ translateX: translate }] }], children: /* @__PURE__ */ jsxs11(Svg6, { width: "100%", height: "100%", preserveAspectRatio: "none", children: [
1099
1238
  gradient,
1100
- /* @__PURE__ */ jsx14(Rect2, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
1239
+ /* @__PURE__ */ jsx15(Rect3, { x: 0, y: 0, width: "100%", height: "100%", fill: `url(#${id})` })
1101
1240
  ] }) })
1102
1241
  }
1103
1242
  );
@@ -1109,19 +1248,19 @@ var styles9 = StyleSheet9.create({
1109
1248
  });
1110
1249
 
1111
1250
  // src/native/segmented.tsx
1112
- import { Pressable as Pressable4, StyleSheet as StyleSheet10, Text as Text6, View as View10 } from "react-native";
1113
- import { jsx as jsx15 } from "react/jsx-runtime";
1251
+ import { Pressable as Pressable4, StyleSheet as StyleSheet10, Text as Text6, View as View11 } from "react-native";
1252
+ import { jsx as jsx16 } from "react/jsx-runtime";
1114
1253
  function Segmented({ options, value, onValueChange, size = "md", "aria-label": label, style }) {
1115
1254
  const { theme, radius: radius3 } = useTheme();
1116
- return /* @__PURE__ */ jsx15(
1117
- View10,
1255
+ return /* @__PURE__ */ jsx16(
1256
+ View11,
1118
1257
  {
1119
1258
  role: "tablist",
1120
1259
  "aria-label": label,
1121
1260
  style: [styles10.track, { backgroundColor: theme.surface2, borderColor: theme.borderSubtle, borderRadius: radius3.md, height: size === "sm" ? 32 : 40 }, style],
1122
1261
  children: options.map((option) => {
1123
1262
  const selected = option.value === value;
1124
- return /* @__PURE__ */ jsx15(
1263
+ return /* @__PURE__ */ jsx16(
1125
1264
  Pressable4,
1126
1265
  {
1127
1266
  role: "tab",
@@ -1137,7 +1276,7 @@ function Segmented({ options, value, onValueChange, size = "md", "aria-label": l
1137
1276
  selected ? { backgroundColor: theme.surface0, borderColor: theme.borderDefault } : null,
1138
1277
  option.disabled ? styles10.disabled : null
1139
1278
  ],
1140
- children: /* @__PURE__ */ jsx15(Text6, { numberOfLines: 1, style: [styles10.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
1279
+ children: /* @__PURE__ */ jsx16(Text6, { numberOfLines: 1, style: [styles10.label, { color: selected ? theme.textPrimary : theme.textSecondary, fontSize: size === "sm" ? 12 : 13 }], children: option.label })
1141
1280
  },
1142
1281
  option.value
1143
1282
  );
@@ -1153,9 +1292,9 @@ var styles10 = StyleSheet10.create({
1153
1292
  });
1154
1293
 
1155
1294
  // src/native/skeleton.tsx
1156
- import * as React9 from "react";
1157
- import { Animated as Animated6 } from "react-native";
1158
- import { jsx as jsx16 } from "react/jsx-runtime";
1295
+ import * as React10 from "react";
1296
+ import { Animated as Animated7 } from "react-native";
1297
+ import { jsx as jsx17 } from "react/jsx-runtime";
1159
1298
  var SHAPE = {
1160
1299
  text: { width: "100%", height: 12, radius: 4 },
1161
1300
  circle: { width: 40, height: 40, radius: 9999 },
@@ -1164,13 +1303,13 @@ var SHAPE = {
1164
1303
  function Skeleton({ shape = "text", width, height, style, testID }) {
1165
1304
  const { theme } = useTheme();
1166
1305
  const reduce = useReducedMotion();
1167
- const [opacity] = React9.useState(() => new Animated6.Value(1));
1168
- React9.useEffect(() => {
1306
+ const [opacity] = React10.useState(() => new Animated7.Value(1));
1307
+ React10.useEffect(() => {
1169
1308
  if (reduce) return;
1170
- const loop = Animated6.loop(
1171
- Animated6.sequence([
1172
- Animated6.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),
1173
- Animated6.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true })
1309
+ const loop = Animated7.loop(
1310
+ Animated7.sequence([
1311
+ Animated7.timing(opacity, { toValue: 0.5, duration: 900, useNativeDriver: true }),
1312
+ Animated7.timing(opacity, { toValue: 1, duration: 900, useNativeDriver: true })
1174
1313
  ])
1175
1314
  );
1176
1315
  loop.start();
@@ -1181,8 +1320,8 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
1181
1320
  }, [reduce, opacity]);
1182
1321
  const s = SHAPE[shape];
1183
1322
  const side = shape === "circle" ? width ?? height ?? s.width : void 0;
1184
- return /* @__PURE__ */ jsx16(
1185
- Animated6.View,
1323
+ return /* @__PURE__ */ jsx17(
1324
+ Animated7.View,
1186
1325
  {
1187
1326
  testID,
1188
1327
  "aria-hidden": true,
@@ -1196,10 +1335,10 @@ function Skeleton({ shape = "text", width, height, style, testID }) {
1196
1335
 
1197
1336
  // src/native/spinner.tsx
1198
1337
  import { ActivityIndicator as ActivityIndicator2 } from "react-native";
1199
- import { jsx as jsx17 } from "react/jsx-runtime";
1338
+ import { jsx as jsx18 } from "react/jsx-runtime";
1200
1339
  function Spinner({ label, size = "md", ...props }) {
1201
1340
  const { theme } = useTheme();
1202
- return /* @__PURE__ */ jsx17(
1341
+ return /* @__PURE__ */ jsx18(
1203
1342
  ActivityIndicator2,
1204
1343
  {
1205
1344
  accessible: true,
@@ -1214,9 +1353,9 @@ function Spinner({ label, size = "md", ...props }) {
1214
1353
  }
1215
1354
 
1216
1355
  // src/native/toast.tsx
1217
- import * as React10 from "react";
1218
- import { AccessibilityInfo as AccessibilityInfo4, Animated as Animated7, Pressable as Pressable5, StyleSheet as StyleSheet11, Text as Text7, View as View11 } from "react-native";
1219
- import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
1356
+ import * as React11 from "react";
1357
+ import { AccessibilityInfo as AccessibilityInfo5, Animated as Animated8, Pressable as Pressable5, StyleSheet as StyleSheet11, Text as Text7, View as View12 } from "react-native";
1358
+ import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
1220
1359
  var items = [];
1221
1360
  var listeners2 = /* @__PURE__ */ new Set();
1222
1361
  var counter = 0;
@@ -1251,30 +1390,30 @@ var toast = Object.assign(show, {
1251
1390
  function ToastView({ item, closeLabel, duration }) {
1252
1391
  const { theme, radius: radius3 } = useTheme();
1253
1392
  const reduce = useReducedMotion();
1254
- const [enter] = React10.useState(() => new Animated7.Value(reduce ? 1 : 0));
1255
- React10.useEffect(() => {
1393
+ const [enter] = React11.useState(() => new Animated8.Value(reduce ? 1 : 0));
1394
+ React11.useEffect(() => {
1256
1395
  if (reduce) enter.setValue(1);
1257
- else Animated7.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
1396
+ else Animated8.timing(enter, { toValue: 1, duration: 220, useNativeDriver: true }).start();
1258
1397
  }, [enter, reduce]);
1259
- React10.useEffect(() => {
1260
- AccessibilityInfo4.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
1398
+ React11.useEffect(() => {
1399
+ AccessibilityInfo5.announceForAccessibility(item.description ? `${item.title}. ${item.description}` : item.title);
1261
1400
  }, [item.title, item.description]);
1262
1401
  const ms = item.duration ?? duration;
1263
- React10.useEffect(() => {
1402
+ React11.useEffect(() => {
1264
1403
  if (!Number.isFinite(ms)) return;
1265
1404
  const timer2 = setTimeout(() => dismiss(item.id), ms);
1266
1405
  return () => clearTimeout(timer2);
1267
1406
  }, [item.id, ms]);
1268
1407
  const edge = { success: theme.success, warning: theme.warning, error: theme.danger, info: theme.info, default: theme.borderDefault }[item.tone ?? "default"];
1269
- const text = /* @__PURE__ */ jsxs11(Fragment3, { children: [
1270
- item.icon ? /* @__PURE__ */ jsx18(View11, { "aria-hidden": true, children: item.icon }) : null,
1271
- /* @__PURE__ */ jsxs11(View11, { style: styles11.content, children: [
1272
- /* @__PURE__ */ jsx18(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
1273
- item.description ? /* @__PURE__ */ jsx18(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
1408
+ const text = /* @__PURE__ */ jsxs12(Fragment3, { children: [
1409
+ item.icon ? /* @__PURE__ */ jsx19(View12, { "aria-hidden": true, children: item.icon }) : null,
1410
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.content, children: [
1411
+ /* @__PURE__ */ jsx19(Txt, { variant: "label", numberOfLines: 2, children: item.title }),
1412
+ item.description ? /* @__PURE__ */ jsx19(Txt, { variant: "caption", tone: "secondary", numberOfLines: 3, children: item.description }) : null
1274
1413
  ] })
1275
1414
  ] });
1276
- const body = /* @__PURE__ */ jsxs11(Fragment3, { children: [
1277
- item.onPress ? /* @__PURE__ */ jsx18(
1415
+ const body = /* @__PURE__ */ jsxs12(Fragment3, { children: [
1416
+ item.onPress ? /* @__PURE__ */ jsx19(
1278
1417
  Pressable5,
1279
1418
  {
1280
1419
  role: "button",
@@ -1285,8 +1424,8 @@ function ToastView({ item, closeLabel, duration }) {
1285
1424
  style: ({ pressed }) => [styles11.main, { opacity: pressed ? 0.8 : 1 }],
1286
1425
  children: text
1287
1426
  }
1288
- ) : /* @__PURE__ */ jsx18(View11, { style: styles11.main, children: text }),
1289
- item.action ? /* @__PURE__ */ jsx18(
1427
+ ) : /* @__PURE__ */ jsx19(View12, { style: styles11.main, children: text }),
1428
+ item.action ? /* @__PURE__ */ jsx19(
1290
1429
  Pressable5,
1291
1430
  {
1292
1431
  role: "button",
@@ -1295,23 +1434,23 @@ function ToastView({ item, closeLabel, duration }) {
1295
1434
  dismiss(item.id);
1296
1435
  },
1297
1436
  style: [styles11.action, { backgroundColor: theme.accent, borderRadius: radius3.sm }],
1298
- children: /* @__PURE__ */ jsx18(Text7, { style: [styles11.actionLabel, { color: theme.onAccent }], children: item.action.label })
1437
+ children: /* @__PURE__ */ jsx19(Text7, { style: [styles11.actionLabel, { color: theme.onAccent }], children: item.action.label })
1299
1438
  }
1300
1439
  ) : null,
1301
- /* @__PURE__ */ jsx18(Pressable5, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles11.close, children: /* @__PURE__ */ jsx18(Text7, { style: [styles11.cross, { color: theme.textSecondary }], children: "\xD7" }) })
1440
+ /* @__PURE__ */ jsx19(Pressable5, { role: "button", "aria-label": closeLabel, hitSlop: 10, onPress: () => dismiss(item.id), style: styles11.close, children: /* @__PURE__ */ jsx19(Text7, { style: [styles11.cross, { color: theme.textSecondary }], children: "\xD7" }) })
1302
1441
  ] });
1303
1442
  const frame = [
1304
1443
  styles11.toast,
1305
1444
  { backgroundColor: theme.surface2, borderColor: theme.borderDefault, borderLeftColor: edge, borderRadius: radius3.lg, shadowColor: theme.scrimStrong }
1306
1445
  ];
1307
1446
  const motion3 = { transform: [{ translateY: enter.interpolate({ inputRange: [0, 1], outputRange: [-8, 0] }) }] };
1308
- return /* @__PURE__ */ jsx18(Animated7.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx18(View11, { style: frame, children: body }) });
1447
+ return /* @__PURE__ */ jsx19(Animated8.View, { "aria-live": "polite", style: motion3, children: /* @__PURE__ */ jsx19(View12, { style: frame, children: body }) });
1309
1448
  }
1310
1449
  function Toaster({ closeLabel, position = "top", offset = 12, duration = 6e3, max = 3 }) {
1311
- const all = React10.useSyncExternalStore(subscribe2, snapshot, snapshot);
1450
+ const all = React11.useSyncExternalStore(subscribe2, snapshot, snapshot);
1312
1451
  const shown = all.slice(-max);
1313
1452
  if (shown.length === 0) return null;
1314
- return /* @__PURE__ */ jsx18(View11, { pointerEvents: "box-none", style: [styles11.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx18(ToastView, { item, closeLabel, duration }, item.id)) });
1453
+ return /* @__PURE__ */ jsx19(View12, { pointerEvents: "box-none", style: [styles11.stack, position === "top" ? { top: offset } : { bottom: offset }], children: (position === "top" ? shown : [...shown].reverse()).map((item) => /* @__PURE__ */ jsx19(ToastView, { item, closeLabel, duration }, item.id)) });
1315
1454
  }
1316
1455
  var styles11 = StyleSheet11.create({
1317
1456
  stack: { position: "absolute", left: 12, right: 12, gap: 8, zIndex: 100 },
@@ -1354,6 +1493,7 @@ export {
1354
1493
  EmptyState,
1355
1494
  IconButton,
1356
1495
  KrizakaMark,
1496
+ Mascot,
1357
1497
  OrazakaMark,
1358
1498
  OrochiaMark,
1359
1499
  ProductMark,