@flamingo-stack/openframe-frontend-core 0.0.274 → 0.0.275
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/{chunk-XDGDCO3I.cjs → chunk-5LOLBUZG.cjs} +45 -44
- package/dist/chunk-5LOLBUZG.cjs.map +1 -0
- package/dist/{chunk-4YKGXZ7W.js → chunk-7AH75KFQ.js} +1 -1
- package/dist/chunk-7AH75KFQ.js.map +1 -0
- package/dist/{chunk-CYMMGPPV.js → chunk-CTBL56EC.js} +41 -5
- package/dist/chunk-CTBL56EC.js.map +1 -0
- package/dist/{chunk-2KHFSSFZ.cjs → chunk-DBJZF2OV.cjs} +15 -15
- package/dist/{chunk-2KHFSSFZ.cjs.map → chunk-DBJZF2OV.cjs.map} +1 -1
- package/dist/{chunk-4DYXV3E7.cjs → chunk-DEAWHNYW.cjs} +1177 -1223
- package/dist/chunk-DEAWHNYW.cjs.map +1 -0
- package/dist/{chunk-WU6PMH5L.cjs → chunk-E6RCVOQG.cjs} +41 -43
- package/dist/chunk-E6RCVOQG.cjs.map +1 -0
- package/dist/{chunk-FLIWL6V4.js → chunk-EINXNG5D.js} +4 -4
- package/dist/{chunk-OPSZNW3I.js → chunk-EKWPIEHH.js} +3031 -3077
- package/dist/chunk-EKWPIEHH.js.map +1 -0
- package/dist/{chunk-N5MCKGAB.js → chunk-FDHKJJPK.js} +34 -33
- package/dist/{chunk-N5MCKGAB.js.map → chunk-FDHKJJPK.js.map} +1 -1
- package/dist/{chunk-BSOHVQ7X.js → chunk-GHWOQUB4.js} +366 -391
- package/dist/chunk-GHWOQUB4.js.map +1 -0
- package/dist/{chunk-T7AJBKZP.cjs → chunk-GVSTRN36.cjs} +5 -2
- package/dist/chunk-GVSTRN36.cjs.map +1 -0
- package/dist/{chunk-L4LAAA5Q.js → chunk-IMNGGLKL.js} +5 -2
- package/dist/chunk-IMNGGLKL.js.map +1 -0
- package/dist/{chunk-VASNLWPZ.js → chunk-NY7OG2OJ.js} +5 -7
- package/dist/{chunk-VASNLWPZ.js.map → chunk-NY7OG2OJ.js.map} +1 -1
- package/dist/{chunk-5QJQAFTP.cjs → chunk-OKDCUJOZ.cjs} +48 -12
- package/dist/chunk-OKDCUJOZ.cjs.map +1 -0
- package/dist/{chunk-MEAR2WHS.cjs → chunk-PC7YOZ4I.cjs} +1 -1
- package/dist/chunk-PC7YOZ4I.cjs.map +1 -0
- package/dist/{chunk-QLWBBCI5.cjs → chunk-Q2ITV3NY.cjs} +5 -4
- package/dist/chunk-Q2ITV3NY.cjs.map +1 -0
- package/dist/chunk-RGALV4UX.js +433 -0
- package/dist/chunk-RGALV4UX.js.map +1 -0
- package/dist/{chunk-W5KBDFCR.cjs → chunk-SA4ZTD3G.cjs} +30 -30
- package/dist/{chunk-W5KBDFCR.cjs.map → chunk-SA4ZTD3G.cjs.map} +1 -1
- package/dist/{chunk-GL5X6VVC.js → chunk-T4XXYAYY.js} +4 -4
- package/dist/{chunk-ZMFT5XOB.js → chunk-UXJCZOLA.js} +4 -3
- package/dist/chunk-UXJCZOLA.js.map +1 -0
- package/dist/{chunk-7NJUPRN6.cjs → chunk-XCPBD2PG.cjs} +183 -208
- package/dist/chunk-XCPBD2PG.cjs.map +1 -0
- package/dist/chunk-ZSUNQJRO.cjs +433 -0
- package/dist/chunk-ZSUNQJRO.cjs.map +1 -0
- package/dist/components/chat/chat-message-row.d.ts +1 -1
- package/dist/components/chat/chat-message-row.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +10 -11
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +12 -13
- package/dist/components/contact/index.cjs +7 -9
- package/dist/components/contact/index.cjs.map +1 -1
- package/dist/components/contact/index.js +6 -8
- package/dist/components/faq/faq-document-page.d.ts +21 -0
- package/dist/components/faq/faq-document-page.d.ts.map +1 -0
- package/dist/components/faq/index.cjs +22 -5
- package/dist/components/faq/index.cjs.map +1 -1
- package/dist/components/faq/index.d.ts +1 -0
- package/dist/components/faq/index.d.ts.map +1 -1
- package/dist/components/faq/index.js +21 -4
- package/dist/components/features/index.cjs +6 -8
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.js +5 -7
- package/dist/components/index.cjs +304 -309
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +249 -254
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/article-detail-layout.d.ts +21 -9
- package/dist/components/layout/article-detail-layout.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +6 -8
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.js +5 -7
- package/dist/components/onboarding-guides/index.cjs +33 -46
- package/dist/components/onboarding-guides/index.cjs.map +1 -1
- package/dist/components/onboarding-guides/index.js +11 -24
- package/dist/components/onboarding-guides/index.js.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +8 -10
- package/dist/components/related-content/index.cjs.map +1 -1
- package/dist/components/related-content/index.js +7 -9
- package/dist/components/shared/delivery/delivery-lists.d.ts.map +1 -1
- package/dist/components/shared/detail-page-skeleton.d.ts +6 -1
- package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
- package/dist/components/shared/legal-document/use-legal-docs.d.ts.map +1 -1
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/shared/roadmap/roadmap-grid.d.ts.map +1 -1
- package/dist/components/shared/roadmap/use-roadmap-voting.d.ts.map +1 -1
- package/dist/components/tickets/help-center-list.d.ts +9 -1
- package/dist/components/tickets/help-center-list.d.ts.map +1 -1
- package/dist/components/tickets/hooks/use-ticket-actions.d.ts.map +1 -1
- package/dist/components/tickets/hooks/use-ticket-engagements.d.ts.map +1 -1
- package/dist/components/tickets/hooks/use-tickets-list.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +81 -76
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +27 -22
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/ui/index.cjs +12 -15
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +24 -27
- package/dist/contexts/chat-runtime-context.d.ts +9 -0
- package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
- package/dist/contexts/index.cjs +2 -2
- package/dist/contexts/index.js +1 -1
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/use-contact-submission.d.ts.map +1 -1
- package/dist/hooks/use-self-fetch.d.ts.map +1 -1
- package/dist/index.cjs +11 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -36
- package/dist/utils/embed-authed-fetch.d.ts +7 -0
- package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
- package/dist/utils/embed-content-fetch.d.ts +2 -0
- package/dist/utils/embed-content-fetch.d.ts.map +1 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/chat-message-row.tsx +12 -2
- package/src/components/faq/faq-document-page.tsx +69 -0
- package/src/components/faq/index.ts +1 -0
- package/src/components/layout/article-detail-layout.tsx +24 -11
- package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +21 -16
- package/src/components/shared/delivery/delivery-lists.tsx +3 -2
- package/src/components/shared/detail-page-skeleton.tsx +18 -10
- package/src/components/shared/legal-document/use-legal-docs.ts +2 -1
- package/src/components/shared/product-release/release-detail-page.tsx +27 -17
- package/src/components/shared/roadmap/roadmap-grid.tsx +2 -1
- package/src/components/shared/roadmap/use-roadmap-voting.ts +3 -2
- package/src/components/tickets/help-center-list.tsx +12 -4
- package/src/components/tickets/hooks/use-ticket-actions.ts +7 -2
- package/src/components/tickets/hooks/use-ticket-engagements.ts +6 -1
- package/src/components/tickets/hooks/use-tickets-list.ts +7 -1
- package/src/components/tickets/ticket-detail-drawer.tsx +1 -0
- package/src/contexts/chat-runtime-context.tsx +9 -0
- package/src/hooks/use-contact-submission.ts +2 -1
- package/src/hooks/use-self-fetch.ts +2 -1
- package/src/styles/index.css +1 -0
- package/src/styles/ods-page-shell.css +29 -0
- package/src/utils/embed-authed-fetch.ts +10 -0
- package/src/utils/embed-content-fetch.ts +30 -0
- package/dist/chunk-4DYXV3E7.cjs.map +0 -1
- package/dist/chunk-4YKGXZ7W.js.map +0 -1
- package/dist/chunk-5QJQAFTP.cjs.map +0 -1
- package/dist/chunk-722TTRIJ.cjs +0 -29
- package/dist/chunk-722TTRIJ.cjs.map +0 -1
- package/dist/chunk-7NJUPRN6.cjs.map +0 -1
- package/dist/chunk-BSOHVQ7X.js.map +0 -1
- package/dist/chunk-CYMMGPPV.js.map +0 -1
- package/dist/chunk-DAAFVOTL.cjs +0 -172
- package/dist/chunk-DAAFVOTL.cjs.map +0 -1
- package/dist/chunk-L4LAAA5Q.js.map +0 -1
- package/dist/chunk-MEAR2WHS.cjs.map +0 -1
- package/dist/chunk-OO4ZGDRO.js +0 -29
- package/dist/chunk-OO4ZGDRO.js.map +0 -1
- package/dist/chunk-OPSZNW3I.js.map +0 -1
- package/dist/chunk-QLWBBCI5.cjs.map +0 -1
- package/dist/chunk-T2URJAX2.js +0 -169
- package/dist/chunk-T2URJAX2.js.map +0 -1
- package/dist/chunk-T7AJBKZP.cjs.map +0 -1
- package/dist/chunk-WU6PMH5L.cjs.map +0 -1
- package/dist/chunk-XDGDCO3I.cjs.map +0 -1
- package/dist/chunk-Y2B6WDU6.cjs +0 -169
- package/dist/chunk-Y2B6WDU6.cjs.map +0 -1
- package/dist/chunk-ZMFT5XOB.js.map +0 -1
- package/dist/chunk-ZXZJSTNV.js +0 -172
- package/dist/chunk-ZXZJSTNV.js.map +0 -1
- /package/dist/{chunk-FLIWL6V4.js.map → chunk-EINXNG5D.js.map} +0 -0
- /package/dist/{chunk-GL5X6VVC.js.map → chunk-T4XXYAYY.js.map} +0 -0
|
@@ -4,16 +4,13 @@ import {
|
|
|
4
4
|
useDebounce,
|
|
5
5
|
useNearViewport,
|
|
6
6
|
useOgPlaceholder
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RGALV4UX.js";
|
|
8
8
|
import {
|
|
9
9
|
useChatRuntime
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7AH75KFQ.js";
|
|
11
11
|
import {
|
|
12
12
|
next_image_default
|
|
13
13
|
} from "./chunk-LXC6P2EO.js";
|
|
14
|
-
import {
|
|
15
|
-
SECTION_HEADING_CLASS
|
|
16
|
-
} from "./chunk-OO4ZGDRO.js";
|
|
17
14
|
import {
|
|
18
15
|
Button,
|
|
19
16
|
DropdownMenu,
|
|
@@ -2328,8 +2325,29 @@ function YouTubeFacadeInner({
|
|
|
2328
2325
|
) });
|
|
2329
2326
|
}
|
|
2330
2327
|
|
|
2331
|
-
// src/components/
|
|
2328
|
+
// src/components/layout/page-heading.tsx
|
|
2332
2329
|
import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2330
|
+
var PAGE_HEADING_CLASS = "text-h1 text-ods-text-primary";
|
|
2331
|
+
var SECTION_HEADING_CLASS = "text-h2 text-ods-text-primary";
|
|
2332
|
+
var DESCRIPTION_CLASS = "mt-6 max-w-[640px] font-['DM_Sans'] text-[16px] md:text-[18px] leading-[24px] md:leading-[28px] text-ods-text-secondary";
|
|
2333
|
+
function PageHeading({
|
|
2334
|
+
children,
|
|
2335
|
+
as: Tag2 = "h1",
|
|
2336
|
+
description,
|
|
2337
|
+
className,
|
|
2338
|
+
descriptionClassName
|
|
2339
|
+
}) {
|
|
2340
|
+
const headingClass = className ? `${PAGE_HEADING_CLASS} ${className}` : PAGE_HEADING_CLASS;
|
|
2341
|
+
const descClass = descriptionClassName ? `${DESCRIPTION_CLASS} ${descriptionClassName}` : DESCRIPTION_CLASS;
|
|
2342
|
+
const hasDescription = description != null && description !== "" && typeof description !== "boolean";
|
|
2343
|
+
return /* @__PURE__ */ jsxs9(Fragment2, { children: [
|
|
2344
|
+
/* @__PURE__ */ jsx12(Tag2, { className: headingClass, children }),
|
|
2345
|
+
hasDescription && /* @__PURE__ */ jsx12("p", { className: descClass, children: description })
|
|
2346
|
+
] });
|
|
2347
|
+
}
|
|
2348
|
+
|
|
2349
|
+
// src/components/features/video-ratio-tabs.tsx
|
|
2350
|
+
import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
2333
2351
|
var TAB_TRIGGER_CLASS = "rounded-none border-b-2 border-transparent data-[state=active]:border-ods-accent data-[state=active]:bg-transparent data-[state=active]:shadow-none px-4 py-2 text-sm text-ods-text-secondary data-[state=active]:text-ods-text-primary";
|
|
2334
2352
|
var RATIO_GRID_CLASS = {
|
|
2335
2353
|
portrait: "grid grid-cols-2 md:grid-cols-3 gap-4",
|
|
@@ -2354,17 +2372,17 @@ function RatioTabs({
|
|
|
2354
2372
|
const activeTabs = RATIO_TAB_CONFIG.filter((t) => groups[t.key].count > 0);
|
|
2355
2373
|
if (activeTabs.length <= 1) {
|
|
2356
2374
|
const active = activeTabs[0];
|
|
2357
|
-
return active ? /* @__PURE__ */
|
|
2375
|
+
return active ? /* @__PURE__ */ jsx13(Fragment3, { children: groups[active.key].render() }) : null;
|
|
2358
2376
|
}
|
|
2359
2377
|
const firstTab = defaultTab && groups[defaultTab].count > 0 ? defaultTab : activeTabs[0].key;
|
|
2360
|
-
return /* @__PURE__ */
|
|
2361
|
-
/* @__PURE__ */
|
|
2378
|
+
return /* @__PURE__ */ jsxs10(Tabs, { defaultValue: firstTab, className: `w-full ${className}`, children: [
|
|
2379
|
+
/* @__PURE__ */ jsx13(TabsList, { className: "inline-flex justify-start rounded-none bg-transparent h-auto p-0 gap-0 mb-2", children: activeTabs.map((t) => /* @__PURE__ */ jsxs10(TabsTrigger, { value: t.key, className: TAB_TRIGGER_CLASS, children: [
|
|
2362
2380
|
t.label,
|
|
2363
2381
|
" (",
|
|
2364
2382
|
groups[t.key].count,
|
|
2365
2383
|
")"
|
|
2366
2384
|
] }, t.key)) }),
|
|
2367
|
-
activeTabs.map((t) => /* @__PURE__ */
|
|
2385
|
+
activeTabs.map((t) => /* @__PURE__ */ jsx13(
|
|
2368
2386
|
TabsContent,
|
|
2369
2387
|
{
|
|
2370
2388
|
value: t.key,
|
|
@@ -2407,7 +2425,7 @@ function groupByAspectRatio(items, getAspectRatio) {
|
|
|
2407
2425
|
|
|
2408
2426
|
// src/components/features/video-bites-display.tsx
|
|
2409
2427
|
import { useMemo as useMemo4 } from "react";
|
|
2410
|
-
import { jsx as
|
|
2428
|
+
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2411
2429
|
var RATIO_TO_CSS_ASPECT = {
|
|
2412
2430
|
portrait: "9 / 16",
|
|
2413
2431
|
square: "1 / 1",
|
|
@@ -2415,7 +2433,7 @@ var RATIO_TO_CSS_ASPECT = {
|
|
|
2415
2433
|
};
|
|
2416
2434
|
function LazyBite({ ratio, children }) {
|
|
2417
2435
|
const { ref, isNear } = useNearViewport("500px");
|
|
2418
|
-
return /* @__PURE__ */
|
|
2436
|
+
return /* @__PURE__ */ jsx14("div", { ref, style: { aspectRatio: RATIO_TO_CSS_ASPECT[ratio] }, children: isNear ? children : /* @__PURE__ */ jsx14("div", { className: "w-full h-full bg-ods-card rounded-md" }) });
|
|
2419
2437
|
}
|
|
2420
2438
|
function VideoBitesDisplay({
|
|
2421
2439
|
bites,
|
|
@@ -2438,27 +2456,27 @@ function VideoBitesDisplay({
|
|
|
2438
2456
|
}, [bites, filterPublished]);
|
|
2439
2457
|
const totalCount = grouped.portrait.length + grouped.square.length + grouped.landscape.length;
|
|
2440
2458
|
if (totalCount === 0) return null;
|
|
2441
|
-
return /* @__PURE__ */
|
|
2442
|
-
showTitle && /* @__PURE__ */
|
|
2443
|
-
grouped.hasMultiple ? /* @__PURE__ */
|
|
2459
|
+
return /* @__PURE__ */ jsxs11("div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
|
|
2460
|
+
showTitle && /* @__PURE__ */ jsx14("h2", { className: `${SECTION_HEADING_CLASS} break-words`, children: title }),
|
|
2461
|
+
grouped.hasMultiple ? /* @__PURE__ */ jsx14(
|
|
2444
2462
|
RatioTabs,
|
|
2445
2463
|
{
|
|
2446
2464
|
groups: {
|
|
2447
2465
|
portrait: {
|
|
2448
2466
|
count: grouped.portrait.length,
|
|
2449
|
-
render: () => /* @__PURE__ */
|
|
2467
|
+
render: () => /* @__PURE__ */ jsx14(BiteGrid, { bites: grouped.portrait, ratio: "portrait" })
|
|
2450
2468
|
},
|
|
2451
2469
|
square: {
|
|
2452
2470
|
count: grouped.square.length,
|
|
2453
|
-
render: () => /* @__PURE__ */
|
|
2471
|
+
render: () => /* @__PURE__ */ jsx14(BiteGrid, { bites: grouped.square, ratio: "square" })
|
|
2454
2472
|
},
|
|
2455
2473
|
landscape: {
|
|
2456
2474
|
count: grouped.landscape.length,
|
|
2457
|
-
render: () => /* @__PURE__ */
|
|
2475
|
+
render: () => /* @__PURE__ */ jsx14(BiteGrid, { bites: grouped.landscape, ratio: "landscape" })
|
|
2458
2476
|
}
|
|
2459
2477
|
}
|
|
2460
2478
|
}
|
|
2461
|
-
) : /* @__PURE__ */
|
|
2479
|
+
) : /* @__PURE__ */ jsx14(
|
|
2462
2480
|
BiteGrid,
|
|
2463
2481
|
{
|
|
2464
2482
|
bites: grouped.portrait.length > 0 ? grouped.portrait : grouped.square.length > 0 ? grouped.square : grouped.landscape,
|
|
@@ -2468,17 +2486,17 @@ function VideoBitesDisplay({
|
|
|
2468
2486
|
] });
|
|
2469
2487
|
}
|
|
2470
2488
|
function BiteGrid({ bites, ratio }) {
|
|
2471
|
-
return /* @__PURE__ */
|
|
2489
|
+
return /* @__PURE__ */ jsx14("div", { className: RATIO_DISPLAY_GRID_CLASS[ratio], children: bites.map((bite, index) => /* @__PURE__ */ jsx14(LazyBite, { ratio, children: /* @__PURE__ */ jsx14(VideoBiteCard, { url: bite.url, title: bite.title, thumbnailUrl: bite.thumbnail_url }) }, bite.url || index)) });
|
|
2472
2490
|
}
|
|
2473
2491
|
function VideoBiteCard({ url, title, thumbnailUrl }) {
|
|
2474
|
-
return /* @__PURE__ */
|
|
2475
|
-
/* @__PURE__ */
|
|
2476
|
-
title && /* @__PURE__ */
|
|
2492
|
+
return /* @__PURE__ */ jsxs11(Card, { className: "overflow-hidden border border-ods-border bg-ods-card hover:border-ods-accent transition-colors flex flex-col h-full", children: [
|
|
2493
|
+
/* @__PURE__ */ jsx14("div", { className: "relative flex-1 min-h-0", children: /* @__PURE__ */ jsx14(Video, { url, poster: thumbnailUrl || void 0, layout: "fill" }) }),
|
|
2494
|
+
title && /* @__PURE__ */ jsx14("div", { className: "p-4", children: /* @__PURE__ */ jsx14("p", { className: "text-h4 text-ods-text-primary line-clamp-2", title, children: title }) })
|
|
2477
2495
|
] });
|
|
2478
2496
|
}
|
|
2479
2497
|
|
|
2480
2498
|
// src/components/features/entity-video-section.tsx
|
|
2481
|
-
import { Fragment as
|
|
2499
|
+
import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2482
2500
|
function EntityVideoSection({
|
|
2483
2501
|
mainVideoUrl,
|
|
2484
2502
|
youtubeUrl,
|
|
@@ -2503,10 +2521,10 @@ function EntityVideoSection({
|
|
|
2503
2521
|
}
|
|
2504
2522
|
const fullVideoUrl = youtubeUrl || mainVideoUrl || null;
|
|
2505
2523
|
const fullVideoKind = youtubeUrl ? "youtube" : "auto";
|
|
2506
|
-
return /* @__PURE__ */
|
|
2507
|
-
hasVideo && (hasFullVideo && hasHighlight ? /* @__PURE__ */
|
|
2508
|
-
/* @__PURE__ */
|
|
2509
|
-
/* @__PURE__ */
|
|
2524
|
+
return /* @__PURE__ */ jsxs12(Fragment4, { children: [
|
|
2525
|
+
hasVideo && (hasFullVideo && hasHighlight ? /* @__PURE__ */ jsxs12(Tabs, { defaultValue: "full-video", className: "w-full", children: [
|
|
2526
|
+
/* @__PURE__ */ jsxs12(TabsList, { className: "inline-flex justify-start rounded-none bg-transparent h-auto p-0 gap-0", children: [
|
|
2527
|
+
/* @__PURE__ */ jsx15(
|
|
2510
2528
|
TabsTrigger,
|
|
2511
2529
|
{
|
|
2512
2530
|
value: "full-video",
|
|
@@ -2514,7 +2532,7 @@ function EntityVideoSection({
|
|
|
2514
2532
|
children: "Full Video"
|
|
2515
2533
|
}
|
|
2516
2534
|
),
|
|
2517
|
-
/* @__PURE__ */
|
|
2535
|
+
/* @__PURE__ */ jsx15(
|
|
2518
2536
|
TabsTrigger,
|
|
2519
2537
|
{
|
|
2520
2538
|
value: "highlights",
|
|
@@ -2523,7 +2541,7 @@ function EntityVideoSection({
|
|
|
2523
2541
|
}
|
|
2524
2542
|
)
|
|
2525
2543
|
] }),
|
|
2526
|
-
/* @__PURE__ */
|
|
2544
|
+
/* @__PURE__ */ jsx15(TabsContent, { value: "full-video", className: "mt-4", children: /* @__PURE__ */ jsx15(
|
|
2527
2545
|
Video,
|
|
2528
2546
|
{
|
|
2529
2547
|
kind: fullVideoKind,
|
|
@@ -2536,7 +2554,7 @@ function EntityVideoSection({
|
|
|
2536
2554
|
priority
|
|
2537
2555
|
}
|
|
2538
2556
|
) }),
|
|
2539
|
-
/* @__PURE__ */
|
|
2557
|
+
/* @__PURE__ */ jsx15(TabsContent, { value: "highlights", className: "mt-4", children: /* @__PURE__ */ jsx15(
|
|
2540
2558
|
Video,
|
|
2541
2559
|
{
|
|
2542
2560
|
url: highlightVideoUrl,
|
|
@@ -2544,7 +2562,7 @@ function EntityVideoSection({
|
|
|
2544
2562
|
layout: "centered"
|
|
2545
2563
|
}
|
|
2546
2564
|
) })
|
|
2547
|
-
] }) : hasFullVideo ? /* @__PURE__ */
|
|
2565
|
+
] }) : hasFullVideo ? /* @__PURE__ */ jsx15(
|
|
2548
2566
|
Video,
|
|
2549
2567
|
{
|
|
2550
2568
|
kind: fullVideoKind,
|
|
@@ -2556,7 +2574,7 @@ function EntityVideoSection({
|
|
|
2556
2574
|
layout: "centered",
|
|
2557
2575
|
priority
|
|
2558
2576
|
}
|
|
2559
|
-
) : /* @__PURE__ */
|
|
2577
|
+
) : /* @__PURE__ */ jsx15(
|
|
2560
2578
|
Video,
|
|
2561
2579
|
{
|
|
2562
2580
|
url: highlightVideoUrl,
|
|
@@ -2565,11 +2583,11 @@ function EntityVideoSection({
|
|
|
2565
2583
|
priority
|
|
2566
2584
|
}
|
|
2567
2585
|
)),
|
|
2568
|
-
videoSummary && MarkdownRenderer && /* @__PURE__ */
|
|
2569
|
-
/* @__PURE__ */
|
|
2570
|
-
/* @__PURE__ */
|
|
2586
|
+
videoSummary && MarkdownRenderer && /* @__PURE__ */ jsxs12("div", { className: "flex flex-col gap-6 w-full min-w-0", children: [
|
|
2587
|
+
/* @__PURE__ */ jsx15("h2", { className: `${SECTION_HEADING_CLASS} break-words`, children: "Summary" }),
|
|
2588
|
+
/* @__PURE__ */ jsx15("div", { className: "text-h4 text-ods-text-primary break-words overflow-hidden", children: /* @__PURE__ */ jsx15(MarkdownRenderer, { content: videoSummary }) })
|
|
2571
2589
|
] }),
|
|
2572
|
-
videoBites && videoBites.length > 0 && /* @__PURE__ */
|
|
2590
|
+
videoBites && videoBites.length > 0 && /* @__PURE__ */ jsx15(
|
|
2573
2591
|
VideoBitesDisplay,
|
|
2574
2592
|
{
|
|
2575
2593
|
bites: videoBites,
|
|
@@ -2654,7 +2672,7 @@ function useEntityCardPlaceholder({
|
|
|
2654
2672
|
}
|
|
2655
2673
|
|
|
2656
2674
|
// src/components/chat/entity-cards/onboarding-guide-card.tsx
|
|
2657
|
-
import { jsx as
|
|
2675
|
+
import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2658
2676
|
function stripMarkdownPreview(text) {
|
|
2659
2677
|
return text.replace(/```[\s\S]*?```/g, " ").replace(/^#{1,6}\s+/gm, "").replace(/!?\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/[*_~`>]/g, "").replace(/^\s*[-+]\s+/gm, "").replace(/-{3,}/g, " ").replace(/\s+/g, " ").trim().replace(/^([\s\S]{240})[\s\S]+$/, "$1\u2026");
|
|
2660
2678
|
}
|
|
@@ -2668,64 +2686,64 @@ var HORIZONTAL_SIZE_TOKENS = {
|
|
|
2668
2686
|
};
|
|
2669
2687
|
function OnboardingGuideCardSkeleton({ size = "default" }) {
|
|
2670
2688
|
if (size === "catalog") {
|
|
2671
|
-
return /* @__PURE__ */
|
|
2672
|
-
/* @__PURE__ */
|
|
2673
|
-
/* @__PURE__ */
|
|
2674
|
-
/* @__PURE__ */
|
|
2675
|
-
/* @__PURE__ */
|
|
2676
|
-
/* @__PURE__ */
|
|
2677
|
-
/* @__PURE__ */
|
|
2689
|
+
return /* @__PURE__ */ jsxs13("div", { className: "bg-ods-system-greys-black border border-ods-border rounded-lg overflow-hidden flex flex-col p-6 gap-4 animate-pulse", children: [
|
|
2690
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex flex-col md:flex-row gap-4 md:gap-6", children: [
|
|
2691
|
+
/* @__PURE__ */ jsx16("div", { className: "w-full md:w-[256px] aspect-[1200/630] bg-ods-border rounded-lg flex-shrink-0" }),
|
|
2692
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex-1 min-w-0 flex flex-col", children: [
|
|
2693
|
+
/* @__PURE__ */ jsxs13("div", { className: "min-h-[60px] md:min-h-[72px] flex flex-col gap-1.5 justify-start mb-3", children: [
|
|
2694
|
+
/* @__PURE__ */ jsx16("div", { className: "h-[25px] md:h-[30px] w-3/4 bg-ods-border rounded" }),
|
|
2695
|
+
/* @__PURE__ */ jsx16("div", { className: "h-[25px] md:h-[30px] w-1/2 bg-ods-border rounded" })
|
|
2678
2696
|
] }),
|
|
2679
|
-
/* @__PURE__ */
|
|
2680
|
-
/* @__PURE__ */
|
|
2681
|
-
/* @__PURE__ */
|
|
2697
|
+
/* @__PURE__ */ jsxs13("div", { className: "min-h-[46px] md:min-h-[52px] flex flex-col gap-2 justify-start", children: [
|
|
2698
|
+
/* @__PURE__ */ jsx16("div", { className: "h-3 w-full bg-ods-border/70 rounded" }),
|
|
2699
|
+
/* @__PURE__ */ jsx16("div", { className: "h-3 w-5/6 bg-ods-border/70 rounded" })
|
|
2682
2700
|
] })
|
|
2683
2701
|
] })
|
|
2684
2702
|
] }),
|
|
2685
|
-
/* @__PURE__ */
|
|
2686
|
-
[0, 1].map((i) => /* @__PURE__ */
|
|
2703
|
+
/* @__PURE__ */ jsxs13("div", { className: "grid grid-cols-1 md:grid-cols-3 border border-ods-border rounded-md overflow-hidden w-full", children: [
|
|
2704
|
+
[0, 1].map((i) => /* @__PURE__ */ jsx16(
|
|
2687
2705
|
"div",
|
|
2688
2706
|
{
|
|
2689
2707
|
className: "bg-ods-card p-4 flex flex-col gap-3 border-b md:border-b-0 md:border-r border-ods-border",
|
|
2690
|
-
children: /* @__PURE__ */
|
|
2691
|
-
/* @__PURE__ */
|
|
2692
|
-
/* @__PURE__ */
|
|
2708
|
+
children: /* @__PURE__ */ jsxs13("div", { className: "flex flex-col gap-2", children: [
|
|
2709
|
+
/* @__PURE__ */ jsx16("div", { className: "h-6 w-32 bg-ods-bg rounded" }),
|
|
2710
|
+
/* @__PURE__ */ jsx16("div", { className: "h-3 w-20 bg-ods-bg/60 rounded" })
|
|
2693
2711
|
] })
|
|
2694
2712
|
},
|
|
2695
2713
|
`cell-${i}`
|
|
2696
2714
|
)),
|
|
2697
|
-
/* @__PURE__ */
|
|
2698
|
-
/* @__PURE__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
2700
|
-
/* @__PURE__ */
|
|
2701
|
-
/* @__PURE__ */
|
|
2715
|
+
/* @__PURE__ */ jsxs13("div", { className: "bg-ods-card p-4 flex items-center gap-3", children: [
|
|
2716
|
+
/* @__PURE__ */ jsx16("div", { className: "h-10 w-10 rounded-full bg-ods-bg shrink-0" }),
|
|
2717
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex flex-col gap-2 flex-1 min-w-0", children: [
|
|
2718
|
+
/* @__PURE__ */ jsx16("div", { className: "h-4 w-3/4 bg-ods-bg rounded" }),
|
|
2719
|
+
/* @__PURE__ */ jsx16("div", { className: "h-3 w-1/2 bg-ods-bg/60 rounded" })
|
|
2702
2720
|
] })
|
|
2703
2721
|
] })
|
|
2704
2722
|
] })
|
|
2705
2723
|
] });
|
|
2706
2724
|
}
|
|
2707
2725
|
if (size === "sm") {
|
|
2708
|
-
return /* @__PURE__ */
|
|
2709
|
-
/* @__PURE__ */
|
|
2710
|
-
/* @__PURE__ */
|
|
2711
|
-
/* @__PURE__ */
|
|
2712
|
-
/* @__PURE__ */
|
|
2713
|
-
/* @__PURE__ */
|
|
2726
|
+
return /* @__PURE__ */ jsxs13("span", { className: COMPACT_CARD_SKELETON_OUTER, children: [
|
|
2727
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_SKELETON_IMAGE_SLOT }),
|
|
2728
|
+
/* @__PURE__ */ jsxs13("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
2729
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx16("span", { className: "h-3.5 w-3/5 rounded bg-ods-bg" }) }),
|
|
2730
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx16("span", { className: "h-3 w-2/5 rounded bg-ods-bg/70" }) }),
|
|
2731
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx16("span", { className: "h-3 w-11/12 rounded bg-ods-bg/40" }) })
|
|
2714
2732
|
] }),
|
|
2715
|
-
/* @__PURE__ */
|
|
2733
|
+
/* @__PURE__ */ jsx16("span", { className: "flex shrink-0 items-center self-start h-5", children: /* @__PURE__ */ jsx16("span", { className: "h-3.5 w-3.5 rounded bg-ods-bg" }) })
|
|
2716
2734
|
] });
|
|
2717
2735
|
}
|
|
2718
2736
|
const t = HORIZONTAL_SIZE_TOKENS.default;
|
|
2719
|
-
return /* @__PURE__ */
|
|
2737
|
+
return /* @__PURE__ */ jsxs13(
|
|
2720
2738
|
"span",
|
|
2721
2739
|
{
|
|
2722
2740
|
className: `flex items-start gap-3 rounded-md border border-ods-border bg-ods-card ${t.padding} animate-pulse`,
|
|
2723
2741
|
children: [
|
|
2724
|
-
/* @__PURE__ */
|
|
2725
|
-
/* @__PURE__ */
|
|
2726
|
-
/* @__PURE__ */
|
|
2727
|
-
/* @__PURE__ */
|
|
2728
|
-
/* @__PURE__ */
|
|
2742
|
+
/* @__PURE__ */ jsx16("span", { className: `shrink-0 inline-flex items-center justify-center rounded-full bg-ods-bg ${t.step}` }),
|
|
2743
|
+
/* @__PURE__ */ jsxs13("span", { className: "flex flex-col gap-2 flex-1 min-w-0", children: [
|
|
2744
|
+
/* @__PURE__ */ jsx16("span", { className: "block h-4 w-2/3 rounded bg-ods-bg" }),
|
|
2745
|
+
/* @__PURE__ */ jsx16("span", { className: "block h-3 w-1/3 rounded bg-ods-bg/70" }),
|
|
2746
|
+
/* @__PURE__ */ jsx16("span", { className: "block h-3 w-full rounded bg-ods-bg/40" })
|
|
2729
2747
|
] })
|
|
2730
2748
|
]
|
|
2731
2749
|
}
|
|
@@ -2757,7 +2775,7 @@ function OnboardingGuideCard({
|
|
|
2757
2775
|
const hasVideoCover = !!(guide.main_video_thumbnail || guide.highlight_video_thumbnail);
|
|
2758
2776
|
const stepLabel = typeof guide.step_order === "number" ? String(guide.step_order).padStart(2, "0") : "\u2014";
|
|
2759
2777
|
const durationLabel = typeof guide.highlight_video_duration_ms === "number" && guide.highlight_video_duration_ms > 0 ? formatDurationMMSS(Math.floor(guide.highlight_video_duration_ms / 1e3)) : "";
|
|
2760
|
-
return /* @__PURE__ */
|
|
2778
|
+
return /* @__PURE__ */ jsx16(
|
|
2761
2779
|
next_link_default,
|
|
2762
2780
|
{
|
|
2763
2781
|
href,
|
|
@@ -2773,10 +2791,10 @@ function OnboardingGuideCard({
|
|
|
2773
2791
|
className
|
|
2774
2792
|
),
|
|
2775
2793
|
"aria-label": `Open ${guide.title}`,
|
|
2776
|
-
children: /* @__PURE__ */
|
|
2777
|
-
/* @__PURE__ */
|
|
2778
|
-
/* @__PURE__ */
|
|
2779
|
-
coverImage ? /* @__PURE__ */
|
|
2794
|
+
children: /* @__PURE__ */ jsxs13("div", { className: "flex flex-col p-6 gap-4", children: [
|
|
2795
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex flex-col md:flex-row gap-4 md:gap-6", children: [
|
|
2796
|
+
/* @__PURE__ */ jsx16("div", { className: "w-full md:w-[256px] flex-shrink-0", children: /* @__PURE__ */ jsxs13("div", { className: "relative rounded-lg overflow-hidden w-full aspect-[1200/630] bg-ods-bg", children: [
|
|
2797
|
+
coverImage ? /* @__PURE__ */ jsx16(
|
|
2780
2798
|
next_image_default,
|
|
2781
2799
|
{
|
|
2782
2800
|
src: coverImage,
|
|
@@ -2786,7 +2804,7 @@ function OnboardingGuideCard({
|
|
|
2786
2804
|
className: "object-cover",
|
|
2787
2805
|
unoptimized: true
|
|
2788
2806
|
}
|
|
2789
|
-
) : /* @__PURE__ */
|
|
2807
|
+
) : /* @__PURE__ */ jsx16(
|
|
2790
2808
|
BlogImagePlaceholder,
|
|
2791
2809
|
{
|
|
2792
2810
|
title: guide.title,
|
|
@@ -2794,18 +2812,18 @@ function OnboardingGuideCard({
|
|
|
2794
2812
|
className: "absolute inset-0"
|
|
2795
2813
|
}
|
|
2796
2814
|
),
|
|
2797
|
-
hasVideoCover && coverImage && /* @__PURE__ */
|
|
2798
|
-
durationLabel && /* @__PURE__ */
|
|
2799
|
-
/* @__PURE__ */
|
|
2815
|
+
hasVideoCover && coverImage && /* @__PURE__ */ jsx16("span", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: /* @__PURE__ */ jsx16(Play, { className: "w-10 h-10 text-white", fill: "white" }) }),
|
|
2816
|
+
durationLabel && /* @__PURE__ */ jsxs13("span", { className: "absolute bottom-2 right-2 inline-flex items-center gap-1 px-2 py-1 rounded bg-black/60 text-white text-xs font-medium font-mono", children: [
|
|
2817
|
+
/* @__PURE__ */ jsx16(Clock, { className: "w-3 h-3" }),
|
|
2800
2818
|
durationLabel
|
|
2801
2819
|
] })
|
|
2802
2820
|
] }) }),
|
|
2803
|
-
/* @__PURE__ */
|
|
2804
|
-
/* @__PURE__ */
|
|
2805
|
-
/* @__PURE__ */
|
|
2821
|
+
/* @__PURE__ */ jsxs13("div", { className: "flex-1 min-w-0 flex flex-col", children: [
|
|
2822
|
+
/* @__PURE__ */ jsx16("div", { className: "min-h-[60px] md:min-h-[72px] flex items-start mb-3", children: /* @__PURE__ */ jsx16("h3", { className: "font-['Azeret_Mono'] font-semibold text-xl md:text-2xl text-ods-text-primary leading-tight line-clamp-2", children: guide.title }) }),
|
|
2823
|
+
/* @__PURE__ */ jsx16("div", { className: "min-h-[46px] md:min-h-[52px]", children: /* @__PURE__ */ jsx16("p", { className: "font-['DM_Sans'] text-sm md:text-base text-ods-text-secondary leading-relaxed line-clamp-2", children: stripMarkdownPreview(guide.video_summary || guide.content || "") }) })
|
|
2806
2824
|
] })
|
|
2807
2825
|
] }),
|
|
2808
|
-
/* @__PURE__ */
|
|
2826
|
+
/* @__PURE__ */ jsx16(
|
|
2809
2827
|
EntityAuthorCard,
|
|
2810
2828
|
{
|
|
2811
2829
|
author: guide.author,
|
|
@@ -2835,9 +2853,9 @@ function OnboardingGuideCard({
|
|
|
2835
2853
|
guide.section,
|
|
2836
2854
|
author
|
|
2837
2855
|
].filter((s) => typeof s === "string" && s.length > 0);
|
|
2838
|
-
return /* @__PURE__ */
|
|
2839
|
-
/* @__PURE__ */
|
|
2840
|
-
compactCover ? /* @__PURE__ */
|
|
2856
|
+
return /* @__PURE__ */ jsxs13(next_link_default, { href, target, rel, prefetch: false, className: cn(COMPACT_CARD_OUTER, className), children: [
|
|
2857
|
+
/* @__PURE__ */ jsxs13("span", { className: COMPACT_CARD_IMAGE_SLOT, children: [
|
|
2858
|
+
compactCover ? /* @__PURE__ */ jsx16(
|
|
2841
2859
|
next_image_default,
|
|
2842
2860
|
{
|
|
2843
2861
|
src: compactCover,
|
|
@@ -2847,20 +2865,20 @@ function OnboardingGuideCard({
|
|
|
2847
2865
|
className: "object-contain",
|
|
2848
2866
|
unoptimized: true
|
|
2849
2867
|
}
|
|
2850
|
-
) : /* @__PURE__ */
|
|
2851
|
-
hasVideoCover && compactCover && /* @__PURE__ */
|
|
2868
|
+
) : /* @__PURE__ */ jsx16("span", { className: "flex h-full w-full items-center justify-center text-ods-accent", children: /* @__PURE__ */ jsx16(GraduationCap, { className: "w-4 h-4" }) }),
|
|
2869
|
+
hasVideoCover && compactCover && /* @__PURE__ */ jsx16("span", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: /* @__PURE__ */ jsx16(Play, { className: "h-4 w-4 text-white", fill: "white" }) })
|
|
2852
2870
|
] }),
|
|
2853
|
-
/* @__PURE__ */
|
|
2854
|
-
/* @__PURE__ */
|
|
2855
|
-
/* @__PURE__ */
|
|
2856
|
-
/* @__PURE__ */
|
|
2871
|
+
/* @__PURE__ */ jsxs13("span", { className: COMPACT_CARD_TEXT_COL, children: [
|
|
2872
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_TITLE_ROW, children: /* @__PURE__ */ jsx16("span", { className: cn(COMPACT_CARD_TITLE, "font-['Azeret_Mono']"), children: guide.title }) }),
|
|
2873
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx16("span", { className: "truncate text-[11px] leading-4 text-[var(--color-accent-primary)]", children: subtitleParts.join(" \xB7 ") }) }),
|
|
2874
|
+
/* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_META_ROW_BOX, children: /* @__PURE__ */ jsx16("span", { className: COMPACT_CARD_SUMMARY, children: summary2 || COMPACT_CARD_ROW_FILLER }) })
|
|
2857
2875
|
] }),
|
|
2858
|
-
/* @__PURE__ */
|
|
2876
|
+
/* @__PURE__ */ jsx16("span", { className: "flex shrink-0 items-center self-start h-5 text-ods-text-secondary", children: /* @__PURE__ */ jsx16(ExternalLink, { className: "w-3.5 h-3.5" }) })
|
|
2859
2877
|
] });
|
|
2860
2878
|
}
|
|
2861
2879
|
const t = HORIZONTAL_SIZE_TOKENS.default;
|
|
2862
2880
|
const summary = stripMarkdownPreview(guide.video_summary || guide.content || "");
|
|
2863
|
-
return /* @__PURE__ */
|
|
2881
|
+
return /* @__PURE__ */ jsxs13(
|
|
2864
2882
|
next_link_default,
|
|
2865
2883
|
{
|
|
2866
2884
|
href,
|
|
@@ -2872,7 +2890,7 @@ function OnboardingGuideCard({
|
|
|
2872
2890
|
className
|
|
2873
2891
|
),
|
|
2874
2892
|
children: [
|
|
2875
|
-
/* @__PURE__ */
|
|
2893
|
+
/* @__PURE__ */ jsx16(
|
|
2876
2894
|
"span",
|
|
2877
2895
|
{
|
|
2878
2896
|
className: `shrink-0 inline-flex items-center justify-center rounded-full bg-ods-accent/10 text-ods-accent font-semibold ${t.step}`,
|
|
@@ -2880,13 +2898,13 @@ function OnboardingGuideCard({
|
|
|
2880
2898
|
children: guide.step_order
|
|
2881
2899
|
}
|
|
2882
2900
|
),
|
|
2883
|
-
/* @__PURE__ */
|
|
2884
|
-
/* @__PURE__ */
|
|
2885
|
-
/* @__PURE__ */
|
|
2886
|
-
/* @__PURE__ */
|
|
2887
|
-
/* @__PURE__ */
|
|
2901
|
+
/* @__PURE__ */ jsxs13("span", { className: "flex flex-col gap-0.5 flex-1 min-w-0", children: [
|
|
2902
|
+
/* @__PURE__ */ jsx16("span", { className: `block ${t.title} text-ods-text-primary truncate`, children: guide.title }),
|
|
2903
|
+
/* @__PURE__ */ jsxs13("span", { className: "inline-flex items-center gap-1 font-['DM_Sans'] text-[12px] leading-[16px] text-ods-text-secondary", children: [
|
|
2904
|
+
/* @__PURE__ */ jsx16(GraduationCap, { className: "h-3 w-3 shrink-0" }),
|
|
2905
|
+
/* @__PURE__ */ jsx16("span", { className: "truncate", children: guide.section })
|
|
2888
2906
|
] }),
|
|
2889
|
-
summary && /* @__PURE__ */
|
|
2907
|
+
summary && /* @__PURE__ */ jsx16("span", { className: `font-['DM_Sans'] text-[14px] leading-[20px] text-ods-text-secondary ${t.summaryClamp}`, children: summary })
|
|
2890
2908
|
] })
|
|
2891
2909
|
]
|
|
2892
2910
|
}
|
|
@@ -3305,7 +3323,7 @@ function resolveSourceIcon(input, ctx = {}) {
|
|
|
3305
3323
|
init_cn();
|
|
3306
3324
|
import React11 from "react";
|
|
3307
3325
|
init_button();
|
|
3308
|
-
import { Fragment as
|
|
3326
|
+
import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3309
3327
|
function actionKey(action, idx) {
|
|
3310
3328
|
return `${action.label ?? action.ariaLabel ?? "action"}-${idx}`;
|
|
3311
3329
|
}
|
|
@@ -3337,7 +3355,7 @@ function actionToMenuItems(action, idx) {
|
|
|
3337
3355
|
}
|
|
3338
3356
|
function renderActionButton(action, opts = {}) {
|
|
3339
3357
|
if (action.iconAction) {
|
|
3340
|
-
return /* @__PURE__ */
|
|
3358
|
+
return /* @__PURE__ */ jsx17(
|
|
3341
3359
|
SplitButton,
|
|
3342
3360
|
{
|
|
3343
3361
|
variant: action.variant ?? void 0,
|
|
@@ -3355,18 +3373,18 @@ function renderActionButton(action, opts = {}) {
|
|
|
3355
3373
|
);
|
|
3356
3374
|
}
|
|
3357
3375
|
if (action.submenu && action.submenu.length > 0) {
|
|
3358
|
-
return /* @__PURE__ */
|
|
3376
|
+
return /* @__PURE__ */ jsx17(
|
|
3359
3377
|
ActionsMenuDropdown,
|
|
3360
3378
|
{
|
|
3361
3379
|
groups: [{ items: action.submenu }],
|
|
3362
|
-
customTrigger: /* @__PURE__ */
|
|
3380
|
+
customTrigger: /* @__PURE__ */ jsx17(
|
|
3363
3381
|
Button,
|
|
3364
3382
|
{
|
|
3365
3383
|
variant: "outline",
|
|
3366
3384
|
disabled: action.disabled,
|
|
3367
3385
|
loading: action.loading,
|
|
3368
3386
|
leftIcon: action.icon,
|
|
3369
|
-
splitIcon: /* @__PURE__ */
|
|
3387
|
+
splitIcon: /* @__PURE__ */ jsx17(Chevron02DownIcon, { className: "h-4 w-4" }),
|
|
3370
3388
|
className: opts.fullWidth ? "flex-1" : void 0,
|
|
3371
3389
|
children: action.label
|
|
3372
3390
|
}
|
|
@@ -3376,8 +3394,8 @@ function renderActionButton(action, opts = {}) {
|
|
|
3376
3394
|
}
|
|
3377
3395
|
const isIconOnly = opts.iconOnly || !action.label || action.iconOnlyOnDesktop;
|
|
3378
3396
|
if (isIconOnly) {
|
|
3379
|
-
const iconNode = action.iconOnlyOnDesktop ? /* @__PURE__ */
|
|
3380
|
-
return /* @__PURE__ */
|
|
3397
|
+
const iconNode = action.iconOnlyOnDesktop ? /* @__PURE__ */ jsx17("span", { className: "inline-flex [&_svg]:!text-ods-text-primary", children: action.icon }) : action.icon;
|
|
3398
|
+
return /* @__PURE__ */ jsx17(
|
|
3381
3399
|
Button,
|
|
3382
3400
|
{
|
|
3383
3401
|
variant: action.variant,
|
|
@@ -3393,7 +3411,7 @@ function renderActionButton(action, opts = {}) {
|
|
|
3393
3411
|
}
|
|
3394
3412
|
);
|
|
3395
3413
|
}
|
|
3396
|
-
return /* @__PURE__ */
|
|
3414
|
+
return /* @__PURE__ */ jsx17(
|
|
3397
3415
|
Button,
|
|
3398
3416
|
{
|
|
3399
3417
|
variant: action.variant,
|
|
@@ -3418,12 +3436,12 @@ function PageActions({
|
|
|
3418
3436
|
className
|
|
3419
3437
|
}) {
|
|
3420
3438
|
if (variant === "icon-buttons") {
|
|
3421
|
-
return /* @__PURE__ */
|
|
3439
|
+
return /* @__PURE__ */ jsx17(IconButtonsVariant, { actions, menuActions, selector, className });
|
|
3422
3440
|
}
|
|
3423
3441
|
if (variant === "menu-primary") {
|
|
3424
|
-
return /* @__PURE__ */
|
|
3442
|
+
return /* @__PURE__ */ jsx17(MenuPrimaryVariant, { actions, menuActions: menuActions || [], selector, className });
|
|
3425
3443
|
}
|
|
3426
|
-
return /* @__PURE__ */
|
|
3444
|
+
return /* @__PURE__ */ jsx17(PrimaryButtonsVariant, { actions, className });
|
|
3427
3445
|
}
|
|
3428
3446
|
function IconButtonsVariant({
|
|
3429
3447
|
actions,
|
|
@@ -3436,13 +3454,13 @@ function IconButtonsVariant({
|
|
|
3436
3454
|
const isSingleAction = actions.length === 1 && !actions[0].submenu?.length;
|
|
3437
3455
|
const singleAction = isSingleAction ? actions[0] : null;
|
|
3438
3456
|
const useSingleActionMobile = isSingleAction && !hasMenuActions;
|
|
3439
|
-
return /* @__PURE__ */
|
|
3440
|
-
/* @__PURE__ */
|
|
3457
|
+
return /* @__PURE__ */ jsxs14(Fragment5, { children: [
|
|
3458
|
+
/* @__PURE__ */ jsxs14("div", { className: cn("hidden md:flex items-center", ACTIONS_GAP, className), children: [
|
|
3441
3459
|
selector,
|
|
3442
|
-
desktopActions.map((action, idx) => /* @__PURE__ */
|
|
3443
|
-
hasMenuActions && /* @__PURE__ */
|
|
3460
|
+
desktopActions.map((action, idx) => /* @__PURE__ */ jsx17(React11.Fragment, { children: renderActionButton(action) }, actionKey(action, idx))),
|
|
3461
|
+
hasMenuActions && /* @__PURE__ */ jsx17(ActionsMenuDropdown, { groups: menuActions })
|
|
3444
3462
|
] }),
|
|
3445
|
-
/* @__PURE__ */
|
|
3463
|
+
/* @__PURE__ */ jsx17("div", { className: cn("flex md:hidden", className), children: useSingleActionMobile && singleAction ? renderActionButton(singleAction, { iconOnly: true }) : /* @__PURE__ */ jsx17(
|
|
3446
3464
|
ActionsMenuDropdown,
|
|
3447
3465
|
{
|
|
3448
3466
|
groups: [
|
|
@@ -3463,9 +3481,9 @@ function PrimaryButtonsVariant({
|
|
|
3463
3481
|
return 0;
|
|
3464
3482
|
});
|
|
3465
3483
|
const desktopActions = sortedActions.filter((a) => !a.showOnlyMobile);
|
|
3466
|
-
return /* @__PURE__ */
|
|
3467
|
-
/* @__PURE__ */
|
|
3468
|
-
/* @__PURE__ */
|
|
3484
|
+
return /* @__PURE__ */ jsxs14(Fragment5, { children: [
|
|
3485
|
+
/* @__PURE__ */ jsx17("div", { className: cn("hidden md:flex items-center", ACTIONS_GAP, className), children: desktopActions.map((action, idx) => /* @__PURE__ */ jsx17(React11.Fragment, { children: renderActionButton(action) }, `desktop-${actionKey(action, idx)}`)) }),
|
|
3486
|
+
/* @__PURE__ */ jsx17(MobileBottomActions, { actions: sortedActions })
|
|
3469
3487
|
] });
|
|
3470
3488
|
}
|
|
3471
3489
|
function MenuPrimaryVariant({
|
|
@@ -3476,13 +3494,13 @@ function MenuPrimaryVariant({
|
|
|
3476
3494
|
}) {
|
|
3477
3495
|
const desktopActions = actions.filter((a) => !a.showOnlyMobile);
|
|
3478
3496
|
const hasMenuActions = menuActions.some((g) => g.items.length > 0);
|
|
3479
|
-
return /* @__PURE__ */
|
|
3480
|
-
/* @__PURE__ */
|
|
3497
|
+
return /* @__PURE__ */ jsxs14(Fragment5, { children: [
|
|
3498
|
+
/* @__PURE__ */ jsxs14("div", { className: cn("hidden md:flex items-center", ACTIONS_GAP, className), children: [
|
|
3481
3499
|
selector,
|
|
3482
|
-
hasMenuActions && /* @__PURE__ */
|
|
3483
|
-
desktopActions.map((action, idx) => /* @__PURE__ */
|
|
3500
|
+
hasMenuActions && /* @__PURE__ */ jsx17(ActionsMenuDropdown, { groups: menuActions }),
|
|
3501
|
+
desktopActions.map((action, idx) => /* @__PURE__ */ jsx17(React11.Fragment, { children: renderActionButton({ ...action, variant: action.variant || "accent" }) }, `desktop-${actionKey(action, idx)}`))
|
|
3484
3502
|
] }),
|
|
3485
|
-
/* @__PURE__ */
|
|
3503
|
+
/* @__PURE__ */ jsx17("div", { className: cn("flex md:hidden", className), children: /* @__PURE__ */ jsx17(
|
|
3486
3504
|
ActionsMenuDropdown,
|
|
3487
3505
|
{
|
|
3488
3506
|
groups: [
|
|
@@ -3494,25 +3512,63 @@ function MenuPrimaryVariant({
|
|
|
3494
3512
|
] });
|
|
3495
3513
|
}
|
|
3496
3514
|
function MobileBottomActions({ actions }) {
|
|
3497
|
-
return /* @__PURE__ */
|
|
3515
|
+
return /* @__PURE__ */ jsx17("div", { className: cn(
|
|
3498
3516
|
"fixed md:hidden bottom-0 left-0 right-0 z-50",
|
|
3499
3517
|
"bg-ods-card border-t border-ods-border",
|
|
3500
3518
|
"flex items-start pt-6 pb-6 px-6",
|
|
3501
3519
|
ACTIONS_GAP
|
|
3502
|
-
), children: actions.map((action, idx) => /* @__PURE__ */
|
|
3520
|
+
), children: actions.map((action, idx) => /* @__PURE__ */ jsx17(React11.Fragment, { children: renderActionButton(action, { fullWidth: !!action.label }) }, `mobile-${actionKey(action, idx)}`)) });
|
|
3503
3521
|
}
|
|
3504
3522
|
function usePageActionsBottomPadding(variant) {
|
|
3505
3523
|
return variant === "primary-buttons" || variant === "menu-primary" ? "pb-40 md:pb-0" : "";
|
|
3506
3524
|
}
|
|
3507
3525
|
|
|
3508
|
-
// src/components/
|
|
3526
|
+
// src/components/ui/entity-image.tsx
|
|
3527
|
+
init_cn();
|
|
3528
|
+
import React12 from "react";
|
|
3529
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
3530
|
+
function EntityImage({ src, alt, fallbackText, className }) {
|
|
3531
|
+
const [imageFailed, setImageFailed] = React12.useState(false);
|
|
3532
|
+
React12.useEffect(() => {
|
|
3533
|
+
setImageFailed(false);
|
|
3534
|
+
}, [src]);
|
|
3535
|
+
const showFallback = imageFailed || !src;
|
|
3536
|
+
const initials = getFirstLastInitials(fallbackText ?? alt);
|
|
3537
|
+
if (showFallback) {
|
|
3538
|
+
return /* @__PURE__ */ jsx18(
|
|
3539
|
+
"div",
|
|
3540
|
+
{
|
|
3541
|
+
"aria-label": alt,
|
|
3542
|
+
className: cn(
|
|
3543
|
+
"size-[52px] md:size-[60px] shrink-0 rounded-md border border-ods-border bg-ods-bg flex items-center justify-center text-ods-text-secondary text-h4 select-none",
|
|
3544
|
+
className
|
|
3545
|
+
),
|
|
3546
|
+
children: initials || "?"
|
|
3547
|
+
}
|
|
3548
|
+
);
|
|
3549
|
+
}
|
|
3550
|
+
return /* @__PURE__ */ jsx18(
|
|
3551
|
+
"img",
|
|
3552
|
+
{
|
|
3553
|
+
src: src ?? void 0,
|
|
3554
|
+
alt: alt ?? "",
|
|
3555
|
+
onError: () => setImageFailed(true),
|
|
3556
|
+
className: cn(
|
|
3557
|
+
"size-[52px] md:size-[60px] shrink-0 rounded-md border border-ods-border object-contain",
|
|
3558
|
+
className
|
|
3559
|
+
)
|
|
3560
|
+
}
|
|
3561
|
+
);
|
|
3562
|
+
}
|
|
3563
|
+
|
|
3564
|
+
// src/components/layout/title-block.tsx
|
|
3509
3565
|
init_cn();
|
|
3510
3566
|
|
|
3511
3567
|
// src/components/layout/back-button.tsx
|
|
3512
3568
|
init_cn();
|
|
3513
|
-
import { jsx as
|
|
3569
|
+
import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3514
3570
|
function BackButton({ label = "Back", className, type = "button", ...props }) {
|
|
3515
|
-
return /* @__PURE__ */
|
|
3571
|
+
return /* @__PURE__ */ jsxs15(
|
|
3516
3572
|
"button",
|
|
3517
3573
|
{
|
|
3518
3574
|
type,
|
|
@@ -3526,139 +3582,48 @@ function BackButton({ label = "Back", className, type = "button", ...props }) {
|
|
|
3526
3582
|
),
|
|
3527
3583
|
...props,
|
|
3528
3584
|
children: [
|
|
3529
|
-
/* @__PURE__ */
|
|
3530
|
-
/* @__PURE__ */
|
|
3585
|
+
/* @__PURE__ */ jsx19(Chevron02LeftIcon, { className: "size-6 shrink-0" }),
|
|
3586
|
+
/* @__PURE__ */ jsx19("span", { className: "text-h4", children: label })
|
|
3531
3587
|
]
|
|
3532
3588
|
}
|
|
3533
3589
|
);
|
|
3534
3590
|
}
|
|
3535
3591
|
|
|
3536
|
-
// src/components/layout/
|
|
3537
|
-
import { jsx as
|
|
3538
|
-
function
|
|
3539
|
-
return "variant" in props || "title" in props || "subtitle" in props || "backButton" in props || "headerActions" in props || "headerContent" in props || "showHeader" in props || "contentClassName" in props || "actions" in props || "actionsVariant" in props;
|
|
3540
|
-
}
|
|
3541
|
-
function PageContainer(props) {
|
|
3542
|
-
if (isAdvancedProps(props)) {
|
|
3543
|
-
return renderAdvancedPageContainer(props);
|
|
3544
|
-
} else {
|
|
3545
|
-
return renderLegacyPageContainer(props);
|
|
3546
|
-
}
|
|
3547
|
-
}
|
|
3548
|
-
function renderLegacyPageContainer({
|
|
3549
|
-
children,
|
|
3550
|
-
className = "",
|
|
3551
|
-
fullWidthBackground = true,
|
|
3552
|
-
backgroundClassName = "bg-ods-bg",
|
|
3553
|
-
backgroundStyle,
|
|
3554
|
-
contentPadding,
|
|
3555
|
-
maxWidth = "max-w-[1920px]",
|
|
3556
|
-
as: Component = "section",
|
|
3557
|
-
id
|
|
3558
|
-
}) {
|
|
3559
|
-
const content = /* @__PURE__ */ jsx18("div", { className: cn(maxWidth, contentPadding, "mx-auto", className), children });
|
|
3560
|
-
if (fullWidthBackground) {
|
|
3561
|
-
return /* @__PURE__ */ jsx18(
|
|
3562
|
-
Component,
|
|
3563
|
-
{
|
|
3564
|
-
className: cn("w-full", backgroundClassName),
|
|
3565
|
-
style: backgroundStyle,
|
|
3566
|
-
id,
|
|
3567
|
-
children: content
|
|
3568
|
-
}
|
|
3569
|
-
);
|
|
3570
|
-
}
|
|
3571
|
-
return /* @__PURE__ */ jsx18(Component, { className: "w-full", id, children: /* @__PURE__ */ jsx18("div", { className: cn(maxWidth, contentPadding, "mx-auto", backgroundClassName, className), style: backgroundStyle, children }) });
|
|
3572
|
-
}
|
|
3573
|
-
function renderAdvancedPageContainer({
|
|
3574
|
-
children,
|
|
3575
|
-
variant = "content",
|
|
3592
|
+
// src/components/layout/title-block.tsx
|
|
3593
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3594
|
+
function TitleBlock({
|
|
3576
3595
|
title,
|
|
3577
3596
|
subtitle,
|
|
3597
|
+
image,
|
|
3578
3598
|
backButton,
|
|
3579
|
-
headerActions,
|
|
3580
|
-
headerContent,
|
|
3581
3599
|
actions,
|
|
3582
|
-
actionsVariant,
|
|
3600
|
+
actionsVariant = "icon-buttons",
|
|
3583
3601
|
menuActions,
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
className
|
|
3587
|
-
contentClassName,
|
|
3588
|
-
showHeader = true
|
|
3602
|
+
selector,
|
|
3603
|
+
variant = "plain",
|
|
3604
|
+
className
|
|
3589
3605
|
}) {
|
|
3590
|
-
const
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
const renderHeader = () => {
|
|
3612
|
-
if (!showHeader) return null;
|
|
3613
|
-
if (headerContent) {
|
|
3614
|
-
return /* @__PURE__ */ jsx18("div", { className: cn(
|
|
3615
|
-
"flex items-end justify-between gap-4"
|
|
3616
|
-
), children: headerContent });
|
|
3617
|
-
}
|
|
3618
|
-
if (variant === "detail") {
|
|
3619
|
-
return /* @__PURE__ */ jsxs15("div", { className: "flex items-end justify-between md:flex-col md:items-start md:justify-start lg:flex-row lg:items-end lg:justify-between gap-4", children: [
|
|
3620
|
-
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col gap-2 flex-1 min-w-0", children: [
|
|
3621
|
-
backButton && /* @__PURE__ */ jsx18(
|
|
3622
|
-
BackButton,
|
|
3623
|
-
{
|
|
3624
|
-
onClick: backButton.onClick,
|
|
3625
|
-
label: backButton.label,
|
|
3626
|
-
className: "hidden md:inline-flex"
|
|
3627
|
-
}
|
|
3628
|
-
),
|
|
3629
|
-
title && /* @__PURE__ */ jsx18("h1", { className: "text-h2 tracking-[-0.64px] text-ods-text-primary", children: title }),
|
|
3630
|
-
subtitle && /* @__PURE__ */ jsx18("div", { className: "text-ods-text-secondary font-['DM_Sans'] font-medium text-[16px]", children: subtitle })
|
|
3631
|
-
] }),
|
|
3632
|
-
(headerActions || actions) && /* @__PURE__ */ jsxs15("div", { className: "flex gap-2 items-center shrink-0", children: [
|
|
3633
|
-
headerActions,
|
|
3634
|
-
renderActions()
|
|
3635
|
-
] })
|
|
3636
|
-
] });
|
|
3637
|
-
}
|
|
3638
|
-
if (variant === "list") {
|
|
3639
|
-
return /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between md:flex-col md:items-start md:justify-start lg:flex-row lg:items-center lg:justify-between gap-4", children: [
|
|
3640
|
-
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col gap-1 flex-1 min-w-0", children: [
|
|
3641
|
-
backButton && /* @__PURE__ */ jsx18(
|
|
3642
|
-
BackButton,
|
|
3643
|
-
{
|
|
3644
|
-
onClick: backButton.onClick,
|
|
3645
|
-
label: backButton.label,
|
|
3646
|
-
className: "hidden md:inline-flex"
|
|
3647
|
-
}
|
|
3648
|
-
),
|
|
3649
|
-
title && /* @__PURE__ */ jsx18("h1", { className: "text-h2 tracking-[-0.48px] text-ods-text-primary", children: title }),
|
|
3650
|
-
subtitle && /* @__PURE__ */ jsx18("div", { className: "text-ods-text-secondary font-['DM_Sans'] font-medium text-[16px]", children: subtitle })
|
|
3651
|
-
] }),
|
|
3652
|
-
(headerActions || actions) && /* @__PURE__ */ jsxs15("div", { className: "flex gap-3 items-center shrink-0", children: [
|
|
3653
|
-
headerActions,
|
|
3654
|
-
renderActions()
|
|
3655
|
-
] })
|
|
3656
|
-
] });
|
|
3657
|
-
}
|
|
3658
|
-
if (variant === "form") {
|
|
3659
|
-
return /* @__PURE__ */ jsxs15("div", { className: "flex items-end justify-between md:flex-col md:items-start md:justify-start lg:flex-row lg:items-end lg:justify-between gap-4", children: [
|
|
3660
|
-
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col gap-2 flex-1 min-w-0", children: [
|
|
3661
|
-
backButton && /* @__PURE__ */ jsx18(
|
|
3606
|
+
const hasActions = actions && actions.length > 0;
|
|
3607
|
+
const hasMenuActions = !!menuActions && menuActions.some((g) => g.items.length > 0);
|
|
3608
|
+
return /* @__PURE__ */ jsxs16(
|
|
3609
|
+
"div",
|
|
3610
|
+
{
|
|
3611
|
+
className: cn(
|
|
3612
|
+
"flex items-end justify-between gap-[var(--spacing-system-m)]",
|
|
3613
|
+
"md:flex-col md:items-start md:justify-start lg:flex-row lg:items-end lg:justify-between",
|
|
3614
|
+
"pt-[var(--spacing-system-l)]",
|
|
3615
|
+
variant === "card" ? cn(
|
|
3616
|
+
"bg-ods-card border-b border-ods-border",
|
|
3617
|
+
"px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]",
|
|
3618
|
+
"md:bg-transparent md:border-b-0",
|
|
3619
|
+
"md:px-0 md:pb-0",
|
|
3620
|
+
"md:mb-[var(--spacing-system-l)]"
|
|
3621
|
+
) : "mb-[var(--spacing-system-l)]",
|
|
3622
|
+
className
|
|
3623
|
+
),
|
|
3624
|
+
children: [
|
|
3625
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex flex-col gap-[var(--spacing-system-xs)] flex-1 min-w-0", children: [
|
|
3626
|
+
backButton && /* @__PURE__ */ jsx20(
|
|
3662
3627
|
BackButton,
|
|
3663
3628
|
{
|
|
3664
3629
|
onClick: backButton.onClick,
|
|
@@ -3666,79 +3631,88 @@ function renderAdvancedPageContainer({
|
|
|
3666
3631
|
className: "hidden md:inline-flex"
|
|
3667
3632
|
}
|
|
3668
3633
|
),
|
|
3669
|
-
|
|
3634
|
+
image || subtitle ? /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-[var(--spacing-system-m)] min-w-0 w-full", children: [
|
|
3635
|
+
image && /* @__PURE__ */ jsx20(
|
|
3636
|
+
EntityImage,
|
|
3637
|
+
{
|
|
3638
|
+
src: image.src,
|
|
3639
|
+
alt: image.alt,
|
|
3640
|
+
fallbackText: image.alt || title
|
|
3641
|
+
}
|
|
3642
|
+
),
|
|
3643
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex flex-col justify-center min-w-0 flex-1", children: [
|
|
3644
|
+
title && /* @__PURE__ */ jsx20("h1", { className: "text-h2 text-ods-text-primary truncate", title, children: title }),
|
|
3645
|
+
subtitle && /* @__PURE__ */ jsx20("p", { className: "text-h6 text-ods-text-secondary truncate", title: subtitle, children: subtitle })
|
|
3646
|
+
] })
|
|
3647
|
+
] }) : title && /* @__PURE__ */ jsx20("h1", { className: "text-h2 text-ods-text-primary", children: title })
|
|
3670
3648
|
] }),
|
|
3671
|
-
(
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
] }),
|
|
3682
|
-
(headerActions || actions) && /* @__PURE__ */ jsxs15("div", { className: "flex gap-3 items-center shrink-0", children: [
|
|
3683
|
-
headerActions,
|
|
3684
|
-
renderActions()
|
|
3685
|
-
] })
|
|
3686
|
-
] });
|
|
3687
|
-
};
|
|
3688
|
-
const getContainerClasses = () => {
|
|
3689
|
-
const baseClasses = [
|
|
3690
|
-
"flex flex-col w-full",
|
|
3691
|
-
backgroundClasses[background],
|
|
3692
|
-
paddingClasses[padding]
|
|
3693
|
-
];
|
|
3694
|
-
switch (variant) {
|
|
3695
|
-
case "list":
|
|
3696
|
-
return cn(baseClasses, "gap-4 md:gap-6", className);
|
|
3697
|
-
case "detail":
|
|
3698
|
-
return cn(baseClasses, "gap-4 md:gap-6", className);
|
|
3699
|
-
case "form":
|
|
3700
|
-
return cn(baseClasses, "gap-6 md:gap-10", className);
|
|
3701
|
-
case "content":
|
|
3702
|
-
default:
|
|
3703
|
-
return cn(baseClasses, "gap-4 md:gap-6", className);
|
|
3704
|
-
}
|
|
3705
|
-
};
|
|
3706
|
-
const getContentClasses = () => {
|
|
3707
|
-
const mobilePadding = needsBottomPadding ? "pb-28 md:pb-0" : "";
|
|
3708
|
-
switch (variant) {
|
|
3709
|
-
case "detail":
|
|
3710
|
-
return cn("flex-1 overflow-auto", mobilePadding, contentClassName);
|
|
3711
|
-
case "list":
|
|
3712
|
-
return cn("flex flex-col gap-4 md:gap-6", mobilePadding, contentClassName);
|
|
3713
|
-
case "form":
|
|
3714
|
-
return cn("flex flex-col gap-4 md:gap-10", mobilePadding, contentClassName);
|
|
3715
|
-
case "content":
|
|
3716
|
-
default:
|
|
3717
|
-
return cn("flex-1", mobilePadding, contentClassName);
|
|
3649
|
+
(hasActions || hasMenuActions || selector) && /* @__PURE__ */ jsx20("div", { className: "flex gap-2 items-center shrink-0", children: /* @__PURE__ */ jsx20(
|
|
3650
|
+
PageActions,
|
|
3651
|
+
{
|
|
3652
|
+
variant: actionsVariant,
|
|
3653
|
+
actions: actions ?? [],
|
|
3654
|
+
menuActions,
|
|
3655
|
+
selector
|
|
3656
|
+
}
|
|
3657
|
+
) })
|
|
3658
|
+
]
|
|
3718
3659
|
}
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3660
|
+
);
|
|
3661
|
+
}
|
|
3662
|
+
|
|
3663
|
+
// src/components/layout/page-layout.tsx
|
|
3664
|
+
init_cn();
|
|
3665
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3666
|
+
function PageLayout({
|
|
3667
|
+
children,
|
|
3668
|
+
title,
|
|
3669
|
+
subtitle,
|
|
3670
|
+
image,
|
|
3671
|
+
backButton,
|
|
3672
|
+
actions,
|
|
3673
|
+
actionsVariant = "icon-buttons",
|
|
3674
|
+
menuActions,
|
|
3675
|
+
selector,
|
|
3676
|
+
headerVariant,
|
|
3677
|
+
className,
|
|
3678
|
+
contentClassName,
|
|
3679
|
+
showHeader = true
|
|
3680
|
+
}) {
|
|
3681
|
+
const hasActions = actions && actions.length > 0;
|
|
3682
|
+
const needsBottomPadding = hasActions && actionsVariant === "primary-buttons";
|
|
3683
|
+
const hasHeader = showHeader && (title || subtitle || image || backButton || hasActions || selector);
|
|
3684
|
+
return /* @__PURE__ */ jsxs17("div", { className: cn("flex flex-col w-full", className), children: [
|
|
3685
|
+
hasHeader && /* @__PURE__ */ jsx21(
|
|
3686
|
+
TitleBlock,
|
|
3687
|
+
{
|
|
3688
|
+
title,
|
|
3689
|
+
subtitle,
|
|
3690
|
+
image,
|
|
3691
|
+
backButton,
|
|
3692
|
+
actions,
|
|
3693
|
+
actionsVariant,
|
|
3694
|
+
menuActions,
|
|
3695
|
+
selector,
|
|
3696
|
+
variant: headerVariant
|
|
3697
|
+
}
|
|
3698
|
+
),
|
|
3699
|
+
/* @__PURE__ */ jsx21("div", { className: cn("flex flex-col flex-1 gap-[var(--spacing-system-l)]", needsBottomPadding && "pb-28 md:pb-0", contentClassName), children })
|
|
3723
3700
|
] });
|
|
3724
3701
|
}
|
|
3725
|
-
var ListPageContainer = (props) => /* @__PURE__ */ jsx18(PageContainer, { ...props, variant: "list" });
|
|
3726
|
-
var DetailPageContainer = (props) => /* @__PURE__ */ jsx18(PageContainer, { ...props, variant: "detail" });
|
|
3727
|
-
var FormPageContainer = (props) => /* @__PURE__ */ jsx18(PageContainer, { ...props, variant: "form" });
|
|
3728
|
-
var ContentPageContainer = (props) => /* @__PURE__ */ jsx18(PageContainer, { ...props, variant: "content" });
|
|
3729
3702
|
|
|
3730
3703
|
// src/components/layout/article-detail-layout.tsx
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3704
|
+
init_cn();
|
|
3705
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3706
|
+
function PageShell({ children, schemas, contentClassName }) {
|
|
3707
|
+
return /* @__PURE__ */ jsxs18("main", { className: "bg-ods-bg min-h-screen", children: [
|
|
3734
3708
|
schemas,
|
|
3735
|
-
/* @__PURE__ */
|
|
3709
|
+
/* @__PURE__ */ jsx22("div", { className: cn("page-shell-content max-w-[1920px] mx-auto", contentClassName), children })
|
|
3736
3710
|
] });
|
|
3737
3711
|
}
|
|
3738
|
-
function ArticleDetailLayout({ children, schemas }) {
|
|
3739
|
-
return /* @__PURE__ */
|
|
3712
|
+
function ArticleDetailLayout({ children, schemas, contentClassName }) {
|
|
3713
|
+
return /* @__PURE__ */ jsxs18("main", { className: "bg-ods-bg min-h-screen", children: [
|
|
3740
3714
|
schemas,
|
|
3741
|
-
/* @__PURE__ */
|
|
3715
|
+
/* @__PURE__ */ jsx22("div", { className: cn("max-w-[1280px] mx-auto px-6 md:px-20 py-6 md:py-10", contentClassName), children })
|
|
3742
3716
|
] });
|
|
3743
3717
|
}
|
|
3744
3718
|
|
|
@@ -3793,7 +3767,7 @@ function resolveContentHref(composeContentUrl, args) {
|
|
|
3793
3767
|
init_button();
|
|
3794
3768
|
init_cn();
|
|
3795
3769
|
import { AlertTriangle, RefreshCw, Home } from "lucide-react";
|
|
3796
|
-
import { jsx as
|
|
3770
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3797
3771
|
function ErrorState({
|
|
3798
3772
|
title = "Error",
|
|
3799
3773
|
message,
|
|
@@ -3832,36 +3806,36 @@ function ErrorState({
|
|
|
3832
3806
|
}
|
|
3833
3807
|
};
|
|
3834
3808
|
const styles = getVariantStyles();
|
|
3835
|
-
return /* @__PURE__ */
|
|
3809
|
+
return /* @__PURE__ */ jsx23("div", { className: cn("p-6", containerClassName), children: /* @__PURE__ */ jsx23("div", { className: cn(
|
|
3836
3810
|
"rounded-lg p-4 border",
|
|
3837
3811
|
styles.bg,
|
|
3838
3812
|
styles.border,
|
|
3839
3813
|
className
|
|
3840
|
-
), children: /* @__PURE__ */
|
|
3841
|
-
showIcon && /* @__PURE__ */
|
|
3842
|
-
/* @__PURE__ */
|
|
3843
|
-
/* @__PURE__ */
|
|
3844
|
-
/* @__PURE__ */
|
|
3845
|
-
(showRetry || showHome) && /* @__PURE__ */
|
|
3846
|
-
showRetry && onRetry && /* @__PURE__ */
|
|
3814
|
+
), children: /* @__PURE__ */ jsxs19("div", { className: "flex items-start gap-3", children: [
|
|
3815
|
+
showIcon && /* @__PURE__ */ jsx23(AlertTriangle, { className: cn("h-5 w-5 mt-0.5 flex-shrink-0", styles.icon) }),
|
|
3816
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex-1", children: [
|
|
3817
|
+
/* @__PURE__ */ jsx23("h3", { className: cn("font-semibold mb-1", styles.text), children: title }),
|
|
3818
|
+
/* @__PURE__ */ jsx23("p", { className: cn("text-sm", styles.text), children: message }),
|
|
3819
|
+
(showRetry || showHome) && /* @__PURE__ */ jsxs19("div", { className: "flex gap-2 mt-3", children: [
|
|
3820
|
+
showRetry && onRetry && /* @__PURE__ */ jsx23(
|
|
3847
3821
|
Button,
|
|
3848
3822
|
{
|
|
3849
3823
|
onClick: onRetry,
|
|
3850
3824
|
variant: "outline",
|
|
3851
3825
|
size: "small-legacy",
|
|
3852
3826
|
className: "h-8",
|
|
3853
|
-
leftIcon: /* @__PURE__ */
|
|
3827
|
+
leftIcon: /* @__PURE__ */ jsx23(RefreshCw, { className: "h-4 w-4" }),
|
|
3854
3828
|
children: "Try Again"
|
|
3855
3829
|
}
|
|
3856
3830
|
),
|
|
3857
|
-
showHome && onHome && /* @__PURE__ */
|
|
3831
|
+
showHome && onHome && /* @__PURE__ */ jsx23(
|
|
3858
3832
|
Button,
|
|
3859
3833
|
{
|
|
3860
3834
|
onClick: onHome,
|
|
3861
3835
|
variant: "outline",
|
|
3862
3836
|
size: "small-legacy",
|
|
3863
3837
|
className: "h-8",
|
|
3864
|
-
leftIcon: /* @__PURE__ */
|
|
3838
|
+
leftIcon: /* @__PURE__ */ jsx23(Home, { className: "h-4 w-4" }),
|
|
3865
3839
|
children: "Go Home"
|
|
3866
3840
|
}
|
|
3867
3841
|
)
|
|
@@ -3870,7 +3844,7 @@ function ErrorState({
|
|
|
3870
3844
|
] }) }) });
|
|
3871
3845
|
}
|
|
3872
3846
|
function PageError({ message, onRetry, onHome }) {
|
|
3873
|
-
return /* @__PURE__ */
|
|
3847
|
+
return /* @__PURE__ */ jsx23(
|
|
3874
3848
|
ErrorState,
|
|
3875
3849
|
{
|
|
3876
3850
|
title: "Page Error",
|
|
@@ -3884,7 +3858,7 @@ function PageError({ message, onRetry, onHome }) {
|
|
|
3884
3858
|
);
|
|
3885
3859
|
}
|
|
3886
3860
|
function LoadError({ message, onRetry }) {
|
|
3887
|
-
return /* @__PURE__ */
|
|
3861
|
+
return /* @__PURE__ */ jsx23(
|
|
3888
3862
|
ErrorState,
|
|
3889
3863
|
{
|
|
3890
3864
|
title: "Loading Error",
|
|
@@ -3896,7 +3870,7 @@ function LoadError({ message, onRetry }) {
|
|
|
3896
3870
|
);
|
|
3897
3871
|
}
|
|
3898
3872
|
function NotFoundError({ message = "The requested item was not found", onHome }) {
|
|
3899
|
-
return /* @__PURE__ */
|
|
3873
|
+
return /* @__PURE__ */ jsx23(
|
|
3900
3874
|
ErrorState,
|
|
3901
3875
|
{
|
|
3902
3876
|
title: "Not Found",
|
|
@@ -3910,7 +3884,7 @@ function NotFoundError({ message = "The requested item was not found", onHome })
|
|
|
3910
3884
|
|
|
3911
3885
|
// src/components/features/entity-tag-badges.tsx
|
|
3912
3886
|
import Link from "next/link";
|
|
3913
|
-
import { jsx as
|
|
3887
|
+
import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3914
3888
|
var TAG_BADGE_CLASS = "bg-ods-card border border-ods-border";
|
|
3915
3889
|
var BADGE_CLASS = TAG_BADGE_CLASS;
|
|
3916
3890
|
function EntityTagBadges({ tags, basePath, max, className }) {
|
|
@@ -3919,12 +3893,12 @@ function EntityTagBadges({ tags, basePath, max, className }) {
|
|
|
3919
3893
|
const visibleLimit = max == null ? items.length : Math.max(0, max);
|
|
3920
3894
|
const shown = items.slice(0, visibleLimit);
|
|
3921
3895
|
const overflow = items.length - shown.length;
|
|
3922
|
-
return /* @__PURE__ */
|
|
3896
|
+
return /* @__PURE__ */ jsxs20("div", { className: `flex flex-wrap items-center gap-2 w-full ${className || ""}`, children: [
|
|
3923
3897
|
shown.map((tag) => {
|
|
3924
3898
|
const key = tag.tag_id ?? tag.id ?? tag.slug ?? tag.name;
|
|
3925
3899
|
const label = (tag.name || "").toUpperCase();
|
|
3926
3900
|
if (basePath && tag.slug) {
|
|
3927
|
-
return /* @__PURE__ */
|
|
3901
|
+
return /* @__PURE__ */ jsx24(Link, { href: `${basePath}?tags=${tag.slug}`, className: "inline-flex", children: /* @__PURE__ */ jsx24(
|
|
3928
3902
|
StatusBadge,
|
|
3929
3903
|
{
|
|
3930
3904
|
text: label,
|
|
@@ -3933,9 +3907,9 @@ function EntityTagBadges({ tags, basePath, max, className }) {
|
|
|
3933
3907
|
}
|
|
3934
3908
|
) }, key);
|
|
3935
3909
|
}
|
|
3936
|
-
return /* @__PURE__ */
|
|
3910
|
+
return /* @__PURE__ */ jsx24(StatusBadge, { text: label, variant: "card", className: BADGE_CLASS }, key);
|
|
3937
3911
|
}),
|
|
3938
|
-
overflow > 0 && /* @__PURE__ */
|
|
3912
|
+
overflow > 0 && /* @__PURE__ */ jsx24(StatusBadge, { text: `+${overflow}`, variant: "card", className: `${BADGE_CLASS} text-ods-text-secondary` })
|
|
3939
3913
|
] });
|
|
3940
3914
|
}
|
|
3941
3915
|
|
|
@@ -4011,8 +3985,8 @@ function getCaptionsUrl(entityType, entityId, srtContent) {
|
|
|
4011
3985
|
init_cn();
|
|
4012
3986
|
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
4013
3987
|
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
4014
|
-
import * as
|
|
4015
|
-
import { jsx as
|
|
3988
|
+
import * as React13 from "react";
|
|
3989
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4016
3990
|
var containerStyles = cn(
|
|
4017
3991
|
// Layout & spacing — matches lib Input component
|
|
4018
3992
|
"flex items-center gap-2 rounded-[6px] border px-3 h-11 md:h-12 cursor-text",
|
|
@@ -4067,12 +4041,12 @@ function SearchInput({
|
|
|
4067
4041
|
limitTags = "auto",
|
|
4068
4042
|
getLimitTagsText = (more) => `+${more}`
|
|
4069
4043
|
}) {
|
|
4070
|
-
const [internalValue, setInternalValue] =
|
|
4044
|
+
const [internalValue, setInternalValue] = React13.useState(defaultValue);
|
|
4071
4045
|
const currentValue = onChange ? value ?? "" : internalValue;
|
|
4072
4046
|
const debouncedValue = useDebounce(currentValue, debounceMs);
|
|
4073
|
-
const [isOpen, setIsOpen] =
|
|
4074
|
-
const [highlightedIndex, setHighlightedIndex] =
|
|
4075
|
-
const containerRef =
|
|
4047
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
4048
|
+
const [highlightedIndex, setHighlightedIndex] = React13.useState(-1);
|
|
4049
|
+
const containerRef = React13.useRef(null);
|
|
4076
4050
|
const currentPlaceholder = filterChips.length > 0 ? "Add filter..." : placeholder;
|
|
4077
4051
|
const {
|
|
4078
4052
|
visibleCount: rawVisibleCount,
|
|
@@ -4089,10 +4063,10 @@ function SearchInput({
|
|
|
4089
4063
|
placeholder: filterChips.length > 0 ? "" : placeholder
|
|
4090
4064
|
});
|
|
4091
4065
|
const visibleCount = filterChips.length > 0 ? Math.max(1, rawVisibleCount) : rawVisibleCount;
|
|
4092
|
-
const hiddenTagsRef =
|
|
4093
|
-
const hiddenTagsPopupRef =
|
|
4094
|
-
const [showHiddenTags, setShowHiddenTags] =
|
|
4095
|
-
|
|
4066
|
+
const hiddenTagsRef = React13.useRef(null);
|
|
4067
|
+
const hiddenTagsPopupRef = React13.useRef(null);
|
|
4068
|
+
const [showHiddenTags, setShowHiddenTags] = React13.useState(false);
|
|
4069
|
+
React13.useEffect(() => {
|
|
4096
4070
|
if (!showHiddenTags) return;
|
|
4097
4071
|
const handleClick = (e) => {
|
|
4098
4072
|
const target = e.target;
|
|
@@ -4106,7 +4080,7 @@ function SearchInput({
|
|
|
4106
4080
|
const hiddenCount = filterChips.length - visibleCount;
|
|
4107
4081
|
const visibleChips = filterChips.slice(0, visibleCount);
|
|
4108
4082
|
const hiddenChips = filterChips.slice(visibleCount);
|
|
4109
|
-
const { flatResults, groups } =
|
|
4083
|
+
const { flatResults, groups } = React13.useMemo(() => {
|
|
4110
4084
|
if (!groupBy) return { flatResults: results, groups: null };
|
|
4111
4085
|
const grouped = /* @__PURE__ */ new Map();
|
|
4112
4086
|
for (const r of results) {
|
|
@@ -4123,7 +4097,7 @@ function SearchInput({
|
|
|
4123
4097
|
const meetsMinQuery = debouncedValue.length >= minQueryLength;
|
|
4124
4098
|
const autoShow = meetsMinQuery;
|
|
4125
4099
|
const dropdownVisible = showDropdownProp ?? (isOpen && autoShow);
|
|
4126
|
-
|
|
4100
|
+
React13.useEffect(() => {
|
|
4127
4101
|
setHighlightedIndex(-1);
|
|
4128
4102
|
}, [flatResults.length]);
|
|
4129
4103
|
const handleChange = (e) => {
|
|
@@ -4196,20 +4170,20 @@ function SearchInput({
|
|
|
4196
4170
|
const handleOpenChange = (open) => {
|
|
4197
4171
|
setIsOpen(open);
|
|
4198
4172
|
};
|
|
4199
|
-
const defaultRenderResult = (result, isHighlighted) => /* @__PURE__ */
|
|
4200
|
-
result.icon && /* @__PURE__ */
|
|
4201
|
-
/* @__PURE__ */
|
|
4202
|
-
/* @__PURE__ */
|
|
4173
|
+
const defaultRenderResult = (result, isHighlighted) => /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-3 w-full min-w-0", children: [
|
|
4174
|
+
result.icon && /* @__PURE__ */ jsx25("span", { className: "flex-shrink-0 text-ods-text-secondary [&_svg]:size-4", children: result.icon }),
|
|
4175
|
+
/* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
|
|
4176
|
+
/* @__PURE__ */ jsx25("div", { className: cn(
|
|
4203
4177
|
"text-sm font-medium leading-5 truncate",
|
|
4204
4178
|
isHighlighted ? "text-ods-accent" : "text-ods-text-primary"
|
|
4205
4179
|
), title: result.title, children: result.title }),
|
|
4206
|
-
result.description && /* @__PURE__ */
|
|
4180
|
+
result.description && /* @__PURE__ */ jsx25("div", { className: "text-xs leading-4 text-ods-text-secondary truncate mt-0.5", title: result.description, children: result.description })
|
|
4207
4181
|
] }),
|
|
4208
|
-
result.type && /* @__PURE__ */
|
|
4182
|
+
result.type && /* @__PURE__ */ jsx25("span", { className: "flex-shrink-0 text-[11px] font-medium text-ods-text-muted uppercase tracking-wider", children: result.type })
|
|
4209
4183
|
] });
|
|
4210
4184
|
const renderRow = (result, index) => {
|
|
4211
4185
|
const isHighlighted = index === highlightedIndex;
|
|
4212
|
-
return /* @__PURE__ */
|
|
4186
|
+
return /* @__PURE__ */ jsx25(
|
|
4213
4187
|
"div",
|
|
4214
4188
|
{
|
|
4215
4189
|
role: "option",
|
|
@@ -4228,15 +4202,15 @@ function SearchInput({
|
|
|
4228
4202
|
};
|
|
4229
4203
|
const renderDropdownContent = () => {
|
|
4230
4204
|
if (isLoading) {
|
|
4231
|
-
return /* @__PURE__ */
|
|
4205
|
+
return /* @__PURE__ */ jsx25("div", { className: "px-4 py-3 text-ods-text-secondary text-[14px]", children: "Loading..." });
|
|
4232
4206
|
}
|
|
4233
4207
|
if (flatResults.length === 0) {
|
|
4234
|
-
return /* @__PURE__ */
|
|
4208
|
+
return /* @__PURE__ */ jsx25("div", { className: "px-4 py-3 text-ods-text-secondary text-[14px]", children: emptyResultsText });
|
|
4235
4209
|
}
|
|
4236
4210
|
if (groups) {
|
|
4237
4211
|
let globalIndex = 0;
|
|
4238
|
-
return Array.from(groups.entries()).map(([groupLabel, groupResults]) => /* @__PURE__ */
|
|
4239
|
-
/* @__PURE__ */
|
|
4212
|
+
return Array.from(groups.entries()).map(([groupLabel, groupResults]) => /* @__PURE__ */ jsxs21("div", { children: [
|
|
4213
|
+
/* @__PURE__ */ jsx25("div", { className: "px-4 py-2 text-[12px] font-semibold text-ods-text-secondary uppercase tracking-wide bg-ods-bg", children: groupLabel }),
|
|
4240
4214
|
groupResults.map((result) => {
|
|
4241
4215
|
const idx = globalIndex++;
|
|
4242
4216
|
return renderRow(result, idx);
|
|
@@ -4246,9 +4220,9 @@ function SearchInput({
|
|
|
4246
4220
|
return flatResults.map((result, index) => renderRow(result, index));
|
|
4247
4221
|
};
|
|
4248
4222
|
const hasValue = currentValue.length > 0;
|
|
4249
|
-
return /* @__PURE__ */
|
|
4250
|
-
/* @__PURE__ */
|
|
4251
|
-
/* @__PURE__ */
|
|
4223
|
+
return /* @__PURE__ */ jsxs21("div", { className: cn("relative", className), ref: containerRef, children: [
|
|
4224
|
+
/* @__PURE__ */ jsxs21(PopoverPrimitive.Root, { open: dropdownVisible, onOpenChange: handleOpenChange, modal: false, children: [
|
|
4225
|
+
/* @__PURE__ */ jsx25(PopoverPrimitive.Anchor, { asChild: true, children: /* @__PURE__ */ jsxs21(
|
|
4252
4226
|
"div",
|
|
4253
4227
|
{
|
|
4254
4228
|
className: cn(
|
|
@@ -4261,9 +4235,9 @@ function SearchInput({
|
|
|
4261
4235
|
setIsOpen(true);
|
|
4262
4236
|
},
|
|
4263
4237
|
children: [
|
|
4264
|
-
/* @__PURE__ */
|
|
4265
|
-
/* @__PURE__ */
|
|
4266
|
-
visibleChips.map((chip) => /* @__PURE__ */
|
|
4238
|
+
/* @__PURE__ */ jsx25("span", { className: "flex-shrink-0 text-ods-text-secondary transition-colors duration-200 group-has-[:focus]:text-ods-accent [&_svg]:size-4 md:[&_svg]:size-6", children: startAdornment !== void 0 ? startAdornment : /* @__PURE__ */ jsx25(SearchIcon, {}) }),
|
|
4239
|
+
/* @__PURE__ */ jsxs21("div", { ref: middleRef, className: "flex-1 flex items-center gap-2 min-w-0 overflow-hidden", children: [
|
|
4240
|
+
visibleChips.map((chip) => /* @__PURE__ */ jsx25(
|
|
4267
4241
|
Tag,
|
|
4268
4242
|
{
|
|
4269
4243
|
variant: chipVariantToTagVariant(chip.variant),
|
|
@@ -4273,7 +4247,7 @@ function SearchInput({
|
|
|
4273
4247
|
},
|
|
4274
4248
|
chip.id
|
|
4275
4249
|
)),
|
|
4276
|
-
hiddenCount > 0 && /* @__PURE__ */
|
|
4250
|
+
hiddenCount > 0 && /* @__PURE__ */ jsx25("div", { ref: hiddenTagsRef, className: "shrink-0", children: /* @__PURE__ */ jsx25(
|
|
4277
4251
|
"button",
|
|
4278
4252
|
{
|
|
4279
4253
|
ref: badgeRef,
|
|
@@ -4292,7 +4266,7 @@ function SearchInput({
|
|
|
4292
4266
|
children: getLimitTagsText(hiddenCount)
|
|
4293
4267
|
}
|
|
4294
4268
|
) }),
|
|
4295
|
-
/* @__PURE__ */
|
|
4269
|
+
/* @__PURE__ */ jsx25(
|
|
4296
4270
|
"input",
|
|
4297
4271
|
{
|
|
4298
4272
|
ref: inputRef,
|
|
@@ -4309,15 +4283,15 @@ function SearchInput({
|
|
|
4309
4283
|
}
|
|
4310
4284
|
)
|
|
4311
4285
|
] }),
|
|
4312
|
-
/* @__PURE__ */
|
|
4313
|
-
hasValue && /* @__PURE__ */
|
|
4286
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1 shrink-0 ml-auto", children: [
|
|
4287
|
+
hasValue && /* @__PURE__ */ jsx25(
|
|
4314
4288
|
"button",
|
|
4315
4289
|
{
|
|
4316
4290
|
type: "button",
|
|
4317
4291
|
onClick: handleClear,
|
|
4318
4292
|
className: "flex items-center justify-center hover:opacity-70 transition-opacity",
|
|
4319
4293
|
"aria-label": "Clear search",
|
|
4320
|
-
children: /* @__PURE__ */
|
|
4294
|
+
children: /* @__PURE__ */ jsx25(XmarkCircleIcon, { className: "text-ods-text-secondary", size: 24 })
|
|
4321
4295
|
}
|
|
4322
4296
|
),
|
|
4323
4297
|
endAdornment
|
|
@@ -4325,7 +4299,7 @@ function SearchInput({
|
|
|
4325
4299
|
]
|
|
4326
4300
|
}
|
|
4327
4301
|
) }),
|
|
4328
|
-
/* @__PURE__ */
|
|
4302
|
+
/* @__PURE__ */ jsx25(
|
|
4329
4303
|
PopoverPrimitive.Content,
|
|
4330
4304
|
{
|
|
4331
4305
|
className: cn(
|
|
@@ -4348,14 +4322,14 @@ function SearchInput({
|
|
|
4348
4322
|
e.preventDefault();
|
|
4349
4323
|
}
|
|
4350
4324
|
},
|
|
4351
|
-
children: /* @__PURE__ */
|
|
4352
|
-
/* @__PURE__ */
|
|
4353
|
-
/* @__PURE__ */
|
|
4325
|
+
children: /* @__PURE__ */ jsxs21(ScrollAreaPrimitive.Root, { className: "overflow-hidden", children: [
|
|
4326
|
+
/* @__PURE__ */ jsx25(ScrollAreaPrimitive.Viewport, { className: "max-h-[320px] w-full", children: /* @__PURE__ */ jsx25("div", { role: "listbox", children: renderDropdownContent() }) }),
|
|
4327
|
+
/* @__PURE__ */ jsx25(ScrollAreaPrimitive.Scrollbar, { className: "hidden", orientation: "vertical", children: /* @__PURE__ */ jsx25(ScrollAreaPrimitive.Thumb, {}) })
|
|
4354
4328
|
] })
|
|
4355
4329
|
}
|
|
4356
4330
|
)
|
|
4357
4331
|
] }),
|
|
4358
|
-
showHiddenTags && hiddenCount > 0 && /* @__PURE__ */
|
|
4332
|
+
showHiddenTags && hiddenCount > 0 && /* @__PURE__ */ jsx25(
|
|
4359
4333
|
HiddenTagsPopup,
|
|
4360
4334
|
{
|
|
4361
4335
|
ref: hiddenTagsPopupRef,
|
|
@@ -4369,7 +4343,7 @@ function SearchInput({
|
|
|
4369
4343
|
}
|
|
4370
4344
|
}
|
|
4371
4345
|
),
|
|
4372
|
-
/* @__PURE__ */
|
|
4346
|
+
/* @__PURE__ */ jsx25(
|
|
4373
4347
|
"span",
|
|
4374
4348
|
{
|
|
4375
4349
|
ref: textMeasureRef,
|
|
@@ -4378,13 +4352,13 @@ function SearchInput({
|
|
|
4378
4352
|
children: currentPlaceholder
|
|
4379
4353
|
}
|
|
4380
4354
|
),
|
|
4381
|
-
/* @__PURE__ */
|
|
4355
|
+
/* @__PURE__ */ jsx25(
|
|
4382
4356
|
"div",
|
|
4383
4357
|
{
|
|
4384
4358
|
ref: measureRef,
|
|
4385
4359
|
"aria-hidden": "true",
|
|
4386
4360
|
className: "fixed -left-[9999px] top-0 flex gap-2 pointer-events-none",
|
|
4387
|
-
children: filterChips.map((chip) => /* @__PURE__ */
|
|
4361
|
+
children: filterChips.map((chip) => /* @__PURE__ */ jsx25(
|
|
4388
4362
|
Tag,
|
|
4389
4363
|
{
|
|
4390
4364
|
variant: chipVariantToTagVariant(chip.variant),
|
|
@@ -4403,7 +4377,7 @@ function SearchInput({
|
|
|
4403
4377
|
// src/components/ui/filter-pill-row.tsx
|
|
4404
4378
|
init_button();
|
|
4405
4379
|
import { Filter } from "lucide-react";
|
|
4406
|
-
import { jsx as
|
|
4380
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4407
4381
|
function FilterPillRow({
|
|
4408
4382
|
label,
|
|
4409
4383
|
selectedValue,
|
|
@@ -4412,12 +4386,12 @@ function FilterPillRow({
|
|
|
4412
4386
|
countLabel,
|
|
4413
4387
|
children
|
|
4414
4388
|
}) {
|
|
4415
|
-
return /* @__PURE__ */
|
|
4416
|
-
/* @__PURE__ */
|
|
4417
|
-
/* @__PURE__ */
|
|
4418
|
-
/* @__PURE__ */
|
|
4389
|
+
return /* @__PURE__ */ jsxs22("div", { className: "flex flex-wrap items-center gap-3 p-4 bg-ods-card border border-ods-border rounded-lg", children: [
|
|
4390
|
+
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
|
|
4391
|
+
/* @__PURE__ */ jsx26(Filter, { className: "h-4 w-4 text-ods-accent" }),
|
|
4392
|
+
/* @__PURE__ */ jsx26("span", { className: "text-h5 text-ods-text-secondary", children: label })
|
|
4419
4393
|
] }),
|
|
4420
|
-
children || options.map((opt) => /* @__PURE__ */
|
|
4394
|
+
children || options.map((opt) => /* @__PURE__ */ jsx26(
|
|
4421
4395
|
Button,
|
|
4422
4396
|
{
|
|
4423
4397
|
type: "button",
|
|
@@ -4429,7 +4403,7 @@ function FilterPillRow({
|
|
|
4429
4403
|
},
|
|
4430
4404
|
opt.value
|
|
4431
4405
|
)),
|
|
4432
|
-
countLabel && /* @__PURE__ */
|
|
4406
|
+
countLabel && /* @__PURE__ */ jsx26("div", { className: "ml-auto text-[12px] font-['DM_Sans'] text-ods-text-secondary shrink-0", children: countLabel })
|
|
4433
4407
|
] });
|
|
4434
4408
|
}
|
|
4435
4409
|
|
|
@@ -4507,6 +4481,9 @@ export {
|
|
|
4507
4481
|
fetchPriorityProp,
|
|
4508
4482
|
extractYouTubeId,
|
|
4509
4483
|
Video,
|
|
4484
|
+
PAGE_HEADING_CLASS,
|
|
4485
|
+
SECTION_HEADING_CLASS,
|
|
4486
|
+
PageHeading,
|
|
4510
4487
|
RATIO_GRID_CLASS,
|
|
4511
4488
|
RATIO_DISPLAY_GRID_CLASS,
|
|
4512
4489
|
RatioTabs,
|
|
@@ -4551,11 +4528,9 @@ export {
|
|
|
4551
4528
|
PageActions,
|
|
4552
4529
|
usePageActionsBottomPadding,
|
|
4553
4530
|
BackButton,
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
|
|
4557
|
-
FormPageContainer,
|
|
4558
|
-
ContentPageContainer,
|
|
4531
|
+
EntityImage,
|
|
4532
|
+
TitleBlock,
|
|
4533
|
+
PageLayout,
|
|
4559
4534
|
PageShell,
|
|
4560
4535
|
ArticleDetailLayout,
|
|
4561
4536
|
DEFAULT_CONTENT_SUFFIXES,
|
|
@@ -4576,4 +4551,4 @@ export {
|
|
|
4576
4551
|
SearchInput,
|
|
4577
4552
|
FilterPillRow
|
|
4578
4553
|
};
|
|
4579
|
-
//# sourceMappingURL=chunk-
|
|
4554
|
+
//# sourceMappingURL=chunk-GHWOQUB4.js.map
|