phx-react 1.3.1837 → 1.3.1838
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/cjs/components/Onboarding/contexts/onboarding-context.d.ts +63 -0
- package/dist/cjs/components/Onboarding/contexts/onboarding-context.js +282 -0
- package/dist/cjs/components/Onboarding/contexts/onboarding-context.js.map +1 -0
- package/dist/cjs/components/Onboarding/contexts/style.d.ts +1 -0
- package/dist/cjs/components/Onboarding/contexts/style.js +77 -0
- package/dist/cjs/components/Onboarding/contexts/style.js.map +1 -0
- package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.d.ts +7 -0
- package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.js +19 -0
- package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.js.map +1 -0
- package/dist/cjs/components/Onboarding/index.d.ts +3 -0
- package/dist/cjs/components/Onboarding/index.js +7 -0
- package/dist/cjs/components/Onboarding/index.js.map +1 -0
- package/dist/cjs/components/Onboarding/modal-slides/modal-slides.d.ts +10 -0
- package/dist/cjs/components/Onboarding/modal-slides/modal-slides.js +59 -0
- package/dist/cjs/components/Onboarding/modal-slides/modal-slides.js.map +1 -0
- package/dist/cjs/components/Onboarding/onbroading-demo.d.ts +9 -0
- package/dist/cjs/components/Onboarding/onbroading-demo.js +208 -0
- package/dist/cjs/components/Onboarding/onbroading-demo.js.map +1 -0
- package/dist/cjs/components/Slider/index.d.ts +2 -0
- package/dist/cjs/components/Slider/index.js +6 -0
- package/dist/cjs/components/Slider/index.js.map +1 -0
- package/dist/cjs/components/Slider/phx-slider-item.d.ts +6 -0
- package/dist/cjs/components/Slider/phx-slider-item.js +38 -0
- package/dist/cjs/components/Slider/phx-slider-item.js.map +1 -0
- package/dist/cjs/components/Slider/phx-slider.d.ts +18 -0
- package/dist/cjs/components/Slider/phx-slider.js +168 -0
- package/dist/cjs/components/Slider/phx-slider.js.map +1 -0
- package/dist/cjs/components/Slider/ultis/create-animate.d.ts +17 -0
- package/dist/cjs/components/Slider/ultis/create-animate.js +38 -0
- package/dist/cjs/components/Slider/ultis/create-animate.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/Onboarding/contexts/onboarding-context.d.ts +63 -0
- package/dist/esm/components/Onboarding/contexts/onboarding-context.js +276 -0
- package/dist/esm/components/Onboarding/contexts/onboarding-context.js.map +1 -0
- package/dist/esm/components/Onboarding/contexts/style.d.ts +1 -0
- package/dist/esm/components/Onboarding/contexts/style.js +74 -0
- package/dist/esm/components/Onboarding/contexts/style.js.map +1 -0
- package/dist/esm/components/Onboarding/hooks/use-onboarding-init.d.ts +7 -0
- package/dist/esm/components/Onboarding/hooks/use-onboarding-init.js +15 -0
- package/dist/esm/components/Onboarding/hooks/use-onboarding-init.js.map +1 -0
- package/dist/esm/components/Onboarding/index.d.ts +3 -0
- package/dist/esm/components/Onboarding/index.js +4 -0
- package/dist/esm/components/Onboarding/index.js.map +1 -0
- package/dist/esm/components/Onboarding/modal-slides/modal-slides.d.ts +10 -0
- package/dist/esm/components/Onboarding/modal-slides/modal-slides.js +54 -0
- package/dist/esm/components/Onboarding/modal-slides/modal-slides.js.map +1 -0
- package/dist/esm/components/Onboarding/onbroading-demo.d.ts +9 -0
- package/dist/esm/components/Onboarding/onbroading-demo.js +203 -0
- package/dist/esm/components/Onboarding/onbroading-demo.js.map +1 -0
- package/dist/esm/components/Slider/index.d.ts +2 -0
- package/dist/esm/components/Slider/index.js +2 -0
- package/dist/esm/components/Slider/index.js.map +1 -0
- package/dist/esm/components/Slider/phx-slider-item.d.ts +6 -0
- package/dist/esm/components/Slider/phx-slider-item.js +33 -0
- package/dist/esm/components/Slider/phx-slider-item.js.map +1 -0
- package/dist/esm/components/Slider/phx-slider.d.ts +18 -0
- package/dist/esm/components/Slider/phx-slider.js +164 -0
- package/dist/esm/components/Slider/phx-slider.js.map +1 -0
- package/dist/esm/components/Slider/ultis/create-animate.d.ts +17 -0
- package/dist/esm/components/Slider/ultis/create-animate.js +34 -0
- package/dist/esm/components/Slider/ultis/create-animate.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import 'driver.js/dist/driver.css';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export interface IPHXOnboardingStep {
|
|
4
|
+
element: string;
|
|
5
|
+
popover: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
side?: 'left' | 'right' | 'top' | 'bottom';
|
|
9
|
+
align?: 'start' | 'center' | 'end';
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface IPHXOnboardingSlideStep {
|
|
13
|
+
id: number;
|
|
14
|
+
title?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
content?: string;
|
|
17
|
+
image: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Một flow onboarding có thể có slides, tour steps, hoặc cả hai.
|
|
21
|
+
* - Chỉ slides: hiện modal slides, không có tour
|
|
22
|
+
* - Chỉ tour: chạy driver.js tour trực tiếp
|
|
23
|
+
* - Cả hai: hiện modal slides → nút "Bắt đầu Tour" → chạy tour
|
|
24
|
+
*/
|
|
25
|
+
export interface IPHXOnboardingFlow {
|
|
26
|
+
name: string;
|
|
27
|
+
slides?: Array<IPHXOnboardingSlideStep>;
|
|
28
|
+
steps?: Array<IPHXOnboardingStep>;
|
|
29
|
+
}
|
|
30
|
+
export interface IPHXOnboardingStatus {
|
|
31
|
+
slidesCompleted: boolean;
|
|
32
|
+
toursCompleted: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface IPHXOnboardingContextType {
|
|
35
|
+
currentFlow: string | null;
|
|
36
|
+
isRunning: boolean;
|
|
37
|
+
registerFlow(flow: IPHXOnboardingFlow): void;
|
|
38
|
+
startFlow(flowName: string): void;
|
|
39
|
+
endFlow(): void;
|
|
40
|
+
nextStep(): void;
|
|
41
|
+
previousStep(): void;
|
|
42
|
+
skipFlow(): void;
|
|
43
|
+
resetStatusOnboarding(flowName: string): void;
|
|
44
|
+
isSlidesOpen: boolean;
|
|
45
|
+
closeSlides(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Lưu trạng thái hoàn thành của flow vào localStorage.
|
|
48
|
+
* Mặc định trạng thái chỉ được giữ trong bộ nhớ (in-memory).
|
|
49
|
+
* Gọi hàm này khi muốn persist để không hiện lại lần sau.
|
|
50
|
+
*/
|
|
51
|
+
persistFlowStatus(flowName: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Đọc trạng thái hiện tại của flow từ bộ nhớ.
|
|
54
|
+
*/
|
|
55
|
+
getFlowStatus(flowName: string): IPHXOnboardingStatus;
|
|
56
|
+
}
|
|
57
|
+
export declare const PHXOnboardingProvider: React.FC<{
|
|
58
|
+
children: React.ReactNode;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Hook để sử dụng context
|
|
62
|
+
*/
|
|
63
|
+
export declare const usePHXOnboarding: () => IPHXOnboardingContextType;
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.usePHXOnboarding = exports.PHXOnboardingProvider = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const driver_js_1 = require("driver.js");
|
|
7
|
+
require("driver.js/dist/driver.css");
|
|
8
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
9
|
+
const modal_slides_1 = require("../modal-slides/modal-slides");
|
|
10
|
+
const style_1 = require("./style");
|
|
11
|
+
const ONBOARDING_STATUS_KEY = 'phx-onboarding-status';
|
|
12
|
+
const PHXOnboardingContext = (0, react_1.createContext)(undefined);
|
|
13
|
+
const PHXOnboardingProvider = ({ children }) => {
|
|
14
|
+
const [currentFlow, setCurrentFlow] = (0, react_1.useState)(null);
|
|
15
|
+
const [isRunning, setIsRunning] = (0, react_1.useState)(false);
|
|
16
|
+
const [flows, setFlows] = (0, react_1.useState)(new Map());
|
|
17
|
+
const [driverInstance, setDriverInstance] = (0, react_1.useState)(null);
|
|
18
|
+
// Modal slides state
|
|
19
|
+
const [isSlidesOpen, setIsSlidesOpen] = (0, react_1.useState)(false);
|
|
20
|
+
const [activeSlides, setActiveSlides] = (0, react_1.useState)([]);
|
|
21
|
+
const [hasTours, setHasTours] = (0, react_1.useState)(false);
|
|
22
|
+
const [pendingTourFlowName, setPendingTourFlowName] = (0, react_1.useState)(null);
|
|
23
|
+
// In-memory status only — không tự động ghi localStorage
|
|
24
|
+
const [onboardingStatus, setOnboardingStatus] = (0, react_1.useState)({});
|
|
25
|
+
// Đọc trạng thái đã persist từ localStorage khi khởi động
|
|
26
|
+
(0, react_1.useEffect)(() => {
|
|
27
|
+
const saved = localStorage.getItem(ONBOARDING_STATUS_KEY);
|
|
28
|
+
if (saved) {
|
|
29
|
+
try {
|
|
30
|
+
setOnboardingStatus(JSON.parse(saved));
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
// ignore parse error
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, []);
|
|
37
|
+
/**
|
|
38
|
+
* Cập nhật trạng thái trong bộ nhớ (KHÔNG ghi localStorage)
|
|
39
|
+
* @param flowName Tên flow
|
|
40
|
+
* @param patch Trạng thái muốn cập nhật
|
|
41
|
+
*/
|
|
42
|
+
const updateStatus = (flowName, patch) => {
|
|
43
|
+
setOnboardingStatus((prev) => {
|
|
44
|
+
var _a;
|
|
45
|
+
const current = (_a = prev[flowName]) !== null && _a !== void 0 ? _a : {
|
|
46
|
+
slidesCompleted: false,
|
|
47
|
+
toursCompleted: false,
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
...prev,
|
|
51
|
+
[flowName]: { ...current, ...patch },
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
/** Lưu trạng thái của flow vào localStorage
|
|
56
|
+
* @param flowName Tên flow
|
|
57
|
+
*/
|
|
58
|
+
const persistFlowStatus = (flowName) => {
|
|
59
|
+
setOnboardingStatus((prev) => {
|
|
60
|
+
var _a;
|
|
61
|
+
const status = (_a = prev[flowName]) !== null && _a !== void 0 ? _a : {
|
|
62
|
+
slidesCompleted: false,
|
|
63
|
+
toursCompleted: false,
|
|
64
|
+
};
|
|
65
|
+
const updated = { ...prev, [flowName]: status };
|
|
66
|
+
localStorage.setItem(ONBOARDING_STATUS_KEY, JSON.stringify(updated));
|
|
67
|
+
return updated;
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Lấy trạng thái của flow
|
|
72
|
+
* @param flowName Tên flow
|
|
73
|
+
*/
|
|
74
|
+
const getFlowStatus = (flowName) => {
|
|
75
|
+
var _a;
|
|
76
|
+
return (_a = onboardingStatus[flowName]) !== null && _a !== void 0 ? _a : {
|
|
77
|
+
slidesCompleted: false,
|
|
78
|
+
toursCompleted: false,
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Đăng ký flow
|
|
83
|
+
* @param flow Flow cần đăng ký
|
|
84
|
+
*/
|
|
85
|
+
const registerFlow = (flow) => {
|
|
86
|
+
setFlows((prev) => new Map(prev).set(flow.name, flow));
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Chạy tour
|
|
90
|
+
* @param flowName Tên flow
|
|
91
|
+
* @param flow Flow cần chạy tour
|
|
92
|
+
*/
|
|
93
|
+
const runTour = (flowName, flow) => {
|
|
94
|
+
var _a;
|
|
95
|
+
if (!((_a = flow.steps) === null || _a === void 0 ? void 0 : _a.length))
|
|
96
|
+
return;
|
|
97
|
+
if (driverInstance) {
|
|
98
|
+
driverInstance.destroy();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Tạo driver instance
|
|
102
|
+
*/
|
|
103
|
+
const newDriver = (0, driver_js_1.driver)({
|
|
104
|
+
showProgress: true,
|
|
105
|
+
showButtons: ['next', 'previous', 'close'],
|
|
106
|
+
nextBtnText: 'Tiếp theo',
|
|
107
|
+
prevBtnText: 'Quay lại',
|
|
108
|
+
doneBtnText: 'Hoàn tất',
|
|
109
|
+
stageRadius: 12,
|
|
110
|
+
allowClose: true,
|
|
111
|
+
onDestroyed: () => {
|
|
112
|
+
setDriverInstance(null);
|
|
113
|
+
setCurrentFlow(null);
|
|
114
|
+
setIsRunning(false);
|
|
115
|
+
// Chỉ cập nhật in-memory, không tự động persist
|
|
116
|
+
updateStatus(flowName, { toursCompleted: true });
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
newDriver.setSteps(flow.steps.map((step) => {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
return ({
|
|
122
|
+
element: step.element,
|
|
123
|
+
popover: {
|
|
124
|
+
title: step.popover.title,
|
|
125
|
+
description: step.popover.description,
|
|
126
|
+
side: (_a = step.popover.side) !== null && _a !== void 0 ? _a : 'bottom',
|
|
127
|
+
align: (_b = step.popover.align) !== null && _b !== void 0 ? _b : 'center',
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}));
|
|
131
|
+
setDriverInstance(newDriver);
|
|
132
|
+
setCurrentFlow(flowName);
|
|
133
|
+
setIsRunning(true);
|
|
134
|
+
newDriver.drive();
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Bắt đầu flow
|
|
138
|
+
* @param flowName Tên flow
|
|
139
|
+
*/
|
|
140
|
+
const startFlow = (flowName) => {
|
|
141
|
+
var _a, _b;
|
|
142
|
+
const flow = flows.get(flowName);
|
|
143
|
+
if (!flow) {
|
|
144
|
+
console.warn(`[Onboarding] Flow "${flowName}" not registered`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const hasSlides = Boolean((_a = flow.slides) === null || _a === void 0 ? void 0 : _a.length);
|
|
148
|
+
const hasTourSteps = Boolean((_b = flow.steps) === null || _b === void 0 ? void 0 : _b.length);
|
|
149
|
+
const status = getFlowStatus(flowName);
|
|
150
|
+
// Case 1: chỉ có tour (không có slides)
|
|
151
|
+
if (!hasSlides && hasTourSteps) {
|
|
152
|
+
runTour(flowName, flow);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Case 2: chỉ có slides (không có tour)
|
|
156
|
+
if (hasSlides && !hasTourSteps) {
|
|
157
|
+
if (!status.slidesCompleted) {
|
|
158
|
+
setActiveSlides(flow.slides);
|
|
159
|
+
setHasTours(false);
|
|
160
|
+
setPendingTourFlowName(null);
|
|
161
|
+
setCurrentFlow(flowName);
|
|
162
|
+
setIsSlidesOpen(true);
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Case 3: cả slides lẫn tour
|
|
167
|
+
if (hasSlides && hasTourSteps) {
|
|
168
|
+
if (!status.slidesCompleted) {
|
|
169
|
+
setActiveSlides(flow.slides);
|
|
170
|
+
setHasTours(true);
|
|
171
|
+
setPendingTourFlowName(flowName);
|
|
172
|
+
setCurrentFlow(flowName);
|
|
173
|
+
setIsSlidesOpen(true);
|
|
174
|
+
}
|
|
175
|
+
else if (!status.toursCompleted) {
|
|
176
|
+
runTour(flowName, flow);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
console.warn(`[Onboarding] Flow "${flowName}" has no slides or steps`);
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Cập nhật trạng thái của flow
|
|
184
|
+
*/
|
|
185
|
+
const updateStatusFlow = () => {
|
|
186
|
+
if (currentFlow) {
|
|
187
|
+
// Chỉ cập nhật in-memory, không tự động persist
|
|
188
|
+
updateStatus(currentFlow, { slidesCompleted: true });
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Đóng slides
|
|
193
|
+
*/
|
|
194
|
+
const closeSlides = () => {
|
|
195
|
+
setIsSlidesOpen(false);
|
|
196
|
+
updateStatusFlow();
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Bắt đầu tour từ slides
|
|
200
|
+
*/
|
|
201
|
+
const startTourFromSlides = () => {
|
|
202
|
+
setIsSlidesOpen(false);
|
|
203
|
+
updateStatusFlow();
|
|
204
|
+
if (pendingTourFlowName) {
|
|
205
|
+
const flow = flows.get(pendingTourFlowName);
|
|
206
|
+
if (flow) {
|
|
207
|
+
runTour(pendingTourFlowName, flow);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Kết thúc flow
|
|
213
|
+
*/
|
|
214
|
+
const endFlow = () => {
|
|
215
|
+
if (driverInstance) {
|
|
216
|
+
driverInstance.destroy();
|
|
217
|
+
setDriverInstance(null);
|
|
218
|
+
}
|
|
219
|
+
setIsRunning(false);
|
|
220
|
+
setCurrentFlow(null);
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Chuyển đến bước tiếp theo
|
|
224
|
+
*/
|
|
225
|
+
const nextStep = () => {
|
|
226
|
+
driverInstance === null || driverInstance === void 0 ? void 0 : driverInstance.moveNext();
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Chuyển đến bước trước đó
|
|
230
|
+
*/
|
|
231
|
+
const previousStep = () => {
|
|
232
|
+
driverInstance === null || driverInstance === void 0 ? void 0 : driverInstance.movePrevious();
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Bỏ qua flow
|
|
236
|
+
*/
|
|
237
|
+
const skipFlow = () => {
|
|
238
|
+
endFlow();
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Reset trạng thái của flow
|
|
242
|
+
* @param flowName Tên flow
|
|
243
|
+
*/
|
|
244
|
+
const resetStatusOnboarding = (flowName) => {
|
|
245
|
+
updateStatus(flowName, {
|
|
246
|
+
slidesCompleted: false,
|
|
247
|
+
toursCompleted: false,
|
|
248
|
+
});
|
|
249
|
+
};
|
|
250
|
+
const value = {
|
|
251
|
+
currentFlow,
|
|
252
|
+
isRunning,
|
|
253
|
+
registerFlow,
|
|
254
|
+
startFlow,
|
|
255
|
+
endFlow,
|
|
256
|
+
nextStep,
|
|
257
|
+
previousStep,
|
|
258
|
+
skipFlow,
|
|
259
|
+
isSlidesOpen,
|
|
260
|
+
closeSlides,
|
|
261
|
+
persistFlowStatus,
|
|
262
|
+
getFlowStatus,
|
|
263
|
+
resetStatusOnboarding,
|
|
264
|
+
};
|
|
265
|
+
return (react_1.default.createElement(PHXOnboardingContext.Provider, { value: value },
|
|
266
|
+
react_1.default.createElement("style", { dangerouslySetInnerHTML: { __html: style_1.styleOnboarding } }),
|
|
267
|
+
children,
|
|
268
|
+
react_1.default.createElement(modal_slides_1.PHXOnboardingModal, { hasTours: hasTours, onHide: closeSlides, onStartTour: startTourFromSlides, show: isSlidesOpen, slides: activeSlides })));
|
|
269
|
+
};
|
|
270
|
+
exports.PHXOnboardingProvider = PHXOnboardingProvider;
|
|
271
|
+
/**
|
|
272
|
+
* Hook để sử dụng context
|
|
273
|
+
*/
|
|
274
|
+
const usePHXOnboarding = () => {
|
|
275
|
+
const context = (0, react_1.useContext)(PHXOnboardingContext);
|
|
276
|
+
if (!context) {
|
|
277
|
+
throw new Error('useOnboarding must be used within OnboardingProvider');
|
|
278
|
+
}
|
|
279
|
+
return context;
|
|
280
|
+
};
|
|
281
|
+
exports.usePHXOnboarding = usePHXOnboarding;
|
|
282
|
+
//# sourceMappingURL=onboarding-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-context.js","sourceRoot":"","sources":["../../../../../src/components/Onboarding/contexts/onboarding-context.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styleOnboarding = "\n.driver-popover-footer button {\n all: unset;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n padding: 6px 12px;\n font-weight: 400 !important;\n text-decoration: none;\n text-shadow: 1px 1px 0 #fff;\n background-color: #fff;\n color: rgb(3 7 18 / 1);\n font-size: 14px;\n line-height: normal;\n font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,\n Roboto, Helvetica Neue, sans-serif;\n cursor: pointer;\n outline: 0;\n border: 1px solid rgb(209 213 219 / 1);\n border-radius: 8px;\n transition-duration: 0.3s;\n transition-property: color, background-color, border-color,\n text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter,\n backdrop-filter;\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),\n var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.driver-popover-footer button:active {\n --tw-shadow: 0rem 0.125rem 0.1rem 0rem #0004 inset;\n --tw-shadow-colored: inset 0rem 0.125rem 0.1rem 0rem var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),\n var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n padding-top: 0.3rem;\n padding-bottom: 0.2rem;\n background-color: rgb(229 231 235 / 1);\n border-bottom-color: rgb(209 213 219 / 1);\n transition-timing-function: cubic-bezier(0.4, 0.36, 0, 1);\n}\n.driver-popover {\n font-weight: 400 !important;\n font-size: 14px;\n line-height: normal;\n font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,\n Roboto, Helvetica Neue, sans-serif;\n border-radius: 12px;\n color: #fff;\n background-color: rgb(0 0 0 / 1);\n}\n\n.driver-popover-title {\n font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,\n Roboto, Helvetica Neue, sans-serif;\n}\n.driver-popover .driver-popover-arrow-side-left.driver-popover-arrow {\n border-left-color: rgb(0 0 0 / 1);\n}\n\n.driver-popover .driver-popover-arrow-side-right.driver-popover-arrow {\n border-right-color: rgb(0 0 0 / 1);\n}\n\n.driver-popover .driver-popover-arrow-side-top.driver-popover-arrow {\n border-top-color: rgb(0 0 0 / 1);\n}\n\n.driver-popover .driver-popover-arrow-side-bottom.driver-popover-arrow {\n border-bottom-color: rgb(0 0 0 / 1);\n}\n";
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.styleOnboarding = void 0;
|
|
4
|
+
exports.styleOnboarding = `
|
|
5
|
+
.driver-popover-footer button {
|
|
6
|
+
all: unset;
|
|
7
|
+
display: flex;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
align-items: center;
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
padding: 6px 12px;
|
|
12
|
+
font-weight: 400 !important;
|
|
13
|
+
text-decoration: none;
|
|
14
|
+
text-shadow: 1px 1px 0 #fff;
|
|
15
|
+
background-color: #fff;
|
|
16
|
+
color: rgb(3 7 18 / 1);
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
line-height: normal;
|
|
19
|
+
font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,
|
|
20
|
+
Roboto, Helvetica Neue, sans-serif;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
outline: 0;
|
|
23
|
+
border: 1px solid rgb(209 213 219 / 1);
|
|
24
|
+
border-radius: 8px;
|
|
25
|
+
transition-duration: 0.3s;
|
|
26
|
+
transition-property: color, background-color, border-color,
|
|
27
|
+
text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter,
|
|
28
|
+
backdrop-filter;
|
|
29
|
+
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
30
|
+
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
|
|
31
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
32
|
+
var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.driver-popover-footer button:active {
|
|
36
|
+
--tw-shadow: 0rem 0.125rem 0.1rem 0rem #0004 inset;
|
|
37
|
+
--tw-shadow-colored: inset 0rem 0.125rem 0.1rem 0rem var(--tw-shadow-color);
|
|
38
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000),
|
|
39
|
+
var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
|
40
|
+
padding-top: 0.3rem;
|
|
41
|
+
padding-bottom: 0.2rem;
|
|
42
|
+
background-color: rgb(229 231 235 / 1);
|
|
43
|
+
border-bottom-color: rgb(209 213 219 / 1);
|
|
44
|
+
transition-timing-function: cubic-bezier(0.4, 0.36, 0, 1);
|
|
45
|
+
}
|
|
46
|
+
.driver-popover {
|
|
47
|
+
font-weight: 400 !important;
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
line-height: normal;
|
|
50
|
+
font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,
|
|
51
|
+
Roboto, Helvetica Neue, sans-serif;
|
|
52
|
+
border-radius: 12px;
|
|
53
|
+
color: #fff;
|
|
54
|
+
background-color: rgb(0 0 0 / 1);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.driver-popover-title {
|
|
58
|
+
font-family: Inter, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,
|
|
59
|
+
Roboto, Helvetica Neue, sans-serif;
|
|
60
|
+
}
|
|
61
|
+
.driver-popover .driver-popover-arrow-side-left.driver-popover-arrow {
|
|
62
|
+
border-left-color: rgb(0 0 0 / 1);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.driver-popover .driver-popover-arrow-side-right.driver-popover-arrow {
|
|
66
|
+
border-right-color: rgb(0 0 0 / 1);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.driver-popover .driver-popover-arrow-side-top.driver-popover-arrow {
|
|
70
|
+
border-top-color: rgb(0 0 0 / 1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.driver-popover .driver-popover-arrow-side-bottom.driver-popover-arrow {
|
|
74
|
+
border-bottom-color: rgb(0 0 0 / 1);
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../../../src/components/Onboarding/contexts/style.tsx"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwE9B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IPHXOnboardingFlow } from '../contexts/onboarding-context';
|
|
2
|
+
/**
|
|
3
|
+
* Đăng ký danh sách flows vào OnboardingProvider.
|
|
4
|
+
* Gọi hook này một lần trong component gốc của mỗi module.
|
|
5
|
+
* @param flows Danh sách flows cần đăng ký
|
|
6
|
+
*/
|
|
7
|
+
export declare const usePHXOnboardingInit: (flows: Array<IPHXOnboardingFlow>) => void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.usePHXOnboardingInit = void 0;
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const onboarding_context_1 = require("../contexts/onboarding-context");
|
|
7
|
+
/**
|
|
8
|
+
* Đăng ký danh sách flows vào OnboardingProvider.
|
|
9
|
+
* Gọi hook này một lần trong component gốc của mỗi module.
|
|
10
|
+
* @param flows Danh sách flows cần đăng ký
|
|
11
|
+
*/
|
|
12
|
+
const usePHXOnboardingInit = (flows) => {
|
|
13
|
+
const { registerFlow } = (0, onboarding_context_1.usePHXOnboarding)();
|
|
14
|
+
(0, react_1.useEffect)(() => {
|
|
15
|
+
flows.map((flow) => registerFlow(flow));
|
|
16
|
+
}, [registerFlow]);
|
|
17
|
+
};
|
|
18
|
+
exports.usePHXOnboardingInit = usePHXOnboardingInit;
|
|
19
|
+
//# sourceMappingURL=use-onboarding-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-onboarding-init.js","sourceRoot":"","sources":["../../../../../src/components/Onboarding/hooks/use-onboarding-init.ts"],"names":[],"mappings":";AAAA,YAAY,CAAA;;;AAEZ,iCAAiC;AACjC,uEAAqF;AAErF;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACvE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qCAAgB,GAAE,CAAA;IAE3C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;IACzC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;AACpB,CAAC,CAAA;AANY,QAAA,oBAAoB,wBAMhC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./contexts/onboarding-context"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./hooks/use-onboarding-init"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./modal-slides/modal-slides"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Onboarding/index.ts"],"names":[],"mappings":";;;AAAA,wEAA6C;AAC7C,sEAA2C;AAC3C,sEAA2C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IPHXOnboardingSlideStep } from '../contexts/onboarding-context';
|
|
3
|
+
export interface PHXOnboardingModalProps {
|
|
4
|
+
show: boolean;
|
|
5
|
+
slides: Array<IPHXOnboardingSlideStep>;
|
|
6
|
+
hasTours: boolean;
|
|
7
|
+
onHide(): void;
|
|
8
|
+
onStartTour(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare const PHXOnboardingModal: React.FC<PHXOnboardingModalProps>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PHXOnboardingModal = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
const Slider_1 = require("../../Slider");
|
|
8
|
+
const Box_1 = require("../../Box");
|
|
9
|
+
const HorizontalStack_1 = require("../../HorizontalStack");
|
|
10
|
+
const Button_1 = require("../../Button");
|
|
11
|
+
const Modal_1 = require("../../Modal");
|
|
12
|
+
const PHXOnboardingModal = ({ hasTours, onHide, onStartTour, show, slides, }) => {
|
|
13
|
+
const sliderRef = (0, react_1.useRef)(null);
|
|
14
|
+
const [currentIndex, setCurrentIndex] = (0, react_1.useState)(0);
|
|
15
|
+
// Derive from state — triggers re-render when index changes
|
|
16
|
+
const isFirstSlide = currentIndex === 0;
|
|
17
|
+
const isLastSlide = currentIndex === slides.length - 1;
|
|
18
|
+
/**
|
|
19
|
+
* Goes to previous slide
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
const goToPrevious = () => {
|
|
23
|
+
var _a;
|
|
24
|
+
if (isFirstSlide)
|
|
25
|
+
return;
|
|
26
|
+
(_a = sliderRef.current) === null || _a === void 0 ? void 0 : _a.prev();
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Goes to next slide
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
const goToNext = () => {
|
|
33
|
+
var _a;
|
|
34
|
+
if (isLastSlide)
|
|
35
|
+
return;
|
|
36
|
+
(_a = sliderRef.current) === null || _a === void 0 ? void 0 : _a.next();
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Reset slider to first slide when modal opens
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
(0, react_1.useEffect)(() => {
|
|
43
|
+
var _a;
|
|
44
|
+
if (show) {
|
|
45
|
+
(_a = sliderRef.current) === null || _a === void 0 ? void 0 : _a.goTo(0);
|
|
46
|
+
setCurrentIndex(0);
|
|
47
|
+
}
|
|
48
|
+
}, [show]);
|
|
49
|
+
const customFooterComponent = (react_1.default.createElement(Box_1.PHXBox, { fullWidth: true, p: 'snappy' },
|
|
50
|
+
react_1.default.createElement(HorizontalStack_1.PHXHorizontalStack, { fullWidth: true, items: 'center', justify: 'between' },
|
|
51
|
+
isFirstSlide ? (react_1.default.createElement("span", null)) : (react_1.default.createElement(Button_1.PHXButton, { onClick: goToPrevious, secondary: true }, "Quay l\u1EA1i")),
|
|
52
|
+
react_1.default.createElement(HorizontalStack_1.PHXHorizontalStack, { gapX: 'tight', items: 'center' },
|
|
53
|
+
react_1.default.createElement(Button_1.PHXButton, { onClick: onHide, secondary: true }, "B\u1ECF qua"),
|
|
54
|
+
isLastSlide ? (hasTours ? (react_1.default.createElement(Button_1.PHXButton, { onClick: onStartTour, primary: true }, "B\u1EAFt \u0111\u1EA7u Tour")) : (react_1.default.createElement(Button_1.PHXButton, { onClick: onHide, primary: true }, "Ho\u00E0n t\u1EA5t"))) : (react_1.default.createElement(Button_1.PHXButton, { onClick: goToNext, primary: true }, "Ti\u1EBFp theo"))))));
|
|
55
|
+
return (react_1.default.createElement(Modal_1.PHXModal, { customFooter: customFooterComponent, inCard: false, onHide: onHide, show: show, size: 'large-plus', title: 'H\u01B0\u1EDBng d\u1EABn s\u1EED d\u1EE5ng' },
|
|
56
|
+
react_1.default.createElement(Slider_1.PHXSlider, { ref: sliderRef, enableNavigate: false, gap: 0, onIndexChange: setCurrentIndex, perView: 1 }, slides.map((slideItem) => (react_1.default.createElement("img", { key: slideItem.id, alt: slideItem.title, src: slideItem.image }))))));
|
|
57
|
+
};
|
|
58
|
+
exports.PHXOnboardingModal = PHXOnboardingModal;
|
|
59
|
+
//# sourceMappingURL=modal-slides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-slides.js","sourceRoot":"","sources":["../../../../../src/components/Onboarding/modal-slides/modal-slides.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IPHXOnboardingFlow } from './contexts/onboarding-context';
|
|
3
|
+
export declare const slidesOnlyFlow: IPHXOnboardingFlow;
|
|
4
|
+
export declare const tourOnlyFlow: IPHXOnboardingFlow;
|
|
5
|
+
export declare const slidesAndTourFlow: IPHXOnboardingFlow;
|
|
6
|
+
/**
|
|
7
|
+
* Demo cách sử dụng Onboarding
|
|
8
|
+
*/
|
|
9
|
+
export default function OnboardingDemo(): React.JSX.Element;
|