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.
Files changed (67) hide show
  1. package/dist/cjs/components/Onboarding/contexts/onboarding-context.d.ts +63 -0
  2. package/dist/cjs/components/Onboarding/contexts/onboarding-context.js +282 -0
  3. package/dist/cjs/components/Onboarding/contexts/onboarding-context.js.map +1 -0
  4. package/dist/cjs/components/Onboarding/contexts/style.d.ts +1 -0
  5. package/dist/cjs/components/Onboarding/contexts/style.js +77 -0
  6. package/dist/cjs/components/Onboarding/contexts/style.js.map +1 -0
  7. package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.d.ts +7 -0
  8. package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.js +19 -0
  9. package/dist/cjs/components/Onboarding/hooks/use-onboarding-init.js.map +1 -0
  10. package/dist/cjs/components/Onboarding/index.d.ts +3 -0
  11. package/dist/cjs/components/Onboarding/index.js +7 -0
  12. package/dist/cjs/components/Onboarding/index.js.map +1 -0
  13. package/dist/cjs/components/Onboarding/modal-slides/modal-slides.d.ts +10 -0
  14. package/dist/cjs/components/Onboarding/modal-slides/modal-slides.js +59 -0
  15. package/dist/cjs/components/Onboarding/modal-slides/modal-slides.js.map +1 -0
  16. package/dist/cjs/components/Onboarding/onbroading-demo.d.ts +9 -0
  17. package/dist/cjs/components/Onboarding/onbroading-demo.js +208 -0
  18. package/dist/cjs/components/Onboarding/onbroading-demo.js.map +1 -0
  19. package/dist/cjs/components/Slider/index.d.ts +2 -0
  20. package/dist/cjs/components/Slider/index.js +6 -0
  21. package/dist/cjs/components/Slider/index.js.map +1 -0
  22. package/dist/cjs/components/Slider/phx-slider-item.d.ts +6 -0
  23. package/dist/cjs/components/Slider/phx-slider-item.js +38 -0
  24. package/dist/cjs/components/Slider/phx-slider-item.js.map +1 -0
  25. package/dist/cjs/components/Slider/phx-slider.d.ts +18 -0
  26. package/dist/cjs/components/Slider/phx-slider.js +168 -0
  27. package/dist/cjs/components/Slider/phx-slider.js.map +1 -0
  28. package/dist/cjs/components/Slider/ultis/create-animate.d.ts +17 -0
  29. package/dist/cjs/components/Slider/ultis/create-animate.js +38 -0
  30. package/dist/cjs/components/Slider/ultis/create-animate.js.map +1 -0
  31. package/dist/cjs/index.d.ts +2 -0
  32. package/dist/cjs/index.js +2 -0
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/esm/components/Onboarding/contexts/onboarding-context.d.ts +63 -0
  35. package/dist/esm/components/Onboarding/contexts/onboarding-context.js +276 -0
  36. package/dist/esm/components/Onboarding/contexts/onboarding-context.js.map +1 -0
  37. package/dist/esm/components/Onboarding/contexts/style.d.ts +1 -0
  38. package/dist/esm/components/Onboarding/contexts/style.js +74 -0
  39. package/dist/esm/components/Onboarding/contexts/style.js.map +1 -0
  40. package/dist/esm/components/Onboarding/hooks/use-onboarding-init.d.ts +7 -0
  41. package/dist/esm/components/Onboarding/hooks/use-onboarding-init.js +15 -0
  42. package/dist/esm/components/Onboarding/hooks/use-onboarding-init.js.map +1 -0
  43. package/dist/esm/components/Onboarding/index.d.ts +3 -0
  44. package/dist/esm/components/Onboarding/index.js +4 -0
  45. package/dist/esm/components/Onboarding/index.js.map +1 -0
  46. package/dist/esm/components/Onboarding/modal-slides/modal-slides.d.ts +10 -0
  47. package/dist/esm/components/Onboarding/modal-slides/modal-slides.js +54 -0
  48. package/dist/esm/components/Onboarding/modal-slides/modal-slides.js.map +1 -0
  49. package/dist/esm/components/Onboarding/onbroading-demo.d.ts +9 -0
  50. package/dist/esm/components/Onboarding/onbroading-demo.js +203 -0
  51. package/dist/esm/components/Onboarding/onbroading-demo.js.map +1 -0
  52. package/dist/esm/components/Slider/index.d.ts +2 -0
  53. package/dist/esm/components/Slider/index.js +2 -0
  54. package/dist/esm/components/Slider/index.js.map +1 -0
  55. package/dist/esm/components/Slider/phx-slider-item.d.ts +6 -0
  56. package/dist/esm/components/Slider/phx-slider-item.js +33 -0
  57. package/dist/esm/components/Slider/phx-slider-item.js.map +1 -0
  58. package/dist/esm/components/Slider/phx-slider.d.ts +18 -0
  59. package/dist/esm/components/Slider/phx-slider.js +164 -0
  60. package/dist/esm/components/Slider/phx-slider.js.map +1 -0
  61. package/dist/esm/components/Slider/ultis/create-animate.d.ts +17 -0
  62. package/dist/esm/components/Slider/ultis/create-animate.js +34 -0
  63. package/dist/esm/components/Slider/ultis/create-animate.js.map +1 -0
  64. package/dist/esm/index.d.ts +2 -0
  65. package/dist/esm/index.js +2 -0
  66. package/dist/esm/index.js.map +1 -1
  67. 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,3 @@
1
+ export * from './contexts/onboarding-context';
2
+ export * from './hooks/use-onboarding-init';
3
+ export * from './modal-slides/modal-slides';
@@ -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;