@burdenoff/microfe-technospam 2026.709.2 → 2026.709.4
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/index.js +4 -4
- package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -1
- package/dist/technospam/TechnoSpamRoutes.js +100 -74
- package/dist/technospam/TechnoSpamRoutes.js.map +1 -1
- package/dist/technospam/components/PageLayout.d.ts.map +1 -1
- package/dist/technospam/components/PageLayout.js +26 -23
- package/dist/technospam/components/PageLayout.js.map +1 -1
- package/dist/technospam/components/TagInput.d.ts +18 -0
- package/dist/technospam/components/TagInput.d.ts.map +1 -0
- package/dist/technospam/components/TagInput.js +58 -0
- package/dist/technospam/components/TagInput.js.map +1 -0
- package/dist/technospam/components/TagStrip.d.ts +12 -0
- package/dist/technospam/components/TagStrip.d.ts.map +1 -0
- package/dist/technospam/components/TagStrip.js +20 -0
- package/dist/technospam/components/TagStrip.js.map +1 -0
- package/dist/technospam/components/index.d.ts +2 -0
- package/dist/technospam/components/index.d.ts.map +1 -1
- package/dist/technospam/components/index.js +2 -0
- package/dist/technospam/hooks/useNativeControls.d.ts +27 -0
- package/dist/technospam/hooks/useNativeControls.d.ts.map +1 -0
- package/dist/technospam/hooks/useNativeControls.js +18 -0
- package/dist/technospam/hooks/useNativeControls.js.map +1 -0
- package/dist/technospam/hooks/useTechnoSpamAnalytics.d.ts +1 -1
- package/dist/technospam/hooks/useTechnoSpamAnalytics.d.ts.map +1 -1
- package/dist/technospam/hooks/useTechnoSpamAnalytics.js.map +1 -1
- package/dist/technospam/hooks/useTechnoSpamPageView.d.ts +14 -0
- package/dist/technospam/hooks/useTechnoSpamPageView.d.ts.map +1 -0
- package/dist/technospam/hooks/useTechnoSpamPageView.js +26 -0
- package/dist/technospam/hooks/useTechnoSpamPageView.js.map +1 -0
- package/dist/technospam/index.js +1 -1
- package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js +408 -399
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +50 -55
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js +25 -25
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +142 -144
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCoursesPagePage.js +30 -30
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js +29 -29
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +54 -54
- package/dist/technospam/pages/MentorshipMentorsPagePage.js +61 -61
- package/dist/technospam/pages/MentorshipSessionsPagePage.js +42 -42
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useTechnoSpam as e, useTechnoSpamNavigate as t } from "./technospam/providers/TechnoSpamProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { useTechnoSpamAnalytics as n } from "./technospam/hooks/useTechnoSpamAnalytics.js";
|
|
3
|
+
import { TechnoSpamRoot as r } from "./technospam/TechnoSpamRoot.js";
|
|
4
|
+
import { useSandboxAssistantTransport as i } from "./technospam/services/createSandboxAssistantTransport.js";
|
|
5
5
|
import "./technospam/index.js";
|
|
6
|
-
export {
|
|
6
|
+
export { r as TechnoSpamRoot, i as useSandboxAssistantTransport, e as useTechnoSpam, n as useTechnoSpamAnalytics, t as useTechnoSpamNavigate };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TechnoSpamRoutes.d.ts","sourceRoot":"","sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TechnoSpamRoutes.d.ts","sourceRoot":"","sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"names":[],"mappings":"AAiIA,wBAAgB,gBAAgB,gCAyI/B"}
|
|
@@ -1,187 +1,213 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { useTechnoSpamPageView as e } from "./hooks/useTechnoSpamPageView.js";
|
|
2
|
+
import { EmptyView as t } from "./components/StateViews.js";
|
|
3
|
+
import "./components/index.js";
|
|
4
|
+
import { DashboardDashboardPagePage as n } from "./pages/DashboardDashboardPagePage.js";
|
|
5
|
+
import { Suspense as r, lazy as i, useMemo as a } from "react";
|
|
6
|
+
import { Loader2 as o, ShieldAlert as s } from "lucide-react";
|
|
7
|
+
import { Navigate as c, Route as l, Routes as u, useLocation as d } from "react-router-dom";
|
|
8
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
9
|
+
import { FeatureGate as m } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
6
10
|
//#region src/technospam/TechnoSpamRoutes.tsx
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
return /* @__PURE__ */
|
|
11
|
+
var h = i(() => import("./pages/DashboardDashboardPagePage.js").then((e) => ({ default: e.DashboardDashboardPagePage }))), g = i(() => import("./pages/CoursesCoursesPagePage.js").then((e) => ({ default: e.CoursesCoursesPagePage }))), _ = i(() => import("./pages/CoursesCourseDetailsPagePage.js").then((e) => ({ default: e.CoursesCourseDetailsPagePage }))), v = i(() => import("./pages/CoursesMyLearningPagePage.js").then((e) => ({ default: e.CoursesMyLearningPagePage }))), y = i(() => import("./pages/ApplicationsProblemsPagePage.js").then((e) => ({ default: e.ApplicationsProblemsPagePage }))), b = i(() => import("./pages/ApplicationsProblemDetailsPagePage.js").then((e) => ({ default: e.ApplicationsProblemDetailsPagePage }))), x = i(() => import("./pages/MentorshipMentorsPagePage.js").then((e) => ({ default: e.MentorshipMentorsPagePage }))), S = i(() => import("./pages/MentorshipMentorProfilePagePage.js").then((e) => ({ default: e.MentorshipMentorProfilePagePage }))), C = i(() => import("./pages/MentorshipSessionsPagePage.js").then((e) => ({ default: e.MentorshipSessionsPagePage }))), w = i(() => import("./pages/HackathonsHackathonsPagePage.js").then((e) => ({ default: e.HackathonsHackathonsPagePage }))), T = i(() => import("./pages/HackathonsHackathonDetailsPagePage.js").then((e) => ({ default: e.HackathonsHackathonDetailsPagePage }))), E = i(() => import("./pages/AnalyticsAnalyticsPagePage.js").then((e) => ({ default: e.AnalyticsAnalyticsPagePage }))), D = i(() => import("./pages/AdminAdminDashboardPagePage.js").then((e) => ({ default: e.AdminAdminDashboardPagePage })));
|
|
12
|
+
function O() {
|
|
13
|
+
return /* @__PURE__ */ f("div", {
|
|
10
14
|
className: "flex h-full min-h-[40vh] items-center justify-center",
|
|
11
|
-
children: /* @__PURE__ */
|
|
15
|
+
children: /* @__PURE__ */ f(o, {
|
|
12
16
|
className: "animate-spin text-text-muted",
|
|
13
17
|
size: 28
|
|
14
18
|
})
|
|
15
19
|
});
|
|
16
20
|
}
|
|
17
|
-
function
|
|
18
|
-
return /* @__PURE__ */
|
|
19
|
-
|
|
20
|
-
children: /* @__PURE__ */
|
|
21
|
-
/* @__PURE__ */ s
|
|
21
|
+
function k() {
|
|
22
|
+
return /* @__PURE__ */ f("div", {
|
|
23
|
+
className: "flex h-full min-h-[40vh] items-center justify-center p-6",
|
|
24
|
+
children: /* @__PURE__ */ f(t, {
|
|
25
|
+
icon: /* @__PURE__ */ f(s, { size: 28 }),
|
|
26
|
+
title: "Feature not available",
|
|
27
|
+
description: "This TechnoSpam feature is currently disabled for your workspace."
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function A(e, t) {
|
|
32
|
+
return /* @__PURE__ */ f(m, {
|
|
33
|
+
flag: e,
|
|
34
|
+
defaultValue: !0,
|
|
35
|
+
fallback: /* @__PURE__ */ f(k, {}),
|
|
36
|
+
children: t
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function j() {
|
|
40
|
+
let { pathname: t } = d();
|
|
41
|
+
e(a(() => t.includes("/courses/course-details") ? "course-details" : t.includes("/courses/my-learning") ? "my-learning" : t.includes("/courses") ? "courses" : t.includes("/applications/problem-details") ? "problem-details" : t.includes("/applications") ? "problems" : t.includes("/mentorship/mentor-profile") ? "mentor-profile" : t.includes("/mentorship/sessions") ? "sessions" : t.includes("/mentorship") ? "mentors" : t.includes("/hackathons/hackathon-details") ? "hackathon-details" : t.includes("/hackathons") ? "hackathons" : t.includes("/analytics") ? "analytics" : t.includes("/admin") ? "admin" : "dashboard", [t]));
|
|
42
|
+
}
|
|
43
|
+
function M() {
|
|
44
|
+
return j(), /* @__PURE__ */ f(r, {
|
|
45
|
+
fallback: /* @__PURE__ */ f(O, {}),
|
|
46
|
+
children: /* @__PURE__ */ p(u, { children: [
|
|
47
|
+
/* @__PURE__ */ f(l, {
|
|
22
48
|
index: !0,
|
|
23
|
-
element: /* @__PURE__ */
|
|
49
|
+
element: A("technospam.dashboard", /* @__PURE__ */ f(n, {}))
|
|
24
50
|
}),
|
|
25
|
-
/* @__PURE__ */
|
|
51
|
+
/* @__PURE__ */ f(l, {
|
|
26
52
|
path: "dashboard/dashboard-page",
|
|
27
|
-
element: /* @__PURE__ */
|
|
53
|
+
element: A("technospam.dashboard", /* @__PURE__ */ f(h, {}))
|
|
28
54
|
}),
|
|
29
|
-
/* @__PURE__ */
|
|
55
|
+
/* @__PURE__ */ f(l, {
|
|
30
56
|
path: "courses/courses-page",
|
|
31
|
-
element: /* @__PURE__ */
|
|
57
|
+
element: A("technospam.courses", /* @__PURE__ */ f(g, {}))
|
|
32
58
|
}),
|
|
33
|
-
/* @__PURE__ */
|
|
59
|
+
/* @__PURE__ */ f(l, {
|
|
34
60
|
path: "courses/course-details-page",
|
|
35
|
-
element: /* @__PURE__ */
|
|
61
|
+
element: A("technospam.courses", /* @__PURE__ */ f(_, {}))
|
|
36
62
|
}),
|
|
37
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ f(l, {
|
|
38
64
|
path: "courses/my-learning-page",
|
|
39
|
-
element: /* @__PURE__ */
|
|
65
|
+
element: A("technospam.courses", /* @__PURE__ */ f(v, {}))
|
|
40
66
|
}),
|
|
41
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ f(l, {
|
|
42
68
|
path: "courses/instructors-page",
|
|
43
|
-
element: /* @__PURE__ */
|
|
69
|
+
element: /* @__PURE__ */ f(c, {
|
|
44
70
|
to: "../courses/courses-page",
|
|
45
71
|
replace: !0
|
|
46
72
|
})
|
|
47
73
|
}),
|
|
48
|
-
/* @__PURE__ */
|
|
74
|
+
/* @__PURE__ */ f(l, {
|
|
49
75
|
path: "courses/instructor-profile-page",
|
|
50
|
-
element: /* @__PURE__ */
|
|
76
|
+
element: /* @__PURE__ */ f(c, {
|
|
51
77
|
to: "../courses/courses-page",
|
|
52
78
|
replace: !0
|
|
53
79
|
})
|
|
54
80
|
}),
|
|
55
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ f(l, {
|
|
56
82
|
path: "applications/problems-page",
|
|
57
|
-
element: /* @__PURE__ */
|
|
83
|
+
element: A("technospam.problems", /* @__PURE__ */ f(y, {}))
|
|
58
84
|
}),
|
|
59
|
-
/* @__PURE__ */
|
|
85
|
+
/* @__PURE__ */ f(l, {
|
|
60
86
|
path: "applications/problem-details-page",
|
|
61
|
-
element: /* @__PURE__ */
|
|
87
|
+
element: A("technospam.problems", /* @__PURE__ */ f(b, {}))
|
|
62
88
|
}),
|
|
63
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ f(l, {
|
|
64
90
|
path: "applications/solutions-page",
|
|
65
|
-
element: /* @__PURE__ */
|
|
91
|
+
element: /* @__PURE__ */ f(c, {
|
|
66
92
|
to: "../applications/problems-page",
|
|
67
93
|
replace: !0
|
|
68
94
|
})
|
|
69
95
|
}),
|
|
70
|
-
/* @__PURE__ */
|
|
96
|
+
/* @__PURE__ */ f(l, {
|
|
71
97
|
path: "applications/portfolio-page",
|
|
72
|
-
element: /* @__PURE__ */
|
|
98
|
+
element: /* @__PURE__ */ f(c, {
|
|
73
99
|
to: "../applications/problems-page",
|
|
74
100
|
replace: !0
|
|
75
101
|
})
|
|
76
102
|
}),
|
|
77
|
-
/* @__PURE__ */
|
|
103
|
+
/* @__PURE__ */ f(l, {
|
|
78
104
|
path: "mentorship/mentors-page",
|
|
79
|
-
element: /* @__PURE__ */
|
|
105
|
+
element: A("technospam.mentorship", /* @__PURE__ */ f(x, {}))
|
|
80
106
|
}),
|
|
81
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ f(l, {
|
|
82
108
|
path: "mentorship/mentor-profile-page",
|
|
83
|
-
element: /* @__PURE__ */
|
|
109
|
+
element: A("technospam.mentorship", /* @__PURE__ */ f(S, {}))
|
|
84
110
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ f(l, {
|
|
86
112
|
path: "mentorship/sessions-page",
|
|
87
|
-
element: /* @__PURE__ */
|
|
113
|
+
element: A("technospam.mentorship", /* @__PURE__ */ f(C, {}))
|
|
88
114
|
}),
|
|
89
|
-
/* @__PURE__ */
|
|
115
|
+
/* @__PURE__ */ f(l, {
|
|
90
116
|
path: "mentorship/mentorship-page",
|
|
91
|
-
element: /* @__PURE__ */
|
|
117
|
+
element: /* @__PURE__ */ f(c, {
|
|
92
118
|
to: "../mentorship/mentors-page",
|
|
93
119
|
replace: !0
|
|
94
120
|
})
|
|
95
121
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ f(l, {
|
|
97
123
|
path: "mentorship/bookings-page",
|
|
98
|
-
element: /* @__PURE__ */
|
|
124
|
+
element: /* @__PURE__ */ f(c, {
|
|
99
125
|
to: "../mentorship/sessions-page",
|
|
100
126
|
replace: !0
|
|
101
127
|
})
|
|
102
128
|
}),
|
|
103
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ f(l, {
|
|
104
130
|
path: "hackathons/hackathons-page",
|
|
105
|
-
element: /* @__PURE__ */
|
|
131
|
+
element: A("technospam.hackathons", /* @__PURE__ */ f(w, {}))
|
|
106
132
|
}),
|
|
107
|
-
/* @__PURE__ */
|
|
133
|
+
/* @__PURE__ */ f(l, {
|
|
108
134
|
path: "hackathons/hackathon-details-page",
|
|
109
|
-
element: /* @__PURE__ */
|
|
135
|
+
element: A("technospam.hackathons", /* @__PURE__ */ f(T, {}))
|
|
110
136
|
}),
|
|
111
|
-
/* @__PURE__ */
|
|
137
|
+
/* @__PURE__ */ f(l, {
|
|
112
138
|
path: "hackathons/events-page",
|
|
113
|
-
element: /* @__PURE__ */
|
|
139
|
+
element: /* @__PURE__ */ f(c, {
|
|
114
140
|
to: "../hackathons/hackathons-page",
|
|
115
141
|
replace: !0
|
|
116
142
|
})
|
|
117
143
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ f(l, {
|
|
119
145
|
path: "hackathons/teams-page",
|
|
120
|
-
element: /* @__PURE__ */
|
|
146
|
+
element: /* @__PURE__ */ f(c, {
|
|
121
147
|
to: "../hackathons/hackathons-page",
|
|
122
148
|
replace: !0
|
|
123
149
|
})
|
|
124
150
|
}),
|
|
125
|
-
/* @__PURE__ */
|
|
151
|
+
/* @__PURE__ */ f(l, {
|
|
126
152
|
path: "analytics/analytics-page",
|
|
127
|
-
element: /* @__PURE__ */
|
|
153
|
+
element: A("technospam.analytics", /* @__PURE__ */ f(E, {}))
|
|
128
154
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ f(l, {
|
|
130
156
|
path: "analytics/progress-page",
|
|
131
|
-
element: /* @__PURE__ */
|
|
157
|
+
element: /* @__PURE__ */ f(c, {
|
|
132
158
|
to: "../analytics/analytics-page",
|
|
133
159
|
replace: !0
|
|
134
160
|
})
|
|
135
161
|
}),
|
|
136
|
-
/* @__PURE__ */
|
|
162
|
+
/* @__PURE__ */ f(l, {
|
|
137
163
|
path: "analytics/achievements-page",
|
|
138
|
-
element: /* @__PURE__ */
|
|
164
|
+
element: /* @__PURE__ */ f(c, {
|
|
139
165
|
to: "../analytics/analytics-page",
|
|
140
166
|
replace: !0
|
|
141
167
|
})
|
|
142
168
|
}),
|
|
143
|
-
/* @__PURE__ */
|
|
169
|
+
/* @__PURE__ */ f(l, {
|
|
144
170
|
path: "analytics/reports-page",
|
|
145
|
-
element: /* @__PURE__ */
|
|
171
|
+
element: /* @__PURE__ */ f(c, {
|
|
146
172
|
to: "../analytics/analytics-page",
|
|
147
173
|
replace: !0
|
|
148
174
|
})
|
|
149
175
|
}),
|
|
150
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ f(l, {
|
|
151
177
|
path: "admin/admin-dashboard-page",
|
|
152
|
-
element: /* @__PURE__ */
|
|
178
|
+
element: A("technospam.admin", /* @__PURE__ */ f(D, {}))
|
|
153
179
|
}),
|
|
154
|
-
/* @__PURE__ */
|
|
180
|
+
/* @__PURE__ */ f(l, {
|
|
155
181
|
path: "admin/audit-reports-page",
|
|
156
|
-
element: /* @__PURE__ */
|
|
182
|
+
element: /* @__PURE__ */ f(c, {
|
|
157
183
|
to: "../admin/admin-dashboard-page",
|
|
158
184
|
replace: !0
|
|
159
185
|
})
|
|
160
186
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
187
|
+
/* @__PURE__ */ f(l, {
|
|
162
188
|
path: "study-planner/*",
|
|
163
|
-
element: /* @__PURE__ */
|
|
189
|
+
element: /* @__PURE__ */ f(c, {
|
|
164
190
|
to: "../dashboard/dashboard-page",
|
|
165
191
|
replace: !0
|
|
166
192
|
})
|
|
167
193
|
}),
|
|
168
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ f(l, {
|
|
169
195
|
path: "open-source/*",
|
|
170
|
-
element: /* @__PURE__ */
|
|
196
|
+
element: /* @__PURE__ */ f(c, {
|
|
171
197
|
to: "../dashboard/dashboard-page",
|
|
172
198
|
replace: !0
|
|
173
199
|
})
|
|
174
200
|
}),
|
|
175
|
-
/* @__PURE__ */
|
|
201
|
+
/* @__PURE__ */ f(l, {
|
|
176
202
|
path: "knowledge-base/*",
|
|
177
|
-
element: /* @__PURE__ */
|
|
203
|
+
element: /* @__PURE__ */ f(c, {
|
|
178
204
|
to: "../dashboard/dashboard-page",
|
|
179
205
|
replace: !0
|
|
180
206
|
})
|
|
181
207
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
208
|
+
/* @__PURE__ */ f(l, {
|
|
183
209
|
path: "*",
|
|
184
|
-
element: /* @__PURE__ */
|
|
210
|
+
element: /* @__PURE__ */ f(c, {
|
|
185
211
|
to: "../dashboard/dashboard-page",
|
|
186
212
|
replace: !0
|
|
187
213
|
})
|
|
@@ -190,6 +216,6 @@ function C() {
|
|
|
190
216
|
});
|
|
191
217
|
}
|
|
192
218
|
//#endregion
|
|
193
|
-
export {
|
|
219
|
+
export { M as TechnoSpamRoutes };
|
|
194
220
|
|
|
195
221
|
//# sourceMappingURL=TechnoSpamRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TechnoSpamRoutes.js","names":[],"sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\nimport { Loader2 } from 'lucide-react';\n\n/**\n * TechnoSpam routes — every page is backed by the real wspace-technospam-svc\n * (Tec* fields). Modules with no backend (study planner, open source, knowledge\n * base, portfolio, standalone instructors, extra analytics/admin sub-pages) were\n * removed during the backend-reconciliation rebuild; their old paths redirect to\n * the nearest live page so stale links never 404.\n */\n\nimport { DashboardDashboardPagePage as IndexPage } from './pages/DashboardDashboardPagePage';\n\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst CoursesCoursesPagePage = lazy(() =>\n import('./pages/CoursesCoursesPagePage').then((m) => ({ default: m.CoursesCoursesPagePage }))\n);\nconst CoursesCourseDetailsPagePage = lazy(() =>\n import('./pages/CoursesCourseDetailsPagePage').then((m) => ({\n default: m.CoursesCourseDetailsPagePage,\n }))\n);\nconst CoursesMyLearningPagePage = lazy(() =>\n import('./pages/CoursesMyLearningPagePage').then((m) => ({\n default: m.CoursesMyLearningPagePage,\n }))\n);\nconst ApplicationsProblemsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemsPagePage').then((m) => ({\n default: m.ApplicationsProblemsPagePage,\n }))\n);\nconst ApplicationsProblemDetailsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemDetailsPagePage').then((m) => ({\n default: m.ApplicationsProblemDetailsPagePage,\n }))\n);\nconst MentorshipMentorsPagePage = lazy(() =>\n import('./pages/MentorshipMentorsPagePage').then((m) => ({\n default: m.MentorshipMentorsPagePage,\n }))\n);\nconst MentorshipMentorProfilePagePage = lazy(() =>\n import('./pages/MentorshipMentorProfilePagePage').then((m) => ({\n default: m.MentorshipMentorProfilePagePage,\n }))\n);\nconst MentorshipSessionsPagePage = lazy(() =>\n import('./pages/MentorshipSessionsPagePage').then((m) => ({\n default: m.MentorshipSessionsPagePage,\n }))\n);\nconst HackathonsHackathonsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonsPagePage').then((m) => ({\n default: m.HackathonsHackathonsPagePage,\n }))\n);\nconst HackathonsHackathonDetailsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonDetailsPagePage').then((m) => ({\n default: m.HackathonsHackathonDetailsPagePage,\n }))\n);\nconst AnalyticsAnalyticsPagePage = lazy(() =>\n import('./pages/AnalyticsAnalyticsPagePage').then((m) => ({\n default: m.AnalyticsAnalyticsPagePage,\n }))\n);\nconst AdminAdminDashboardPagePage = lazy(() =>\n import('./pages/AdminAdminDashboardPagePage').then((m) => ({\n default: m.AdminAdminDashboardPagePage,\n }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center\">\n <Loader2 className=\"animate-spin text-text-muted\" size={28} />\n </div>\n );\n}\n\nexport function TechnoSpamRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<IndexPage />} />\n <Route path=\"dashboard/dashboard-page\" element={<DashboardDashboardPagePage />} />\n\n {/* Courses */}\n <Route path=\"courses/courses-page\" element={<CoursesCoursesPagePage />} />\n <Route path=\"courses/course-details-page\" element={<CoursesCourseDetailsPagePage />} />\n <Route path=\"courses/my-learning-page\" element={<CoursesMyLearningPagePage />} />\n <Route\n path=\"courses/instructors-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n <Route\n path=\"courses/instructor-profile-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n\n {/* Practice (applications) */}\n <Route path=\"applications/problems-page\" element={<ApplicationsProblemsPagePage />} />\n <Route\n path=\"applications/problem-details-page\"\n element={<ApplicationsProblemDetailsPagePage />}\n />\n <Route\n path=\"applications/solutions-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n <Route\n path=\"applications/portfolio-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n\n {/* Mentorship */}\n <Route path=\"mentorship/mentors-page\" element={<MentorshipMentorsPagePage />} />\n <Route\n path=\"mentorship/mentor-profile-page\"\n element={<MentorshipMentorProfilePagePage />}\n />\n <Route path=\"mentorship/sessions-page\" element={<MentorshipSessionsPagePage />} />\n <Route\n path=\"mentorship/mentorship-page\"\n element={<Navigate to=\"../mentorship/mentors-page\" replace />}\n />\n <Route\n path=\"mentorship/bookings-page\"\n element={<Navigate to=\"../mentorship/sessions-page\" replace />}\n />\n\n {/* Hackathons */}\n <Route path=\"hackathons/hackathons-page\" element={<HackathonsHackathonsPagePage />} />\n <Route\n path=\"hackathons/hackathon-details-page\"\n element={<HackathonsHackathonDetailsPagePage />}\n />\n <Route\n path=\"hackathons/events-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n <Route\n path=\"hackathons/teams-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n\n {/* Analytics */}\n <Route path=\"analytics/analytics-page\" element={<AnalyticsAnalyticsPagePage />} />\n <Route\n path=\"analytics/progress-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/achievements-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/reports-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n\n {/* Admin */}\n <Route path=\"admin/admin-dashboard-page\" element={<AdminAdminDashboardPagePage />} />\n <Route\n path=\"admin/audit-reports-page\"\n element={<Navigate to=\"../admin/admin-dashboard-page\" replace />}\n />\n\n {/* Removed modules → dashboard */}\n <Route\n path=\"study-planner/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"open-source/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"knowledge-base/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n\n <Route path=\"*\" element={<Navigate to=\"../dashboard/dashboard-page\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TechnoSpamRoutes.js","names":[],"sources":["../../src/technospam/TechnoSpamRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useMemo } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router-dom';\nimport { Loader2, ShieldAlert } from 'lucide-react';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTechnoSpamPageView } from './hooks/useTechnoSpamPageView';\nimport { EmptyView } from './components';\n\n/**\n * TechnoSpam routes — every page is backed by the real wspace-technospam-svc\n * (Tec* fields). Modules with no backend (study planner, open source, knowledge\n * base, portfolio, standalone instructors, extra analytics/admin sub-pages) were\n * removed during the backend-reconciliation rebuild; their old paths redirect to\n * the nearest live page so stale links never 404.\n */\n\nimport { DashboardDashboardPagePage as IndexPage } from './pages/DashboardDashboardPagePage';\n\nconst DashboardDashboardPagePage = lazy(() =>\n import('./pages/DashboardDashboardPagePage').then((m) => ({\n default: m.DashboardDashboardPagePage,\n }))\n);\nconst CoursesCoursesPagePage = lazy(() =>\n import('./pages/CoursesCoursesPagePage').then((m) => ({ default: m.CoursesCoursesPagePage }))\n);\nconst CoursesCourseDetailsPagePage = lazy(() =>\n import('./pages/CoursesCourseDetailsPagePage').then((m) => ({\n default: m.CoursesCourseDetailsPagePage,\n }))\n);\nconst CoursesMyLearningPagePage = lazy(() =>\n import('./pages/CoursesMyLearningPagePage').then((m) => ({\n default: m.CoursesMyLearningPagePage,\n }))\n);\nconst ApplicationsProblemsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemsPagePage').then((m) => ({\n default: m.ApplicationsProblemsPagePage,\n }))\n);\nconst ApplicationsProblemDetailsPagePage = lazy(() =>\n import('./pages/ApplicationsProblemDetailsPagePage').then((m) => ({\n default: m.ApplicationsProblemDetailsPagePage,\n }))\n);\nconst MentorshipMentorsPagePage = lazy(() =>\n import('./pages/MentorshipMentorsPagePage').then((m) => ({\n default: m.MentorshipMentorsPagePage,\n }))\n);\nconst MentorshipMentorProfilePagePage = lazy(() =>\n import('./pages/MentorshipMentorProfilePagePage').then((m) => ({\n default: m.MentorshipMentorProfilePagePage,\n }))\n);\nconst MentorshipSessionsPagePage = lazy(() =>\n import('./pages/MentorshipSessionsPagePage').then((m) => ({\n default: m.MentorshipSessionsPagePage,\n }))\n);\nconst HackathonsHackathonsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonsPagePage').then((m) => ({\n default: m.HackathonsHackathonsPagePage,\n }))\n);\nconst HackathonsHackathonDetailsPagePage = lazy(() =>\n import('./pages/HackathonsHackathonDetailsPagePage').then((m) => ({\n default: m.HackathonsHackathonDetailsPagePage,\n }))\n);\nconst AnalyticsAnalyticsPagePage = lazy(() =>\n import('./pages/AnalyticsAnalyticsPagePage').then((m) => ({\n default: m.AnalyticsAnalyticsPagePage,\n }))\n);\nconst AdminAdminDashboardPagePage = lazy(() =>\n import('./pages/AdminAdminDashboardPagePage').then((m) => ({\n default: m.AdminAdminDashboardPagePage,\n }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center\">\n <Loader2 className=\"animate-spin text-text-muted\" size={28} />\n </div>\n );\n}\n\nfunction FeatureDisabledFallback() {\n return (\n <div className=\"flex h-full min-h-[40vh] items-center justify-center p-6\">\n <EmptyView\n icon={<ShieldAlert size={28} />}\n title=\"Feature not available\"\n description=\"This TechnoSpam feature is currently disabled for your workspace.\"\n />\n </div>\n );\n}\n\nfunction gated(flag: string, element: React.ReactNode): React.ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={true} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nfunction useTrackedPageView() {\n const { pathname } = useLocation();\n const page = useMemo(() => {\n if (pathname.includes('/courses/course-details')) return 'course-details';\n if (pathname.includes('/courses/my-learning')) return 'my-learning';\n if (pathname.includes('/courses')) return 'courses';\n if (pathname.includes('/applications/problem-details')) return 'problem-details';\n if (pathname.includes('/applications')) return 'problems';\n if (pathname.includes('/mentorship/mentor-profile')) return 'mentor-profile';\n if (pathname.includes('/mentorship/sessions')) return 'sessions';\n if (pathname.includes('/mentorship')) return 'mentors';\n if (pathname.includes('/hackathons/hackathon-details')) return 'hackathon-details';\n if (pathname.includes('/hackathons')) return 'hackathons';\n if (pathname.includes('/analytics')) return 'analytics';\n if (pathname.includes('/admin')) return 'admin';\n return 'dashboard';\n }, [pathname]);\n useTechnoSpamPageView(page);\n}\n\nexport function TechnoSpamRoutes() {\n useTrackedPageView();\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={gated('technospam.dashboard', <IndexPage />)} />\n <Route\n path=\"dashboard/dashboard-page\"\n element={gated('technospam.dashboard', <DashboardDashboardPagePage />)}\n />\n\n {/* Courses */}\n <Route\n path=\"courses/courses-page\"\n element={gated('technospam.courses', <CoursesCoursesPagePage />)}\n />\n <Route\n path=\"courses/course-details-page\"\n element={gated('technospam.courses', <CoursesCourseDetailsPagePage />)}\n />\n <Route\n path=\"courses/my-learning-page\"\n element={gated('technospam.courses', <CoursesMyLearningPagePage />)}\n />\n <Route\n path=\"courses/instructors-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n <Route\n path=\"courses/instructor-profile-page\"\n element={<Navigate to=\"../courses/courses-page\" replace />}\n />\n\n {/* Practice (applications) */}\n <Route\n path=\"applications/problems-page\"\n element={gated('technospam.problems', <ApplicationsProblemsPagePage />)}\n />\n <Route\n path=\"applications/problem-details-page\"\n element={gated('technospam.problems', <ApplicationsProblemDetailsPagePage />)}\n />\n <Route\n path=\"applications/solutions-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n <Route\n path=\"applications/portfolio-page\"\n element={<Navigate to=\"../applications/problems-page\" replace />}\n />\n\n {/* Mentorship */}\n <Route\n path=\"mentorship/mentors-page\"\n element={gated('technospam.mentorship', <MentorshipMentorsPagePage />)}\n />\n <Route\n path=\"mentorship/mentor-profile-page\"\n element={gated('technospam.mentorship', <MentorshipMentorProfilePagePage />)}\n />\n <Route\n path=\"mentorship/sessions-page\"\n element={gated('technospam.mentorship', <MentorshipSessionsPagePage />)}\n />\n <Route\n path=\"mentorship/mentorship-page\"\n element={<Navigate to=\"../mentorship/mentors-page\" replace />}\n />\n <Route\n path=\"mentorship/bookings-page\"\n element={<Navigate to=\"../mentorship/sessions-page\" replace />}\n />\n\n {/* Hackathons */}\n <Route\n path=\"hackathons/hackathons-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonsPagePage />)}\n />\n <Route\n path=\"hackathons/hackathon-details-page\"\n element={gated('technospam.hackathons', <HackathonsHackathonDetailsPagePage />)}\n />\n <Route\n path=\"hackathons/events-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n <Route\n path=\"hackathons/teams-page\"\n element={<Navigate to=\"../hackathons/hackathons-page\" replace />}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics/analytics-page\"\n element={gated('technospam.analytics', <AnalyticsAnalyticsPagePage />)}\n />\n <Route\n path=\"analytics/progress-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/achievements-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n <Route\n path=\"analytics/reports-page\"\n element={<Navigate to=\"../analytics/analytics-page\" replace />}\n />\n\n {/* Admin */}\n <Route\n path=\"admin/admin-dashboard-page\"\n element={gated('technospam.admin', <AdminAdminDashboardPagePage />)}\n />\n <Route\n path=\"admin/audit-reports-page\"\n element={<Navigate to=\"../admin/admin-dashboard-page\" replace />}\n />\n\n {/* Removed modules → dashboard */}\n <Route\n path=\"study-planner/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"open-source/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n <Route\n path=\"knowledge-base/*\"\n element={<Navigate to=\"../dashboard/dashboard-page\" replace />}\n />\n\n <Route path=\"*\" element={<Navigate to=\"../dashboard/dashboard-page\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageLayout.d.ts","sourceRoot":"","sources":["../../../src/technospam/components/PageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PageLayout.d.ts","sourceRoot":"","sources":["../../../src/technospam/components/PageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAY,GACb,EAAE,eAAe,+BAuCjB"}
|
|
@@ -1,48 +1,51 @@
|
|
|
1
1
|
import { useTechnoSpamNavigate as e } from "../providers/TechnoSpamProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { useNativeControls as t } from "../hooks/useNativeControls.js";
|
|
3
|
+
import { cn as n } from "../utils/cn.js";
|
|
4
|
+
import { ArrowLeft as r } from "lucide-react";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
+
import { AuroraBackground as o } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/technospam/components/PageLayout.tsx
|
|
7
|
-
function
|
|
8
|
-
let
|
|
9
|
-
return /* @__PURE__ */
|
|
8
|
+
function s({ title: s, description: c, actions: l, children: u, backPath: d, hero: f = !1 }) {
|
|
9
|
+
let p = e(), { impact: m } = t();
|
|
10
|
+
return /* @__PURE__ */ a("div", {
|
|
10
11
|
className: "flex h-full flex-col bg-bg-surface",
|
|
11
|
-
children: [/* @__PURE__ */
|
|
12
|
-
className:
|
|
12
|
+
children: [/* @__PURE__ */ a("div", {
|
|
13
|
+
className: n("relative flex flex-col gap-4 overflow-hidden border-b border-border-seam px-6 py-5 sm:flex-row sm:items-start sm:justify-between", f ? "bg-accent-primary/12" : "bg-bg-surface"),
|
|
13
14
|
children: [
|
|
14
|
-
|
|
15
|
-
/* @__PURE__ */
|
|
15
|
+
f ? /* @__PURE__ */ i(o, { intensity: "subtle" }) : null,
|
|
16
|
+
/* @__PURE__ */ a("div", {
|
|
16
17
|
className: "relative flex min-w-0 flex-col gap-1",
|
|
17
18
|
children: [
|
|
18
|
-
|
|
19
|
+
d ? /* @__PURE__ */ a("button", {
|
|
19
20
|
type: "button",
|
|
20
|
-
onClick: () =>
|
|
21
|
+
onClick: () => {
|
|
22
|
+
m("light"), p(d);
|
|
23
|
+
},
|
|
21
24
|
className: "flex w-fit items-center gap-1 text-sm text-text-secondary transition-colors hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
|
|
22
|
-
children: [/* @__PURE__ */ r
|
|
25
|
+
children: [/* @__PURE__ */ i(r, { size: 15 }), "Back"]
|
|
23
26
|
}) : null,
|
|
24
|
-
/* @__PURE__ */
|
|
27
|
+
/* @__PURE__ */ i("h1", {
|
|
25
28
|
className: "truncate text-xl font-semibold text-text-primary sm:text-2xl",
|
|
26
|
-
children:
|
|
29
|
+
children: s
|
|
27
30
|
}),
|
|
28
|
-
|
|
31
|
+
c ? /* @__PURE__ */ i("p", {
|
|
29
32
|
className: "max-w-2xl text-sm text-text-secondary",
|
|
30
|
-
children:
|
|
33
|
+
children: c
|
|
31
34
|
}) : null
|
|
32
35
|
]
|
|
33
36
|
}),
|
|
34
|
-
|
|
37
|
+
l ? /* @__PURE__ */ i("div", {
|
|
35
38
|
className: "relative flex flex-wrap items-center gap-2",
|
|
36
|
-
children:
|
|
39
|
+
children: l
|
|
37
40
|
}) : null
|
|
38
41
|
]
|
|
39
|
-
}), /* @__PURE__ */
|
|
42
|
+
}), /* @__PURE__ */ i("div", {
|
|
40
43
|
className: "flex-1 overflow-y-auto p-6",
|
|
41
|
-
children:
|
|
44
|
+
children: u
|
|
42
45
|
})]
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
//#endregion
|
|
46
|
-
export {
|
|
49
|
+
export { s as PageLayout };
|
|
47
50
|
|
|
48
51
|
//# sourceMappingURL=PageLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/technospam/components/PageLayout.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { ArrowLeft } from 'lucide-react';\nimport { AuroraBackground } from '@burdenoff/fe-libs/ui';\nimport { useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport { cn } from '../utils/cn';\n\ninterface PageLayoutProps {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n backPath?: string;\n /** Render the page header with the living-glass aurora backdrop (module hero). */\n hero?: boolean;\n}\n\n/**\n * Consistent page chrome for every TechnoSpam module page: a header band\n * (optionally with the aurora hero backdrop), an optional back affordance, an\n * actions slot, and a scrollable body. Mirrors the platform page pattern so\n * TechnoSpam feels native to the shell.\n */\nexport function PageLayout({\n title,\n description,\n actions,\n children,\n backPath,\n hero = false,\n}: PageLayoutProps) {\n const navigate = useTechnoSpamNavigate();\n\n return (\n <div className=\"flex h-full flex-col bg-bg-surface\">\n <div\n className={cn(\n 'relative flex flex-col gap-4 overflow-hidden border-b border-border-seam px-6 py-5 sm:flex-row sm:items-start sm:justify-between',\n hero ? 'bg-accent-primary/12' : 'bg-bg-surface'\n )}\n >\n {hero ? <AuroraBackground intensity=\"subtle\" /> : null}\n <div className=\"relative flex min-w-0 flex-col gap-1\">\n {backPath ? (\n <button\n type=\"button\"\n onClick={() => navigate(backPath)}\n className=\"flex w-fit items-center gap-1 text-sm text-text-secondary transition-colors hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <ArrowLeft size={15} />\n Back\n </button>\n ) : null}\n <h1 className=\"truncate text-xl font-semibold text-text-primary sm:text-2xl\">{title}</h1>\n {description ? (\n <p className=\"max-w-2xl text-sm text-text-secondary\">{description}</p>\n ) : null}\n </div>\n {actions ? (\n <div className=\"relative flex flex-wrap items-center gap-2\">{actions}</div>\n ) : null}\n </div>\n <div className=\"flex-1 overflow-y-auto p-6\">{children}</div>\n </div>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/technospam/components/PageLayout.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { ArrowLeft } from 'lucide-react';\nimport { AuroraBackground } from '@burdenoff/fe-libs/ui';\nimport { useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport { useNativeControls } from '../hooks/useNativeControls';\nimport { cn } from '../utils/cn';\n\ninterface PageLayoutProps {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n backPath?: string;\n /** Render the page header with the living-glass aurora backdrop (module hero). */\n hero?: boolean;\n}\n\n/**\n * Consistent page chrome for every TechnoSpam module page: a header band\n * (optionally with the aurora hero backdrop), an optional back affordance, an\n * actions slot, and a scrollable body. Mirrors the platform page pattern so\n * TechnoSpam feels native to the shell.\n */\nexport function PageLayout({\n title,\n description,\n actions,\n children,\n backPath,\n hero = false,\n}: PageLayoutProps) {\n const navigate = useTechnoSpamNavigate();\n const { impact } = useNativeControls();\n\n return (\n <div className=\"flex h-full flex-col bg-bg-surface\">\n <div\n className={cn(\n 'relative flex flex-col gap-4 overflow-hidden border-b border-border-seam px-6 py-5 sm:flex-row sm:items-start sm:justify-between',\n hero ? 'bg-accent-primary/12' : 'bg-bg-surface'\n )}\n >\n {hero ? <AuroraBackground intensity=\"subtle\" /> : null}\n <div className=\"relative flex min-w-0 flex-col gap-1\">\n {backPath ? (\n <button\n type=\"button\"\n onClick={() => {\n void impact('light');\n navigate(backPath);\n }}\n className=\"flex w-fit items-center gap-1 text-sm text-text-secondary transition-colors hover:text-text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <ArrowLeft size={15} />\n Back\n </button>\n ) : null}\n <h1 className=\"truncate text-xl font-semibold text-text-primary sm:text-2xl\">{title}</h1>\n {description ? (\n <p className=\"max-w-2xl text-sm text-text-secondary\">{description}</p>\n ) : null}\n </div>\n {actions ? (\n <div className=\"relative flex flex-wrap items-center gap-2\">{actions}</div>\n ) : null}\n </div>\n <div className=\"flex-1 overflow-y-auto p-6\">{children}</div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAuBA,SAAgB,EAAW,EACzB,UACA,gBACA,YACA,aACA,aACA,UAAO,MACW;CAClB,IAAM,IAAW,GAAuB,EAClC,EAAE,cAAW,GAAmB;AAEtC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GACE,WAAW,EACT,oIACA,IAAO,yBAAyB,gBACjC;aAJH;IAMG,IAAO,kBAAC,GAAD,EAAkB,WAAU,UAAW,CAAA,GAAG;IAClD,kBAAC,OAAD;KAAK,WAAU;eAAf;MACG,IACC,kBAAC,UAAD;OACE,MAAK;OACL,eAAe;AAEb,QADK,EAAO,QAAQ,EACpB,EAAS,EAAS;;OAEpB,WAAU;iBANZ,CAQE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA,EAAA,OAEhB;WACP;MACJ,kBAAC,MAAD;OAAI,WAAU;iBAAgE;OAAW,CAAA;MACxF,IACC,kBAAC,KAAD;OAAG,WAAU;iBAAyC;OAAgB,CAAA,GACpE;MACA;;IACL,IACC,kBAAC,OAAD;KAAK,WAAU;eAA8C;KAAc,CAAA,GACzE;IACA;MACN,kBAAC,OAAD;GAAK,WAAU;GAA8B;GAAe,CAAA,CACxD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface TagInputProps {
|
|
2
|
+
value: string[];
|
|
3
|
+
onChange: (tags: string[]) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
maxTags?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Small controlled tag input. Renders existing tags as removable chips and
|
|
10
|
+
* commits a new tag on Enter or when the add button is pressed.
|
|
11
|
+
*
|
|
12
|
+
* This is the TechnoSpam-local tag picker; it works with the legacy string-tag
|
|
13
|
+
* arrays stored on Tec* entities while the workspace-wide @burdenoff/microfe-tags
|
|
14
|
+
* taxonomy is being adopted product-wide.
|
|
15
|
+
*/
|
|
16
|
+
export declare function TagInput({ value, onChange, placeholder, className, maxTags, }: TagInputProps): import("react").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=TagInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagInput.d.ts","sourceRoot":"","sources":["../../../src/technospam/components/TagInput.tsx"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,WAA0B,EAC1B,SAAS,EACT,OAAO,GACR,EAAE,aAAa,+BA4Df"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { useCallback as t, useState as n } from "react";
|
|
3
|
+
import { Plus as r, X as i } from "lucide-react";
|
|
4
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
+
import { Button as s, Input as c } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/technospam/components/TagInput.tsx
|
|
7
|
+
function l({ value: l, onChange: u, placeholder: d = "Add a tag…", className: f, maxTags: p }) {
|
|
8
|
+
let [m, h] = n(""), g = t(() => {
|
|
9
|
+
let e = m.split(",").map((e) => e.trim()).filter(Boolean);
|
|
10
|
+
if (e.length === 0) return;
|
|
11
|
+
let t = Array.from(new Set([...l, ...e]));
|
|
12
|
+
u(p ? t.slice(0, p) : t), h("");
|
|
13
|
+
}, [
|
|
14
|
+
m,
|
|
15
|
+
l,
|
|
16
|
+
u,
|
|
17
|
+
p
|
|
18
|
+
]), _ = t((e) => {
|
|
19
|
+
u(l.filter((t) => t !== e));
|
|
20
|
+
}, [l, u]);
|
|
21
|
+
return /* @__PURE__ */ o("div", {
|
|
22
|
+
className: e("space-y-2", f),
|
|
23
|
+
children: [/* @__PURE__ */ a("div", {
|
|
24
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
25
|
+
children: l.map((e) => /* @__PURE__ */ o("span", {
|
|
26
|
+
className: "inline-flex items-center gap-1 rounded-full border border-border-seam bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
27
|
+
children: [e, /* @__PURE__ */ a("button", {
|
|
28
|
+
type: "button",
|
|
29
|
+
onClick: () => _(e),
|
|
30
|
+
className: "rounded-full p-0.5 hover:bg-bg-surface hover:text-status-error-text focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
|
|
31
|
+
"aria-label": `Remove ${e}`,
|
|
32
|
+
children: /* @__PURE__ */ a(i, { size: 10 })
|
|
33
|
+
})]
|
|
34
|
+
}, e))
|
|
35
|
+
}), /* @__PURE__ */ o("div", {
|
|
36
|
+
className: "flex items-center gap-2",
|
|
37
|
+
children: [/* @__PURE__ */ a(c, {
|
|
38
|
+
value: m,
|
|
39
|
+
onChange: (e) => h(e.target.value),
|
|
40
|
+
onKeyDown: (e) => {
|
|
41
|
+
e.key === "Enter" && (e.preventDefault(), g());
|
|
42
|
+
},
|
|
43
|
+
placeholder: d,
|
|
44
|
+
className: "flex-1"
|
|
45
|
+
}), /* @__PURE__ */ o(s, {
|
|
46
|
+
type: "button",
|
|
47
|
+
variant: "outline",
|
|
48
|
+
size: "sm",
|
|
49
|
+
onClick: g,
|
|
50
|
+
children: [/* @__PURE__ */ a(r, { size: 14 }), " Add"]
|
|
51
|
+
})]
|
|
52
|
+
})]
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { l as TagInput };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=TagInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagInput.js","names":[],"sources":["../../../src/technospam/components/TagInput.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { X, Plus } from 'lucide-react';\nimport { Input, Button } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\n\ninterface TagInputProps {\n value: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n maxTags?: number;\n}\n\n/**\n * Small controlled tag input. Renders existing tags as removable chips and\n * commits a new tag on Enter or when the add button is pressed.\n *\n * This is the TechnoSpam-local tag picker; it works with the legacy string-tag\n * arrays stored on Tec* entities while the workspace-wide @burdenoff/microfe-tags\n * taxonomy is being adopted product-wide.\n */\nexport function TagInput({\n value,\n onChange,\n placeholder = 'Add a tag…',\n className,\n maxTags,\n}: TagInputProps) {\n const [draft, setDraft] = useState('');\n\n const commit = useCallback(() => {\n const next = draft\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n const merged = Array.from(new Set([...value, ...next]));\n onChange(maxTags ? merged.slice(0, maxTags) : merged);\n setDraft('');\n }, [draft, value, onChange, maxTags]);\n\n const remove = useCallback(\n (tag: string) => {\n onChange(value.filter((t) => t !== tag));\n },\n [value, onChange]\n );\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {value.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 rounded-full border border-border-seam bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\"\n >\n {tag}\n <button\n type=\"button\"\n onClick={() => remove(tag)}\n className=\"rounded-full p-0.5 hover:bg-bg-surface hover:text-status-error-text focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n aria-label={`Remove ${tag}`}\n >\n <X size={10} />\n </button>\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Input\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n commit();\n }\n }}\n placeholder={placeholder}\n className=\"flex-1\"\n />\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={commit}>\n <Plus size={14} /> Add\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAqBA,SAAgB,EAAS,EACvB,UACA,aACA,iBAAc,cACd,cACA,cACgB;CAChB,IAAM,CAAC,GAAO,KAAY,EAAS,GAAG,EAEhC,IAAS,QAAkB;EAC/B,IAAM,IAAO,EACV,MAAM,IAAI,CACV,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;AAClB,MAAI,EAAK,WAAW,EAAG;EACvB,IAAM,IAAS,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,GAAO,GAAG,EAAK,CAAC,CAAC;AAEvD,EADA,EAAS,IAAU,EAAO,MAAM,GAAG,EAAQ,GAAG,EAAO,EACrD,EAAS,GAAG;IACX;EAAC;EAAO;EAAO;EAAU;EAAQ,CAAC,EAE/B,IAAS,GACZ,MAAgB;AACf,IAAS,EAAM,QAAQ,MAAM,MAAM,EAAI,CAAC;IAE1C,CAAC,GAAO,EAAS,CAClB;AAED,QACE,kBAAC,OAAD;EAAK,WAAW,EAAG,aAAa,EAAU;YAA1C,CACE,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAM,KAAK,MACV,kBAAC,QAAD;IAEE,WAAU;cAFZ,CAIG,GACD,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAO,EAAI;KAC1B,WAAU;KACV,cAAY,UAAU;eAEtB,kBAAC,GAAD,EAAG,MAAM,IAAM,CAAA;KACR,CAAA,CACJ;MAZA,EAYA,CACP;GACE,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IACE,OAAO;IACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAM;IACzC,YAAY,MAAM;AAChB,KAAI,EAAE,QAAQ,YACZ,EAAE,gBAAgB,EAClB,GAAQ;;IAGC;IACb,WAAU;IACV,CAAA,EACF,kBAAC,GAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,MAAK;IAAK,SAAS;cAA3D,CACE,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA,EAAA,OACX;MACL;KACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface TagStripProps {
|
|
2
|
+
tags: string[];
|
|
3
|
+
className?: string;
|
|
4
|
+
size?: 'sm' | 'md';
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Read-only chip strip for entity tags. Falls back to nothing when the list
|
|
8
|
+
* is empty so callers don't have to guard.
|
|
9
|
+
*/
|
|
10
|
+
export declare function TagStrip({ tags, className, size }: TagStripProps): import("react").JSX.Element | null;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=TagStrip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagStrip.d.ts","sourceRoot":"","sources":["../../../src/technospam/components/TagStrip.tsx"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAW,EAAE,EAAE,aAAa,sCAkBvE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { Tag as t } from "lucide-react";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/technospam/components/TagStrip.tsx
|
|
5
|
+
function i({ tags: i, className: a, size: o = "sm" }) {
|
|
6
|
+
return i.length ? /* @__PURE__ */ r("div", {
|
|
7
|
+
className: e("flex flex-wrap items-center gap-1.5", a),
|
|
8
|
+
children: [/* @__PURE__ */ n(t, {
|
|
9
|
+
size: o === "sm" ? 12 : 14,
|
|
10
|
+
className: "text-text-muted"
|
|
11
|
+
}), i.map((t) => /* @__PURE__ */ n("span", {
|
|
12
|
+
className: e("inline-flex items-center rounded-full border border-border-seam bg-bg-sunken px-2 font-medium text-text-secondary", o === "sm" ? "text-[11px] py-0.5" : "text-xs py-1"),
|
|
13
|
+
children: t
|
|
14
|
+
}, t))]
|
|
15
|
+
}) : null;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { i as TagStrip };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=TagStrip.js.map
|