@xenition/ui 0.1.0 → 0.1.2

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 (121) hide show
  1. package/dist/native/commerce/GenerativeCover.d.ts +14 -9
  2. package/dist/native/commerce/GenerativeCover.d.ts.map +1 -1
  3. package/dist/native/commerce/GenerativeCover.js +31 -7
  4. package/dist/native/commerce/GenerativeCover.js.map +1 -1
  5. package/dist/native/marketing/AnnouncementBar.d.ts +33 -0
  6. package/dist/native/marketing/AnnouncementBar.d.ts.map +1 -0
  7. package/dist/native/marketing/AnnouncementBar.js +101 -0
  8. package/dist/native/marketing/AnnouncementBar.js.map +1 -0
  9. package/dist/native/marketing/AuroraBackground.d.ts +35 -0
  10. package/dist/native/marketing/AuroraBackground.d.ts.map +1 -0
  11. package/dist/native/marketing/AuroraBackground.js +56 -0
  12. package/dist/native/marketing/AuroraBackground.js.map +1 -0
  13. package/dist/native/marketing/Bento.d.ts +54 -0
  14. package/dist/native/marketing/Bento.d.ts.map +1 -0
  15. package/dist/native/marketing/Bento.js +139 -0
  16. package/dist/native/marketing/Bento.js.map +1 -0
  17. package/dist/native/marketing/Carousel.d.ts +26 -0
  18. package/dist/native/marketing/Carousel.d.ts.map +1 -0
  19. package/dist/native/marketing/Carousel.js +95 -0
  20. package/dist/native/marketing/Carousel.js.map +1 -0
  21. package/dist/native/marketing/ComparisonTable.d.ts +38 -0
  22. package/dist/native/marketing/ComparisonTable.d.ts.map +1 -0
  23. package/dist/native/marketing/ComparisonTable.js +84 -0
  24. package/dist/native/marketing/ComparisonTable.js.map +1 -0
  25. package/dist/native/marketing/Countdown.d.ts +25 -0
  26. package/dist/native/marketing/Countdown.d.ts.map +1 -0
  27. package/dist/native/marketing/Countdown.js +107 -0
  28. package/dist/native/marketing/Countdown.js.map +1 -0
  29. package/dist/native/marketing/CoverGallery.d.ts +38 -0
  30. package/dist/native/marketing/CoverGallery.d.ts.map +1 -0
  31. package/dist/native/marketing/CoverGallery.js +41 -0
  32. package/dist/native/marketing/CoverGallery.js.map +1 -0
  33. package/dist/native/marketing/EditorialGrid.d.ts +73 -0
  34. package/dist/native/marketing/EditorialGrid.d.ts.map +1 -0
  35. package/dist/native/marketing/EditorialGrid.js +34 -0
  36. package/dist/native/marketing/EditorialGrid.js.map +1 -0
  37. package/dist/native/marketing/FeatureSplit.d.ts +29 -0
  38. package/dist/native/marketing/FeatureSplit.d.ts.map +1 -0
  39. package/dist/native/marketing/FeatureSplit.js +37 -0
  40. package/dist/native/marketing/FeatureSplit.js.map +1 -0
  41. package/dist/native/marketing/LocationBlock.d.ts +37 -0
  42. package/dist/native/marketing/LocationBlock.d.ts.map +1 -0
  43. package/dist/native/marketing/LocationBlock.js +49 -0
  44. package/dist/native/marketing/LocationBlock.js.map +1 -0
  45. package/dist/native/marketing/Navbar.d.ts +34 -0
  46. package/dist/native/marketing/Navbar.d.ts.map +1 -0
  47. package/dist/native/marketing/Navbar.js +100 -0
  48. package/dist/native/marketing/Navbar.js.map +1 -0
  49. package/dist/native/marketing/NewsletterSignup.d.ts +33 -0
  50. package/dist/native/marketing/NewsletterSignup.d.ts.map +1 -0
  51. package/dist/native/marketing/NewsletterSignup.js +97 -0
  52. package/dist/native/marketing/NewsletterSignup.js.map +1 -0
  53. package/dist/native/marketing/OrnamentRule.d.ts +23 -0
  54. package/dist/native/marketing/OrnamentRule.d.ts.map +1 -0
  55. package/dist/native/marketing/OrnamentRule.js +43 -0
  56. package/dist/native/marketing/OrnamentRule.js.map +1 -0
  57. package/dist/native/marketing/ParticleField.d.ts +25 -0
  58. package/dist/native/marketing/ParticleField.d.ts.map +1 -0
  59. package/dist/native/marketing/ParticleField.js +92 -0
  60. package/dist/native/marketing/ParticleField.js.map +1 -0
  61. package/dist/native/marketing/PointerHalo.d.ts +22 -0
  62. package/dist/native/marketing/PointerHalo.d.ts.map +1 -0
  63. package/dist/native/marketing/PointerHalo.js +15 -0
  64. package/dist/native/marketing/PointerHalo.js.map +1 -0
  65. package/dist/native/marketing/PriceList.d.ts +30 -0
  66. package/dist/native/marketing/PriceList.d.ts.map +1 -0
  67. package/dist/native/marketing/PriceList.js +42 -0
  68. package/dist/native/marketing/PriceList.js.map +1 -0
  69. package/dist/native/marketing/PricingToggle.d.ts +30 -0
  70. package/dist/native/marketing/PricingToggle.d.ts.map +1 -0
  71. package/dist/native/marketing/PricingToggle.js +55 -0
  72. package/dist/native/marketing/PricingToggle.js.map +1 -0
  73. package/dist/native/marketing/ProcessSteps.d.ts +24 -0
  74. package/dist/native/marketing/ProcessSteps.d.ts.map +1 -0
  75. package/dist/native/marketing/ProcessSteps.js +52 -0
  76. package/dist/native/marketing/ProcessSteps.js.map +1 -0
  77. package/dist/native/marketing/ProductMock.d.ts +47 -0
  78. package/dist/native/marketing/ProductMock.d.ts.map +1 -0
  79. package/dist/native/marketing/ProductMock.js +270 -0
  80. package/dist/native/marketing/ProductMock.js.map +1 -0
  81. package/dist/native/marketing/RichText.d.ts +40 -0
  82. package/dist/native/marketing/RichText.d.ts.map +1 -0
  83. package/dist/native/marketing/RichText.js +134 -0
  84. package/dist/native/marketing/RichText.js.map +1 -0
  85. package/dist/native/marketing/SectionDivider.d.ts +34 -0
  86. package/dist/native/marketing/SectionDivider.d.ts.map +1 -0
  87. package/dist/native/marketing/SectionDivider.js +41 -0
  88. package/dist/native/marketing/SectionDivider.js.map +1 -0
  89. package/dist/native/marketing/TeamGrid.d.ts +27 -0
  90. package/dist/native/marketing/TeamGrid.d.ts.map +1 -0
  91. package/dist/native/marketing/TeamGrid.js +37 -0
  92. package/dist/native/marketing/TeamGrid.js.map +1 -0
  93. package/dist/native/marketing/VideoEmbed.d.ts +23 -0
  94. package/dist/native/marketing/VideoEmbed.d.ts.map +1 -0
  95. package/dist/native/marketing/VideoEmbed.js +38 -0
  96. package/dist/native/marketing/VideoEmbed.js.map +1 -0
  97. package/dist/native/marketing/index.d.ts +48 -0
  98. package/dist/native/marketing/index.d.ts.map +1 -1
  99. package/dist/native/marketing/index.js +55 -1
  100. package/dist/native/marketing/index.js.map +1 -1
  101. package/dist/native/motion/AnimatedCounter.d.ts +24 -0
  102. package/dist/native/motion/AnimatedCounter.d.ts.map +1 -0
  103. package/dist/native/motion/AnimatedCounter.js +76 -0
  104. package/dist/native/motion/AnimatedCounter.js.map +1 -0
  105. package/dist/native/motion/Marquee.d.ts +23 -0
  106. package/dist/native/motion/Marquee.d.ts.map +1 -0
  107. package/dist/native/motion/Marquee.js +79 -0
  108. package/dist/native/motion/Marquee.js.map +1 -0
  109. package/dist/native/motion/index.d.ts +10 -5
  110. package/dist/native/motion/index.d.ts.map +1 -1
  111. package/dist/native/motion/index.js +11 -6
  112. package/dist/native/motion/index.js.map +1 -1
  113. package/dist/native/primitives/Wordmark.d.ts +27 -0
  114. package/dist/native/primitives/Wordmark.d.ts.map +1 -0
  115. package/dist/native/primitives/Wordmark.js +41 -0
  116. package/dist/native/primitives/Wordmark.js.map +1 -0
  117. package/dist/native/primitives/index.d.ts +2 -0
  118. package/dist/native/primitives/index.d.ts.map +1 -1
  119. package/dist/native/primitives/index.js +4 -2
  120. package/dist/native/primitives/index.js.map +1 -1
  121. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ParticleField = ParticleField;
