@burdenoff/microfe-hookmovies 2026.1031.1 → 2026.1031.3
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/hookmovies/HookMoviesRoutes.d.ts.map +1 -1
- package/dist/hookmovies/HookMoviesRoutes.js +42 -38
- package/dist/hookmovies/HookMoviesRoutes.js.map +1 -1
- package/dist/hookmovies/components/SearchInterpretation.d.ts +26 -0
- package/dist/hookmovies/components/SearchInterpretation.d.ts.map +1 -0
- package/dist/hookmovies/components/SearchInterpretation.js +111 -0
- package/dist/hookmovies/components/SearchInterpretation.js.map +1 -0
- package/dist/hookmovies/hooks/useHookMoviesApi.d.ts +57 -0
- package/dist/hookmovies/hooks/useHookMoviesApi.d.ts.map +1 -1
- package/dist/hookmovies/hooks/useHookMoviesApi.js +125 -92
- package/dist/hookmovies/hooks/useHookMoviesApi.js.map +1 -1
- package/dist/hookmovies/hooks/useLogisticsApi.d.ts +345 -0
- package/dist/hookmovies/hooks/useLogisticsApi.d.ts.map +1 -0
- package/dist/hookmovies/hooks/useLogisticsApi.js +208 -0
- package/dist/hookmovies/hooks/useLogisticsApi.js.map +1 -0
- package/dist/hookmovies/pages/ai/ConciergePage.d.ts.map +1 -1
- package/dist/hookmovies/pages/ai/ConciergePage.js +184 -169
- package/dist/hookmovies/pages/ai/ConciergePage.js.map +1 -1
- package/dist/hookmovies/pages/consumer/DiscoveryPage.d.ts.map +1 -1
- package/dist/hookmovies/pages/consumer/DiscoveryPage.js +234 -208
- package/dist/hookmovies/pages/consumer/DiscoveryPage.js.map +1 -1
- package/dist/hookmovies/pages/productions/ProductionDetailPage.d.ts.map +1 -1
- package/dist/hookmovies/pages/productions/ProductionDetailPage.js +137 -128
- package/dist/hookmovies/pages/productions/ProductionDetailPage.js.map +1 -1
- package/dist/hookmovies/pages/productions/ProductionLogisticsPage.d.ts +4 -0
- package/dist/hookmovies/pages/productions/ProductionLogisticsPage.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/ProductionLogisticsPage.js +106 -0
- package/dist/hookmovies/pages/productions/ProductionLogisticsPage.js.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/BreakdownPanel.d.ts +6 -0
- package/dist/hookmovies/pages/productions/logistics/BreakdownPanel.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/BreakdownPanel.js +573 -0
- package/dist/hookmovies/pages/productions/logistics/BreakdownPanel.js.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/CallSheetPanel.d.ts +10 -0
- package/dist/hookmovies/pages/productions/logistics/CallSheetPanel.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/CallSheetPanel.js +579 -0
- package/dist/hookmovies/pages/productions/logistics/CallSheetPanel.js.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/CastCrewPanel.d.ts +10 -0
- package/dist/hookmovies/pages/productions/logistics/CastCrewPanel.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/CastCrewPanel.js +457 -0
- package/dist/hookmovies/pages/productions/logistics/CastCrewPanel.js.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/SchedulePanel.d.ts +6 -0
- package/dist/hookmovies/pages/productions/logistics/SchedulePanel.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/SchedulePanel.js +324 -0
- package/dist/hookmovies/pages/productions/logistics/SchedulePanel.js.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/ui.d.ts +35 -0
- package/dist/hookmovies/pages/productions/logistics/ui.d.ts.map +1 -0
- package/dist/hookmovies/pages/productions/logistics/ui.js +39 -0
- package/dist/hookmovies/pages/productions/logistics/ui.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookMoviesRoutes.d.ts","sourceRoot":"","sources":["../../src/hookmovies/HookMoviesRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAqD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"HookMoviesRoutes.d.ts","sourceRoot":"","sources":["../../src/hookmovies/HookMoviesRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAqD,MAAM,OAAO,CAAC;AAyLnF,eAAO,MAAM,gBAAgB,EAAE,EAmG9B,CAAC"}
|
|
@@ -5,10 +5,10 @@ import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-
|
|
|
5
5
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
6
6
|
import { FeatureGate as u } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
7
7
|
//#region src/hookmovies/HookMoviesRoutes.tsx
|
|
8
|
-
var d = r(() => import("./pages/catalog/TitlesPage.js").then((e) => ({ default: e.TitlesPage }))), f = r(() => import("./pages/catalog/TitleCreatePage.js").then((e) => ({ default: e.TitleCreatePage }))), p = r(() => import("./pages/catalog/TitleDetailPage.js").then((e) => ({ default: e.TitleDetailPage }))), m = r(() => import("./pages/catalog/StudiosPage.js").then((e) => ({ default: e.StudiosPage }))), h = r(() => import("./pages/catalog/PeoplePage.js").then((e) => ({ default: e.PeoplePage }))), g = r(() => import("./pages/productions/ProductionsPage.js").then((e) => ({ default: e.ProductionsPage }))), _ = r(() => import("./pages/productions/ProductionCreatePage.js").then((e) => ({ default: e.ProductionCreatePage }))), v = r(() => import("./pages/productions/ProductionDetailPage.js").then((e) => ({ default: e.ProductionDetailPage }))),
|
|
8
|
+
var d = r(() => import("./pages/catalog/TitlesPage.js").then((e) => ({ default: e.TitlesPage }))), f = r(() => import("./pages/catalog/TitleCreatePage.js").then((e) => ({ default: e.TitleCreatePage }))), p = r(() => import("./pages/catalog/TitleDetailPage.js").then((e) => ({ default: e.TitleDetailPage }))), m = r(() => import("./pages/catalog/StudiosPage.js").then((e) => ({ default: e.StudiosPage }))), h = r(() => import("./pages/catalog/PeoplePage.js").then((e) => ({ default: e.PeoplePage }))), g = r(() => import("./pages/productions/ProductionsPage.js").then((e) => ({ default: e.ProductionsPage }))), _ = r(() => import("./pages/productions/ProductionCreatePage.js").then((e) => ({ default: e.ProductionCreatePage }))), v = r(() => import("./pages/productions/ProductionLogisticsPage.js").then((e) => ({ default: e.ProductionLogisticsPage }))), y = r(() => import("./pages/productions/ProductionDetailPage.js").then((e) => ({ default: e.ProductionDetailPage }))), b = r(() => import("./pages/auditions/AuditionsPage.js").then((e) => ({ default: e.AuditionsPage }))), x = r(() => import("./pages/auditions/AuditionCreatePage.js").then((e) => ({ default: e.AuditionCreatePage }))), S = r(() => import("./pages/auditions/AuditionDetailPage.js").then((e) => ({ default: e.AuditionDetailPage }))), C = r(() => import("./pages/casting/MyCastingPage.js").then((e) => ({ default: e.MyCastingPage }))), w = r(() => import("./pages/casting/SavedSearchesPage.js").then((e) => ({ default: e.SavedSearchesPage }))), T = r(() => import("./pages/trust/DisputesPage.js").then((e) => ({ default: e.DisputesPage }))), E = r(() => import("./pages/trust/VerificationsPage.js").then((e) => ({ default: e.VerificationsPage }))), D = r(() => import("./pages/casting/GuardianInvitePage.js").then((e) => ({ default: e.GuardianInvitePage }))), O = r(() => import("./pages/engagement/ReviewsPage.js").then((e) => ({ default: e.ReviewsPage }))), k = r(() => import("./pages/distribution/RightsWindowsPage.js").then((e) => ({ default: e.RightsWindowsPage }))), A = r(() => import("./pages/library/ListsPage.js").then((e) => ({ default: e.ListsPage }))), j = r(() => import("./pages/library/EntitlementsPage.js").then((e) => ({ default: e.EntitlementsPage }))), M = r(() => import("./pages/consumer/DiscoveryPage.js").then((e) => ({ default: e.DiscoveryPage }))), N = r(() => import("./pages/consumer/TitleViewPage.js").then((e) => ({ default: e.TitleViewPage }))), P = r(() => import("./pages/consumer/PlayerPage.js").then((e) => ({ default: e.PlayerPage }))), F = r(() => import("./pages/consumer/HooksPage.js").then((e) => ({ default: e.HooksPage }))), I = r(() => import("./pages/social/ProfilesPage.js").then((e) => ({ default: e.ProfilesPage }))), L = r(() => import("./pages/social/WatchPartyListPage.js").then((e) => ({ default: e.WatchPartyListPage }))), R = r(() => import("./pages/social/WatchPartyRoomPage.js").then((e) => ({ default: e.WatchPartyRoomPage }))), z = r(() => import("./pages/commerce/CheckoutPage.js").then((e) => ({ default: e.CheckoutPage }))), B = r(() => import("./pages/analytics/PayoutsPage.js").then((e) => ({ default: e.PayoutsPage }))), V = r(() => import("./pages/analytics/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), H = r(() => import("./pages/trust/ModerationPage.js").then((e) => ({ default: e.ModerationPage }))), U = r(() => import("./pages/onboarding/OnboardingPage.js").then((e) => ({ default: e.OnboardingPage }))), W = r(() => import("./pages/developer/DevPortalPage.js").then((e) => ({ default: e.DevPortalPage }))), G = r(() => import("./pages/live/LivePage.js").then((e) => ({ default: e.LivePage }))), K = r(() => import("./pages/localization/LocalizationPage.js").then((e) => ({ default: e.LocalizationPage }))), q = r(() => import("./pages/ai/ConciergePage.js").then((e) => ({ default: e.ConciergePage }))), J = () => /* @__PURE__ */ c("div", {
|
|
9
9
|
className: "flex min-h-[400px] items-center justify-center",
|
|
10
10
|
children: /* @__PURE__ */ c("div", { className: "h-8 w-8 animate-spin rounded-full border-b-2 border-action-primary-bg" })
|
|
11
|
-
}),
|
|
11
|
+
}), Y = () => /* @__PURE__ */ l("div", {
|
|
12
12
|
className: "flex min-h-[400px] flex-col items-center justify-center gap-2 px-6 text-center",
|
|
13
13
|
children: [/* @__PURE__ */ c("h2", {
|
|
14
14
|
className: "text-lg font-semibold text-text-primary",
|
|
@@ -18,20 +18,20 @@ var d = r(() => import("./pages/catalog/TitlesPage.js").then((e) => ({ default:
|
|
|
18
18
|
children: "This feature is currently disabled for this workspace."
|
|
19
19
|
})]
|
|
20
20
|
});
|
|
21
|
-
function
|
|
21
|
+
function X(e, t) {
|
|
22
22
|
return /* @__PURE__ */ c(u, {
|
|
23
23
|
flag: e,
|
|
24
24
|
defaultValue: !0,
|
|
25
|
-
fallback: /* @__PURE__ */ c(
|
|
25
|
+
fallback: /* @__PURE__ */ c(Y, {}),
|
|
26
26
|
children: t
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
var
|
|
30
|
-
let { basePath: r, isStandalone: u } = e(),
|
|
31
|
-
return
|
|
29
|
+
var Z = () => {
|
|
30
|
+
let { basePath: r, isStandalone: u } = e(), Y = s(), Z = r === "/" ? "" : (r ?? "").replace(/\/$/, "");
|
|
31
|
+
return Z && !u && !(Y.pathname === Z || Y.pathname.startsWith(Z + "/")) ? null : /* @__PURE__ */ c("div", {
|
|
32
32
|
className: "flex min-h-full flex-col",
|
|
33
33
|
children: /* @__PURE__ */ c(n, {
|
|
34
|
-
fallback: /* @__PURE__ */ c(
|
|
34
|
+
fallback: /* @__PURE__ */ c(J, {}),
|
|
35
35
|
children: /* @__PURE__ */ l(o, { children: [
|
|
36
36
|
/* @__PURE__ */ c(a, {
|
|
37
37
|
index: !0,
|
|
@@ -67,123 +67,127 @@ var X = () => {
|
|
|
67
67
|
}),
|
|
68
68
|
/* @__PURE__ */ c(a, {
|
|
69
69
|
path: "productions/:id",
|
|
70
|
+
element: /* @__PURE__ */ c(y, {})
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ c(a, {
|
|
73
|
+
path: "productions/:id/logistics",
|
|
70
74
|
element: /* @__PURE__ */ c(v, {})
|
|
71
75
|
}),
|
|
72
76
|
/* @__PURE__ */ c(a, {
|
|
73
77
|
path: "auditions",
|
|
74
|
-
element: /* @__PURE__ */ c(
|
|
78
|
+
element: /* @__PURE__ */ c(b, {})
|
|
75
79
|
}),
|
|
76
80
|
/* @__PURE__ */ c(a, {
|
|
77
81
|
path: "auditions/new",
|
|
78
|
-
element: /* @__PURE__ */ c(
|
|
82
|
+
element: /* @__PURE__ */ c(x, {})
|
|
79
83
|
}),
|
|
80
84
|
/* @__PURE__ */ c(a, {
|
|
81
85
|
path: "auditions/:id",
|
|
82
|
-
element: /* @__PURE__ */ c(
|
|
86
|
+
element: /* @__PURE__ */ c(S, {})
|
|
83
87
|
}),
|
|
84
88
|
/* @__PURE__ */ c(a, {
|
|
85
89
|
path: "casting/mine",
|
|
86
|
-
element: /* @__PURE__ */ c(
|
|
90
|
+
element: /* @__PURE__ */ c(C, {})
|
|
87
91
|
}),
|
|
88
92
|
/* @__PURE__ */ c(a, {
|
|
89
93
|
path: "casting/saved-searches",
|
|
90
|
-
element: /* @__PURE__ */ c(
|
|
94
|
+
element: /* @__PURE__ */ c(w, {})
|
|
91
95
|
}),
|
|
92
96
|
/* @__PURE__ */ c(a, {
|
|
93
97
|
path: "casting/guardian-invite",
|
|
94
|
-
element: /* @__PURE__ */ c(
|
|
98
|
+
element: /* @__PURE__ */ c(D, {})
|
|
95
99
|
}),
|
|
96
100
|
/* @__PURE__ */ c(a, {
|
|
97
101
|
path: "engagement/reviews",
|
|
98
|
-
element: /* @__PURE__ */ c(
|
|
102
|
+
element: /* @__PURE__ */ c(O, {})
|
|
99
103
|
}),
|
|
100
104
|
/* @__PURE__ */ c(a, {
|
|
101
105
|
path: "distribution/rights",
|
|
102
|
-
element: /* @__PURE__ */ c(
|
|
106
|
+
element: /* @__PURE__ */ c(k, {})
|
|
103
107
|
}),
|
|
104
108
|
/* @__PURE__ */ c(a, {
|
|
105
109
|
path: "library/lists",
|
|
106
|
-
element: /* @__PURE__ */ c(
|
|
110
|
+
element: /* @__PURE__ */ c(A, {})
|
|
107
111
|
}),
|
|
108
112
|
/* @__PURE__ */ c(a, {
|
|
109
113
|
path: "library/entitlements",
|
|
110
|
-
element: /* @__PURE__ */ c(
|
|
114
|
+
element: /* @__PURE__ */ c(j, {})
|
|
111
115
|
}),
|
|
112
116
|
/* @__PURE__ */ c(a, {
|
|
113
117
|
path: "browse",
|
|
114
|
-
element: /* @__PURE__ */ c(
|
|
118
|
+
element: /* @__PURE__ */ c(M, {})
|
|
115
119
|
}),
|
|
116
120
|
/* @__PURE__ */ c(a, {
|
|
117
121
|
path: "title/:id",
|
|
118
|
-
element: /* @__PURE__ */ c(
|
|
122
|
+
element: /* @__PURE__ */ c(N, {})
|
|
119
123
|
}),
|
|
120
124
|
/* @__PURE__ */ c(a, {
|
|
121
125
|
path: "watch/:titleId",
|
|
122
|
-
element: /* @__PURE__ */ c(
|
|
126
|
+
element: /* @__PURE__ */ c(P, {})
|
|
123
127
|
}),
|
|
124
128
|
/* @__PURE__ */ c(a, {
|
|
125
129
|
path: "watch/:titleId/episode/:episodeId",
|
|
126
|
-
element: /* @__PURE__ */ c(
|
|
130
|
+
element: /* @__PURE__ */ c(P, {})
|
|
127
131
|
}),
|
|
128
132
|
/* @__PURE__ */ c(a, {
|
|
129
133
|
path: "hooks",
|
|
130
|
-
element:
|
|
134
|
+
element: X("hookmovies.hooks.enabled", /* @__PURE__ */ c(F, {}))
|
|
131
135
|
}),
|
|
132
136
|
/* @__PURE__ */ c(a, {
|
|
133
137
|
path: "profiles",
|
|
134
|
-
element: /* @__PURE__ */ c(
|
|
138
|
+
element: /* @__PURE__ */ c(I, {})
|
|
135
139
|
}),
|
|
136
140
|
/* @__PURE__ */ c(a, {
|
|
137
141
|
path: "watch-party",
|
|
138
|
-
element: /* @__PURE__ */ c(
|
|
142
|
+
element: /* @__PURE__ */ c(L, {})
|
|
139
143
|
}),
|
|
140
144
|
/* @__PURE__ */ c(a, {
|
|
141
145
|
path: "watch-party/:id",
|
|
142
|
-
element: /* @__PURE__ */ c(
|
|
146
|
+
element: /* @__PURE__ */ c(R, {})
|
|
143
147
|
}),
|
|
144
148
|
/* @__PURE__ */ c(a, {
|
|
145
149
|
path: "checkout/:titleId",
|
|
146
|
-
element: /* @__PURE__ */ c(
|
|
150
|
+
element: /* @__PURE__ */ c(z, {})
|
|
147
151
|
}),
|
|
148
152
|
/* @__PURE__ */ c(a, {
|
|
149
153
|
path: "payouts",
|
|
150
|
-
element: /* @__PURE__ */ c(
|
|
154
|
+
element: /* @__PURE__ */ c(B, {})
|
|
151
155
|
}),
|
|
152
156
|
/* @__PURE__ */ c(a, {
|
|
153
157
|
path: "analytics",
|
|
154
|
-
element: /* @__PURE__ */ c(
|
|
158
|
+
element: /* @__PURE__ */ c(V, {})
|
|
155
159
|
}),
|
|
156
160
|
/* @__PURE__ */ c(a, {
|
|
157
161
|
path: "trust/moderation",
|
|
158
|
-
element: /* @__PURE__ */ c(
|
|
162
|
+
element: /* @__PURE__ */ c(H, {})
|
|
159
163
|
}),
|
|
160
164
|
/* @__PURE__ */ c(a, {
|
|
161
165
|
path: "trust/disputes",
|
|
162
|
-
element: /* @__PURE__ */ c(
|
|
166
|
+
element: /* @__PURE__ */ c(T, {})
|
|
163
167
|
}),
|
|
164
168
|
/* @__PURE__ */ c(a, {
|
|
165
169
|
path: "trust/verifications",
|
|
166
|
-
element: /* @__PURE__ */ c(
|
|
170
|
+
element: /* @__PURE__ */ c(E, {})
|
|
167
171
|
}),
|
|
168
172
|
/* @__PURE__ */ c(a, {
|
|
169
173
|
path: "onboarding/languages",
|
|
170
|
-
element: /* @__PURE__ */ c(
|
|
174
|
+
element: /* @__PURE__ */ c(U, {})
|
|
171
175
|
}),
|
|
172
176
|
/* @__PURE__ */ c(a, {
|
|
173
177
|
path: "developer",
|
|
174
|
-
element: /* @__PURE__ */ c(
|
|
178
|
+
element: /* @__PURE__ */ c(W, {})
|
|
175
179
|
}),
|
|
176
180
|
/* @__PURE__ */ c(a, {
|
|
177
181
|
path: "live",
|
|
178
|
-
element:
|
|
182
|
+
element: X("hookmovies.fast.enabled", /* @__PURE__ */ c(G, {}))
|
|
179
183
|
}),
|
|
180
184
|
/* @__PURE__ */ c(a, {
|
|
181
185
|
path: "title/:id/localization",
|
|
182
|
-
element: /* @__PURE__ */ c(
|
|
186
|
+
element: /* @__PURE__ */ c(K, {})
|
|
183
187
|
}),
|
|
184
188
|
/* @__PURE__ */ c(a, {
|
|
185
189
|
path: "concierge",
|
|
186
|
-
element:
|
|
190
|
+
element: X("hookmovies.ai.concierge", /* @__PURE__ */ c(q, {}))
|
|
187
191
|
}),
|
|
188
192
|
/* @__PURE__ */ c(a, {
|
|
189
193
|
path: "*",
|
|
@@ -197,6 +201,6 @@ var X = () => {
|
|
|
197
201
|
});
|
|
198
202
|
};
|
|
199
203
|
//#endregion
|
|
200
|
-
export {
|
|
204
|
+
export { Z as HookMoviesRoutes };
|
|
201
205
|
|
|
202
206
|
//# sourceMappingURL=HookMoviesRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookMoviesRoutes.js","names":[],"sources":["../../src/hookmovies/HookMoviesRoutes.tsx"],"sourcesContent":["/**\n * HookMovies Routes\n * @module hookmovies\n *\n * Real domain routes for the HookMovies workspace product: catalog (titles,\n * studios, people), production lifecycle, casting auditions, audience\n * engagement (reviews), rights & distribution, and the user library (lists +\n * entitlements). All data comes from the live `hookmovies` subgraph.\n */\n\nimport { type FC, lazy, Suspense, type ReactNode, type ReactElement } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useHookMovies } from './context/HookMoviesContext';\n\n// Eager — primary landing\nimport { HomePage } from './pages/HomePage';\n\n// Catalog\nconst TitlesPage = lazy(() =>\n import('./pages/catalog/TitlesPage').then((m) => ({ default: m.TitlesPage }))\n);\nconst TitleCreatePage = lazy(() =>\n import('./pages/catalog/TitleCreatePage').then((m) => ({ default: m.TitleCreatePage }))\n);\nconst TitleDetailPage = lazy(() =>\n import('./pages/catalog/TitleDetailPage').then((m) => ({ default: m.TitleDetailPage }))\n);\nconst StudiosPage = lazy(() =>\n import('./pages/catalog/StudiosPage').then((m) => ({ default: m.StudiosPage }))\n);\nconst PeoplePage = lazy(() =>\n import('./pages/catalog/PeoplePage').then((m) => ({ default: m.PeoplePage }))\n);\n\n// Productions\nconst ProductionsPage = lazy(() =>\n import('./pages/productions/ProductionsPage').then((m) => ({ default: m.ProductionsPage }))\n);\nconst ProductionCreatePage = lazy(() =>\n import('./pages/productions/ProductionCreatePage').then((m) => ({\n default: m.ProductionCreatePage,\n }))\n);\nconst ProductionDetailPage = lazy(() =>\n import('./pages/productions/ProductionDetailPage').then((m) => ({\n default: m.ProductionDetailPage,\n }))\n);\n\n// Auditions\nconst AuditionsPage = lazy(() =>\n import('./pages/auditions/AuditionsPage').then((m) => ({ default: m.AuditionsPage }))\n);\nconst AuditionCreatePage = lazy(() =>\n import('./pages/auditions/AuditionCreatePage').then((m) => ({ default: m.AuditionCreatePage }))\n);\nconst AuditionDetailPage = lazy(() =>\n import('./pages/auditions/AuditionDetailPage').then((m) => ({ default: m.AuditionDetailPage }))\n);\n\n// Casting trust layer (BOFF-4245)\nconst MyCastingPage = lazy(() =>\n import('./pages/casting/MyCastingPage').then((m) => ({ default: m.MyCastingPage }))\n);\nconst SavedSearchesPage = lazy(() =>\n import('./pages/casting/SavedSearchesPage').then((m) => ({ default: m.SavedSearchesPage }))\n);\nconst DisputesPage = lazy(() =>\n import('./pages/trust/DisputesPage').then((m) => ({ default: m.DisputesPage }))\n);\nconst VerificationsPage = lazy(() =>\n import('./pages/trust/VerificationsPage').then((m) => ({ default: m.VerificationsPage }))\n);\nconst GuardianInvitePage = lazy(() =>\n import('./pages/casting/GuardianInvitePage').then((m) => ({ default: m.GuardianInvitePage }))\n);\n\n// Engagement\nconst ReviewsPage = lazy(() =>\n import('./pages/engagement/ReviewsPage').then((m) => ({ default: m.ReviewsPage }))\n);\n\n// Distribution\nconst RightsWindowsPage = lazy(() =>\n import('./pages/distribution/RightsWindowsPage').then((m) => ({ default: m.RightsWindowsPage }))\n);\n\n// Library\nconst ListsPage = lazy(() =>\n import('./pages/library/ListsPage').then((m) => ({ default: m.ListsPage }))\n);\nconst EntitlementsPage = lazy(() =>\n import('./pages/library/EntitlementsPage').then((m) => ({ default: m.EntitlementsPage }))\n);\n\n// Consumer (audience-facing) — discovery, title view, playback, hooks feed\nconst DiscoveryPage = lazy(() =>\n import('./pages/consumer/DiscoveryPage').then((m) => ({ default: m.DiscoveryPage }))\n);\nconst TitleViewPage = lazy(() =>\n import('./pages/consumer/TitleViewPage').then((m) => ({ default: m.TitleViewPage }))\n);\nconst PlayerPage = lazy(() =>\n import('./pages/consumer/PlayerPage').then((m) => ({ default: m.PlayerPage }))\n);\nconst HooksPage = lazy(() =>\n import('./pages/consumer/HooksPage').then((m) => ({ default: m.HooksPage }))\n);\n\n// Social — viewing profiles & synchronized watch parties\nconst ProfilesPage = lazy(() =>\n import('./pages/social/ProfilesPage').then((m) => ({ default: m.ProfilesPage }))\n);\nconst WatchPartyListPage = lazy(() =>\n import('./pages/social/WatchPartyListPage').then((m) => ({ default: m.WatchPartyListPage }))\n);\nconst WatchPartyRoomPage = lazy(() =>\n import('./pages/social/WatchPartyRoomPage').then((m) => ({ default: m.WatchPartyRoomPage }))\n);\n\n// Commerce — checkout (TVOD purchase / rental) & creator payouts\nconst CheckoutPage = lazy(() =>\n import('./pages/commerce/CheckoutPage').then((m) => ({ default: m.CheckoutPage }))\n);\nconst PayoutsPage = lazy(() =>\n import('./pages/analytics/PayoutsPage').then((m) => ({ default: m.PayoutsPage }))\n);\n\n// Analytics — creator / operator performance dashboards\nconst AnalyticsPage = lazy(() =>\n import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\n\n// Trust & safety — moderation queue\nconst ModerationPage = lazy(() =>\n import('./pages/trust/ModerationPage').then((m) => ({ default: m.ModerationPage }))\n);\n\n// Onboarding — language / content preferences\nconst OnboardingPage = lazy(() =>\n import('./pages/onboarding/OnboardingPage').then((m) => ({ default: m.OnboardingPage }))\n);\n\n// Developer portal — API keys\nconst DevPortalPage = lazy(() =>\n import('./pages/developer/DevPortalPage').then((m) => ({ default: m.DevPortalPage }))\n);\n\n// Live — FAST linear channels & schedules\nconst LivePage = lazy(() => import('./pages/live/LivePage').then((m) => ({ default: m.LivePage })));\n\n// Localization — per-title subtitle / caption / dub track management\nconst LocalizationPage = lazy(() =>\n import('./pages/localization/LocalizationPage').then((m) => ({ default: m.LocalizationPage }))\n);\n\n// AI — concierge / recommendations assistant\nconst ConciergePage = lazy(() =>\n import('./pages/ai/ConciergePage').then((m) => ({ default: m.ConciergePage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-b-2 border-action-primary-bg\" />\n </div>\n);\n\nconst FeatureDisabledFallback: FC = () => (\n <div className=\"flex min-h-[400px] flex-col items-center justify-center gap-2 px-6 text-center\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Coming soon</h2>\n <p className=\"max-w-sm text-sm text-text-secondary\">\n This feature is currently disabled for this workspace.\n </p>\n </div>\n);\n\n/**\n * Wrap a route element in a `FeatureGate` with the shared \"coming soon\"\n * fallback. `defaultValue={true}` keeps already-shipped screens visible\n * before their flag is seeded — seeding must never hide a working feature.\n */\nfunction gated(flag: string, element: ReactNode): ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={true} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nexport const HookMoviesRoutes: FC = () => {\n const { basePath, isStandalone } = useHookMovies();\n const location = useLocation();\n\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview / dashboard */}\n <Route index element={<HomePage />} />\n\n {/* Catalog */}\n <Route path=\"catalog/titles\" element={<TitlesPage />} />\n <Route path=\"catalog/titles/new\" element={<TitleCreatePage />} />\n <Route path=\"catalog/titles/:id\" element={<TitleDetailPage />} />\n <Route path=\"catalog/studios\" element={<StudiosPage />} />\n <Route path=\"catalog/people\" element={<PeoplePage />} />\n\n {/* Productions */}\n <Route path=\"productions\" element={<ProductionsPage />} />\n <Route path=\"productions/new\" element={<ProductionCreatePage />} />\n <Route path=\"productions/:id\" element={<ProductionDetailPage />} />\n\n {/* Auditions */}\n <Route path=\"auditions\" element={<AuditionsPage />} />\n <Route path=\"auditions/new\" element={<AuditionCreatePage />} />\n <Route path=\"auditions/:id\" element={<AuditionDetailPage />} />\n <Route path=\"casting/mine\" element={<MyCastingPage />} />\n <Route path=\"casting/saved-searches\" element={<SavedSearchesPage />} />\n <Route path=\"casting/guardian-invite\" element={<GuardianInvitePage />} />\n\n {/* Engagement */}\n <Route path=\"engagement/reviews\" element={<ReviewsPage />} />\n\n {/* Distribution */}\n <Route path=\"distribution/rights\" element={<RightsWindowsPage />} />\n\n {/* Library */}\n <Route path=\"library/lists\" element={<ListsPage />} />\n <Route path=\"library/entitlements\" element={<EntitlementsPage />} />\n\n {/* Consumer (audience-facing) */}\n <Route path=\"browse\" element={<DiscoveryPage />} />\n <Route path=\"title/:id\" element={<TitleViewPage />} />\n <Route path=\"watch/:titleId\" element={<PlayerPage />} />\n <Route path=\"watch/:titleId/episode/:episodeId\" element={<PlayerPage />} />\n <Route path=\"hooks\" element={gated('hookmovies.hooks.enabled', <HooksPage />)} />\n\n {/* Social — profiles & watch parties */}\n <Route path=\"profiles\" element={<ProfilesPage />} />\n <Route path=\"watch-party\" element={<WatchPartyListPage />} />\n <Route path=\"watch-party/:id\" element={<WatchPartyRoomPage />} />\n\n {/* Commerce — checkout & payouts */}\n <Route path=\"checkout/:titleId\" element={<CheckoutPage />} />\n <Route path=\"payouts\" element={<PayoutsPage />} />\n\n {/* Analytics */}\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n\n {/* Trust & safety */}\n <Route path=\"trust/moderation\" element={<ModerationPage />} />\n <Route path=\"trust/disputes\" element={<DisputesPage />} />\n <Route path=\"trust/verifications\" element={<VerificationsPage />} />\n\n {/* Onboarding */}\n <Route path=\"onboarding/languages\" element={<OnboardingPage />} />\n\n {/* Developer portal */}\n <Route path=\"developer\" element={<DevPortalPage />} />\n\n {/* Live — FAST channels */}\n <Route path=\"live\" element={gated('hookmovies.fast.enabled', <LivePage />)} />\n\n {/* Localization */}\n <Route path=\"title/:id/localization\" element={<LocalizationPage />} />\n\n {/* AI concierge */}\n <Route path=\"concierge\" element={gated('hookmovies.ai.concierge', <ConciergePage />)} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HookMoviesRoutes.js","names":[],"sources":["../../src/hookmovies/HookMoviesRoutes.tsx"],"sourcesContent":["/**\n * HookMovies Routes\n * @module hookmovies\n *\n * Real domain routes for the HookMovies workspace product: catalog (titles,\n * studios, people), production lifecycle, casting auditions, audience\n * engagement (reviews), rights & distribution, and the user library (lists +\n * entitlements). All data comes from the live `hookmovies` subgraph.\n */\n\nimport { type FC, lazy, Suspense, type ReactNode, type ReactElement } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useHookMovies } from './context/HookMoviesContext';\n\n// Eager — primary landing\nimport { HomePage } from './pages/HomePage';\n\n// Catalog\nconst TitlesPage = lazy(() =>\n import('./pages/catalog/TitlesPage').then((m) => ({ default: m.TitlesPage }))\n);\nconst TitleCreatePage = lazy(() =>\n import('./pages/catalog/TitleCreatePage').then((m) => ({ default: m.TitleCreatePage }))\n);\nconst TitleDetailPage = lazy(() =>\n import('./pages/catalog/TitleDetailPage').then((m) => ({ default: m.TitleDetailPage }))\n);\nconst StudiosPage = lazy(() =>\n import('./pages/catalog/StudiosPage').then((m) => ({ default: m.StudiosPage }))\n);\nconst PeoplePage = lazy(() =>\n import('./pages/catalog/PeoplePage').then((m) => ({ default: m.PeoplePage }))\n);\n\n// Productions\nconst ProductionsPage = lazy(() =>\n import('./pages/productions/ProductionsPage').then((m) => ({ default: m.ProductionsPage }))\n);\nconst ProductionCreatePage = lazy(() =>\n import('./pages/productions/ProductionCreatePage').then((m) => ({\n default: m.ProductionCreatePage,\n }))\n);\nconst ProductionLogisticsPage = lazy(() =>\n import('./pages/productions/ProductionLogisticsPage').then((m) => ({\n default: m.ProductionLogisticsPage,\n }))\n);\nconst ProductionDetailPage = lazy(() =>\n import('./pages/productions/ProductionDetailPage').then((m) => ({\n default: m.ProductionDetailPage,\n }))\n);\n\n// Auditions\nconst AuditionsPage = lazy(() =>\n import('./pages/auditions/AuditionsPage').then((m) => ({ default: m.AuditionsPage }))\n);\nconst AuditionCreatePage = lazy(() =>\n import('./pages/auditions/AuditionCreatePage').then((m) => ({ default: m.AuditionCreatePage }))\n);\nconst AuditionDetailPage = lazy(() =>\n import('./pages/auditions/AuditionDetailPage').then((m) => ({ default: m.AuditionDetailPage }))\n);\n\n// Casting trust layer (BOFF-4245)\nconst MyCastingPage = lazy(() =>\n import('./pages/casting/MyCastingPage').then((m) => ({ default: m.MyCastingPage }))\n);\nconst SavedSearchesPage = lazy(() =>\n import('./pages/casting/SavedSearchesPage').then((m) => ({ default: m.SavedSearchesPage }))\n);\nconst DisputesPage = lazy(() =>\n import('./pages/trust/DisputesPage').then((m) => ({ default: m.DisputesPage }))\n);\nconst VerificationsPage = lazy(() =>\n import('./pages/trust/VerificationsPage').then((m) => ({ default: m.VerificationsPage }))\n);\nconst GuardianInvitePage = lazy(() =>\n import('./pages/casting/GuardianInvitePage').then((m) => ({ default: m.GuardianInvitePage }))\n);\n\n// Engagement\nconst ReviewsPage = lazy(() =>\n import('./pages/engagement/ReviewsPage').then((m) => ({ default: m.ReviewsPage }))\n);\n\n// Distribution\nconst RightsWindowsPage = lazy(() =>\n import('./pages/distribution/RightsWindowsPage').then((m) => ({ default: m.RightsWindowsPage }))\n);\n\n// Library\nconst ListsPage = lazy(() =>\n import('./pages/library/ListsPage').then((m) => ({ default: m.ListsPage }))\n);\nconst EntitlementsPage = lazy(() =>\n import('./pages/library/EntitlementsPage').then((m) => ({ default: m.EntitlementsPage }))\n);\n\n// Consumer (audience-facing) — discovery, title view, playback, hooks feed\nconst DiscoveryPage = lazy(() =>\n import('./pages/consumer/DiscoveryPage').then((m) => ({ default: m.DiscoveryPage }))\n);\nconst TitleViewPage = lazy(() =>\n import('./pages/consumer/TitleViewPage').then((m) => ({ default: m.TitleViewPage }))\n);\nconst PlayerPage = lazy(() =>\n import('./pages/consumer/PlayerPage').then((m) => ({ default: m.PlayerPage }))\n);\nconst HooksPage = lazy(() =>\n import('./pages/consumer/HooksPage').then((m) => ({ default: m.HooksPage }))\n);\n\n// Social — viewing profiles & synchronized watch parties\nconst ProfilesPage = lazy(() =>\n import('./pages/social/ProfilesPage').then((m) => ({ default: m.ProfilesPage }))\n);\nconst WatchPartyListPage = lazy(() =>\n import('./pages/social/WatchPartyListPage').then((m) => ({ default: m.WatchPartyListPage }))\n);\nconst WatchPartyRoomPage = lazy(() =>\n import('./pages/social/WatchPartyRoomPage').then((m) => ({ default: m.WatchPartyRoomPage }))\n);\n\n// Commerce — checkout (TVOD purchase / rental) & creator payouts\nconst CheckoutPage = lazy(() =>\n import('./pages/commerce/CheckoutPage').then((m) => ({ default: m.CheckoutPage }))\n);\nconst PayoutsPage = lazy(() =>\n import('./pages/analytics/PayoutsPage').then((m) => ({ default: m.PayoutsPage }))\n);\n\n// Analytics — creator / operator performance dashboards\nconst AnalyticsPage = lazy(() =>\n import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\n\n// Trust & safety — moderation queue\nconst ModerationPage = lazy(() =>\n import('./pages/trust/ModerationPage').then((m) => ({ default: m.ModerationPage }))\n);\n\n// Onboarding — language / content preferences\nconst OnboardingPage = lazy(() =>\n import('./pages/onboarding/OnboardingPage').then((m) => ({ default: m.OnboardingPage }))\n);\n\n// Developer portal — API keys\nconst DevPortalPage = lazy(() =>\n import('./pages/developer/DevPortalPage').then((m) => ({ default: m.DevPortalPage }))\n);\n\n// Live — FAST linear channels & schedules\nconst LivePage = lazy(() => import('./pages/live/LivePage').then((m) => ({ default: m.LivePage })));\n\n// Localization — per-title subtitle / caption / dub track management\nconst LocalizationPage = lazy(() =>\n import('./pages/localization/LocalizationPage').then((m) => ({ default: m.LocalizationPage }))\n);\n\n// AI — concierge / recommendations assistant\nconst ConciergePage = lazy(() =>\n import('./pages/ai/ConciergePage').then((m) => ({ default: m.ConciergePage }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-b-2 border-action-primary-bg\" />\n </div>\n);\n\nconst FeatureDisabledFallback: FC = () => (\n <div className=\"flex min-h-[400px] flex-col items-center justify-center gap-2 px-6 text-center\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Coming soon</h2>\n <p className=\"max-w-sm text-sm text-text-secondary\">\n This feature is currently disabled for this workspace.\n </p>\n </div>\n);\n\n/**\n * Wrap a route element in a `FeatureGate` with the shared \"coming soon\"\n * fallback. `defaultValue={true}` keeps already-shipped screens visible\n * before their flag is seeded — seeding must never hide a working feature.\n */\nfunction gated(flag: string, element: ReactNode): ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={true} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nexport const HookMoviesRoutes: FC = () => {\n const { basePath, isStandalone } = useHookMovies();\n const location = useLocation();\n\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview / dashboard */}\n <Route index element={<HomePage />} />\n\n {/* Catalog */}\n <Route path=\"catalog/titles\" element={<TitlesPage />} />\n <Route path=\"catalog/titles/new\" element={<TitleCreatePage />} />\n <Route path=\"catalog/titles/:id\" element={<TitleDetailPage />} />\n <Route path=\"catalog/studios\" element={<StudiosPage />} />\n <Route path=\"catalog/people\" element={<PeoplePage />} />\n\n {/* Productions */}\n <Route path=\"productions\" element={<ProductionsPage />} />\n <Route path=\"productions/new\" element={<ProductionCreatePage />} />\n <Route path=\"productions/:id\" element={<ProductionDetailPage />} />\n <Route path=\"productions/:id/logistics\" element={<ProductionLogisticsPage />} />\n\n {/* Auditions */}\n <Route path=\"auditions\" element={<AuditionsPage />} />\n <Route path=\"auditions/new\" element={<AuditionCreatePage />} />\n <Route path=\"auditions/:id\" element={<AuditionDetailPage />} />\n <Route path=\"casting/mine\" element={<MyCastingPage />} />\n <Route path=\"casting/saved-searches\" element={<SavedSearchesPage />} />\n <Route path=\"casting/guardian-invite\" element={<GuardianInvitePage />} />\n\n {/* Engagement */}\n <Route path=\"engagement/reviews\" element={<ReviewsPage />} />\n\n {/* Distribution */}\n <Route path=\"distribution/rights\" element={<RightsWindowsPage />} />\n\n {/* Library */}\n <Route path=\"library/lists\" element={<ListsPage />} />\n <Route path=\"library/entitlements\" element={<EntitlementsPage />} />\n\n {/* Consumer (audience-facing) */}\n <Route path=\"browse\" element={<DiscoveryPage />} />\n <Route path=\"title/:id\" element={<TitleViewPage />} />\n <Route path=\"watch/:titleId\" element={<PlayerPage />} />\n <Route path=\"watch/:titleId/episode/:episodeId\" element={<PlayerPage />} />\n <Route path=\"hooks\" element={gated('hookmovies.hooks.enabled', <HooksPage />)} />\n\n {/* Social — profiles & watch parties */}\n <Route path=\"profiles\" element={<ProfilesPage />} />\n <Route path=\"watch-party\" element={<WatchPartyListPage />} />\n <Route path=\"watch-party/:id\" element={<WatchPartyRoomPage />} />\n\n {/* Commerce — checkout & payouts */}\n <Route path=\"checkout/:titleId\" element={<CheckoutPage />} />\n <Route path=\"payouts\" element={<PayoutsPage />} />\n\n {/* Analytics */}\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n\n {/* Trust & safety */}\n <Route path=\"trust/moderation\" element={<ModerationPage />} />\n <Route path=\"trust/disputes\" element={<DisputesPage />} />\n <Route path=\"trust/verifications\" element={<VerificationsPage />} />\n\n {/* Onboarding */}\n <Route path=\"onboarding/languages\" element={<OnboardingPage />} />\n\n {/* Developer portal */}\n <Route path=\"developer\" element={<DevPortalPage />} />\n\n {/* Live — FAST channels */}\n <Route path=\"live\" element={gated('hookmovies.fast.enabled', <LivePage />)} />\n\n {/* Localization */}\n <Route path=\"title/:id/localization\" element={<LocalizationPage />} />\n\n {/* AI concierge */}\n <Route path=\"concierge\" element={gated('hookmovies.ai.concierge', <ConciergePage />)} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { HokSearchInterpretation } from '../hooks/useHookMoviesApi';
|
|
3
|
+
|
|
4
|
+
/** Display name for an ISO 639-1 code ("ta" → "Tamil"); falls back to the code. */
|
|
5
|
+
export declare function languageName(code: string): string;
|
|
6
|
+
/** Human label for a runtime range in minutes. */
|
|
7
|
+
export declare function runtimeLabel(min: number | null, max: number | null): string | null;
|
|
8
|
+
/** Human label for a release-year range. */
|
|
9
|
+
export declare function eraLabel(from: number | null, to: number | null): string | null;
|
|
10
|
+
interface Chip {
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
icon: FC<{
|
|
14
|
+
className?: string;
|
|
15
|
+
}>;
|
|
16
|
+
tone: 'constraint' | 'concept' | 'exclude';
|
|
17
|
+
}
|
|
18
|
+
/** Flatten an interpretation into the chips shown to the viewer. */
|
|
19
|
+
export declare function interpretationChips(interpretation: HokSearchInterpretation): Chip[];
|
|
20
|
+
interface SearchInterpretationProps {
|
|
21
|
+
interpretation: HokSearchInterpretation;
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const SearchInterpretation: FC<SearchInterpretationProps>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=SearchInterpretation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInterpretation.d.ts","sourceRoot":"","sources":["../../../src/hookmovies/components/SearchInterpretation.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAYhC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIzE,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAKlF;AAED,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAK9E;AAED,UAAU,IAAI;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CAC5C;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,uBAAuB,GAAG,IAAI,EAAE,CAqDnF;AAQD,UAAU,yBAAyB;IACjC,cAAc,EAAE,uBAAuB,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAgC9D,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { formatEnumLabel as t } from "../utils/formatters.js";
|
|
3
|
+
import { Ban as n, CalendarRange as r, Clock as i, Film as a, Languages as o, ShieldCheck as s, Sparkles as c, User as l } from "lucide-react";
|
|
4
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
5
|
+
//#region src/hookmovies/components/SearchInterpretation.tsx
|
|
6
|
+
function f(e) {
|
|
7
|
+
try {
|
|
8
|
+
return new Intl.DisplayNames(["en"], { type: "language" }).of(e) ?? e;
|
|
9
|
+
} catch {
|
|
10
|
+
return e;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function p(e, t) {
|
|
14
|
+
return e !== null && t !== null ? `${e}–${t} min` : t === null ? e === null ? null : `Over ${e} min` : `Under ${t} min`;
|
|
15
|
+
}
|
|
16
|
+
function m(e, t) {
|
|
17
|
+
return e !== null && t !== null ? e === t ? String(e) : `${e}–${t}` : e === null ? t === null ? null : `${t} or earlier` : `${e} or later`;
|
|
18
|
+
}
|
|
19
|
+
function h(e) {
|
|
20
|
+
let u = [];
|
|
21
|
+
for (let t of e.languages) u.push({
|
|
22
|
+
key: `lang-${t}`,
|
|
23
|
+
label: f(t),
|
|
24
|
+
icon: o,
|
|
25
|
+
tone: "constraint"
|
|
26
|
+
});
|
|
27
|
+
for (let t of e.excludeLanguages) u.push({
|
|
28
|
+
key: `xlang-${t}`,
|
|
29
|
+
label: `Not ${f(t)}`,
|
|
30
|
+
icon: n,
|
|
31
|
+
tone: "exclude"
|
|
32
|
+
});
|
|
33
|
+
for (let t of e.subtitleLanguages) u.push({
|
|
34
|
+
key: `sub-${t}`,
|
|
35
|
+
label: `${f(t)} subtitles`,
|
|
36
|
+
icon: o,
|
|
37
|
+
tone: "constraint"
|
|
38
|
+
});
|
|
39
|
+
for (let n of e.types) u.push({
|
|
40
|
+
key: `type-${n}`,
|
|
41
|
+
label: t(n),
|
|
42
|
+
icon: a,
|
|
43
|
+
tone: "constraint"
|
|
44
|
+
});
|
|
45
|
+
let d = p(e.minRuntimeMinutes, e.maxRuntimeMinutes);
|
|
46
|
+
d && u.push({
|
|
47
|
+
key: "runtime",
|
|
48
|
+
label: d,
|
|
49
|
+
icon: i,
|
|
50
|
+
tone: "constraint"
|
|
51
|
+
});
|
|
52
|
+
let h = m(e.releaseYearFrom, e.releaseYearTo);
|
|
53
|
+
h && u.push({
|
|
54
|
+
key: "era",
|
|
55
|
+
label: h,
|
|
56
|
+
icon: r,
|
|
57
|
+
tone: "constraint"
|
|
58
|
+
}), e.familyFriendly && u.push({
|
|
59
|
+
key: "family",
|
|
60
|
+
label: "Family friendly",
|
|
61
|
+
icon: s,
|
|
62
|
+
tone: "constraint"
|
|
63
|
+
});
|
|
64
|
+
for (let n of e.concepts) u.push({
|
|
65
|
+
key: `concept-${n}`,
|
|
66
|
+
label: t(n.replace(/-/g, "_")),
|
|
67
|
+
icon: c,
|
|
68
|
+
tone: "concept"
|
|
69
|
+
});
|
|
70
|
+
for (let t of e.matchedPeople) u.push({
|
|
71
|
+
key: `person-${t.id}`,
|
|
72
|
+
label: t.name,
|
|
73
|
+
icon: l,
|
|
74
|
+
tone: "concept"
|
|
75
|
+
});
|
|
76
|
+
return u;
|
|
77
|
+
}
|
|
78
|
+
var g = {
|
|
79
|
+
constraint: "border-border-subtle bg-bg-surface text-text-primary",
|
|
80
|
+
concept: "border-border-subtle bg-bg-sunken text-text-secondary",
|
|
81
|
+
exclude: "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"
|
|
82
|
+
}, _ = ({ interpretation: t, className: n }) => {
|
|
83
|
+
let r = h(t);
|
|
84
|
+
return r.length === 0 && !t.transliteratedQuery ? null : /* @__PURE__ */ d("div", {
|
|
85
|
+
className: e("flex flex-wrap items-center gap-1.5", n),
|
|
86
|
+
"aria-label": "How your search was understood",
|
|
87
|
+
"data-testid": "search-interpretation",
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ u("span", {
|
|
90
|
+
className: "text-xs text-text-muted",
|
|
91
|
+
children: "Understood as"
|
|
92
|
+
}),
|
|
93
|
+
t.transliteratedQuery && /* @__PURE__ */ d("span", {
|
|
94
|
+
className: "inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-sunken px-2 py-0.5 text-xs italic text-text-secondary",
|
|
95
|
+
children: [
|
|
96
|
+
"“",
|
|
97
|
+
t.transliteratedQuery,
|
|
98
|
+
"”"
|
|
99
|
+
]
|
|
100
|
+
}),
|
|
101
|
+
r.map(({ key: t, label: n, icon: r, tone: i }) => /* @__PURE__ */ d("span", {
|
|
102
|
+
className: e("inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium", g[i]),
|
|
103
|
+
children: [/* @__PURE__ */ u(r, { className: "h-3 w-3" }), n]
|
|
104
|
+
}, t))
|
|
105
|
+
]
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
//#endregion
|
|
109
|
+
export { _ as SearchInterpretation };
|
|
110
|
+
|
|
111
|
+
//# sourceMappingURL=SearchInterpretation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchInterpretation.js","names":[],"sources":["../../../src/hookmovies/components/SearchInterpretation.tsx"],"sourcesContent":["/**\n * Search interpretation chips (BOFF-4187)\n * @module hookmovies/components\n *\n * Shows how `hokSemanticSearch` read a natural-language query — languages,\n * excluded languages, runtime, era, type, family-safety, recognised moods and\n * genres, and the people it resolved — so a viewer can see (and rephrase) the\n * interpretation instead of guessing why a title matched.\n *\n * Fully tokenized (fe-libs semantic tokens only), wraps on narrow screens.\n */\n\nimport type { FC } from 'react';\nimport {\n Languages,\n Clock,\n CalendarRange,\n Sparkles,\n User,\n Ban,\n ShieldCheck,\n Film,\n} from 'lucide-react';\n\nimport type { HokSearchInterpretation } from '../hooks/useHookMoviesApi';\nimport { cn } from '../utils/cn';\nimport { formatEnumLabel } from '../utils/formatters';\n\n/** Display name for an ISO 639-1 code (\"ta\" → \"Tamil\"); falls back to the code. */\nexport function languageName(code: string): string {\n try {\n const names = new Intl.DisplayNames(['en'], { type: 'language' });\n return names.of(code) ?? code;\n } catch {\n return code;\n }\n}\n\n/** Human label for a runtime range in minutes. */\nexport function runtimeLabel(min: number | null, max: number | null): string | null {\n if (min !== null && max !== null) return `${min}–${max} min`;\n if (max !== null) return `Under ${max} min`;\n if (min !== null) return `Over ${min} min`;\n return null;\n}\n\n/** Human label for a release-year range. */\nexport function eraLabel(from: number | null, to: number | null): string | null {\n if (from !== null && to !== null) return from === to ? String(from) : `${from}–${to}`;\n if (from !== null) return `${from} or later`;\n if (to !== null) return `${to} or earlier`;\n return null;\n}\n\ninterface Chip {\n key: string;\n label: string;\n icon: FC<{ className?: string }>;\n tone: 'constraint' | 'concept' | 'exclude';\n}\n\n/** Flatten an interpretation into the chips shown to the viewer. */\nexport function interpretationChips(interpretation: HokSearchInterpretation): Chip[] {\n const chips: Chip[] = [];\n for (const code of interpretation.languages) {\n chips.push({\n key: `lang-${code}`,\n label: languageName(code),\n icon: Languages,\n tone: 'constraint',\n });\n }\n for (const code of interpretation.excludeLanguages) {\n chips.push({\n key: `xlang-${code}`,\n label: `Not ${languageName(code)}`,\n icon: Ban,\n tone: 'exclude',\n });\n }\n for (const code of interpretation.subtitleLanguages) {\n chips.push({\n key: `sub-${code}`,\n label: `${languageName(code)} subtitles`,\n icon: Languages,\n tone: 'constraint',\n });\n }\n for (const type of interpretation.types) {\n chips.push({\n key: `type-${type}`,\n label: formatEnumLabel(type),\n icon: Film,\n tone: 'constraint',\n });\n }\n const runtime = runtimeLabel(interpretation.minRuntimeMinutes, interpretation.maxRuntimeMinutes);\n if (runtime) chips.push({ key: 'runtime', label: runtime, icon: Clock, tone: 'constraint' });\n const era = eraLabel(interpretation.releaseYearFrom, interpretation.releaseYearTo);\n if (era) chips.push({ key: 'era', label: era, icon: CalendarRange, tone: 'constraint' });\n if (interpretation.familyFriendly) {\n chips.push({ key: 'family', label: 'Family friendly', icon: ShieldCheck, tone: 'constraint' });\n }\n for (const concept of interpretation.concepts) {\n chips.push({\n key: `concept-${concept}`,\n label: formatEnumLabel(concept.replace(/-/g, '_')),\n icon: Sparkles,\n tone: 'concept',\n });\n }\n for (const person of interpretation.matchedPeople) {\n chips.push({ key: `person-${person.id}`, label: person.name, icon: User, tone: 'concept' });\n }\n return chips;\n}\n\nconst toneStyles: Record<Chip['tone'], string> = {\n constraint: 'border-border-subtle bg-bg-surface text-text-primary',\n concept: 'border-border-subtle bg-bg-sunken text-text-secondary',\n exclude: 'border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text',\n};\n\ninterface SearchInterpretationProps {\n interpretation: HokSearchInterpretation;\n className?: string;\n}\n\nexport const SearchInterpretation: FC<SearchInterpretationProps> = ({\n interpretation,\n className,\n}) => {\n const chips = interpretationChips(interpretation);\n if (chips.length === 0 && !interpretation.transliteratedQuery) return null;\n return (\n <div\n className={cn('flex flex-wrap items-center gap-1.5', className)}\n aria-label=\"How your search was understood\"\n data-testid=\"search-interpretation\"\n >\n <span className=\"text-xs text-text-muted\">Understood as</span>\n {interpretation.transliteratedQuery && (\n <span className=\"inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-sunken px-2 py-0.5 text-xs italic text-text-secondary\">\n “{interpretation.transliteratedQuery}”\n </span>\n )}\n {chips.map(({ key, label, icon: Icon, tone }) => (\n <span\n key={key}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium',\n toneStyles[tone]\n )}\n >\n <Icon className=\"h-3 w-3\" />\n {label}\n </span>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;AA6BA,SAAgB,EAAa,GAAsB;AACjD,KAAI;AAEF,SADc,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,YAAY,CAAC,CACpD,GAAG,EAAK,IAAI;SACnB;AACN,SAAO;;;AAKX,SAAgB,EAAa,GAAoB,GAAmC;AAIlF,QAHI,MAAQ,QAAQ,MAAQ,OAAa,GAAG,EAAI,GAAG,EAAI,QACnD,MAAQ,OACR,MAAQ,OACL,OADkB,QAAQ,EAAI,QADZ,SAAS,EAAI;;AAMxC,SAAgB,EAAS,GAAqB,GAAkC;AAI9E,QAHI,MAAS,QAAQ,MAAO,OAAa,MAAS,IAAK,OAAO,EAAK,GAAG,GAAG,EAAK,GAAG,MAC7E,MAAS,OACT,MAAO,OACJ,OADiB,GAAG,EAAG,eADJ,GAAG,EAAK;;AAapC,SAAgB,EAAoB,GAAiD;CACnF,IAAM,IAAgB,EAAE;AACxB,MAAK,IAAM,KAAQ,EAAe,UAChC,GAAM,KAAK;EACT,KAAK,QAAQ;EACb,OAAO,EAAa,EAAK;EACzB,MAAM;EACN,MAAM;EACP,CAAC;AAEJ,MAAK,IAAM,KAAQ,EAAe,iBAChC,GAAM,KAAK;EACT,KAAK,SAAS;EACd,OAAO,OAAO,EAAa,EAAK;EAChC,MAAM;EACN,MAAM;EACP,CAAC;AAEJ,MAAK,IAAM,KAAQ,EAAe,kBAChC,GAAM,KAAK;EACT,KAAK,OAAO;EACZ,OAAO,GAAG,EAAa,EAAK,CAAC;EAC7B,MAAM;EACN,MAAM;EACP,CAAC;AAEJ,MAAK,IAAM,KAAQ,EAAe,MAChC,GAAM,KAAK;EACT,KAAK,QAAQ;EACb,OAAO,EAAgB,EAAK;EAC5B,MAAM;EACN,MAAM;EACP,CAAC;CAEJ,IAAM,IAAU,EAAa,EAAe,mBAAmB,EAAe,kBAAkB;AAChG,CAAI,KAAS,EAAM,KAAK;EAAE,KAAK;EAAW,OAAO;EAAS,MAAM;EAAO,MAAM;EAAc,CAAC;CAC5F,IAAM,IAAM,EAAS,EAAe,iBAAiB,EAAe,cAAc;AAElF,CADI,KAAK,EAAM,KAAK;EAAE,KAAK;EAAO,OAAO;EAAK,MAAM;EAAe,MAAM;EAAc,CAAC,EACpF,EAAe,kBACjB,EAAM,KAAK;EAAE,KAAK;EAAU,OAAO;EAAmB,MAAM;EAAa,MAAM;EAAc,CAAC;AAEhG,MAAK,IAAM,KAAW,EAAe,SACnC,GAAM,KAAK;EACT,KAAK,WAAW;EAChB,OAAO,EAAgB,EAAQ,QAAQ,MAAM,IAAI,CAAC;EAClD,MAAM;EACN,MAAM;EACP,CAAC;AAEJ,MAAK,IAAM,KAAU,EAAe,cAClC,GAAM,KAAK;EAAE,KAAK,UAAU,EAAO;EAAM,OAAO,EAAO;EAAM,MAAM;EAAM,MAAM;EAAW,CAAC;AAE7F,QAAO;;AAGT,IAAM,IAA2C;CAC/C,YAAY;CACZ,SAAS;CACT,SAAS;CACV,EAOY,KAAuD,EAClE,mBACA,mBACI;CACJ,IAAM,IAAQ,EAAoB,EAAe;AAEjD,QADI,EAAM,WAAW,KAAK,CAAC,EAAe,sBAA4B,OAEpE,kBAAC,OAAD;EACE,WAAW,EAAG,uCAAuC,EAAU;EAC/D,cAAW;EACX,eAAY;YAHd;GAKE,kBAAC,QAAD;IAAM,WAAU;cAA0B;IAAoB,CAAA;GAC7D,EAAe,uBACd,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAAsJ;KAClJ,EAAe;KAAoB;KAChC;;GAER,EAAM,KAAK,EAAE,QAAK,UAAO,MAAM,GAAM,cACpC,kBAAC,QAAD;IAEE,WAAW,EACT,sFACA,EAAW,GACZ;cALH,CAOE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EACI;MARA,EAQA,CACP;GACE"}
|
|
@@ -276,6 +276,63 @@ export interface HokTitleFilters {
|
|
|
276
276
|
studioId?: string;
|
|
277
277
|
}
|
|
278
278
|
export declare const useTitles: (filters?: HokTitleFilters, pagination?: HokPaginationInput, search?: string) => import('@tanstack/react-query').UseQueryResult<NoInfer<HokConnection<HokTitle>>, Error>;
|
|
279
|
+
/** Explicit constraints merged with whatever the query text implies. */
|
|
280
|
+
export interface HokSemanticSearchFilters {
|
|
281
|
+
types?: HokTitleType[];
|
|
282
|
+
statuses?: HokTitleStatus[];
|
|
283
|
+
languages?: string[];
|
|
284
|
+
excludeLanguages?: string[];
|
|
285
|
+
genres?: string[];
|
|
286
|
+
minRuntimeMinutes?: number;
|
|
287
|
+
maxRuntimeMinutes?: number;
|
|
288
|
+
releaseYearFrom?: number;
|
|
289
|
+
releaseYearTo?: number;
|
|
290
|
+
studioId?: string;
|
|
291
|
+
personId?: string;
|
|
292
|
+
}
|
|
293
|
+
/** How the search read the query — every constraint and concept it applied. */
|
|
294
|
+
export interface HokSearchInterpretation {
|
|
295
|
+
query: string;
|
|
296
|
+
transliteratedQuery: string | null;
|
|
297
|
+
keywords: string[];
|
|
298
|
+
concepts: string[];
|
|
299
|
+
languages: string[];
|
|
300
|
+
excludeLanguages: string[];
|
|
301
|
+
subtitleLanguages: string[];
|
|
302
|
+
originCountries: string[];
|
|
303
|
+
types: HokTitleType[];
|
|
304
|
+
minRuntimeMinutes: number | null;
|
|
305
|
+
maxRuntimeMinutes: number | null;
|
|
306
|
+
releaseYearFrom: number | null;
|
|
307
|
+
releaseYearTo: number | null;
|
|
308
|
+
familyFriendly: boolean;
|
|
309
|
+
matchedPeople: Array<Pick<HokPerson, 'id' | 'name'>>;
|
|
310
|
+
}
|
|
311
|
+
export interface HokSemanticSearchHit {
|
|
312
|
+
title: HokTitle;
|
|
313
|
+
score: number;
|
|
314
|
+
matchedConcepts: string[];
|
|
315
|
+
matchedKeywords: string[];
|
|
316
|
+
matchedLanguage: string | null;
|
|
317
|
+
matchedPeople: Array<Pick<HokPerson, 'id' | 'name'>>;
|
|
318
|
+
}
|
|
319
|
+
export interface HokSemanticSearchResult {
|
|
320
|
+
hits: HokSemanticSearchHit[];
|
|
321
|
+
interpretation: HokSearchInterpretation;
|
|
322
|
+
candidateCount: number;
|
|
323
|
+
totalMatches: number;
|
|
324
|
+
truncated: boolean;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Natural-language, cross-script catalog search (`hokSemanticSearch`).
|
|
328
|
+
*
|
|
329
|
+
* Understands moods/genres, languages ("Tamil", "not in English"), runtime
|
|
330
|
+
* ("under 2 hours"), era and family-safety, matches titles across scripts and
|
|
331
|
+
* localisations, and boosts titles crediting people the query names. Disabled
|
|
332
|
+
* while `query` is blank. Callers fall back to keyword `useTitles` search when
|
|
333
|
+
* this errors (for example when the `hookmovies.semantic_search` flag is off).
|
|
334
|
+
*/
|
|
335
|
+
export declare const useSemanticSearch: (query: string | undefined, filters?: HokSemanticSearchFilters, limit?: number) => import('@tanstack/react-query').UseQueryResult<NoInfer<HokSemanticSearchResult>, Error>;
|
|
279
336
|
export declare const useTitle: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<NoInfer<HokTitleDetail | null>, Error>;
|
|
280
337
|
/**
|
|
281
338
|
* Resolve an arbitrary set of title ids in ONE round trip.
|