@burdenoff/microfe-tours 2026.510.112
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 +342 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/constants/featureFlags.d.ts +25 -0
- package/dist/constants/featureFlags.d.ts.map +1 -0
- package/dist/constants/featureFlags.js +9 -0
- package/dist/constants/featureFlags.js.map +1 -0
- package/dist/constants/permissions.d.ts +49 -0
- package/dist/constants/permissions.d.ts.map +1 -0
- package/dist/constants/permissions.js +38 -0
- package/dist/constants/permissions.js.map +1 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +1270 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +650 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20448 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +53398 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/tours/ToursAdminRoot.d.ts +16 -0
- package/dist/tours/ToursAdminRoot.d.ts.map +1 -0
- package/dist/tours/ToursAdminRoot.js +42 -0
- package/dist/tours/ToursAdminRoot.js.map +1 -0
- package/dist/tours/ToursAdminRoutes.d.ts +12 -0
- package/dist/tours/ToursAdminRoutes.d.ts.map +1 -0
- package/dist/tours/ToursAdminRoutes.js +109 -0
- package/dist/tours/ToursAdminRoutes.js.map +1 -0
- package/dist/tours/ToursRoot.d.ts +10 -0
- package/dist/tours/ToursRoot.d.ts.map +1 -0
- package/dist/tours/ToursRoot.js +1 -0
- package/dist/tours/ToursRoutes.d.ts +8 -0
- package/dist/tours/ToursRoutes.d.ts.map +1 -0
- package/dist/tours/ToursUserRoot.d.ts +15 -0
- package/dist/tours/ToursUserRoot.d.ts.map +1 -0
- package/dist/tours/ToursUserRoot.js +48 -0
- package/dist/tours/ToursUserRoot.js.map +1 -0
- package/dist/tours/ToursUserRoutes.d.ts +15 -0
- package/dist/tours/ToursUserRoutes.d.ts.map +1 -0
- package/dist/tours/ToursUserRoutes.js +66 -0
- package/dist/tours/ToursUserRoutes.js.map +1 -0
- package/dist/tours/components/RouteHelpers.d.ts +33 -0
- package/dist/tours/components/RouteHelpers.d.ts.map +1 -0
- package/dist/tours/components/RouteHelpers.js +75 -0
- package/dist/tours/components/RouteHelpers.js.map +1 -0
- package/dist/tours/components/ToursAdminNavRegistrar.d.ts +25 -0
- package/dist/tours/components/ToursAdminNavRegistrar.d.ts.map +1 -0
- package/dist/tours/components/ToursAdminNavRegistrar.js +60 -0
- package/dist/tours/components/ToursAdminNavRegistrar.js.map +1 -0
- package/dist/tours/components/ui.d.ts +2 -0
- package/dist/tours/components/ui.d.ts.map +1 -0
- package/dist/tours/hooks/useMediaLibrary.d.ts +22 -0
- package/dist/tours/hooks/useMediaLibrary.d.ts.map +1 -0
- package/dist/tours/hooks/useMediaLibrary.js +82 -0
- package/dist/tours/hooks/useMediaLibrary.js.map +1 -0
- package/dist/tours/hooks/useStepSequencer.d.ts +20 -0
- package/dist/tours/hooks/useStepSequencer.d.ts.map +1 -0
- package/dist/tours/hooks/useStepSequencer.js +53 -0
- package/dist/tours/hooks/useStepSequencer.js.map +1 -0
- package/dist/tours/hooks/useTourAnalytics.d.ts +32 -0
- package/dist/tours/hooks/useTourAnalytics.d.ts.map +1 -0
- package/dist/tours/hooks/useTourAnalytics.js +70 -0
- package/dist/tours/hooks/useTourAnalytics.js.map +1 -0
- package/dist/tours/hooks/useTourBuilder.d.ts +61 -0
- package/dist/tours/hooks/useTourBuilder.d.ts.map +1 -0
- package/dist/tours/hooks/useTourBuilder.js +192 -0
- package/dist/tours/hooks/useTourBuilder.js.map +1 -0
- package/dist/tours/hooks/useTourLifecycle.d.ts +22 -0
- package/dist/tours/hooks/useTourLifecycle.d.ts.map +1 -0
- package/dist/tours/hooks/useTourLifecycle.js +28 -0
- package/dist/tours/hooks/useTourLifecycle.js.map +1 -0
- package/dist/tours/hooks/useTourPreview.d.ts +33 -0
- package/dist/tours/hooks/useTourPreview.d.ts.map +1 -0
- package/dist/tours/hooks/useTourPreview.js +70 -0
- package/dist/tours/hooks/useTourPreview.js.map +1 -0
- package/dist/tours/hooks/useToursList.d.ts +30 -0
- package/dist/tours/hooks/useToursList.d.ts.map +1 -0
- package/dist/tours/hooks/useToursList.js +49 -0
- package/dist/tours/hooks/useToursList.js.map +1 -0
- package/dist/tours/hooks/useToursPermissionAccess.d.ts +16 -0
- package/dist/tours/hooks/useToursPermissionAccess.d.ts.map +1 -0
- package/dist/tours/hooks/useToursPermissionAccess.js +9 -0
- package/dist/tours/hooks/useToursPermissionAccess.js.map +1 -0
- package/dist/tours/i18n.d.ts +172 -0
- package/dist/tours/i18n.d.ts.map +1 -0
- package/dist/tours/i18n.js +175 -0
- package/dist/tours/i18n.js.map +1 -0
- package/dist/tours/index.d.ts +21 -0
- package/dist/tours/index.d.ts.map +1 -0
- package/dist/tours/index.js +5 -0
- package/dist/tours/pages/AnalyticsDashboardPage.d.ts +6 -0
- package/dist/tours/pages/AnalyticsDashboardPage.d.ts.map +1 -0
- package/dist/tours/pages/AnalyticsDashboardPage.js +230 -0
- package/dist/tours/pages/AnalyticsDashboardPage.js.map +1 -0
- package/dist/tours/pages/MediaLibraryPage.d.ts +6 -0
- package/dist/tours/pages/MediaLibraryPage.d.ts.map +1 -0
- package/dist/tours/pages/MediaLibraryPage.js +195 -0
- package/dist/tours/pages/MediaLibraryPage.js.map +1 -0
- package/dist/tours/pages/MyToursPage.d.ts +11 -0
- package/dist/tours/pages/MyToursPage.d.ts.map +1 -0
- package/dist/tours/pages/MyToursPage.js +103 -0
- package/dist/tours/pages/MyToursPage.js.map +1 -0
- package/dist/tours/pages/MyToursProgressPage.d.ts +6 -0
- package/dist/tours/pages/MyToursProgressPage.d.ts.map +1 -0
- package/dist/tours/pages/MyToursProgressPage.js +142 -0
- package/dist/tours/pages/MyToursProgressPage.js.map +1 -0
- package/dist/tours/pages/SchedulerPage.d.ts +6 -0
- package/dist/tours/pages/SchedulerPage.d.ts.map +1 -0
- package/dist/tours/pages/SchedulerPage.js +231 -0
- package/dist/tours/pages/SchedulerPage.js.map +1 -0
- package/dist/tours/pages/StepEditorPage.d.ts +7 -0
- package/dist/tours/pages/StepEditorPage.d.ts.map +1 -0
- package/dist/tours/pages/StepEditorPage.js +586 -0
- package/dist/tours/pages/StepEditorPage.js.map +1 -0
- package/dist/tours/pages/SystemAnalyticsPage.d.ts +6 -0
- package/dist/tours/pages/SystemAnalyticsPage.d.ts.map +1 -0
- package/dist/tours/pages/SystemAnalyticsPage.js +155 -0
- package/dist/tours/pages/SystemAnalyticsPage.js.map +1 -0
- package/dist/tours/pages/TemplateLibraryPage.d.ts +6 -0
- package/dist/tours/pages/TemplateLibraryPage.d.ts.map +1 -0
- package/dist/tours/pages/TemplateLibraryPage.js +207 -0
- package/dist/tours/pages/TemplateLibraryPage.js.map +1 -0
- package/dist/tours/pages/TourBuilderPage.d.ts +6 -0
- package/dist/tours/pages/TourBuilderPage.d.ts.map +1 -0
- package/dist/tours/pages/TourBuilderPage.js +363 -0
- package/dist/tours/pages/TourBuilderPage.js.map +1 -0
- package/dist/tours/pages/TourPreviewPage.d.ts +6 -0
- package/dist/tours/pages/TourPreviewPage.d.ts.map +1 -0
- package/dist/tours/pages/TourPreviewPage.js +239 -0
- package/dist/tours/pages/TourPreviewPage.js.map +1 -0
- package/dist/tours/pages/ToursListPage.d.ts +6 -0
- package/dist/tours/pages/ToursListPage.d.ts.map +1 -0
- package/dist/tours/pages/ToursListPage.js +310 -0
- package/dist/tours/pages/ToursListPage.js.map +1 -0
- package/dist/tours/providers/ToursProvider.d.ts +27 -0
- package/dist/tours/providers/ToursProvider.d.ts.map +1 -0
- package/dist/tours/providers/ToursProvider.js +28 -0
- package/dist/tours/providers/ToursProvider.js.map +1 -0
- package/dist/tours/store/toursStore.d.ts +39 -0
- package/dist/tours/store/toursStore.d.ts.map +1 -0
- package/dist/tours/store/toursStore.js +143 -0
- package/dist/tours/store/toursStore.js.map +1 -0
- package/dist/tours/types/index.d.ts +350 -0
- package/dist/tours/types/index.d.ts.map +1 -0
- package/dist/tours/utils/cn.d.ts +8 -0
- package/dist/tours/utils/cn.d.ts.map +1 -0
- package/dist/tours/utils/index.d.ts +102 -0
- package/dist/tours/utils/index.d.ts.map +1 -0
- package/dist/tours/utils/index.js +28 -0
- package/dist/tours/utils/index.js.map +1 -0
- package/dist/tours/utils/joinPath.d.ts +9 -0
- package/dist/tours/utils/joinPath.d.ts.map +1 -0
- package/dist/tours/utils/joinPath.js +8 -0
- package/dist/tours/utils/joinPath.js.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +114 -0
package/README.md
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
# @burdenoff/microfe-tours
|
|
2
|
+
|
|
3
|
+
> Product tours and interactive onboarding system for the Burdenoff platform
|
|
4
|
+
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
[](https://reactjs.org/)
|
|
7
|
+
[](https://vitejs.dev/)
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
The Tours microfrontend provides tools for creating interactive product tours and onboarding experiences. Build step-by-step guides, schedule tours for specific user segments, track engagement, and improve user adoption with data-driven insights.
|
|
12
|
+
|
|
13
|
+
**Port:** `5155`
|
|
14
|
+
**Module Type:** Tenant Module
|
|
15
|
+
**API Gateway:** Port 4013
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- **Tour Builder**
|
|
20
|
+
- Visual tour editor
|
|
21
|
+
- Drag-and-drop step sequencing
|
|
22
|
+
- Multi-step tours
|
|
23
|
+
- Branching logic
|
|
24
|
+
- Target element selection
|
|
25
|
+
- Position customization
|
|
26
|
+
|
|
27
|
+
- **Step Types**
|
|
28
|
+
- Tooltip - Point to UI elements
|
|
29
|
+
- Modal - Full-screen overlay
|
|
30
|
+
- Highlight - Spotlight elements
|
|
31
|
+
- Announcement - Feature announcements
|
|
32
|
+
- Video - Embedded videos
|
|
33
|
+
- Custom - HTML content
|
|
34
|
+
|
|
35
|
+
- **Media Library**
|
|
36
|
+
- Upload images and videos
|
|
37
|
+
- Media management
|
|
38
|
+
- Screenshot capture
|
|
39
|
+
- GIF support
|
|
40
|
+
- CDN integration
|
|
41
|
+
|
|
42
|
+
- **Scheduling**
|
|
43
|
+
- Schedule tours for specific times
|
|
44
|
+
- Target user segments
|
|
45
|
+
- Trigger conditions
|
|
46
|
+
- Recurring schedules
|
|
47
|
+
- Time zone support
|
|
48
|
+
|
|
49
|
+
- **Templates**
|
|
50
|
+
- Pre-built tour templates
|
|
51
|
+
- Industry-specific templates
|
|
52
|
+
- Clone and customize
|
|
53
|
+
- Template marketplace
|
|
54
|
+
- Version control
|
|
55
|
+
|
|
56
|
+
- **Analytics**
|
|
57
|
+
- Tour completion rates
|
|
58
|
+
- Step-by-step analytics
|
|
59
|
+
- Drop-off points
|
|
60
|
+
- Time spent per step
|
|
61
|
+
- User engagement metrics
|
|
62
|
+
- A/B testing results
|
|
63
|
+
|
|
64
|
+
## Installation
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Install dependencies
|
|
68
|
+
bun install
|
|
69
|
+
|
|
70
|
+
# Generate GraphQL types
|
|
71
|
+
bun run codegen
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Development
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Start development server (port 5155)
|
|
78
|
+
bun run dev
|
|
79
|
+
|
|
80
|
+
# Run linter
|
|
81
|
+
bun run lint
|
|
82
|
+
|
|
83
|
+
# Format code
|
|
84
|
+
bun run format
|
|
85
|
+
|
|
86
|
+
# Type check
|
|
87
|
+
bun run type:check
|
|
88
|
+
|
|
89
|
+
# Build for production
|
|
90
|
+
bun run build
|
|
91
|
+
|
|
92
|
+
# Run all quality checks
|
|
93
|
+
bun run sanity
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Project Structure
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
src/
|
|
100
|
+
├── dev/ # Development harness
|
|
101
|
+
├── tours/ # Main module
|
|
102
|
+
│ ├── components/ # React components
|
|
103
|
+
│ │ └── ui.tsx # UI components
|
|
104
|
+
│ ├── graphql/ # GraphQL operations
|
|
105
|
+
│ │ └── operations/ # Queries/Mutations
|
|
106
|
+
│ ├── hooks/ # Custom React hooks
|
|
107
|
+
│ │ ├── useMediaLibrary.ts
|
|
108
|
+
│ │ ├── useStepSequencer.ts
|
|
109
|
+
│ │ ├── useTourAnalytics.ts
|
|
110
|
+
│ │ ├── useTourBuilder.ts
|
|
111
|
+
│ │ ├── useTourPreview.ts
|
|
112
|
+
│ │ └── useToursList.ts
|
|
113
|
+
│ ├── pages/ # Page components
|
|
114
|
+
│ │ ├── AnalyticsDashboardPage.tsx
|
|
115
|
+
│ │ ├── MediaLibraryPage.tsx
|
|
116
|
+
│ │ ├── SchedulerPage.tsx
|
|
117
|
+
│ │ ├── StepEditorPage.tsx
|
|
118
|
+
│ │ ├── TemplateLibraryPage.tsx
|
|
119
|
+
│ │ ├── TourBuilderPage.tsx
|
|
120
|
+
│ │ ├── TourPreviewPage.tsx
|
|
121
|
+
│ │ └── ToursListPage.tsx
|
|
122
|
+
│ ├── providers/ # Context providers
|
|
123
|
+
│ ├── store/ # State management
|
|
124
|
+
│ ├── types/ # TypeScript types
|
|
125
|
+
│ ├── utils/ # Utility functions
|
|
126
|
+
│ └── README.md # Module documentation
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## GraphQL Operations
|
|
130
|
+
|
|
131
|
+
### Queries
|
|
132
|
+
- `getTours` - List all tours
|
|
133
|
+
- `getTour` - Get tour details
|
|
134
|
+
- `getTourAnalytics` - Get analytics data
|
|
135
|
+
- `getTourTemplates` - List templates
|
|
136
|
+
- `getTourMedia` - List media files
|
|
137
|
+
|
|
138
|
+
### Mutations
|
|
139
|
+
- `createTour` - Create new tour
|
|
140
|
+
- `updateTour` - Update tour configuration
|
|
141
|
+
- `deleteTour` - Remove a tour
|
|
142
|
+
- `createTourFromTemplate` - Create from template
|
|
143
|
+
- `syncTourSteps` - Update step sequence
|
|
144
|
+
- `createTourMedia` - Upload media
|
|
145
|
+
- `attachMediaToStep` - Attach media to step
|
|
146
|
+
- `createTourSchedule` - Schedule tour
|
|
147
|
+
|
|
148
|
+
## Configuration
|
|
149
|
+
|
|
150
|
+
### Environment Variables
|
|
151
|
+
|
|
152
|
+
```env
|
|
153
|
+
VITE_API_GATEWAY_URL=http://localhost:4013/graphql
|
|
154
|
+
VITE_TENANT_ID=your-tenant-id
|
|
155
|
+
VITE_WORKSPACE_ID=your-workspace-id
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Integration with Shell
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import { ToursRoot } from '@burdenoff/microfe-tours';
|
|
162
|
+
|
|
163
|
+
function App() {
|
|
164
|
+
return (
|
|
165
|
+
<ToursRoot
|
|
166
|
+
basePath="/tours"
|
|
167
|
+
navigate={navigate}
|
|
168
|
+
apiGatewayUrl="http://localhost:4013/graphql"
|
|
169
|
+
workspaceId="workspace-123"
|
|
170
|
+
currentUser={{
|
|
171
|
+
id: 'user-1',
|
|
172
|
+
email: 'admin@example.com',
|
|
173
|
+
firstName: 'Admin',
|
|
174
|
+
lastName: 'User',
|
|
175
|
+
}}
|
|
176
|
+
/>
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Tour Configuration
|
|
182
|
+
|
|
183
|
+
### Basic Tour Structure
|
|
184
|
+
```typescript
|
|
185
|
+
{
|
|
186
|
+
name: "Welcome Tour",
|
|
187
|
+
description: "Onboarding for new users",
|
|
188
|
+
status: "PUBLISHED",
|
|
189
|
+
steps: [
|
|
190
|
+
{
|
|
191
|
+
title: "Welcome!",
|
|
192
|
+
content: "Let's get you started",
|
|
193
|
+
type: "modal",
|
|
194
|
+
order: 0
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
title: "Dashboard",
|
|
198
|
+
content: "This is your dashboard",
|
|
199
|
+
type: "tooltip",
|
|
200
|
+
target: "#dashboard",
|
|
201
|
+
position: "bottom",
|
|
202
|
+
order: 1
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Step Configuration
|
|
209
|
+
```typescript
|
|
210
|
+
{
|
|
211
|
+
title: "Step Title",
|
|
212
|
+
content: "Step description (supports HTML)",
|
|
213
|
+
type: "tooltip" | "modal" | "highlight",
|
|
214
|
+
target: "#element-selector",
|
|
215
|
+
position: "top" | "bottom" | "left" | "right",
|
|
216
|
+
primaryButton: {
|
|
217
|
+
text: "Next",
|
|
218
|
+
action: "next"
|
|
219
|
+
},
|
|
220
|
+
secondaryButton: {
|
|
221
|
+
text: "Skip",
|
|
222
|
+
action: "skip"
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Tour Statuses
|
|
228
|
+
|
|
229
|
+
- **Draft** - Being created/edited
|
|
230
|
+
- **Published** - Live and active
|
|
231
|
+
- **Archived** - No longer active
|
|
232
|
+
- **Scheduled** - Will activate at scheduled time
|
|
233
|
+
|
|
234
|
+
## Trigger Conditions
|
|
235
|
+
|
|
236
|
+
Tours can be triggered by:
|
|
237
|
+
- **Page Load** - Show on specific page
|
|
238
|
+
- **Element Click** - Trigger on button click
|
|
239
|
+
- **Time Delay** - Show after X seconds
|
|
240
|
+
- **User Segment** - Target specific users
|
|
241
|
+
- **Feature Flag** - Show when feature enabled
|
|
242
|
+
- **Custom Event** - Custom JavaScript event
|
|
243
|
+
|
|
244
|
+
## User Targeting
|
|
245
|
+
|
|
246
|
+
Target tours to specific users:
|
|
247
|
+
- New users (first login)
|
|
248
|
+
- Role-based (admin, user, etc.)
|
|
249
|
+
- Plan-based (free, pro, enterprise)
|
|
250
|
+
- Location-based (country, timezone)
|
|
251
|
+
- Custom attributes
|
|
252
|
+
|
|
253
|
+
## Analytics Metrics
|
|
254
|
+
|
|
255
|
+
| Metric | Description | Good Benchmark |
|
|
256
|
+
|--------|-------------|----------------|
|
|
257
|
+
| **Start Rate** | % who started tour | >40% |
|
|
258
|
+
| **Completion Rate** | % who finished tour | >60% |
|
|
259
|
+
| **Avg. Time** | Time to complete | 2-5 minutes |
|
|
260
|
+
| **Drop-off Rate** | % who quit early | <30% |
|
|
261
|
+
| **Skip Rate** | % who skipped steps | <20% |
|
|
262
|
+
|
|
263
|
+
## Best Practices
|
|
264
|
+
|
|
265
|
+
1. **Keep it Short**
|
|
266
|
+
- 3-7 steps ideal
|
|
267
|
+
- Under 5 minutes total
|
|
268
|
+
- One concept per step
|
|
269
|
+
|
|
270
|
+
2. **Clear Navigation**
|
|
271
|
+
- Always show progress (Step 2 of 5)
|
|
272
|
+
- Provide "Skip" option
|
|
273
|
+
- Allow "Previous" navigation
|
|
274
|
+
|
|
275
|
+
3. **Visual Elements**
|
|
276
|
+
- Use screenshots/GIFs
|
|
277
|
+
- Highlight important areas
|
|
278
|
+
- Keep text concise
|
|
279
|
+
|
|
280
|
+
4. **Timing**
|
|
281
|
+
- Don't interrupt critical tasks
|
|
282
|
+
- Show at natural breakpoints
|
|
283
|
+
- Allow users to defer
|
|
284
|
+
|
|
285
|
+
5. **Mobile Optimization**
|
|
286
|
+
- Test on mobile devices
|
|
287
|
+
- Use responsive positioning
|
|
288
|
+
- Simplify for small screens
|
|
289
|
+
|
|
290
|
+
## Available Scripts
|
|
291
|
+
|
|
292
|
+
| Script | Description |
|
|
293
|
+
|--------|-------------|
|
|
294
|
+
| `bun run dev` | Start development server |
|
|
295
|
+
| `bun run build` | Build for production |
|
|
296
|
+
| `bun run lint` | Run ESLint |
|
|
297
|
+
| `bun run format` | Format with Prettier |
|
|
298
|
+
| `bun run type:check` | TypeScript type checking |
|
|
299
|
+
| `bun run codegen` | Generate GraphQL types |
|
|
300
|
+
| `bun run sanity` | Run all quality checks |
|
|
301
|
+
|
|
302
|
+
## Technology Stack
|
|
303
|
+
|
|
304
|
+
- **Framework:** React 19 with TypeScript 5.9
|
|
305
|
+
- **Build Tool:** Vite 7
|
|
306
|
+
- **State Management:** Zustand 5
|
|
307
|
+
- **GraphQL Client:** Apollo Client (planned)
|
|
308
|
+
- **Styling:** Tailwind CSS v4
|
|
309
|
+
- **UI Components:** Radix UI
|
|
310
|
+
- **Icons:** Lucide React
|
|
311
|
+
- **Routing:** React Router DOM 7
|
|
312
|
+
|
|
313
|
+
## Use Cases
|
|
314
|
+
|
|
315
|
+
- **User Onboarding** - Guide new users through key features
|
|
316
|
+
- **Feature Announcements** - Introduce new features
|
|
317
|
+
- **Product Updates** - Highlight changes and improvements
|
|
318
|
+
- **Training** - Educate users on complex workflows
|
|
319
|
+
- **Best Practices** - Share tips and tricks
|
|
320
|
+
- **Compliance** - Guide through regulatory requirements
|
|
321
|
+
|
|
322
|
+
## Template Categories
|
|
323
|
+
|
|
324
|
+
- **Onboarding** - Welcome new users
|
|
325
|
+
- **Feature Discovery** - Highlight features
|
|
326
|
+
- **Workflow Guides** - Step-by-step processes
|
|
327
|
+
- **Tips & Tricks** - Power user features
|
|
328
|
+
- **Updates** - What's new announcements
|
|
329
|
+
|
|
330
|
+
## Roadmap
|
|
331
|
+
|
|
332
|
+
- [ ] A/B testing for tours
|
|
333
|
+
- [ ] Interactive elements (forms, quizzes)
|
|
334
|
+
- [ ] Advanced branching logic
|
|
335
|
+
- [ ] Tour versioning
|
|
336
|
+
- [ ] Multi-language support
|
|
337
|
+
- [ ] Video tours
|
|
338
|
+
- [ ] Voice-over support
|
|
339
|
+
|
|
340
|
+
## License
|
|
341
|
+
|
|
342
|
+
Proprietary - Copyright © 2025 Burdenoff Consultancy Services Pvt. Ltd.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tours feature flag keys.
|
|
3
|
+
*
|
|
4
|
+
* INVARIANT: keys here must match entries in `DEFAULT_PLATFORM_FLAGS` at
|
|
5
|
+
* `global-tenant-svc/src/modules/feature-flag/services/feature-flag.service.ts`.
|
|
6
|
+
* If a key is added/removed/renamed here, the backend seed must mirror the
|
|
7
|
+
* change (and vice versa) — otherwise the frontend falls through to the
|
|
8
|
+
* provider's `defaultEnabled` and the flag appears broken.
|
|
9
|
+
*
|
|
10
|
+
* Only genuinely incomplete features should have a flag. Features that are
|
|
11
|
+
* 100% E2E complete and stable must NOT be gated.
|
|
12
|
+
*/
|
|
13
|
+
export declare const TOURS_FEATURES: {
|
|
14
|
+
/** Gates the stable user-facing My Tours and My Progress surface. */
|
|
15
|
+
readonly USER: "tours.user";
|
|
16
|
+
/**
|
|
17
|
+
* Gates the Media Library page and its CRUD. The feature is Partial —
|
|
18
|
+
* `useMediaLibrary.uploadMedia` currently writes a hardcoded `storageUrl`
|
|
19
|
+
* because the real upload pipeline (S3/Ceph/pre-signed URL) is not yet
|
|
20
|
+
* implemented. The flag must remain until the pipeline lands.
|
|
21
|
+
*/
|
|
22
|
+
readonly MEDIA: "tours.media";
|
|
23
|
+
};
|
|
24
|
+
export type ToursFeatureKey = (typeof TOURS_FEATURES)[keyof typeof TOURS_FEATURES];
|
|
25
|
+
//# sourceMappingURL=featureFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureFlags.d.ts","sourceRoot":"","sources":["../../src/constants/featureFlags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc;IACzB,qEAAqE;;IAErE;;;;;OAKG;;CAEK,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureFlags.js","names":[],"sources":["../../src/constants/featureFlags.ts"],"sourcesContent":["/**\n * Tours feature flag keys.\n *\n * INVARIANT: keys here must match entries in `DEFAULT_PLATFORM_FLAGS` at\n * `global-tenant-svc/src/modules/feature-flag/services/feature-flag.service.ts`.\n * If a key is added/removed/renamed here, the backend seed must mirror the\n * change (and vice versa) — otherwise the frontend falls through to the\n * provider's `defaultEnabled` and the flag appears broken.\n *\n * Only genuinely incomplete features should have a flag. Features that are\n * 100% E2E complete and stable must NOT be gated.\n */\nexport const TOURS_FEATURES = {\n /** Gates the stable user-facing My Tours and My Progress surface. */\n USER: 'tours.user',\n /**\n * Gates the Media Library page and its CRUD. The feature is Partial —\n * `useMediaLibrary.uploadMedia` currently writes a hardcoded `storageUrl`\n * because the real upload pipeline (S3/Ceph/pre-signed URL) is not yet\n * implemented. The flag must remain until the pipeline lands.\n */\n MEDIA: 'tours.media',\n} as const;\n\nexport type ToursFeatureKey = (typeof TOURS_FEATURES)[keyof typeof TOURS_FEATURES];\n"],"mappings":";AAYA,IAAa,IAAiB;CAE5B,MAAM;CAON,OAAO;CACR"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tours Permission Constants
|
|
3
|
+
*
|
|
4
|
+
* All permission strings for Tours resources.
|
|
5
|
+
* Use with fe-libs usePermissions hook: hasPermission(TOUR_PERMISSIONS.TOUR_CREATE)
|
|
6
|
+
*
|
|
7
|
+
* Resource types:
|
|
8
|
+
* - tour: list, read, create, update, delete, publish, archive, duplicate
|
|
9
|
+
* - tour-step: list, read, create, update, delete
|
|
10
|
+
* - tour-media: list, read, create, update, delete
|
|
11
|
+
* - tour-template: list, read, use
|
|
12
|
+
* - tour-analytics: list, read
|
|
13
|
+
* - tour-schedule: list, read, create, update, delete
|
|
14
|
+
*/
|
|
15
|
+
export declare const TOUR_PERMISSIONS: {
|
|
16
|
+
readonly TOUR_LIST: "tour:list";
|
|
17
|
+
readonly TOUR_READ: "tour:read";
|
|
18
|
+
readonly TOUR_CREATE: "tour:create";
|
|
19
|
+
readonly TOUR_UPDATE: "tour:update";
|
|
20
|
+
readonly TOUR_DELETE: "tour:delete";
|
|
21
|
+
readonly TOUR_PUBLISH: "tour:publish";
|
|
22
|
+
readonly TOUR_ARCHIVE: "tour:archive";
|
|
23
|
+
readonly TOUR_DUPLICATE: "tour:duplicate";
|
|
24
|
+
readonly TOUR_STEP_LIST: "tour-step:list";
|
|
25
|
+
readonly TOUR_STEP_READ: "tour-step:read";
|
|
26
|
+
readonly TOUR_STEP_CREATE: "tour-step:create";
|
|
27
|
+
readonly TOUR_STEP_UPDATE: "tour-step:update";
|
|
28
|
+
readonly TOUR_STEP_DELETE: "tour-step:delete";
|
|
29
|
+
readonly TOUR_MEDIA_LIST: "tour-media:list";
|
|
30
|
+
readonly TOUR_MEDIA_READ: "tour-media:read";
|
|
31
|
+
readonly TOUR_MEDIA_CREATE: "tour-media:create";
|
|
32
|
+
readonly TOUR_MEDIA_UPDATE: "tour-media:update";
|
|
33
|
+
readonly TOUR_MEDIA_DELETE: "tour-media:delete";
|
|
34
|
+
readonly TOUR_TEMPLATE_CREATE: "tour-template:create";
|
|
35
|
+
readonly TOUR_TEMPLATE_LIST: "tour-template:list";
|
|
36
|
+
readonly TOUR_TEMPLATE_READ: "tour-template:read";
|
|
37
|
+
readonly TOUR_TEMPLATE_USE: "tour-template:use";
|
|
38
|
+
readonly TOUR_TEMPLATE_UPDATE: "tour-template:update";
|
|
39
|
+
readonly TOUR_TEMPLATE_DELETE: "tour-template:delete";
|
|
40
|
+
readonly TOUR_ANALYTICS_LIST: "tour-analytics:list";
|
|
41
|
+
readonly TOUR_ANALYTICS_READ: "tour-analytics:read";
|
|
42
|
+
readonly TOUR_SCHEDULE_LIST: "tour-schedule:list";
|
|
43
|
+
readonly TOUR_SCHEDULE_READ: "tour-schedule:read";
|
|
44
|
+
readonly TOUR_SCHEDULE_CREATE: "tour-schedule:create";
|
|
45
|
+
readonly TOUR_SCHEDULE_UPDATE: "tour-schedule:update";
|
|
46
|
+
readonly TOUR_SCHEDULE_DELETE: "tour-schedule:delete";
|
|
47
|
+
};
|
|
48
|
+
export type TourPermission = (typeof TOUR_PERMISSIONS)[keyof typeof TOUR_PERMISSIONS];
|
|
49
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/constants/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/constants/permissions.ts
|
|
2
|
+
var e = {
|
|
3
|
+
TOUR_LIST: "tour:list",
|
|
4
|
+
TOUR_READ: "tour:read",
|
|
5
|
+
TOUR_CREATE: "tour:create",
|
|
6
|
+
TOUR_UPDATE: "tour:update",
|
|
7
|
+
TOUR_DELETE: "tour:delete",
|
|
8
|
+
TOUR_PUBLISH: "tour:publish",
|
|
9
|
+
TOUR_ARCHIVE: "tour:archive",
|
|
10
|
+
TOUR_DUPLICATE: "tour:duplicate",
|
|
11
|
+
TOUR_STEP_LIST: "tour-step:list",
|
|
12
|
+
TOUR_STEP_READ: "tour-step:read",
|
|
13
|
+
TOUR_STEP_CREATE: "tour-step:create",
|
|
14
|
+
TOUR_STEP_UPDATE: "tour-step:update",
|
|
15
|
+
TOUR_STEP_DELETE: "tour-step:delete",
|
|
16
|
+
TOUR_MEDIA_LIST: "tour-media:list",
|
|
17
|
+
TOUR_MEDIA_READ: "tour-media:read",
|
|
18
|
+
TOUR_MEDIA_CREATE: "tour-media:create",
|
|
19
|
+
TOUR_MEDIA_UPDATE: "tour-media:update",
|
|
20
|
+
TOUR_MEDIA_DELETE: "tour-media:delete",
|
|
21
|
+
TOUR_TEMPLATE_CREATE: "tour-template:create",
|
|
22
|
+
TOUR_TEMPLATE_LIST: "tour-template:list",
|
|
23
|
+
TOUR_TEMPLATE_READ: "tour-template:read",
|
|
24
|
+
TOUR_TEMPLATE_USE: "tour-template:use",
|
|
25
|
+
TOUR_TEMPLATE_UPDATE: "tour-template:update",
|
|
26
|
+
TOUR_TEMPLATE_DELETE: "tour-template:delete",
|
|
27
|
+
TOUR_ANALYTICS_LIST: "tour-analytics:list",
|
|
28
|
+
TOUR_ANALYTICS_READ: "tour-analytics:read",
|
|
29
|
+
TOUR_SCHEDULE_LIST: "tour-schedule:list",
|
|
30
|
+
TOUR_SCHEDULE_READ: "tour-schedule:read",
|
|
31
|
+
TOUR_SCHEDULE_CREATE: "tour-schedule:create",
|
|
32
|
+
TOUR_SCHEDULE_UPDATE: "tour-schedule:update",
|
|
33
|
+
TOUR_SCHEDULE_DELETE: "tour-schedule:delete"
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { e as TOUR_PERMISSIONS };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","names":[],"sources":["../../src/constants/permissions.ts"],"sourcesContent":["/**\n * Tours Permission Constants\n *\n * All permission strings for Tours resources.\n * Use with fe-libs usePermissions hook: hasPermission(TOUR_PERMISSIONS.TOUR_CREATE)\n *\n * Resource types:\n * - tour: list, read, create, update, delete, publish, archive, duplicate\n * - tour-step: list, read, create, update, delete\n * - tour-media: list, read, create, update, delete\n * - tour-template: list, read, use\n * - tour-analytics: list, read\n * - tour-schedule: list, read, create, update, delete\n */\n\nexport const TOUR_PERMISSIONS = {\n // Tour resources\n TOUR_LIST: 'tour:list',\n TOUR_READ: 'tour:read',\n TOUR_CREATE: 'tour:create',\n TOUR_UPDATE: 'tour:update',\n TOUR_DELETE: 'tour:delete',\n TOUR_PUBLISH: 'tour:publish',\n TOUR_ARCHIVE: 'tour:archive',\n TOUR_DUPLICATE: 'tour:duplicate',\n\n // Tour step resources\n TOUR_STEP_LIST: 'tour-step:list',\n TOUR_STEP_READ: 'tour-step:read',\n TOUR_STEP_CREATE: 'tour-step:create',\n TOUR_STEP_UPDATE: 'tour-step:update',\n TOUR_STEP_DELETE: 'tour-step:delete',\n\n // Tour media resources\n TOUR_MEDIA_LIST: 'tour-media:list',\n TOUR_MEDIA_READ: 'tour-media:read',\n TOUR_MEDIA_CREATE: 'tour-media:create',\n TOUR_MEDIA_UPDATE: 'tour-media:update',\n TOUR_MEDIA_DELETE: 'tour-media:delete',\n\n // Tour template resources\n TOUR_TEMPLATE_CREATE: 'tour-template:create',\n TOUR_TEMPLATE_LIST: 'tour-template:list',\n TOUR_TEMPLATE_READ: 'tour-template:read',\n TOUR_TEMPLATE_USE: 'tour-template:use',\n TOUR_TEMPLATE_UPDATE: 'tour-template:update',\n TOUR_TEMPLATE_DELETE: 'tour-template:delete',\n\n // Tour analytics resources\n TOUR_ANALYTICS_LIST: 'tour-analytics:list',\n TOUR_ANALYTICS_READ: 'tour-analytics:read',\n\n // Tour schedule resources\n TOUR_SCHEDULE_LIST: 'tour-schedule:list',\n TOUR_SCHEDULE_READ: 'tour-schedule:read',\n TOUR_SCHEDULE_CREATE: 'tour-schedule:create',\n TOUR_SCHEDULE_UPDATE: 'tour-schedule:update',\n TOUR_SCHEDULE_DELETE: 'tour-schedule:delete',\n} as const;\n\nexport type TourPermission = (typeof TOUR_PERMISSIONS)[keyof typeof TOUR_PERMISSIONS];\n"],"mappings":";AAeA,IAAa,IAAmB;CAE9B,WAAW;CACX,WAAW;CACX,aAAa;CACb,aAAa;CACb,aAAa;CACb,cAAc;CACd,cAAc;CACd,gBAAgB;CAGhB,gBAAgB;CAChB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAGlB,iBAAiB;CACjB,iBAAiB;CACjB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CAGnB,sBAAsB;CACtB,oBAAoB;CACpB,oBAAoB;CACpB,mBAAmB;CACnB,sBAAsB;CACtB,sBAAsB;CAGtB,qBAAqB;CACrB,qBAAqB;CAGrB,oBAAoB;CACpB,oBAAoB;CACpB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/dev/main.tsx"],"names":[],"mappings":"AAYA,OAAO,cAAc,CAAC"}
|