37
+ const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const React = __importStar(require("react"));
39
+ const react_native_1 = require("react-native");
40
+ const theme_1 = require("../theme");
41
+ const color_1 = require("../primitives/internal/color");
42
+ const GOLDEN = 0.618033988749895;
43
+ const TUNING = {
44
+ ember: { sizeMin: 3, sizeMax: 8, role: 'primary', step: 400 },
45
+ sparks: { sizeMin: 2, sizeMax: 4.5, role: 'accent', step: 500 },
46
+ snow: { sizeMin: 2.5, sizeMax: 6.5, role: 'neutral', step: 200 },
47
+ fireflies: { sizeMin: 3, sizeMax: 5.5, role: 'accent', step: 400 },
48
+ };
49
+ const clampDensity = (density) => Math.max(0, Math.min(80, Math.round(density)));
50
+ /**
51
+ * Deterministic golden-ratio low-discrepancy scatter — replicated from the web
52
+ * `computeParticles` (its module pulls DOM helpers at import, so we inline the
53
+ * pure math here). Same (mood, density, seed) → same layout on every device.
54
+ */
55
+ function computeNativeParticles(mood, density, seed) {
56
+ const tune = TUNING[mood];
57
+ return Array.from({ length: clampDensity(density) }, (_, i) => {
58
+ const t = ((i + seed) * GOLDEN) % 1;
59
+ const u = ((i + seed + 7) * GOLDEN) % 1;
60
+ const v = ((i + seed + 13) * GOLDEN) % 1;
61
+ return {
62
+ x: `${(t * 100).toFixed(1)}%`,
63
+ y: `${(8 + v * 84).toFixed(1)}%`,
64
+ size: Number((tune.sizeMin + u * (tune.sizeMax - tune.sizeMin)).toFixed(1)),
65
+ opacity: Number((0.35 + t * 0.4).toFixed(2)),
66
+ };
67
+ });
68
+ }
69
+ /**
70
+ * Native mirror of the web `ParticleField`. The web version animates each
71
+ * particle on an infinite CSS keyframe path (rise/fall/blink). React Native
72
+ * gets a **static, deterministic scatter** of small fully-rounded token-colored
73
+ * dot Views — no animation loop, so there is nothing to honor for reduced
74
+ * motion (it is already the reduced-motion rest pose). The `mood`/`density`/
75
+ * `seed` props are preserved: `mood` selects the dot color + size range,
76
+ * `density`/`seed` drive the same golden-ratio layout as web. Token-only.
77
+ */
78
+ function ParticleField({ mood = 'ember', density = 18, seed = 1, children, style, }) {
79
+ const { tokens } = (0, theme_1.useXenitionTheme)();
80
+ const particles = React.useMemo(() => computeNativeParticles(mood, density, seed), [mood, density, seed]);
81
+ const base = tokens.ramps[TUNING[mood].role][TUNING[mood].step];
82
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-particle-field", pointerEvents: "none", style: [react_native_1.StyleSheet.absoluteFill, { overflow: 'hidden' }, style], children: [particles.map((p, index) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
83
+ position: 'absolute',
84
+ left: p.x,
85
+ top: p.y,
86
+ width: p.size,
87
+ height: p.size,
88
+ borderRadius: 9999,
89
+ backgroundColor: (0, color_1.withAlpha)(base, p.opacity),
90
+ } }, index))), children !== undefined && children !== null ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: react_native_1.StyleSheet.absoluteFill, children: children })) : null] }));
91
+ }
92
+ //# sourceMappingURL=ParticleField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParticleField.js","sourceRoot":"","sources":["../../../src/native/marketing/ParticleField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ export type PointerHaloMode = 'idle' | 'link' | 'grow';
3
+ export interface PointerHaloProps {
4
+ /** Halo diameter at rest, px (web only). */
5
+ size?: number;
6
+ /** Diameter when hovering interactive elements (web only). */
7
+ linkSize?: number;
8
+ /** Diameter over `[data-halo="grow"]` targets (web only). */
9
+ growSize?: number;
10
+ /** Caption shown inside the grown halo (web only). */
11
+ label?: React.ReactNode;
12
+ }
13
+ /**
14
+ * Native mirror of the web `PointerHalo`. The web component renders a custom
15
+ * cursor halo that trails a fine (mouse) pointer. Touch devices have **no
16
+ * cursor**, so on React Native this is a permanent no-op: it always renders
17
+ * `null` — exactly like the web version does under `prefers-reduced-motion` or
18
+ * a coarse pointer. The component and its props are kept only for cross-platform
19
+ * API parity; every prop is **inert** on native.
20
+ */
21
+ export declare function PointerHalo(_props: PointerHaloProps): React.ReactElement | null;
22
+ //# sourceMappingURL=PointerHalo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointerHalo.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/PointerHalo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAE/E"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PointerHalo = PointerHalo;
4
+ /**
5
+ * Native mirror of the web `PointerHalo`. The web component renders a custom
6
+ * cursor halo that trails a fine (mouse) pointer. Touch devices have **no
7
+ * cursor**, so on React Native this is a permanent no-op: it always renders
8
+ * `null` — exactly like the web version does under `prefers-reduced-motion` or
9
+ * a coarse pointer. The component and its props are kept only for cross-platform
10
+ * API parity; every prop is **inert** on native.
11
+ */
12
+ function PointerHalo(_props) {
13
+ return null;
14
+ }
15
+ //# sourceMappingURL=PointerHalo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointerHalo.js","sourceRoot":"","sources":["../../../src/native/marketing/PointerHalo.tsx"],"names":[],"mappings":";;AAuBA,kCAEC;AAVD;;;;;;;GAOG;AACH,SAAgB,WAAW,CAAC,MAAwB;IAClD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ import { type OrnamentShape } from './OrnamentRule';
4
+ export interface PriceRow {
5
+ /** Item name (left side of the leader). */
6
+ name: string;
7
+ /** Price, already formatted (right side of the leader — the kit never guesses currency). */
8
+ price: string;
9
+ /** Supporting line under the row. */
10
+ description?: string;
11
+ }
12
+ export interface PriceListProps {
13
+ /** Group heading (e.g. a menu course, a service tier family). */
14
+ heading?: string;
15
+ /** The rows to render (mirrors the web `PriceRow` children). */
16
+ rows: PriceRow[];
17
+ /** Ornament drawn above the heading (default `diamond`; `none` hides the rule). */
18
+ ornament?: OrnamentShape;
19
+ style?: StyleProp<ViewStyle>;
20
+ }
21
+ /**
22
+ * Editorial price group — the native mirror of the web `PriceList` + `PriceRow`.
23
+ * The web version composes children; native takes a `rows` data array (idiomatic
24
+ * for RN lists). Each row is `name ········ price`: the label sits left, the price
25
+ * right, and the web dotted leader is approximated with a flex spacer carrying a
26
+ * thin low-opacity accent bottom border (RN has no CSS dotted `color-mix` leader).
27
+ * Reuses the native `OrnamentRule` + `Eyebrow`. Token-only.
28
+ */
29
+ export declare function PriceList({ heading, rows, ornament, style, }: PriceListProps): React.ReactElement;
30
+ //# sourceMappingURL=PriceList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriceList.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/PriceList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI1E,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,IAAI,EACJ,QAAoB,EACpB,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAkErC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PriceList = PriceList;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_native_1 = require("react-native");
6
+ const theme_1 = require("../theme");
7
+ const color_1 = require("../primitives/internal/color");
8
+ const Eyebrow_1 = require("../primitives/Eyebrow");
9
+ const OrnamentRule_1 = require("./OrnamentRule");
10
+ /**
11
+ * Editorial price group — the native mirror of the web `PriceList` + `PriceRow`.
12
+ * The web version composes children; native takes a `rows` data array (idiomatic
13
+ * for RN lists). Each row is `name ········ price`: the label sits left, the price
14
+ * right, and the web dotted leader is approximated with a flex spacer carrying a
15
+ * thin low-opacity accent bottom border (RN has no CSS dotted `color-mix` leader).
16
+ * Reuses the native `OrnamentRule` + `Eyebrow`. Token-only.
17
+ */
18
+ function PriceList({ heading, rows, ornament = 'diamond', style, }) {
19
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
20
+ const leaderColor = (0, color_1.withAlpha)(tokens.ramps.accent[400], 0.4);
21
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-price-list", style: [{ gap: tokens.spacing.lg }, style], children: [ornament !== 'none' ? (0, jsx_runtime_1.jsx)(OrnamentRule_1.OrnamentRule, { ornament: ornament, tone: "accent" }) : null, heading !== undefined ? ((0, jsx_runtime_1.jsx)(Eyebrow_1.Eyebrow, { align: "center", tone: "accent", children: heading })) : null, (0, jsx_runtime_1.jsx)(react_native_1.View, { style: { gap: tokens.spacing.lg }, children: rows.map((row, i) => ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-price-row", children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: 'row', alignItems: 'flex-end' }, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
22
+ color: colors.onSurface,
23
+ fontSize: tokens.typography.scale.xl,
24
+ fontWeight: '600',
25
+ }, children: row.name }), (0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityElementsHidden: true, importantForAccessibility: "no", style: {
26
+ flex: 1,
27
+ minWidth: 32,
28
+ marginHorizontal: tokens.spacing.sm,
29
+ marginBottom: 6,
30
+ borderBottomWidth: 1,
31
+ borderStyle: 'dotted',
32
+ borderColor: leaderColor,
33
+ } }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
34
+ color: colors.accent,
35
+ fontSize: tokens.typography.scale.lg,
36
+ }, children: row.price })] }), row.description !== undefined ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
37
+ marginTop: tokens.spacing.xs,
38
+ color: colors.muted,
39
+ fontSize: tokens.typography.scale.sm,
40
+ }, children: row.description })) : null] }, i))) })] }));
41
+ }
42
+ //# sourceMappingURL=PriceList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriceList.js","sourceRoot":"","sources":["../../../src/native/marketing/PriceList.tsx"],"names":[],"mappings":";;AAkCA,8BAuEC;;AAxGD,+CAA0E;AAC1E,oCAA4C;AAC5C,wDAAyD;AACzD,mDAAgD;AAChD,iDAAkE;AAqBlE;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,EACxB,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,SAAS,EACpB,KAAK,GACU;IACf,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAgB,GAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAA,iBAAS,EAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAE7D,OAAO,CACL,wBAAC,mBAAI,IACH,MAAM,EAAC,gBAAgB,EACvB,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,aAEzC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAC,2BAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAC/E,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CACvB,uBAAC,iBAAO,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,YAClC,OAAO,GACA,CACX,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,YACpC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,wBAAC,mBAAI,IAAS,MAAM,EAAC,eAAe,aAClC,wBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAC3D,uBAAC,mBAAI,IACH,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM,CAAC,SAAS;wCACvB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;wCACpC,UAAU,EAAE,KAAK;qCAClB,YAEA,GAAG,CAAC,IAAI,GACJ,EACP,uBAAC,mBAAI,IACH,2BAA2B,QAC3B,yBAAyB,EAAC,IAAI,EAC9B,KAAK,EAAE;wCACL,IAAI,EAAE,CAAC;wCACP,QAAQ,EAAE,EAAE;wCACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;wCACnC,YAAY,EAAE,CAAC;wCACf,iBAAiB,EAAE,CAAC;wCACpB,WAAW,EAAE,QAAQ;wCACrB,WAAW,EAAE,WAAW;qCACzB,GACD,EACF,uBAAC,mBAAI,IACH,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM,CAAC,MAAM;wCACpB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;qCACrC,YAEA,GAAG,CAAC,KAAK,GACL,IACF,EACN,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAC/B,uBAAC,mBAAI,IACH,KAAK,EAAE;gCACL,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;gCAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;6BACrC,YAEA,GAAG,CAAC,WAAW,GACX,CACR,CAAC,CAAC,CAAC,IAAI,KA3CC,CAAC,CA4CL,CACR,CAAC,GACG,IACF,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface PricingToggleOption {
4
+ /** Visible label ("Monthly", "Yearly", …). */
5
+ label: string;
6
+ /** Value reported via `onChange` when selected. */
7
+ value: string;
8
+ /** Optional small "save %" (or any) badge shown beside the label. */
9
+ badge?: string;
10
+ }
11
+ export interface PricingToggleProps {
12
+ /** Segments to switch between (2+ supported). */
13
+ options: PricingToggleOption[];
14
+ /** Currently active option value (controlled). */
15
+ value: string;
16
+ /** Fires with the newly selected value. */
17
+ onChange: (value: string) => void;
18
+ /** Accessible label for the switch group. */
19
+ label?: string;
20
+ style?: StyleProp<ViewStyle>;
21
+ }
22
+ /**
23
+ * Monthly/yearly (or N-option) segmented switch — the native mirror of the web
24
+ * `PricingToggle`. Reports the active key via `value`/`onChange` and keeps the
25
+ * per-option "save %" `badge` slot. Built as a token-styled pill track (the base
26
+ * `Segmented` primitive has no badge slot), matching the web pill-toggle look.
27
+ * Token-only.
28
+ */
29
+ export declare function PricingToggle({ options, value, onChange, label, style, }: PricingToggleProps): React.ReactElement;
30
+ //# sourceMappingURL=PricingToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PricingToggle.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/PricingToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAyB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGrF,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAwB,EACxB,KAAK,GACN,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA4EzC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PricingToggle = PricingToggle;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_native_1 = require("react-native");
6
+ const theme_1 = require("../theme");
7
+ /**
8
+ * Monthly/yearly (or N-option) segmented switch — the native mirror of the web
9
+ * `PricingToggle`. Reports the active key via `value`/`onChange` and keeps the
10
+ * per-option "save %" `badge` slot. Built as a token-styled pill track (the base
11
+ * `Segmented` primitive has no badge slot), matching the web pill-toggle look.
12
+ * Token-only.
13
+ */
14
+ function PricingToggle({ options, value, onChange, label = 'Billing period', style, }) {
15
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
16
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "xen-pricing-toggle", accessibilityRole: "radiogroup", accessibilityLabel: label, style: [
17
+ {
18
+ alignSelf: 'flex-start',
19
+ flexDirection: 'row',
20
+ alignItems: 'center',
21
+ gap: tokens.spacing.xs,
22
+ backgroundColor: colors.surface,
23
+ borderWidth: 1,
24
+ borderColor: colors.border,
25
+ borderRadius: tokens.radius.full,
26
+ padding: tokens.spacing.xs,
27
+ },
28
+ style,
29
+ ], children: options.map((option) => {
30
+ const active = option.value === value;
31
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.Pressable, { accessibilityRole: "radio", accessibilityState: { selected: active, checked: active }, accessibilityLabel: option.label, onPress: () => onChange(option.value), style: {
32
+ flexDirection: 'row',
33
+ alignItems: 'center',
34
+ gap: tokens.spacing.xs,
35
+ borderRadius: tokens.radius.full,
36
+ paddingHorizontal: tokens.spacing.md,
37
+ paddingVertical: tokens.spacing.xs,
38
+ backgroundColor: active ? colors.primary : 'transparent',
39
+ }, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
40
+ color: active ? colors.onPrimary : colors.muted,
41
+ fontSize: tokens.typography.scale.sm,
42
+ fontWeight: '500',
43
+ }, children: option.label }), option.badge !== undefined ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
44
+ borderRadius: tokens.radius.full,
45
+ paddingHorizontal: tokens.spacing.xs,
46
+ paddingVertical: 1,
47
+ backgroundColor: active ? colors.onPrimary : tokens.ramps.primary[100],
48
+ }, children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
49
+ color: active ? colors.primary : tokens.ramps.primary[700],
50
+ fontSize: tokens.typography.scale.xs,
51
+ fontWeight: '600',
52
+ }, children: option.badge }) })) : null] }, option.value));
53
+ }) }));
54
+ }
55
+ //# sourceMappingURL=PricingToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PricingToggle.js","sourceRoot":"","sources":["../../../src/native/marketing/PricingToggle.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface ProcessStep {
4
+ /** Step headline. */
5
+ title: React.ReactNode;
6
+ /** Supporting copy under the title. */
7
+ description?: React.ReactNode;
8
+ /** Optional content rendered inside the numbered marker instead of the number. */
9
+ icon?: React.ReactNode;
10
+ }
11
+ export interface ProcessStepsProps {
12
+ /** Ordered "how it works" steps (mirrors the web `steps` array). */
13
+ steps: ProcessStep[];
14
+ style?: StyleProp<ViewStyle>;
15
+ }
16
+ /**
17
+ * Numbered "how it works" flow — the native mirror of the web `ProcessSteps`.
18
+ * The web version is horizontal on desktop / vertical on mobile with connector
19
+ * lines; native renders a **token-styled numbered vertical list** with a
20
+ * connector segment between markers (phones are always narrow, so the
21
+ * horizontal desktop layout is dropped). Token-only.
22
+ */
23
+ export declare function ProcessSteps({ steps, style }: ProcessStepsProps): React.ReactElement;
24
+ //# sourceMappingURL=ProcessSteps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessSteps.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/ProcessSteps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1E,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,uCAAuC;IACvC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,kFAAkF;IAClF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAoGpF"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessSteps = ProcessSteps;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_native_1 = require("react-native");
6
+ const theme_1 = require("../theme");
7
+ /**
8
+ * Numbered "how it works" flow — the native mirror of the web `ProcessSteps`.
9
+ * The web version is horizontal on desktop / vertical on mobile with connector
10
+ * lines; native renders a **token-styled numbered vertical list** with a
11
+ * connector segment between markers (phones are always narrow, so the
12
+ * horizontal desktop layout is dropped). Token-only.
13
+ */
14
+ function ProcessSteps({ steps, style }) {
15
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
16
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "xen-process-steps", style: [{ gap: tokens.spacing.lg }, style], children: steps.map((step, index) => {
17
+ const isLast = index === steps.length - 1;
18
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: 'row', gap: tokens.spacing.md }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { alignItems: 'center' }, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
19
+ height: 40,
20
+ width: 40,
21
+ borderRadius: tokens.radius.full,
22
+ alignItems: 'center',
23
+ justifyContent: 'center',
24
+ backgroundColor: colors.primary,
25
+ }, children: step.icon !== undefined ? (typeof step.icon === 'string' ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
26
+ color: colors.onPrimary,
27
+ fontSize: tokens.typography.scale.base,
28
+ fontWeight: '600',
29
+ }, children: step.icon })) : (step.icon)) : ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
30
+ color: colors.onPrimary,
31
+ fontSize: tokens.typography.scale.base,
32
+ fontWeight: '600',
33
+ }, children: index + 1 })) }), !isLast ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
34
+ marginTop: tokens.spacing.xs,
35
+ width: 1,
36
+ flex: 1,
37
+ backgroundColor: colors.border,
38
+ } })) : null] }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
39
+ flex: 1,
40
+ gap: tokens.spacing.xs,
41
+ paddingBottom: isLast ? 0 : tokens.spacing.md,
42
+ }, children: [typeof step.title === 'string' ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
43
+ color: colors.onSurface,
44
+ fontSize: tokens.typography.scale.lg,
45
+ fontWeight: '600',
46
+ }, children: step.title })) : (step.title), step.description !== undefined && step.description !== null ? (typeof step.description === 'string' ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
47
+ color: colors.muted,
48
+ fontSize: tokens.typography.scale.sm,
49
+ }, children: step.description })) : (step.description)) : null] })] }, index));
50
+ }) }));
51
+ }
52
+ //# sourceMappingURL=ProcessSteps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessSteps.js","sourceRoot":"","sources":["../../../src/native/marketing/ProcessSteps.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export type ProductMockVariant = 'analytics' | 'chat' | 'commerce' | 'calendar';
4
+ /** Chart drawn in the main pane; `scene` falls back to the variant's own vignette. */
5
+ export type ProductMockChart = 'bars' | 'sparkline' | 'rings' | 'scene';
6
+ export interface ProductMockKpi {
7
+ label: string;
8
+ /** Pre-formatted value string — the kit never invents numbers or locales. */
9
+ value: string;
10
+ }
11
+ export interface ProductMockProps {
12
+ /** Which fake product the panel impersonates (default `analytics`). */
13
+ variant?: ProductMockVariant;
14
+ /** Chrome-bar label (defaults per variant, e.g. `analytics / production`). */
15
+ title?: string;
16
+ /** KPI tiles across the top (defaults per variant; `[]` hides the row). */
17
+ kpis?: ProductMockKpi[];
18
+ /**
19
+ * Main-pane visual. Defaults per variant: analytics `bars`, commerce
20
+ * `sparkline`, chat and calendar their own `scene` (message thread /
21
+ * month grid). `rings` works everywhere.
22
+ */
23
+ chart?: ProductMockChart;
24
+ /** Event feed lines in the side pane (defaults per variant; `[]` hides it). */
25
+ feed?: string[];
26
+ /** Badge text next to the status dot (default `LIVE`; `false` hides the badge). */
27
+ live?: string | false;
28
+ /** Footnote line under the feed (e.g. "9,214 events in the last 5s"). */
29
+ footnote?: string;
30
+ style?: StyleProp<ViewStyle>;
31
+ }
32
+ /**
33
+ * A configurable fake-product panel — the native mirror of the web
34
+ * `ProductMock`, the "product shot" of a landing hero.
35
+ *
36
+ * The web version is entirely CSS-animated (3D tilt entrance, looping
37
+ * equalizer bars, self-drawing sparkline/rings, sliding feed rows) over glass
38
+ * chrome with `backdrop-filter`. React Native has no keyframe engine,
39
+ * `filter: blur()`, or SVG stroke-dash animation, so native renders a
40
+ * **static, deterministic token visual** — no animation loop, reduced-motion
41
+ * safe. The `variant`/`chart`/`kpis`/`feed` prop contract is preserved for
42
+ * parity: bars/sparkline become stacked Views, rings become concentric
43
+ * bordered circles, chat/calendar scenes become static bubble/grid layouts.
44
+ * Token-only colors throughout; it is decorative scenery (`aria-hidden`).
45
+ */
46
+ export declare function ProductMock({ variant, title, kpis, chart, feed, live, footnote, style, }: ProductMockProps): React.ReactElement;
47
+ //# sourceMappingURL=ProductMock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductMock.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/ProductMock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAK1E,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAChF,sFAAsF;AACtF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAsFD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAqB,EACrB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAa,EACb,QAAQ,EACR,KAAK,GACN,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA+VvC"}