rampkit-mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -0
- package/dist/api/rampkit.d.ts +96 -0
- package/dist/api/rampkit.d.ts.map +1 -0
- package/dist/api/rampkit.js +391 -0
- package/dist/api/rampkit.js.map +1 -0
- package/dist/detection/platform.d.ts +11 -0
- package/dist/detection/platform.d.ts.map +1 -0
- package/dist/detection/platform.js +420 -0
- package/dist/detection/platform.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +24 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +183 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/authoring-guide.d.ts +9 -0
- package/dist/resources/authoring-guide.d.ts.map +1 -0
- package/dist/resources/authoring-guide.js +487 -0
- package/dist/resources/authoring-guide.js.map +1 -0
- package/dist/resources/best-practices.d.ts +8 -0
- package/dist/resources/best-practices.d.ts.map +1 -0
- package/dist/resources/best-practices.js +92 -0
- package/dist/resources/best-practices.js.map +1 -0
- package/dist/resources/index.d.ts +19 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +236 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/schema.d.ts +42 -0
- package/dist/resources/schema.d.ts.map +1 -0
- package/dist/resources/schema.js +239 -0
- package/dist/resources/schema.js.map +1 -0
- package/dist/resources/sdk-guide.d.ts +7 -0
- package/dist/resources/sdk-guide.d.ts.map +1 -0
- package/dist/resources/sdk-guide.js +368 -0
- package/dist/resources/sdk-guide.js.map +1 -0
- package/dist/resources/templates.d.ts +9 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +874 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +109 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/instructions.d.ts +23 -0
- package/dist/tools/instructions.d.ts.map +1 -0
- package/dist/tools/instructions.js +74 -0
- package/dist/tools/instructions.js.map +1 -0
- package/dist/tools/onboarding.d.ts +211 -0
- package/dist/tools/onboarding.d.ts.map +1 -0
- package/dist/tools/onboarding.js +452 -0
- package/dist/tools/onboarding.js.map +1 -0
- package/dist/tools/setup.d.ts +61 -0
- package/dist/tools/setup.d.ts.map +1 -0
- package/dist/tools/setup.js +543 -0
- package/dist/tools/setup.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources
|
|
3
|
+
*
|
|
4
|
+
* Exposes RampKit schema, templates, and documentation as MCP resources.
|
|
5
|
+
*/
|
|
6
|
+
import { ONBOARDING_SCHEMA, HTML_SCREEN_DOCS } from './schema.js';
|
|
7
|
+
import { HTML_TEMPLATES } from './templates.js';
|
|
8
|
+
import { BEST_PRACTICES, CSS_VARIABLES } from './best-practices.js';
|
|
9
|
+
import { HTML_AUTHORING_GUIDE, SCREEN_ID_GUIDE } from './authoring-guide.js';
|
|
10
|
+
import { EXPO_SDK_GUIDE, IOS_SDK_GUIDE, ANDROID_SDK_GUIDE } from './sdk-guide.js';
|
|
11
|
+
export function getResources() {
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
uri: 'rampkit://schema.json',
|
|
15
|
+
name: 'RampKit Onboarding Schema',
|
|
16
|
+
description: 'JSON schema for HTML-first onboarding format',
|
|
17
|
+
mimeType: 'application/json',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
uri: 'rampkit://schema/docs',
|
|
21
|
+
name: 'HTML Screen Documentation',
|
|
22
|
+
description: 'Documentation for creating HTML screens',
|
|
23
|
+
mimeType: 'text/markdown',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
uri: 'rampkit://templates/welcome',
|
|
27
|
+
name: 'Welcome Screen Template',
|
|
28
|
+
description: 'Ready-to-use welcome screen HTML template',
|
|
29
|
+
mimeType: 'text/html',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
uri: 'rampkit://templates/features',
|
|
33
|
+
name: 'Features Screen Template',
|
|
34
|
+
description: 'Ready-to-use features showcase HTML template',
|
|
35
|
+
mimeType: 'text/html',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
uri: 'rampkit://templates/permissions',
|
|
39
|
+
name: 'Permissions Screen Template',
|
|
40
|
+
description: 'Ready-to-use permission request HTML template',
|
|
41
|
+
mimeType: 'text/html',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
uri: 'rampkit://templates/personalization',
|
|
45
|
+
name: 'Personalization Screen Template',
|
|
46
|
+
description: 'Ready-to-use personalization quiz HTML template',
|
|
47
|
+
mimeType: 'text/html',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
uri: 'rampkit://templates/paywall',
|
|
51
|
+
name: 'Paywall Screen Template',
|
|
52
|
+
description: 'Ready-to-use paywall/subscription HTML template',
|
|
53
|
+
mimeType: 'text/html',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
uri: 'rampkit://templates/complete',
|
|
57
|
+
name: 'Completion Screen Template',
|
|
58
|
+
description: 'Ready-to-use success/completion HTML template',
|
|
59
|
+
mimeType: 'text/html',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
uri: 'rampkit://best-practices',
|
|
63
|
+
name: 'Onboarding Best Practices',
|
|
64
|
+
description: 'Guidelines for designing effective onboardings',
|
|
65
|
+
mimeType: 'text/markdown',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
uri: 'rampkit://styles/variables',
|
|
69
|
+
name: 'CSS Variables Reference',
|
|
70
|
+
description: 'CSS custom properties for theming onboardings',
|
|
71
|
+
mimeType: 'application/json',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
uri: 'rampkit://authoring-guide',
|
|
75
|
+
name: 'HTML Authoring Guide',
|
|
76
|
+
description: 'Comprehensive guide for creating HTML screens including RampKit JS API, CSS patterns, and screen structures',
|
|
77
|
+
mimeType: 'text/markdown',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
uri: 'rampkit://screen-ids',
|
|
81
|
+
name: 'Screen ID Conventions',
|
|
82
|
+
description: 'Naming conventions for screen IDs',
|
|
83
|
+
mimeType: 'text/markdown',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
uri: 'rampkit://sdk/expo',
|
|
87
|
+
name: 'Expo SDK Guide',
|
|
88
|
+
description: 'Complete guide for installing and using the RampKit Expo SDK (rampkit-expo-dev)',
|
|
89
|
+
mimeType: 'text/markdown',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
uri: 'rampkit://sdk/ios',
|
|
93
|
+
name: 'iOS SDK Guide',
|
|
94
|
+
description: 'Guide for installing and using the RampKit iOS SDK',
|
|
95
|
+
mimeType: 'text/markdown',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
uri: 'rampkit://sdk/android',
|
|
99
|
+
name: 'Android SDK Guide',
|
|
100
|
+
description: 'Guide for installing and using the RampKit Android SDK',
|
|
101
|
+
mimeType: 'text/markdown',
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
export function readResource(uri) {
|
|
106
|
+
const contents = [];
|
|
107
|
+
switch (uri) {
|
|
108
|
+
case 'rampkit://schema.json':
|
|
109
|
+
contents.push({
|
|
110
|
+
uri,
|
|
111
|
+
mimeType: 'application/json',
|
|
112
|
+
text: JSON.stringify(ONBOARDING_SCHEMA, null, 2),
|
|
113
|
+
});
|
|
114
|
+
break;
|
|
115
|
+
case 'rampkit://schema/docs':
|
|
116
|
+
contents.push({
|
|
117
|
+
uri,
|
|
118
|
+
mimeType: 'text/markdown',
|
|
119
|
+
text: HTML_SCREEN_DOCS,
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
case 'rampkit://templates/welcome':
|
|
123
|
+
contents.push({
|
|
124
|
+
uri,
|
|
125
|
+
mimeType: 'text/html',
|
|
126
|
+
text: HTML_TEMPLATES.welcome,
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
case 'rampkit://templates/features':
|
|
130
|
+
contents.push({
|
|
131
|
+
uri,
|
|
132
|
+
mimeType: 'text/html',
|
|
133
|
+
text: HTML_TEMPLATES.features,
|
|
134
|
+
});
|
|
135
|
+
break;
|
|
136
|
+
case 'rampkit://templates/permissions':
|
|
137
|
+
contents.push({
|
|
138
|
+
uri,
|
|
139
|
+
mimeType: 'text/html',
|
|
140
|
+
text: HTML_TEMPLATES.permissions,
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case 'rampkit://templates/personalization':
|
|
144
|
+
contents.push({
|
|
145
|
+
uri,
|
|
146
|
+
mimeType: 'text/html',
|
|
147
|
+
text: HTML_TEMPLATES.personalization,
|
|
148
|
+
});
|
|
149
|
+
break;
|
|
150
|
+
case 'rampkit://templates/paywall':
|
|
151
|
+
contents.push({
|
|
152
|
+
uri,
|
|
153
|
+
mimeType: 'text/html',
|
|
154
|
+
text: HTML_TEMPLATES.paywall,
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
case 'rampkit://templates/complete':
|
|
158
|
+
contents.push({
|
|
159
|
+
uri,
|
|
160
|
+
mimeType: 'text/html',
|
|
161
|
+
text: HTML_TEMPLATES.complete,
|
|
162
|
+
});
|
|
163
|
+
break;
|
|
164
|
+
case 'rampkit://best-practices':
|
|
165
|
+
contents.push({
|
|
166
|
+
uri,
|
|
167
|
+
mimeType: 'text/markdown',
|
|
168
|
+
text: formatBestPractices(),
|
|
169
|
+
});
|
|
170
|
+
break;
|
|
171
|
+
case 'rampkit://styles/variables':
|
|
172
|
+
contents.push({
|
|
173
|
+
uri,
|
|
174
|
+
mimeType: 'application/json',
|
|
175
|
+
text: JSON.stringify(CSS_VARIABLES, null, 2),
|
|
176
|
+
});
|
|
177
|
+
break;
|
|
178
|
+
case 'rampkit://authoring-guide':
|
|
179
|
+
contents.push({
|
|
180
|
+
uri,
|
|
181
|
+
mimeType: 'text/markdown',
|
|
182
|
+
text: HTML_AUTHORING_GUIDE,
|
|
183
|
+
});
|
|
184
|
+
break;
|
|
185
|
+
case 'rampkit://screen-ids':
|
|
186
|
+
contents.push({
|
|
187
|
+
uri,
|
|
188
|
+
mimeType: 'text/markdown',
|
|
189
|
+
text: SCREEN_ID_GUIDE,
|
|
190
|
+
});
|
|
191
|
+
break;
|
|
192
|
+
case 'rampkit://sdk/expo':
|
|
193
|
+
contents.push({
|
|
194
|
+
uri,
|
|
195
|
+
mimeType: 'text/markdown',
|
|
196
|
+
text: EXPO_SDK_GUIDE,
|
|
197
|
+
});
|
|
198
|
+
break;
|
|
199
|
+
case 'rampkit://sdk/ios':
|
|
200
|
+
contents.push({
|
|
201
|
+
uri,
|
|
202
|
+
mimeType: 'text/markdown',
|
|
203
|
+
text: IOS_SDK_GUIDE,
|
|
204
|
+
});
|
|
205
|
+
break;
|
|
206
|
+
case 'rampkit://sdk/android':
|
|
207
|
+
contents.push({
|
|
208
|
+
uri,
|
|
209
|
+
mimeType: 'text/markdown',
|
|
210
|
+
text: ANDROID_SDK_GUIDE,
|
|
211
|
+
});
|
|
212
|
+
break;
|
|
213
|
+
default:
|
|
214
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
215
|
+
}
|
|
216
|
+
return { contents };
|
|
217
|
+
}
|
|
218
|
+
function formatBestPractices() {
|
|
219
|
+
const sections = [
|
|
220
|
+
{ title: 'Content Strategy', practices: BEST_PRACTICES.slice(0, 5) },
|
|
221
|
+
{ title: 'Visual Design', practices: BEST_PRACTICES.slice(5, 10) },
|
|
222
|
+
{ title: 'Screen Types', practices: BEST_PRACTICES.slice(10, 15) },
|
|
223
|
+
{ title: 'Technical', practices: BEST_PRACTICES.slice(15, 20) },
|
|
224
|
+
{ title: 'Optimization', practices: BEST_PRACTICES.slice(20, 25) },
|
|
225
|
+
];
|
|
226
|
+
let markdown = '# RampKit Onboarding Best Practices\n\n';
|
|
227
|
+
for (const section of sections) {
|
|
228
|
+
markdown += `## ${section.title}\n\n`;
|
|
229
|
+
for (const practice of section.practices) {
|
|
230
|
+
markdown += `- ${practice}\n`;
|
|
231
|
+
}
|
|
232
|
+
markdown += '\n';
|
|
233
|
+
}
|
|
234
|
+
return markdown;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RampKit Onboarding Schema
|
|
3
|
+
*
|
|
4
|
+
* Defines the JSON schema for HTML-first onboardings.
|
|
5
|
+
*/
|
|
6
|
+
import type { OnboardingSchema } from '../types.js';
|
|
7
|
+
export declare const ONBOARDING_SCHEMA: OnboardingSchema;
|
|
8
|
+
/**
|
|
9
|
+
* HTML Screen Format Documentation
|
|
10
|
+
*
|
|
11
|
+
* Each screen's HTML should be a complete, self-contained document that renders
|
|
12
|
+
* inside the RampKit WebView. Key patterns:
|
|
13
|
+
*
|
|
14
|
+
* 1. DATA ATTRIBUTES:
|
|
15
|
+
* - data-ramp-id="element-name": Marks elements for targeting in overrides/analytics
|
|
16
|
+
* - data-ramp-action="next|back|dismiss|finish": Button actions
|
|
17
|
+
* - data-ramp-screen="screen-id": Navigate to specific screen
|
|
18
|
+
*
|
|
19
|
+
* 2. CSS VARIABLES:
|
|
20
|
+
* - --ramp-primary: Primary brand color
|
|
21
|
+
* - --ramp-background: Background color
|
|
22
|
+
* - --ramp-text: Text color
|
|
23
|
+
* - --ramp-text-secondary: Secondary text color
|
|
24
|
+
* - --ramp-safe-area-top: Safe area inset top
|
|
25
|
+
* - --ramp-safe-area-bottom: Safe area inset bottom
|
|
26
|
+
*
|
|
27
|
+
* 3. JAVASCRIPT:
|
|
28
|
+
* - RampKit.navigate('next'): Go to next screen
|
|
29
|
+
* - RampKit.navigate('back'): Go to previous screen
|
|
30
|
+
* - RampKit.navigate('screen-id'): Go to specific screen
|
|
31
|
+
* - RampKit.dismiss(): Dismiss onboarding
|
|
32
|
+
* - RampKit.finish(): Complete onboarding
|
|
33
|
+
* - RampKit.track('event', {data}): Track custom event
|
|
34
|
+
*
|
|
35
|
+
* 4. STRUCTURE:
|
|
36
|
+
* - Use flexbox for vertical layouts
|
|
37
|
+
* - Include safe area padding at top/bottom
|
|
38
|
+
* - Put CTA buttons at bottom with safe area padding
|
|
39
|
+
* - Use relative units (rem, %) for responsiveness
|
|
40
|
+
*/
|
|
41
|
+
export declare const HTML_SCREEN_DOCS = "\n## HTML Screen Format\n\nEach screen is a complete HTML document rendered in a WebView.\n\n### Required Structure\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">\n <style>\n /* Reset and base styles */\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n :root {\n --ramp-primary: #007AFF;\n --ramp-background: #FFFFFF;\n --ramp-text: #1C1C1E;\n --ramp-text-secondary: #8E8E93;\n --ramp-safe-area-top: env(safe-area-inset-top, 44px);\n --ramp-safe-area-bottom: env(safe-area-inset-bottom, 34px);\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro', 'Segoe UI', sans-serif;\n background: var(--ramp-background);\n color: var(--ramp-text);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n }\n\n .screen {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: calc(var(--ramp-safe-area-top) + 20px) 24px calc(var(--ramp-safe-area-bottom) + 20px);\n }\n\n .content {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n }\n\n .actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .btn-primary {\n background: var(--ramp-primary);\n color: white;\n border: none;\n padding: 16px 32px;\n border-radius: 12px;\n font-size: 17px;\n font-weight: 600;\n cursor: pointer;\n }\n </style>\n</head>\n<body>\n <div class=\"screen\">\n <div class=\"content\">\n <h1 data-ramp-id=\"title\">Welcome</h1>\n <p data-ramp-id=\"subtitle\">Get started with our app</p>\n </div>\n <div class=\"actions\">\n <button class=\"btn-primary\" data-ramp-action=\"next\" data-ramp-id=\"cta\">\n Get Started\n </button>\n </div>\n </div>\n\n <script>\n // RampKit SDK will inject the RampKit global object\n document.querySelectorAll('[data-ramp-action]').forEach(el => {\n el.addEventListener('click', () => {\n const action = el.dataset.rampAction;\n const screen = el.dataset.rampScreen;\n if (action === 'next') RampKit.navigate('next');\n else if (action === 'back') RampKit.navigate('back');\n else if (action === 'dismiss') RampKit.dismiss();\n else if (action === 'finish') RampKit.finish();\n else if (screen) RampKit.navigate(screen);\n });\n });\n </script>\n</body>\n</html>\n```\n\n### Data Attributes\n\n- `data-ramp-id=\"name\"`: Identifies element for analytics and overrides\n- `data-ramp-action=\"next|back|dismiss|finish\"`: Button navigation action\n- `data-ramp-screen=\"screen-id\"`: Navigate to specific screen\n\n### CSS Variables\n\n- `--ramp-primary`: Primary brand color (buttons, links)\n- `--ramp-background`: Screen background color\n- `--ramp-text`: Primary text color\n- `--ramp-text-secondary`: Secondary/muted text color\n- `--ramp-safe-area-top`: Safe area inset (notch, status bar)\n- `--ramp-safe-area-bottom`: Safe area inset (home indicator)\n\n### JavaScript API\n\n- `RampKit.navigate('next')`: Go to next screen\n- `RampKit.navigate('back')`: Go to previous screen\n- `RampKit.navigate('screen-id')`: Go to specific screen\n- `RampKit.dismiss()`: Dismiss onboarding (if dismissible)\n- `RampKit.finish()`: Complete onboarding successfully\n- `RampKit.track(event, data)`: Track custom analytics event\n";
|
|
42
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,iBAAiB,EAAE,gBA2E/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,eAAO,MAAM,gBAAgB,0hHA2H5B,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RampKit Onboarding Schema
|
|
3
|
+
*
|
|
4
|
+
* Defines the JSON schema for HTML-first onboardings.
|
|
5
|
+
*/
|
|
6
|
+
export const ONBOARDING_SCHEMA = {
|
|
7
|
+
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
8
|
+
title: 'RampKit Onboarding',
|
|
9
|
+
description: 'Schema for RampKit HTML-first onboarding flows',
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
name: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
description: 'Human-readable name for the onboarding (e.g., "Welcome Flow v2")',
|
|
15
|
+
},
|
|
16
|
+
screens: {
|
|
17
|
+
type: 'array',
|
|
18
|
+
description: 'Ordered array of screens in the onboarding flow',
|
|
19
|
+
items: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
description: 'A single screen in the onboarding',
|
|
22
|
+
properties: {
|
|
23
|
+
id: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Unique identifier for the screen (e.g., "screen-welcome")',
|
|
26
|
+
},
|
|
27
|
+
label: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'Display name shown in the editor (e.g., "Welcome")',
|
|
30
|
+
},
|
|
31
|
+
html: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Complete HTML content for the screen including inline CSS and JavaScript',
|
|
34
|
+
},
|
|
35
|
+
overrides: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
description: 'Runtime overrides for dynamic content',
|
|
38
|
+
properties: {
|
|
39
|
+
elements: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
description: 'Element-specific overrides keyed by data-ramp-id',
|
|
42
|
+
},
|
|
43
|
+
colors: {
|
|
44
|
+
type: 'object',
|
|
45
|
+
description: 'CSS variable color overrides',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
settings: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
description: 'Global onboarding settings',
|
|
55
|
+
properties: {
|
|
56
|
+
dismissible: {
|
|
57
|
+
type: 'boolean',
|
|
58
|
+
description: 'Whether users can dismiss the onboarding',
|
|
59
|
+
default: false,
|
|
60
|
+
},
|
|
61
|
+
showProgressBar: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
description: 'Show progress indicator',
|
|
64
|
+
default: true,
|
|
65
|
+
},
|
|
66
|
+
showBackButton: {
|
|
67
|
+
type: 'boolean',
|
|
68
|
+
description: 'Show back navigation button',
|
|
69
|
+
default: true,
|
|
70
|
+
},
|
|
71
|
+
animationType: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Screen transition animation',
|
|
74
|
+
enum: ['slide', 'fade', 'none'],
|
|
75
|
+
default: 'slide',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ['name', 'screens'],
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* HTML Screen Format Documentation
|
|
84
|
+
*
|
|
85
|
+
* Each screen's HTML should be a complete, self-contained document that renders
|
|
86
|
+
* inside the RampKit WebView. Key patterns:
|
|
87
|
+
*
|
|
88
|
+
* 1. DATA ATTRIBUTES:
|
|
89
|
+
* - data-ramp-id="element-name": Marks elements for targeting in overrides/analytics
|
|
90
|
+
* - data-ramp-action="next|back|dismiss|finish": Button actions
|
|
91
|
+
* - data-ramp-screen="screen-id": Navigate to specific screen
|
|
92
|
+
*
|
|
93
|
+
* 2. CSS VARIABLES:
|
|
94
|
+
* - --ramp-primary: Primary brand color
|
|
95
|
+
* - --ramp-background: Background color
|
|
96
|
+
* - --ramp-text: Text color
|
|
97
|
+
* - --ramp-text-secondary: Secondary text color
|
|
98
|
+
* - --ramp-safe-area-top: Safe area inset top
|
|
99
|
+
* - --ramp-safe-area-bottom: Safe area inset bottom
|
|
100
|
+
*
|
|
101
|
+
* 3. JAVASCRIPT:
|
|
102
|
+
* - RampKit.navigate('next'): Go to next screen
|
|
103
|
+
* - RampKit.navigate('back'): Go to previous screen
|
|
104
|
+
* - RampKit.navigate('screen-id'): Go to specific screen
|
|
105
|
+
* - RampKit.dismiss(): Dismiss onboarding
|
|
106
|
+
* - RampKit.finish(): Complete onboarding
|
|
107
|
+
* - RampKit.track('event', {data}): Track custom event
|
|
108
|
+
*
|
|
109
|
+
* 4. STRUCTURE:
|
|
110
|
+
* - Use flexbox for vertical layouts
|
|
111
|
+
* - Include safe area padding at top/bottom
|
|
112
|
+
* - Put CTA buttons at bottom with safe area padding
|
|
113
|
+
* - Use relative units (rem, %) for responsiveness
|
|
114
|
+
*/
|
|
115
|
+
export const HTML_SCREEN_DOCS = `
|
|
116
|
+
## HTML Screen Format
|
|
117
|
+
|
|
118
|
+
Each screen is a complete HTML document rendered in a WebView.
|
|
119
|
+
|
|
120
|
+
### Required Structure
|
|
121
|
+
|
|
122
|
+
\`\`\`html
|
|
123
|
+
<!DOCTYPE html>
|
|
124
|
+
<html>
|
|
125
|
+
<head>
|
|
126
|
+
<meta charset="utf-8">
|
|
127
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
128
|
+
<style>
|
|
129
|
+
/* Reset and base styles */
|
|
130
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
131
|
+
|
|
132
|
+
:root {
|
|
133
|
+
--ramp-primary: #007AFF;
|
|
134
|
+
--ramp-background: #FFFFFF;
|
|
135
|
+
--ramp-text: #1C1C1E;
|
|
136
|
+
--ramp-text-secondary: #8E8E93;
|
|
137
|
+
--ramp-safe-area-top: env(safe-area-inset-top, 44px);
|
|
138
|
+
--ramp-safe-area-bottom: env(safe-area-inset-bottom, 34px);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
body {
|
|
142
|
+
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro', 'Segoe UI', sans-serif;
|
|
143
|
+
background: var(--ramp-background);
|
|
144
|
+
color: var(--ramp-text);
|
|
145
|
+
min-height: 100vh;
|
|
146
|
+
display: flex;
|
|
147
|
+
flex-direction: column;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.screen {
|
|
151
|
+
flex: 1;
|
|
152
|
+
display: flex;
|
|
153
|
+
flex-direction: column;
|
|
154
|
+
padding: calc(var(--ramp-safe-area-top) + 20px) 24px calc(var(--ramp-safe-area-bottom) + 20px);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.content {
|
|
158
|
+
flex: 1;
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
align-items: center;
|
|
163
|
+
text-align: center;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.actions {
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-direction: column;
|
|
169
|
+
gap: 12px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.btn-primary {
|
|
173
|
+
background: var(--ramp-primary);
|
|
174
|
+
color: white;
|
|
175
|
+
border: none;
|
|
176
|
+
padding: 16px 32px;
|
|
177
|
+
border-radius: 12px;
|
|
178
|
+
font-size: 17px;
|
|
179
|
+
font-weight: 600;
|
|
180
|
+
cursor: pointer;
|
|
181
|
+
}
|
|
182
|
+
</style>
|
|
183
|
+
</head>
|
|
184
|
+
<body>
|
|
185
|
+
<div class="screen">
|
|
186
|
+
<div class="content">
|
|
187
|
+
<h1 data-ramp-id="title">Welcome</h1>
|
|
188
|
+
<p data-ramp-id="subtitle">Get started with our app</p>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="actions">
|
|
191
|
+
<button class="btn-primary" data-ramp-action="next" data-ramp-id="cta">
|
|
192
|
+
Get Started
|
|
193
|
+
</button>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<script>
|
|
198
|
+
// RampKit SDK will inject the RampKit global object
|
|
199
|
+
document.querySelectorAll('[data-ramp-action]').forEach(el => {
|
|
200
|
+
el.addEventListener('click', () => {
|
|
201
|
+
const action = el.dataset.rampAction;
|
|
202
|
+
const screen = el.dataset.rampScreen;
|
|
203
|
+
if (action === 'next') RampKit.navigate('next');
|
|
204
|
+
else if (action === 'back') RampKit.navigate('back');
|
|
205
|
+
else if (action === 'dismiss') RampKit.dismiss();
|
|
206
|
+
else if (action === 'finish') RampKit.finish();
|
|
207
|
+
else if (screen) RampKit.navigate(screen);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
</script>
|
|
211
|
+
</body>
|
|
212
|
+
</html>
|
|
213
|
+
\`\`\`
|
|
214
|
+
|
|
215
|
+
### Data Attributes
|
|
216
|
+
|
|
217
|
+
- \`data-ramp-id="name"\`: Identifies element for analytics and overrides
|
|
218
|
+
- \`data-ramp-action="next|back|dismiss|finish"\`: Button navigation action
|
|
219
|
+
- \`data-ramp-screen="screen-id"\`: Navigate to specific screen
|
|
220
|
+
|
|
221
|
+
### CSS Variables
|
|
222
|
+
|
|
223
|
+
- \`--ramp-primary\`: Primary brand color (buttons, links)
|
|
224
|
+
- \`--ramp-background\`: Screen background color
|
|
225
|
+
- \`--ramp-text\`: Primary text color
|
|
226
|
+
- \`--ramp-text-secondary\`: Secondary/muted text color
|
|
227
|
+
- \`--ramp-safe-area-top\`: Safe area inset (notch, status bar)
|
|
228
|
+
- \`--ramp-safe-area-bottom\`: Safe area inset (home indicator)
|
|
229
|
+
|
|
230
|
+
### JavaScript API
|
|
231
|
+
|
|
232
|
+
- \`RampKit.navigate('next')\`: Go to next screen
|
|
233
|
+
- \`RampKit.navigate('back')\`: Go to previous screen
|
|
234
|
+
- \`RampKit.navigate('screen-id')\`: Go to specific screen
|
|
235
|
+
- \`RampKit.dismiss()\`: Dismiss onboarding (if dismissible)
|
|
236
|
+
- \`RampKit.finish()\`: Complete onboarding successfully
|
|
237
|
+
- \`RampKit.track(event, data)\`: Track custom analytics event
|
|
238
|
+
`;
|
|
239
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/resources/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD,OAAO,EAAE,8CAA8C;IACvD,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EAAE,gDAAgD;IAC7D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kEAAkE;SAChF;QACD,OAAO,EAAE;YACP,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,iDAAiD;YAC9D,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;gBAChD,UAAU,EAAE;oBACV,EAAE,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,2DAA2D;qBACzE;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oDAAoD;qBAClE;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,0EAA0E;qBACxF;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,uCAAuC;wBACpD,UAAU,EAAE;4BACV,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,kDAAkD;6BAChE;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,8BAA8B;6BAC5C;yBACF;qBACF;iBACF;aACF;SACF;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4BAA4B;YACzC,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,0CAA0C;oBACvD,OAAO,EAAE,KAAK;iBACf;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,yBAAyB;oBACtC,OAAO,EAAE,IAAI;iBACd;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6BAA6B;oBAC1C,OAAO,EAAE,IAAI;iBACd;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;oBAC1C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;oBAC/B,OAAO,EAAE,OAAO;iBACjB;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2H/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Installation and Usage Guides
|
|
3
|
+
*/
|
|
4
|
+
export declare const EXPO_SDK_GUIDE = "# RampKit Expo SDK Guide\n\n## Minimum Requirements\n\n- **iOS 14.0+** (StoreKit 2 transactions automatically tracked on iOS 15+)\n- **Expo SDK 51+**\n\n## Installation\n\n```bash\nnpm install rampkit-expo-dev\n```\n\n## Required Peer Dependencies\n\nInstall these in your app:\n\n```bash\nnpx expo install react-native-webview react-native-pager-view react-native-root-siblings\n```\n\n## Setup\n\nWrap your app with RootSiblingParent (required for the overlay):\n\n```tsx\n// App.tsx\nimport { RootSiblingParent } from 'react-native-root-siblings';\n\nexport default function App() {\n return (\n <RootSiblingParent>\n {/* Your app content */}\n </RootSiblingParent>\n );\n}\n```\n\n## Initialize the SDK\n\n```typescript\nimport { RampKit } from 'rampkit-expo-dev';\n\n// Call once at app startup (e.g., in useEffect or before rendering)\nawait RampKit.configure({\n appId: 'YOUR_APP_ID',\n environment: 'production', // or 'development'\n autoShowOnboarding: false, // true = show immediately after configure\n appUserID: 'your-user-123', // optional: link to your user system\n verboseLogging: false, // true for debug logs\n onOnboardingFinished: (payload) => {\n console.log('Onboarding finished', payload);\n },\n onShowPaywall: (payload) => {\n // Called when onboarding triggers paywall\n // Present your paywall here\n },\n});\n```\n\n## Show Onboarding Manually\n\n```typescript\nRampKit.showOnboarding();\n\n// Or with custom paywall handler:\nRampKit.showOnboarding({\n onShowPaywall: (payload) => { /* show paywall */ }\n});\n```\n\n## Close Onboarding\n\n```typescript\nRampKit.closeOnboarding();\n```\n\n## Get User ID\n\n```typescript\nconst userId = RampKit.getUserId();\n```\n\n## Get User Answers (from onboarding questions)\n\n```typescript\n// All answers\nconst answers = await RampKit.getAnswers();\n\n// Single answer\nconst name = await RampKit.getAnswer('userName');\n```\n\n## Set Custom User ID (after configure)\n\n```typescript\nawait RampKit.setAppUserID('user-abc-123');\n```\n\n## Track Custom Events\n\n```typescript\nRampKit.trackEvent('button_tapped', { buttonId: 'cta-1' });\n```\n\n## Check Initialization\n\n```typescript\nif (RampKit.isInitialized()) {\n RampKit.showOnboarding();\n}\n```\n\n## Reset SDK (logout/clear state)\n\n```typescript\nawait RampKit.reset();\n```\n\n## Complete Example\n\n```tsx\n// App.tsx\nimport { useEffect, useState } from 'react';\nimport { RootSiblingParent } from 'react-native-root-siblings';\nimport { RampKit } from 'rampkit-expo-dev';\n\nexport default function App() {\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n async function init() {\n await RampKit.configure({\n appId: 'YOUR_APP_ID',\n environment: 'production',\n autoShowOnboarding: true, // Show onboarding automatically\n onOnboardingFinished: (payload) => {\n console.log('User completed onboarding', payload);\n },\n onShowPaywall: (payload) => {\n // Handle paywall presentation\n console.log('Show paywall', payload);\n },\n });\n setIsReady(true);\n }\n init();\n }, []);\n\n if (!isReady) return null;\n\n return (\n <RootSiblingParent>\n {/* Your app content */}\n </RootSiblingParent>\n );\n}\n```\n";
|
|
5
|
+
export declare const IOS_SDK_GUIDE = "# RampKit iOS SDK Guide\n\n## Requirements\n\n- **iOS 14.0+**\n- StoreKit 2 transactions are automatically tracked on iOS 15+\n\n## Installation (Swift Package Manager)\n\nIn Xcode:\n1. File \u2192 Add Package Dependencies\n2. Enter: `https://github.com/getrampkit/rampkit-ios.git`\n3. Select version 1.0.0 or \"Up to Next Major\"\n4. Add to your target\n\nOr in Package.swift:\n\n```swift\ndependencies: [\n .package(url: \"https://github.com/getrampkit/rampkit-ios.git\", from: \"1.0.0\")\n]\n```\n\n## Initialize the SDK\n\n```swift\nimport RampKit\n\n// Call once at app launch (e.g., in AppDelegate or @main App init)\nTask {\n await RampKit.configure(config: RampKitConfig(\n appId: \"YOUR_APP_ID\",\n environment: \"production\",\n autoShowOnboarding: false,\n appUserID: \"your-user-123\", // optional\n verboseLogging: false,\n onOnboardingFinished: { payload in\n print(\"Onboarding finished\", payload ?? \"\")\n },\n onShowPaywall: { payload in\n // Present your paywall here\n }\n ))\n}\n```\n\n## Show Onboarding\n\n```swift\nRampKit.showOnboarding()\n\n// Or with custom paywall handler:\nRampKit.showOnboarding(options: ShowOnboardingOptions(\n onShowPaywall: { payload in /* show paywall */ }\n))\n```\n\n## Close Onboarding\n\n```swift\nRampKit.closeOnboarding()\n```\n\n## Get User ID\n\n```swift\nlet userId = RampKit.getUserId()\n```\n\n## Get User Answers (from onboarding questions)\n\n```swift\n// All answers\nlet answers = RampKit.getAnswers()\n\n// Single answer\nlet name = RampKit.getAnswer(\"userName\")\n```\n\n## Set Custom User ID (after configure)\n\n```swift\nTask {\n await RampKit.setAppUserID(\"user-abc-123\")\n}\n```\n\n## Reset SDK (logout/clear state)\n\n```swift\nTask {\n await RampKit.reset()\n}\n```\n\n## Complete SwiftUI Example\n\n```swift\nimport SwiftUI\nimport RampKit\n\n@main\nstruct MyApp: App {\n init() {\n Task {\n await RampKit.configure(config: RampKitConfig(\n appId: \"YOUR_APP_ID\",\n environment: \"production\",\n autoShowOnboarding: true,\n onOnboardingFinished: { payload in\n print(\"Onboarding finished\", payload ?? \"\")\n },\n onShowPaywall: { payload in\n // Present your paywall\n }\n ))\n }\n }\n\n var body: some Scene {\n WindowGroup {\n ContentView()\n }\n }\n}\n```\n\n## Complete UIKit Example\n\n```swift\nimport UIKit\nimport RampKit\n\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n func application(\n _ application: UIApplication,\n didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n ) -> Bool {\n Task {\n await RampKit.configure(config: RampKitConfig(\n appId: \"YOUR_APP_ID\",\n environment: \"production\",\n autoShowOnboarding: false,\n onOnboardingFinished: { payload in\n print(\"Onboarding finished\", payload ?? \"\")\n },\n onShowPaywall: { payload in\n // Present your paywall\n }\n ))\n }\n return true\n }\n}\n```\n";
|
|
6
|
+
export declare const ANDROID_SDK_GUIDE = "# RampKit Android SDK Guide\n\n## Installation via Gradle\n\nAdd to your app's build.gradle:\n\n```gradle\nimplementation \"com.rampkit:sdk:1.0.0\"\n```\n\n## Initialize the SDK\n\n```kotlin\nimport com.rampkit.RampKit\n\n// In your Application class or MainActivity\nRampKit.configure(\n context = this,\n appId = \"YOUR_APP_ID\"\n)\n```\n\n## Show Onboarding\n\n```kotlin\nRampKit.showOnboarding(activity)\n```\n\n## Configuration Options\n\n```kotlin\nRampKit.configure(\n context = this,\n appId = \"YOUR_APP_ID\",\n environment = RampKit.Environment.PRODUCTION,\n autoShowOnboarding = false,\n listener = object : RampKitListener {\n override fun onOnboardingFinished(payload: Map<String, Any>) {\n // Handle completion\n }\n\n override fun onPaywallRequested(payload: Map<String, Any>) {\n // Present your paywall\n }\n }\n)\n```\n";
|
|
7
|
+
//# sourceMappingURL=sdk-guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-guide.d.ts","sourceRoot":"","sources":["../../src/resources/sdk-guide.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,cAAc,kyGA8J1B,CAAC;AAEF,eAAO,MAAM,aAAa,80GA4JzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,w2BA+C7B,CAAC"}
|