@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 @@
1
+ {"version":3,"file":"FeatureSplit.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/FeatureSplit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI1E,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,uCAAuC;IACvC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wDAAwD;IACxD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAO,EACP,KAAK,EACL,OAAe,EACf,MAAM,EACN,KAAK,GACN,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA+FxC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureSplit = FeatureSplit;
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 Eyebrow_1 = require("../primitives/Eyebrow");
8
+ /**
9
+ * Media-beside-copy feature row — the native mirror of the web `FeatureSplit`.
10
+ * The web version is a two-column grid on desktop; **native always stacks
11
+ * vertically** (phones are narrow), with media on top by default and `reverse`
12
+ * flipping it below the copy. When no `media` is supplied the web seeds a
13
+ * `GenerativeCover`; native renders a token-styled 16:9 placeholder instead
14
+ * (no generative canvas on native). Token-only.
15
+ */
16
+ function FeatureSplit({ eyebrow, title, description, bullets, media, reverse = false, action, style, }) {
17
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
18
+ const mediaNode = media !== undefined ? (media) : ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
19
+ aspectRatio: 16 / 9,
20
+ width: '100%',
21
+ borderRadius: tokens.radius.lg,
22
+ backgroundColor: tokens.ramps.neutral[100],
23
+ } }));
24
+ const mediaBlock = ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { width: '100%' }, children: mediaNode }, "media"));
25
+ const copyBlock = ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { gap: tokens.spacing.sm }, children: [eyebrow !== undefined && eyebrow !== null ? (typeof eyebrow === 'string' ? ((0, jsx_runtime_1.jsx)(Eyebrow_1.Eyebrow, { tone: "accent", align: "start", children: eyebrow })) : (eyebrow)) : null, typeof title === 'string' ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
26
+ color: colors.onSurface,
27
+ fontSize: tokens.typography.scale['3xl'],
28
+ fontWeight: '700',
29
+ }, children: title })) : (title), description !== undefined && description !== null ? (typeof description === 'string' ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.muted, fontSize: tokens.typography.scale.lg }, children: description })) : (description)) : null, bullets && bullets.length > 0 ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { gap: tokens.spacing.xs }, children: bullets.map((bullet, i) => ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: 'row', gap: tokens.spacing.sm, alignItems: 'flex-start' }, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.primary, fontWeight: '700' }, children: "\u2713" }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { flex: 1, color: colors.onSurface, fontSize: tokens.typography.scale.base }, children: bullet })] }, i))) })) : null, action !== undefined && action !== null ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
30
+ marginTop: tokens.spacing.sm,
31
+ flexDirection: 'row',
32
+ flexWrap: 'wrap',
33
+ gap: tokens.spacing.sm,
34
+ }, children: action })) : null] }, "copy"));
35
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "xen-feature-split", style: [{ gap: tokens.spacing.xl }, style], children: reverse ? [copyBlock, mediaBlock] : [mediaBlock, copyBlock] }));
36
+ }
37
+ //# sourceMappingURL=FeatureSplit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureSplit.js","sourceRoot":"","sources":["../../../src/native/marketing/FeatureSplit.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface LocationHour {
4
+ /** Day or range label (e.g. "Mon–Fri"). */
5
+ label: string;
6
+ /** Opening hours (e.g. "9:00–17:00" or "Closed"). */
7
+ value: string;
8
+ }
9
+ export interface LocationBlockProps {
10
+ /** Business or venue name. */
11
+ name?: string;
12
+ /** Street address. */
13
+ address: string;
14
+ /** Opening-hours rows. */
15
+ hours?: LocationHour[];
16
+ /** Phone number (display only on native). */
17
+ phone?: string;
18
+ /** Email (display only on native). */
19
+ email?: string;
20
+ /**
21
+ * Static map image URL. The web embeds an interactive map `<iframe>`; native
22
+ * shows this static image if provided, otherwise a token-styled placeholder.
23
+ */
24
+ mapImageUri?: string;
25
+ style?: StyleProp<ViewStyle>;
26
+ }
27
+ /**
28
+ * Contact/location section — the native mirror of the web `LocationBlock`:
29
+ * name, address, opening-hours rows, and contact lines above a map. The web
30
+ * two-column desktop grid is **stacked vertically** on native (phones are
31
+ * narrow). The web embeds an interactive map `<iframe>`; native has no
32
+ * interactive map, so it renders a **static `mapImageUri` image** or a
33
+ * token-styled placeholder. Phone/email are shown as plain text rather than
34
+ * `tel:`/`mailto:` links. Token-only.
35
+ */
36
+ export declare function LocationBlock({ name, address, hours, phone, email, mapImageUri, style, }: LocationBlockProps): React.ReactElement;
37
+ //# sourceMappingURL=LocationBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationBlock.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/LocationBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGjF,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EACL,KAAK,EACL,WAAW,EACX,KAAK,GACN,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAsGzC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocationBlock = LocationBlock;
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
+ * Contact/location section — the native mirror of the web `LocationBlock`:
9
+ * name, address, opening-hours rows, and contact lines above a map. The web
10
+ * two-column desktop grid is **stacked vertically** on native (phones are
11
+ * narrow). The web embeds an interactive map `<iframe>`; native has no
12
+ * interactive map, so it renders a **static `mapImageUri` image** or a
13
+ * token-styled placeholder. Phone/email are shown as plain text rather than
14
+ * `tel:`/`mailto:` links. Token-only.
15
+ */
16
+ function LocationBlock({ name, address, hours, phone, email, mapImageUri, style, }) {
17
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
18
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-location-block", style: [{ gap: tokens.spacing.xl }, style], children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { gap: tokens.spacing.md }, children: [name ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
19
+ color: colors.onSurface,
20
+ fontSize: tokens.typography.scale['2xl'],
21
+ fontWeight: '700',
22
+ }, children: name })) : null, (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.muted, fontSize: tokens.typography.scale.base }, children: address }), hours && hours.length > 0 ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { gap: 0 }, children: hours.map((row, i) => ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
23
+ flexDirection: 'row',
24
+ justifyContent: 'space-between',
25
+ paddingVertical: tokens.spacing.xs,
26
+ borderBottomWidth: i === hours.length - 1 ? 0 : 1,
27
+ borderBottomColor: colors.border,
28
+ }, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
29
+ color: colors.onSurface,
30
+ fontSize: tokens.typography.scale.sm,
31
+ fontWeight: '500',
32
+ }, children: row.label }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.muted, fontSize: tokens.typography.scale.sm }, children: row.value })] }, i))) })) : null, phone || email ? ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { gap: tokens.spacing.xs }, children: [phone ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.primary, fontSize: tokens.typography.scale.sm }, children: phone })) : null, email ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.primary, fontSize: tokens.typography.scale.sm }, children: email })) : null] })) : null] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
33
+ aspectRatio: 16 / 9,
34
+ width: '100%',
35
+ overflow: 'hidden',
36
+ borderRadius: tokens.radius.lg,
37
+ borderWidth: 1,
38
+ borderColor: colors.border,
39
+ backgroundColor: tokens.ramps.neutral[100],
40
+ alignItems: 'center',
41
+ justifyContent: 'center',
42
+ }, children: mapImageUri ? ((0, jsx_runtime_1.jsx)(react_native_1.Image, { source: { uri: mapImageUri }, style: { width: '100%', height: '100%' }, resizeMode: "cover" })) : ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
43
+ color: colors.muted,
44
+ fontSize: tokens.typography.scale.sm,
45
+ textAlign: 'center',
46
+ paddingHorizontal: tokens.spacing.md,
47
+ }, children: address })) })] }));
48
+ }
49
+ //# sourceMappingURL=LocationBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationBlock.js","sourceRoot":"","sources":["../../../src/native/marketing/LocationBlock.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface NavbarLink {
4
+ label: string;
5
+ /** Fires on press (RN equivalent of the web link `href`). */
6
+ onPress?: () => void;
7
+ /** Marks the link as the current page (bolder tint). */
8
+ active?: boolean;
9
+ }
10
+ export interface NavbarProps {
11
+ /** Brand slot (logo image, wordmark, …). */
12
+ logo?: React.ReactNode;
13
+ /** Nav links — the web `children` become a data array (idiomatic for RN). */
14
+ links?: NavbarLink[];
15
+ /** Right-side slot (sign-in button, theme toggle, …), rendered as-is. */
16
+ actions?: React.ReactNode;
17
+ /** Accessible label for the mobile menu toggle (default `Menu`). */
18
+ menuLabel?: string;
19
+ style?: StyleProp<ViewStyle>;
20
+ }
21
+ /**
22
+ * Marketing navbar — the native mirror of the web `Navbar`.
23
+ *
24
+ * The web version is a sticky `<header>` that gains a translucent
25
+ * backdrop-blur bar once the page scrolls (a passive `scroll` listener +
26
+ * `color-mix`). React Native has no page-scroll chrome, `backdrop-filter`, or
27
+ * `color-mix`, so native **drops the sticky/scroll-blur behavior** and renders
28
+ * a plain top bar over a translucent `surface` token. Web link `children`
29
+ * become a `links` data array (`href`→`onPress`). On narrow layouts the links
30
+ * collapse behind a disclosure toggle (a `Pressable` flipping a `View`), the
31
+ * native equivalent of the web mobile menu. Token-only.
32
+ */
33
+ export declare function Navbar({ logo, links, actions, menuLabel, style, }: NavbarProps): React.ReactElement;
34
+ //# sourceMappingURL=Navbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Navbar.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/Navbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,KAAU,EACV,OAAO,EACP,SAAkB,EAClB,KAAK,GACN,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAsHlC"}
@@ -0,0 +1,100 @@
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.Navbar = Navbar;
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
+ /**
43
+ * Marketing navbar — the native mirror of the web `Navbar`.
44
+ *
45
+ * The web version is a sticky `<header>` that gains a translucent
46
+ * backdrop-blur bar once the page scrolls (a passive `scroll` listener +
47
+ * `color-mix`). React Native has no page-scroll chrome, `backdrop-filter`, or
48
+ * `color-mix`, so native **drops the sticky/scroll-blur behavior** and renders
49
+ * a plain top bar over a translucent `surface` token. Web link `children`
50
+ * become a `links` data array (`href`→`onPress`). On narrow layouts the links
51
+ * collapse behind a disclosure toggle (a `Pressable` flipping a `View`), the
52
+ * native equivalent of the web mobile menu. Token-only.
53
+ */
54
+ function Navbar({ logo, links = [], actions, menuLabel = 'Menu', style, }) {
55
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
56
+ const [open, setOpen] = React.useState(false);
57
+ const renderLink = (link, i) => ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityRole: "link", accessibilityState: { selected: link.active }, onPress: () => {
58
+ setOpen(false);
59
+ link.onPress?.();
60
+ }, style: ({ pressed }) => ({ opacity: pressed ? 0.6 : 1 }), children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
61
+ color: link.active ? colors.primary : colors.onSurface,
62
+ fontSize: tokens.typography.scale.sm,
63
+ fontWeight: link.active ? '700' : '500',
64
+ paddingVertical: tokens.spacing.xs,
65
+ }, children: link.label }) }, i));
66
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-navbar", style: [
67
+ {
68
+ backgroundColor: (0, color_1.withAlpha)(colors.surface, 0.8),
69
+ borderBottomWidth: 1,
70
+ borderBottomColor: (0, color_1.withAlpha)(colors.border, 0.7),
71
+ },
72
+ style,
73
+ ], children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
74
+ flexDirection: 'row',
75
+ alignItems: 'center',
76
+ justifyContent: 'space-between',
77
+ gap: tokens.spacing.md,
78
+ paddingHorizontal: tokens.spacing.lg,
79
+ paddingVertical: tokens.spacing.sm,
80
+ }, children: [logo !== undefined ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flexDirection: 'row', alignItems: 'center' }, children: logo })) : ((0, jsx_runtime_1.jsx)(react_native_1.View, {})), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
81
+ flexDirection: 'row',
82
+ alignItems: 'center',
83
+ gap: tokens.spacing.sm,
84
+ }, children: [actions !== undefined && actions !== null ? actions : null, links.length > 0 ? ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityRole: "button", accessibilityLabel: menuLabel, accessibilityState: { expanded: open }, onPress: () => setOpen((prev) => !prev), style: ({ pressed }) => ({
85
+ width: 36,
86
+ height: 36,
87
+ alignItems: 'center',
88
+ justifyContent: 'center',
89
+ borderRadius: tokens.radius.sm,
90
+ opacity: pressed ? 0.6 : 1,
91
+ }), children: open ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.onSurface, fontSize: tokens.typography.scale.lg }, children: "\u2715" })) : ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { width: 18, gap: 4 }, children: [0, 1, 2].map((i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { height: 2, borderRadius: 1, backgroundColor: colors.onSurface } }, i))) })) })) : null] })] }), open && links.length > 0 ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "xen-navbar-menu", style: {
92
+ borderTopWidth: 1,
93
+ borderTopColor: (0, color_1.withAlpha)(colors.border, 0.7),
94
+ backgroundColor: colors.surface,
95
+ paddingHorizontal: tokens.spacing.lg,
96
+ paddingVertical: tokens.spacing.md,
97
+ gap: tokens.spacing.sm,
98
+ }, children: links.map(renderLink) })) : null] }));
99
+ }
100
+ //# sourceMappingURL=Navbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Navbar.js","sourceRoot":"","sources":["../../../src/native/marketing/Navbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface NewsletterSignupProps {
4
+ /** Section heading. */
5
+ heading?: string;
6
+ /** Supporting copy under the heading. */
7
+ subtext?: string;
8
+ /**
9
+ * SDK-agnostic submit handler — receives the validated email and may be
10
+ * async. Throw (or reject) to surface the error state.
11
+ */
12
+ onSubmit: (email: string) => void | Promise<void>;
13
+ /** Input placeholder. */
14
+ placeholder?: string;
15
+ /** Submit button label. */
16
+ buttonLabel?: string;
17
+ /** Message shown after a successful submit. */
18
+ successMessage?: string;
19
+ /** Message shown when the email fails validation. */
20
+ invalidMessage?: string;
21
+ /** Fallback message shown when `onSubmit` throws without a message. */
22
+ errorMessage?: string;
23
+ style?: StyleProp<ViewStyle>;
24
+ }
25
+ /**
26
+ * Email-capture block — the native mirror of the web `NewsletterSignup`:
27
+ * heading, subtext, a validated email `Input`, a submit `Button`, and
28
+ * success/error states. The web `<form onSubmit>` becomes an explicit submit
29
+ * handler on the button; the endpoint lives entirely in the caller's async
30
+ * `onSubmit(email)`. Composes the native `Input`/`Button` primitives. Token-only.
31
+ */
32
+ export declare function NewsletterSignup({ heading, subtext, onSubmit, placeholder, buttonLabel, successMessage, invalidMessage, errorMessage, style, }: NewsletterSignupProps): React.ReactElement;
33
+ //# sourceMappingURL=NewsletterSignup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewsletterSignup.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/NewsletterSignup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAU1E,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,OAA4B,EAC5B,OAAO,EACP,QAAQ,EACR,WAA+B,EAC/B,WAAyB,EACzB,cAA8C,EAC9C,cAA+C,EAC/C,YAAwD,EACxD,KAAK,GACN,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA0F5C"}
@@ -0,0 +1,97 @@
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.NewsletterSignup = NewsletterSignup;
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 Input_1 = require("../primitives/Input");
42
+ const Button_1 = require("../primitives/Button");
43
+ /** Basic, permissive email shape check (no network, no dependency). */
44
+ const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
45
+ /**
46
+ * Email-capture block — the native mirror of the web `NewsletterSignup`:
47
+ * heading, subtext, a validated email `Input`, a submit `Button`, and
48
+ * success/error states. The web `<form onSubmit>` becomes an explicit submit
49
+ * handler on the button; the endpoint lives entirely in the caller's async
50
+ * `onSubmit(email)`. Composes the native `Input`/`Button` primitives. Token-only.
51
+ */
52
+ function NewsletterSignup({ heading = 'Stay in the loop', subtext, onSubmit, placeholder = 'you@example.com', buttonLabel = 'Subscribe', successMessage = "Thanks — you're subscribed.", invalidMessage = 'Enter a valid email address.', errorMessage = 'Something went wrong. Please try again.', style, }) {
53
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
54
+ const [email, setEmail] = React.useState('');
55
+ const [status, setStatus] = React.useState('idle');
56
+ const [message, setMessage] = React.useState(null);
57
+ const handleSubmit = async () => {
58
+ if (!EMAIL_RE.test(email.trim())) {
59
+ setStatus('error');
60
+ setMessage(invalidMessage);
61
+ return;
62
+ }
63
+ setStatus('submitting');
64
+ setMessage(null);
65
+ try {
66
+ await onSubmit(email.trim());
67
+ setStatus('success');
68
+ setMessage(successMessage);
69
+ setEmail('');
70
+ }
71
+ catch (error) {
72
+ setStatus('error');
73
+ setMessage(error instanceof Error && error.message ? error.message : errorMessage);
74
+ }
75
+ };
76
+ const invalid = status === 'error';
77
+ const submitting = status === 'submitting';
78
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-newsletter", style: [
79
+ {
80
+ gap: tokens.spacing.sm,
81
+ borderRadius: tokens.radius.lg,
82
+ borderWidth: 1,
83
+ borderColor: colors.border,
84
+ backgroundColor: colors.surface,
85
+ padding: tokens.spacing.lg,
86
+ },
87
+ style,
88
+ ], children: [heading !== undefined ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
89
+ color: colors.onSurface,
90
+ fontSize: tokens.typography.scale.lg,
91
+ fontWeight: '600',
92
+ }, children: heading })) : null, subtext !== undefined ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.muted, fontSize: tokens.typography.scale.sm }, children: subtext })) : null, (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { gap: tokens.spacing.sm }, children: [(0, jsx_runtime_1.jsx)(Input_1.Input, { value: email, onChangeText: setEmail, placeholder: placeholder, keyboardType: "email-address", autoCapitalize: "none", autoCorrect: false, accessibilityLabel: "Email address", invalid: invalid, editable: !submitting }), (0, jsx_runtime_1.jsx)(Button_1.Button, { onPress: handleSubmit, loading: submitting, disabled: submitting, children: buttonLabel })] }), message ? ((0, jsx_runtime_1.jsx)(react_native_1.Text, { accessibilityLiveRegion: "polite", style: {
93
+ fontSize: tokens.typography.scale.sm,
94
+ color: status === 'success' ? colors.success : colors.danger,
95
+ }, children: message })) : null] }));
96
+ }
97
+ //# sourceMappingURL=NewsletterSignup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewsletterSignup.js","sourceRoot":"","sources":["../../../src/native/marketing/NewsletterSignup.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export type OrnamentShape = 'diamond' | 'dot' | 'line' | 'none';
4
+ export type OrnamentTone = 'accent' | 'primary' | 'border';
5
+ export interface OrnamentRuleProps {
6
+ /** Centered ornament: rotated diamond, round dot, short bar, or none (plain rule). */
7
+ ornament?: OrnamentShape;
8
+ /** Token family tinting the rule and ornament (default `accent` — the "brass" look). */
9
+ tone?: OrnamentTone;
10
+ style?: StyleProp<ViewStyle>;
11
+ }
12
+ /**
13
+ * Editorial divider — the native mirror of the web `OrnamentRule`: a 1px rule
14
+ * flanking an optional centered diamond/dot/line ornament. Purely decorative
15
+ * and static, token-tinted via `tone`.
16
+ *
17
+ * The web version fades each half of the rule with a horizontal gradient
18
+ * (`linear-gradient` + `color-mix`). React Native has no CSS gradients here, so
19
+ * the fade is **approximated with a solid low-opacity token border** — the tint
20
+ * always originates from a theme token, so no literal color is introduced.
21
+ */
22
+ export declare function OrnamentRule({ ornament, tone, style, }: OrnamentRuleProps): React.ReactElement;
23
+ //# sourceMappingURL=OrnamentRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrnamentRule.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/OrnamentRule.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAoB,EACpB,IAAe,EACf,KAAK,GACN,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA4CxC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OrnamentRule = OrnamentRule;
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
+ /**
9
+ * Editorial divider — the native mirror of the web `OrnamentRule`: a 1px rule
10
+ * flanking an optional centered diamond/dot/line ornament. Purely decorative
11
+ * and static, token-tinted via `tone`.
12
+ *
13
+ * The web version fades each half of the rule with a horizontal gradient
14
+ * (`linear-gradient` + `color-mix`). React Native has no CSS gradients here, so
15
+ * the fade is **approximated with a solid low-opacity token border** — the tint
16
+ * always originates from a theme token, so no literal color is introduced.
17
+ */
18
+ function OrnamentRule({ ornament = 'diamond', tone = 'accent', style, }) {
19
+ const { colors, tokens } = (0, theme_1.useXenitionTheme)();
20
+ const toneColor = tone === 'accent'
21
+ ? tokens.ramps.accent[400]
22
+ : tone === 'primary'
23
+ ? tokens.ramps.primary[400]
24
+ : colors.border;
25
+ // Solid low-opacity token color approximating the web gradient fade.
26
+ const ruleColor = (0, color_1.withAlpha)(toneColor, 0.4);
27
+ const ornamentStyle = ornament === 'none'
28
+ ? null
29
+ : ornament === 'diamond'
30
+ ? { width: 7, height: 7, transform: [{ rotate: '45deg' }] }
31
+ : ornament === 'dot'
32
+ ? { width: 6, height: 6, borderRadius: 9999 }
33
+ : { width: 24, height: 1 };
34
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { testID: "xen-ornament-rule", accessibilityRole: "none", style: [
35
+ { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' },
36
+ style,
37
+ ], children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, height: 1, backgroundColor: ruleColor } }), ornamentStyle ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
38
+ marginHorizontal: tokens.spacing.md,
39
+ backgroundColor: toneColor,
40
+ ...ornamentStyle,
41
+ } })) : null, (0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, height: 1, backgroundColor: ruleColor } })] }));
42
+ }
43
+ //# sourceMappingURL=OrnamentRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrnamentRule.js","sourceRoot":"","sources":["../../../src/native/marketing/OrnamentRule.tsx"],"names":[],"mappings":";;AA0BA,oCAgDC;;AAzED,+CAAoE;AACpE,oCAA4C;AAC5C,wDAAyD;AAazD;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAAC,EAC3B,QAAQ,GAAG,SAAS,EACpB,IAAI,GAAG,QAAQ,EACf,KAAK,GACa;IAClB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAgB,GAAE,CAAC;IAE9C,MAAM,SAAS,GACb,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,IAAI,KAAK,SAAS;YAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAEtB,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAA,iBAAS,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAE5C,MAAM,aAAa,GACjB,QAAQ,KAAK,MAAM;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,KAAK,SAAS;YACtB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3D,CAAC,CAAC,QAAQ,KAAK,KAAK;gBAClB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;gBAC7C,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEnC,OAAO,CACL,wBAAC,mBAAI,IACH,MAAM,EAAC,mBAAmB,EAC1B,iBAAiB,EAAC,MAAM,EACxB,KAAK,EAAE;YACL,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE;YACxE,KAAK;SACN,aAED,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,GAAI,EAClE,aAAa,CAAC,CAAC,CAAC,CACf,uBAAC,mBAAI,IACH,KAAK,EAAE;oBACL,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;oBACnC,eAAe,EAAE,SAAS;oBAC1B,GAAG,aAAa;iBACjB,GACD,CACH,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,GAAI,IAC9D,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export type ParticleMood = 'ember' | 'snow' | 'fireflies' | 'sparks';
4
+ export interface ParticleFieldProps {
5
+ /** Particle character: embers, snow, fireflies, or sparks (drives color + size). */
6
+ mood?: ParticleMood;
7
+ /** Particle count (clamped 0–80; default 18). */
8
+ density?: number;
9
+ /** Layout seed — same seed, same scatter (deterministic, no `Math.random`). */
10
+ seed?: number;
11
+ /** Decorative content layered above the scatter (rendered absolute-fill). */
12
+ children?: React.ReactNode;
13
+ style?: StyleProp<ViewStyle>;
14
+ }
15
+ /**
16
+ * Native mirror of the web `ParticleField`. The web version animates each
17
+ * particle on an infinite CSS keyframe path (rise/fall/blink). React Native
18
+ * gets a **static, deterministic scatter** of small fully-rounded token-colored
19
+ * dot Views — no animation loop, so there is nothing to honor for reduced
20
+ * motion (it is already the reduced-motion rest pose). The `mood`/`density`/
21
+ * `seed` props are preserved: `mood` selects the dot color + size range,
22
+ * `density`/`seed` drive the same golden-ratio layout as web. Token-only.
23
+ */
24
+ export declare function ParticleField({ mood, density, seed, children, style, }: ParticleFieldProps): React.ReactElement;
25
+ //# sourceMappingURL=ParticleField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParticleField.d.ts","sourceRoot":"","sources":["../../../src/native/marketing/ParticleField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIhF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAsDD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAc,EACd,OAAY,EACZ,IAAQ,EACR,QAAQ,EACR,KAAK,GACN,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAiCzC"}