@xenition/ui 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/native/marketing/AnnouncementBar.d.ts +33 -0
- package/dist/native/marketing/AnnouncementBar.d.ts.map +1 -0
- package/dist/native/marketing/AnnouncementBar.js +101 -0
- package/dist/native/marketing/AnnouncementBar.js.map +1 -0
- package/dist/native/marketing/AuroraBackground.d.ts +35 -0
- package/dist/native/marketing/AuroraBackground.d.ts.map +1 -0
- package/dist/native/marketing/AuroraBackground.js +56 -0
- package/dist/native/marketing/AuroraBackground.js.map +1 -0
- package/dist/native/marketing/Bento.d.ts +54 -0
- package/dist/native/marketing/Bento.d.ts.map +1 -0
- package/dist/native/marketing/Bento.js +139 -0
- package/dist/native/marketing/Bento.js.map +1 -0
- package/dist/native/marketing/Carousel.d.ts +26 -0
- package/dist/native/marketing/Carousel.d.ts.map +1 -0
- package/dist/native/marketing/Carousel.js +95 -0
- package/dist/native/marketing/Carousel.js.map +1 -0
- package/dist/native/marketing/ComparisonTable.d.ts +38 -0
- package/dist/native/marketing/ComparisonTable.d.ts.map +1 -0
- package/dist/native/marketing/ComparisonTable.js +84 -0
- package/dist/native/marketing/ComparisonTable.js.map +1 -0
- package/dist/native/marketing/Countdown.d.ts +25 -0
- package/dist/native/marketing/Countdown.d.ts.map +1 -0
- package/dist/native/marketing/Countdown.js +107 -0
- package/dist/native/marketing/Countdown.js.map +1 -0
- package/dist/native/marketing/CoverGallery.d.ts +38 -0
- package/dist/native/marketing/CoverGallery.d.ts.map +1 -0
- package/dist/native/marketing/CoverGallery.js +41 -0
- package/dist/native/marketing/CoverGallery.js.map +1 -0
- package/dist/native/marketing/EditorialGrid.d.ts +73 -0
- package/dist/native/marketing/EditorialGrid.d.ts.map +1 -0
- package/dist/native/marketing/EditorialGrid.js +34 -0
- package/dist/native/marketing/EditorialGrid.js.map +1 -0
- package/dist/native/marketing/FeatureSplit.d.ts +29 -0
- package/dist/native/marketing/FeatureSplit.d.ts.map +1 -0
- package/dist/native/marketing/FeatureSplit.js +37 -0
- package/dist/native/marketing/FeatureSplit.js.map +1 -0
- package/dist/native/marketing/LocationBlock.d.ts +37 -0
- package/dist/native/marketing/LocationBlock.d.ts.map +1 -0
- package/dist/native/marketing/LocationBlock.js +49 -0
- package/dist/native/marketing/LocationBlock.js.map +1 -0
- package/dist/native/marketing/Navbar.d.ts +34 -0
- package/dist/native/marketing/Navbar.d.ts.map +1 -0
- package/dist/native/marketing/Navbar.js +100 -0
- package/dist/native/marketing/Navbar.js.map +1 -0
- package/dist/native/marketing/NewsletterSignup.d.ts +33 -0
- package/dist/native/marketing/NewsletterSignup.d.ts.map +1 -0
- package/dist/native/marketing/NewsletterSignup.js +97 -0
- package/dist/native/marketing/NewsletterSignup.js.map +1 -0
- package/dist/native/marketing/OrnamentRule.d.ts +23 -0
- package/dist/native/marketing/OrnamentRule.d.ts.map +1 -0
- package/dist/native/marketing/OrnamentRule.js +43 -0
- package/dist/native/marketing/OrnamentRule.js.map +1 -0
- package/dist/native/marketing/ParticleField.d.ts +25 -0
- package/dist/native/marketing/ParticleField.d.ts.map +1 -0
- package/dist/native/marketing/ParticleField.js +92 -0
- package/dist/native/marketing/ParticleField.js.map +1 -0
- package/dist/native/marketing/PointerHalo.d.ts +22 -0
- package/dist/native/marketing/PointerHalo.d.ts.map +1 -0
- package/dist/native/marketing/PointerHalo.js +15 -0
- package/dist/native/marketing/PointerHalo.js.map +1 -0
- package/dist/native/marketing/PriceList.d.ts +30 -0
- package/dist/native/marketing/PriceList.d.ts.map +1 -0
- package/dist/native/marketing/PriceList.js +42 -0
- package/dist/native/marketing/PriceList.js.map +1 -0
- package/dist/native/marketing/PricingToggle.d.ts +30 -0
- package/dist/native/marketing/PricingToggle.d.ts.map +1 -0
- package/dist/native/marketing/PricingToggle.js +55 -0
- package/dist/native/marketing/PricingToggle.js.map +1 -0
- package/dist/native/marketing/ProcessSteps.d.ts +24 -0
- package/dist/native/marketing/ProcessSteps.d.ts.map +1 -0
- package/dist/native/marketing/ProcessSteps.js +52 -0
- package/dist/native/marketing/ProcessSteps.js.map +1 -0
- package/dist/native/marketing/ProductMock.d.ts +47 -0
- package/dist/native/marketing/ProductMock.d.ts.map +1 -0
- package/dist/native/marketing/ProductMock.js +270 -0
- package/dist/native/marketing/ProductMock.js.map +1 -0
- package/dist/native/marketing/SectionDivider.d.ts +34 -0
- package/dist/native/marketing/SectionDivider.d.ts.map +1 -0
- package/dist/native/marketing/SectionDivider.js +41 -0
- package/dist/native/marketing/SectionDivider.js.map +1 -0
- package/dist/native/marketing/TeamGrid.d.ts +27 -0
- package/dist/native/marketing/TeamGrid.d.ts.map +1 -0
- package/dist/native/marketing/TeamGrid.js +37 -0
- package/dist/native/marketing/TeamGrid.js.map +1 -0
- package/dist/native/marketing/VideoEmbed.d.ts +23 -0
- package/dist/native/marketing/VideoEmbed.d.ts.map +1 -0
- package/dist/native/marketing/VideoEmbed.js +38 -0
- package/dist/native/marketing/VideoEmbed.js.map +1 -0
- package/dist/native/marketing/index.d.ts +46 -0
- package/dist/native/marketing/index.d.ts.map +1 -1
- package/dist/native/marketing/index.js +52 -1
- package/dist/native/marketing/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":";;AA0BA,oCAoGC;;AA7HD,+CAA0E;AAC1E,oCAA4C;AAiB5C;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAqB;IAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAgB,GAAE,CAAC;IAE9C,OAAO,CACL,uBAAC,mBAAI,IAAC,MAAM,EAAC,mBAAmB,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,YACxE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1C,OAAO,CACL,wBAAC,mBAAI,IAEH,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,aAEvD,wBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,aACnC,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,MAAM,EAAE,EAAE;oCACV,KAAK,EAAE,EAAE;oCACT,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;oCAChC,UAAU,EAAE,QAAQ;oCACpB,cAAc,EAAE,QAAQ;oCACxB,eAAe,EAAE,MAAM,CAAC,OAAO;iCAChC,YAEA,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CACzB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC9B,uBAAC,mBAAI,IACH,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM,CAAC,SAAS;wCACvB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI;wCACtC,UAAU,EAAE,KAAK;qCAClB,YAEA,IAAI,CAAC,IAAI,GACL,CACR,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,IAAI,CACV,CACF,CAAC,CAAC,CAAC,CACF,uBAAC,mBAAI,IACH,KAAK,EAAE;wCACL,KAAK,EAAE,MAAM,CAAC,SAAS;wCACvB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI;wCACtC,UAAU,EAAE,KAAK;qCAClB,YAEA,KAAK,GAAG,CAAC,GACL,CACR,GACI,EACN,CAAC,MAAM,CAAC,CAAC,CAAC,CACT,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;oCAC5B,KAAK,EAAE,CAAC;oCACR,IAAI,EAAE,CAAC;oCACP,eAAe,EAAE,MAAM,CAAC,MAAM;iCAC/B,GACD,CACH,CAAC,CAAC,CAAC,IAAI,IACH,EACP,wBAAC,mBAAI,IACH,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;4BACtB,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;yBAC9C,aAEA,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAChC,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM,CAAC,SAAS;oCACvB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oCACpC,UAAU,EAAE,KAAK;iCAClB,YAEA,IAAI,CAAC,KAAK,GACN,CACR,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,KAAK,CACX,EACA,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAC7D,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CACrC,uBAAC,mBAAI,IACH,KAAK,EAAE;oCACL,KAAK,EAAE,MAAM,CAAC,KAAK;oCACnB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;iCACrC,YAEA,IAAI,CAAC,WAAW,GACZ,CACR,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,WAAW,CACjB,CACF,CAAC,CAAC,CAAC,IAAI,IACH,KArFF,KAAK,CAsFL,CACR,CAAC;QACJ,CAAC,CAAC,GACG,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProductMock = ProductMock;
|
|
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 StatusDot_1 = require("../primitives/StatusDot");
|
|
9
|
+
const VARIANT_DEFAULTS = {
|
|
10
|
+
analytics: {
|
|
11
|
+
title: 'analytics / production',
|
|
12
|
+
kpis: [
|
|
13
|
+
{ label: 'Active now', value: '8,412' },
|
|
14
|
+
{ label: 'Events / min', value: '96,204' },
|
|
15
|
+
{ label: 'Conversion', value: '4.8%' },
|
|
16
|
+
],
|
|
17
|
+
chart: 'bars',
|
|
18
|
+
feed: [
|
|
19
|
+
'signup.completed · eu-west',
|
|
20
|
+
'checkout.paid · us-east',
|
|
21
|
+
'funnel.converted · ap-south',
|
|
22
|
+
'alert.anomaly · p99 spike',
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
chat: {
|
|
26
|
+
title: 'inbox / live',
|
|
27
|
+
kpis: [
|
|
28
|
+
{ label: 'Open', value: '24' },
|
|
29
|
+
{ label: 'Median reply', value: '48s' },
|
|
30
|
+
{ label: 'CSAT', value: '98%' },
|
|
31
|
+
],
|
|
32
|
+
chart: 'scene',
|
|
33
|
+
feed: ['agent.assigned · queue a', 'conversation.resolved · web', 'note.added · api'],
|
|
34
|
+
},
|
|
35
|
+
commerce: {
|
|
36
|
+
title: 'storefront / today',
|
|
37
|
+
kpis: [
|
|
38
|
+
{ label: 'Revenue', value: '$12,480' },
|
|
39
|
+
{ label: 'Orders', value: '312' },
|
|
40
|
+
{ label: 'AOV', value: '$40.00' },
|
|
41
|
+
],
|
|
42
|
+
chart: 'sparkline',
|
|
43
|
+
feed: ['order.paid · #4821', 'cart.recovered · email', 'refund.issued · #4790'],
|
|
44
|
+
},
|
|
45
|
+
calendar: {
|
|
46
|
+
title: 'schedule / week',
|
|
47
|
+
kpis: [
|
|
48
|
+
{ label: 'Booked', value: '38' },
|
|
49
|
+
{ label: 'Utilization', value: '86%' },
|
|
50
|
+
{ label: 'No-shows', value: '1' },
|
|
51
|
+
],
|
|
52
|
+
chart: 'scene',
|
|
53
|
+
feed: ['booking.confirmed · 09:30', 'booking.rescheduled · 13:00', 'reminder.sent · sms'],
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/** Deterministic pseudo-random equalizer heights (stable across renders/runtimes). */
|
|
57
|
+
const BARS = Array.from({ length: 20 }, (_, i) => {
|
|
58
|
+
const wave = Math.sin(i / 3.1) * 0.28 + Math.cos(i / 1.7) * 0.14;
|
|
59
|
+
return Math.min(1, Math.max(0.15, 0.38 + wave + ((i * 37) % 19) / 90));
|
|
60
|
+
});
|
|
61
|
+
/** Deterministic sparkline sample heights (0..1), rendered as a stepped area. */
|
|
62
|
+
const SPARK = Array.from({ length: 16 }, (_, i) => {
|
|
63
|
+
const wave = Math.sin(i / 2.2) * 0.3 + Math.cos(i / 3.7) * 0.18;
|
|
64
|
+
return Math.min(1, Math.max(0.12, 0.5 + wave));
|
|
65
|
+
});
|
|
66
|
+
/** Ring completion fractions, outer to inner. */
|
|
67
|
+
const RINGS = [0.78, 0.54, 0.32];
|
|
68
|
+
/** Chat scene: [width%, mine?] skeleton bubbles, deterministic. */
|
|
69
|
+
const BUBBLES = [
|
|
70
|
+
[58, false],
|
|
71
|
+
[42, true],
|
|
72
|
+
[66, false],
|
|
73
|
+
[30, true],
|
|
74
|
+
[50, false],
|
|
75
|
+
];
|
|
76
|
+
/** Calendar scene: 5×7 month grid; which cells read "booked", deterministic. */
|
|
77
|
+
const MONTH_CELLS = Array.from({ length: 35 }, (_, i) => (i * 13 + 5) % 7 < 3);
|
|
78
|
+
const CANVAS_HEIGHT = 160;
|
|
79
|
+
/**
|
|
80
|
+
* A configurable fake-product panel — the native mirror of the web
|
|
81
|
+
* `ProductMock`, the "product shot" of a landing hero.
|
|
82
|
+
*
|
|
83
|
+
* The web version is entirely CSS-animated (3D tilt entrance, looping
|
|
84
|
+
* equalizer bars, self-drawing sparkline/rings, sliding feed rows) over glass
|
|
85
|
+
* chrome with `backdrop-filter`. React Native has no keyframe engine,
|
|
86
|
+
* `filter: blur()`, or SVG stroke-dash animation, so native renders a
|
|
87
|
+
* **static, deterministic token visual** — no animation loop, reduced-motion
|
|
88
|
+
* safe. The `variant`/`chart`/`kpis`/`feed` prop contract is preserved for
|
|
89
|
+
* parity: bars/sparkline become stacked Views, rings become concentric
|
|
90
|
+
* bordered circles, chat/calendar scenes become static bubble/grid layouts.
|
|
91
|
+
* Token-only colors throughout; it is decorative scenery (`aria-hidden`).
|
|
92
|
+
*/
|
|
93
|
+
function ProductMock({ variant = 'analytics', title, kpis, chart, feed, live = 'LIVE', footnote, style, }) {
|
|
94
|
+
const { colors, tokens } = (0, theme_1.useXenitionTheme)();
|
|
95
|
+
const defaults = VARIANT_DEFAULTS[variant];
|
|
96
|
+
const resolvedTitle = title ?? defaults.title;
|
|
97
|
+
const resolvedKpis = kpis ?? defaults.kpis;
|
|
98
|
+
const resolvedChart = chart ?? defaults.chart;
|
|
99
|
+
const resolvedFeed = feed ?? defaults.feed;
|
|
100
|
+
const canvasBg = (0, color_1.withAlpha)(colors.surface, 0.6);
|
|
101
|
+
const tileBg = (0, color_1.withAlpha)(colors.surface, 0.6);
|
|
102
|
+
const tileBorder = (0, color_1.withAlpha)(colors.border, 0.55);
|
|
103
|
+
function renderVisual() {
|
|
104
|
+
if (resolvedChart === 'bars') {
|
|
105
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, flexDirection: 'row', alignItems: 'flex-end', gap: 3 }, children: BARS.map((h, i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
106
|
+
flex: 1,
|
|
107
|
+
height: `${(h * 100).toFixed(0)}%`,
|
|
108
|
+
borderTopLeftRadius: 2,
|
|
109
|
+
borderTopRightRadius: 2,
|
|
110
|
+
backgroundColor: tokens.ramps.primary[500],
|
|
111
|
+
opacity: 0.85,
|
|
112
|
+
} }, i))) }));
|
|
113
|
+
}
|
|
114
|
+
if (resolvedChart === 'sparkline') {
|
|
115
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, flexDirection: 'row', alignItems: 'flex-end', gap: 2 }, children: SPARK.map((h, i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
116
|
+
flex: 1,
|
|
117
|
+
height: `${(h * 100).toFixed(0)}%`,
|
|
118
|
+
borderTopLeftRadius: 2,
|
|
119
|
+
borderTopRightRadius: 2,
|
|
120
|
+
backgroundColor: (0, color_1.withAlpha)(tokens.ramps.accent[400], 0.7),
|
|
121
|
+
} }, i))) }));
|
|
122
|
+
}
|
|
123
|
+
if (resolvedChart === 'rings') {
|
|
124
|
+
const ringColors = [
|
|
125
|
+
tokens.ramps.primary[500],
|
|
126
|
+
tokens.ramps.accent[400],
|
|
127
|
+
tokens.ramps.primary[300],
|
|
128
|
+
];
|
|
129
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, alignItems: 'center', justifyContent: 'center' }, children: (0, jsx_runtime_1.jsx)(react_native_1.View, { style: { width: 112, height: 112, alignItems: 'center', justifyContent: 'center' }, children: RINGS.map((fraction, i) => {
|
|
130
|
+
const size = 112 - i * 34;
|
|
131
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
132
|
+
position: 'absolute',
|
|
133
|
+
width: size,
|
|
134
|
+
height: size,
|
|
135
|
+
borderRadius: size / 2,
|
|
136
|
+
borderWidth: 6,
|
|
137
|
+
// static "progress" hint: full track tinted, thicker top edge tone
|
|
138
|
+
borderColor: (0, color_1.withAlpha)(colors.border, 0.7),
|
|
139
|
+
borderTopColor: ringColors[i],
|
|
140
|
+
borderRightColor: fraction > 0.5 ? ringColors[i] : (0, color_1.withAlpha)(colors.border, 0.7),
|
|
141
|
+
} }, i));
|
|
142
|
+
}) }) }));
|
|
143
|
+
}
|
|
144
|
+
// scene: chat thread or month grid
|
|
145
|
+
if (variant === 'chat') {
|
|
146
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, justifyContent: 'flex-end', gap: tokens.spacing.xs }, children: BUBBLES.map(([width, mine], i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
147
|
+
height: 18,
|
|
148
|
+
width: `${width}%`,
|
|
149
|
+
borderRadius: tokens.radius.md,
|
|
150
|
+
alignSelf: mine ? 'flex-end' : 'flex-start',
|
|
151
|
+
backgroundColor: mine
|
|
152
|
+
? (0, color_1.withAlpha)(tokens.ramps.primary[500], 0.5)
|
|
153
|
+
: (0, color_1.withAlpha)(colors.onSurface, 0.08),
|
|
154
|
+
} }, i))) }));
|
|
155
|
+
}
|
|
156
|
+
// calendar month grid
|
|
157
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flex: 1, flexDirection: 'row', flexWrap: 'wrap', gap: 6 }, children: MONTH_CELLS.map((booked, i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
158
|
+
width: `${100 / 7}%`,
|
|
159
|
+
aspectRatio: 1,
|
|
160
|
+
maxWidth: 20,
|
|
161
|
+
borderRadius: tokens.radius.sm,
|
|
162
|
+
backgroundColor: booked
|
|
163
|
+
? (0, color_1.withAlpha)(tokens.ramps.primary[500], 0.85)
|
|
164
|
+
: (0, color_1.withAlpha)(colors.onSurface, 0.06),
|
|
165
|
+
} }, i))) }));
|
|
166
|
+
}
|
|
167
|
+
return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "xen-product-mock", accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: [{ width: '100%' }, style], children: (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
168
|
+
overflow: 'hidden',
|
|
169
|
+
borderRadius: tokens.radius.lg,
|
|
170
|
+
backgroundColor: (0, color_1.withAlpha)(colors.surface, 0.78),
|
|
171
|
+
borderWidth: 1,
|
|
172
|
+
borderColor: (0, color_1.withAlpha)(colors.border, 0.7),
|
|
173
|
+
}, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
174
|
+
flexDirection: 'row',
|
|
175
|
+
alignItems: 'center',
|
|
176
|
+
justifyContent: 'space-between',
|
|
177
|
+
paddingHorizontal: tokens.spacing.lg,
|
|
178
|
+
paddingVertical: tokens.spacing.sm,
|
|
179
|
+
borderBottomWidth: 1,
|
|
180
|
+
borderBottomColor: (0, color_1.withAlpha)(colors.border, 0.7),
|
|
181
|
+
}, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: 'row', alignItems: 'center', gap: tokens.spacing.md }, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flexDirection: 'row', gap: 6 }, children: [0, 1, 2].map((i) => ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
182
|
+
width: 10,
|
|
183
|
+
height: 10,
|
|
184
|
+
borderRadius: 5,
|
|
185
|
+
backgroundColor: (0, color_1.withAlpha)(colors.onSurface, 0.2),
|
|
186
|
+
} }, i))) }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
|
|
187
|
+
color: colors.muted,
|
|
188
|
+
fontSize: tokens.typography.scale.xs,
|
|
189
|
+
fontWeight: '500',
|
|
190
|
+
}, children: resolvedTitle })] }), live !== false ? ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
191
|
+
flexDirection: 'row',
|
|
192
|
+
alignItems: 'center',
|
|
193
|
+
gap: tokens.spacing.xs,
|
|
194
|
+
paddingHorizontal: tokens.spacing.sm,
|
|
195
|
+
paddingVertical: tokens.spacing.xs,
|
|
196
|
+
borderRadius: 9999,
|
|
197
|
+
borderWidth: 1,
|
|
198
|
+
borderColor: (0, color_1.withAlpha)(colors.accent, 0.35),
|
|
199
|
+
backgroundColor: (0, color_1.withAlpha)(colors.accent, 0.1),
|
|
200
|
+
}, children: [(0, jsx_runtime_1.jsx)(StatusDot_1.StatusDot, { tone: "accent", pulse: false, size: 6 }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
|
|
201
|
+
color: colors.accent,
|
|
202
|
+
fontSize: tokens.typography.scale.xs,
|
|
203
|
+
fontWeight: '700',
|
|
204
|
+
}, children: live })] })) : null] }), (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: { flexDirection: 'row', flexWrap: 'wrap' }, children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
205
|
+
flexGrow: 1,
|
|
206
|
+
flexBasis: 260,
|
|
207
|
+
gap: tokens.spacing.lg,
|
|
208
|
+
padding: tokens.spacing.lg,
|
|
209
|
+
}, children: [resolvedKpis.length > 0 ? ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: { flexDirection: 'row', gap: tokens.spacing.sm }, children: resolvedKpis.map((kpi) => ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
210
|
+
flex: 1,
|
|
211
|
+
padding: tokens.spacing.sm,
|
|
212
|
+
borderRadius: tokens.radius.md,
|
|
213
|
+
backgroundColor: tileBg,
|
|
214
|
+
borderWidth: 1,
|
|
215
|
+
borderColor: tileBorder,
|
|
216
|
+
}, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
|
|
217
|
+
color: colors.muted,
|
|
218
|
+
fontSize: tokens.typography.scale.xs,
|
|
219
|
+
fontWeight: '500',
|
|
220
|
+
}, children: kpi.label }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
|
|
221
|
+
marginTop: tokens.spacing.xs,
|
|
222
|
+
color: colors.onSurface,
|
|
223
|
+
fontSize: tokens.typography.scale.lg,
|
|
224
|
+
fontWeight: '700',
|
|
225
|
+
}, children: kpi.value })] }, kpi.label))) })) : null, (0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
226
|
+
height: CANVAS_HEIGHT,
|
|
227
|
+
overflow: 'hidden',
|
|
228
|
+
padding: tokens.spacing.md,
|
|
229
|
+
borderRadius: tokens.radius.md,
|
|
230
|
+
borderWidth: 1,
|
|
231
|
+
borderColor: tileBorder,
|
|
232
|
+
backgroundColor: canvasBg,
|
|
233
|
+
}, children: renderVisual() })] }), resolvedFeed.length > 0 ? ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
234
|
+
flexGrow: 1,
|
|
235
|
+
flexBasis: 200,
|
|
236
|
+
gap: tokens.spacing.md,
|
|
237
|
+
padding: tokens.spacing.lg,
|
|
238
|
+
borderLeftWidth: 1,
|
|
239
|
+
borderLeftColor: (0, color_1.withAlpha)(colors.border, 0.7),
|
|
240
|
+
}, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: {
|
|
241
|
+
color: colors.muted,
|
|
242
|
+
fontSize: tokens.typography.scale.xs,
|
|
243
|
+
fontWeight: '600',
|
|
244
|
+
}, children: "EVENT STREAM" }), resolvedFeed.map((line, i) => ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: {
|
|
245
|
+
flexDirection: 'row',
|
|
246
|
+
alignItems: 'center',
|
|
247
|
+
gap: tokens.spacing.xs,
|
|
248
|
+
paddingHorizontal: tokens.spacing.sm,
|
|
249
|
+
paddingVertical: tokens.spacing.xs,
|
|
250
|
+
borderRadius: tokens.radius.md,
|
|
251
|
+
backgroundColor: tileBg,
|
|
252
|
+
borderWidth: 1,
|
|
253
|
+
borderColor: tileBorder,
|
|
254
|
+
}, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
255
|
+
width: 6,
|
|
256
|
+
height: 6,
|
|
257
|
+
borderRadius: 3,
|
|
258
|
+
backgroundColor: i % 2 === 0 ? colors.accent : colors.primary,
|
|
259
|
+
} }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { numberOfLines: 1, style: {
|
|
260
|
+
flex: 1,
|
|
261
|
+
color: colors.muted,
|
|
262
|
+
fontSize: tokens.typography.scale.xs,
|
|
263
|
+
fontWeight: '500',
|
|
264
|
+
}, children: line })] }, i))), footnote !== undefined ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { style: {
|
|
265
|
+
marginTop: 'auto',
|
|
266
|
+
height: 1,
|
|
267
|
+
backgroundColor: (0, color_1.withAlpha)(tokens.ramps.primary[500], 0.55),
|
|
268
|
+
} }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: { color: colors.muted, fontSize: tokens.typography.scale.xs }, children: footnote })] })) : null] })) : null] })] }) }));
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=ProductMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductMock.js","sourceRoot":"","sources":["../../../src/native/marketing/ProductMock.tsx"],"names":[],"mappings":"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"}
|