@flamingo-stack/openframe-frontend-core 0.0.705 → 0.0.706-snapshot.20261006190707
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-4KX6OED2.cjs → chunk-2G7UYK35.cjs} +46 -46
- package/dist/{chunk-KOWVJD4V.cjs → chunk-2KXTOP6G.cjs} +70 -57
- package/dist/{chunk-A75QY6CD.cjs → chunk-2RNB5DTN.cjs} +21 -21
- package/dist/{chunk-PN2RKPDF.js → chunk-36BCTE7D.js} +10 -10
- package/dist/{chunk-ZSAGLQOD.cjs → chunk-3AHTOSXJ.cjs} +17 -17
- package/dist/{chunk-VR2ZLFCP.js → chunk-4IBPRIQH.js} +1 -1
- package/dist/{chunk-FCGC42TS.js → chunk-4L6XCMOU.js} +66 -62
- package/dist/{chunk-X5MQ7JRP.js → chunk-4UM2ETLM.js} +9 -9
- package/dist/{chunk-6NJKKO73.cjs → chunk-6I4ZAFO2.cjs} +15 -15
- package/dist/{chunk-RBDP4WDE.js → chunk-6IW7TWPV.js} +6 -6
- package/dist/{chunk-MMOODW57.cjs → chunk-6NTPY5QA.cjs} +1887 -94
- package/dist/{chunk-QFXRPRFT.js → chunk-6YKAT7NV.js} +3 -3
- package/dist/{chunk-HPWWNJE7.cjs → chunk-AOWDNSTM.cjs} +89 -89
- package/dist/{chunk-IHERL5V4.cjs → chunk-B73373AG.cjs} +34 -34
- package/dist/{chunk-DENB2XJC.js → chunk-CNWOMQQJ.js} +2 -2
- package/dist/{chunk-MP2C3LJ4.js → chunk-CUME3VTQ.js} +1 -1
- package/dist/{chunk-PDWVPI3S.js → chunk-CZ7Y7UG4.js} +4 -72
- package/dist/{chunk-YHM5AWTT.js → chunk-CZSZSDD4.js} +6 -6
- package/dist/{chunk-F6I6XZMN.js → chunk-DA5UDTLG.js} +5 -5
- package/dist/{chunk-MFFCUVWG.js → chunk-F57ECE2I.js} +1 -1
- package/dist/{chunk-CH5232HV.js → chunk-FI6GMDO7.js} +2455 -662
- package/dist/{chunk-NDESEPW5.js → chunk-FXJ3WWUB.js} +68 -0
- package/dist/{chunk-G5A3PSPV.js → chunk-HDOYSEOJ.js} +1080 -691
- package/dist/{chunk-VA5T32XA.js → chunk-I3ST4PLM.js} +2 -2
- package/dist/{chunk-5HBHO5TB.js → chunk-JPG7OHEG.js} +1 -1
- package/dist/{chunk-YFBM2K6X.cjs → chunk-JRU2CXLB.cjs} +4 -4
- package/dist/{chunk-MKXO4Q5P.js → chunk-KUC673HM.js} +383 -142
- package/dist/{chunk-JEZKGCZI.cjs → chunk-L6Y6OOKG.cjs} +26 -26
- package/dist/{chunk-F6AFPNDF.js → chunk-LFFB6EMB.js} +29 -16
- package/dist/{chunk-X72J4ACL.cjs → chunk-LLSUVPQC.cjs} +252 -8
- package/dist/{chunk-RKV5B7EU.cjs → chunk-LM7TXMLU.cjs} +72 -4
- package/dist/{chunk-6SEANMOU.js → chunk-LNW45N2C.js} +11 -11
- package/dist/{chunk-OUY3HHW6.cjs → chunk-LRQTJOF2.cjs} +928 -539
- package/dist/{chunk-DW7G4KG3.js → chunk-MR3A4MZV.js} +3 -3
- package/dist/{chunk-2YXVWZVF.js → chunk-N45D4ZXQ.js} +959 -715
- package/dist/{chunk-Z2VNQQ74.js → chunk-NCPTID44.js} +978 -942
- package/dist/{chunk-WA6GUYQ4.cjs → chunk-NSGXARGJ.cjs} +104 -104
- package/dist/{chunk-ABU3TGXA.cjs → chunk-OF6GEI5A.cjs} +3 -3
- package/dist/{chunk-IKTQ3ZAG.cjs → chunk-OJLR5MEO.cjs} +6 -6
- package/dist/{chunk-VESKITRQ.cjs → chunk-P42V6N34.cjs} +736 -732
- package/dist/{chunk-OHFS7VOU.cjs → chunk-PLYEKV3N.cjs} +2 -2
- package/dist/{chunk-7VVFKJY5.js → chunk-PO33GZVY.js} +1799 -3449
- package/dist/{chunk-7LS22BZU.cjs → chunk-QAOFMK2A.cjs} +14 -14
- package/dist/{chunk-VHCACDKP.cjs → chunk-RQRX4YC3.cjs} +39 -39
- package/dist/{chunk-3MX5S4CF.cjs → chunk-SEXWHIMS.cjs} +899 -2549
- package/dist/{chunk-AQWZNP6A.js → chunk-SS5MBHDP.js} +4 -4
- package/dist/{chunk-ZSAO2HBW.js → chunk-TDYIREDJ.js} +15 -15
- package/dist/{chunk-XOYH2YQE.cjs → chunk-UDFRUKLC.cjs} +2 -2
- package/dist/{chunk-TYWLNCNH.cjs → chunk-UVTD52MD.cjs} +14 -82
- package/dist/{chunk-N3COXDBH.cjs → chunk-VX4E6YSB.cjs} +41 -5
- package/dist/{chunk-2QEUFXNS.cjs → chunk-WCVZCGK5.cjs} +312 -71
- package/dist/{chunk-6XIF2Z7I.js → chunk-WMX26HB5.js} +3 -3
- package/dist/{chunk-D7BTSVMS.cjs → chunk-Y2GSOUCS.cjs} +2 -2
- package/dist/{chunk-4I45Y3DN.cjs → chunk-YBUT4AMG.cjs} +6 -6
- package/dist/components/case-studies/index.cjs +30 -32
- package/dist/components/case-studies/index.js +14 -16
- package/dist/components/chat/entity-cards/case-study-card.d.ts +11 -4
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +11 -11
- package/dist/components/chat/index.d.ts +1 -1
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +16 -16
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +34 -5
- package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -1
- package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +12 -14
- package/dist/components/contact/index.js +11 -13
- package/dist/components/docs/index.cjs +15 -17
- package/dist/components/docs/index.js +14 -16
- package/dist/components/embeds/index.cjs +12 -14
- package/dist/components/embeds/index.js +11 -13
- package/dist/components/faq/index.cjs +13 -15
- package/dist/components/faq/index.js +12 -14
- package/dist/components/features/index.cjs +12 -14
- package/dist/components/features/index.js +21 -23
- package/dist/components/help-center-pages/index.cjs +118 -120
- package/dist/components/help-center-pages/index.js +33 -35
- package/dist/components/icons/index.cjs +3 -5
- package/dist/components/icons/index.js +9 -11
- package/dist/components/icons-v2-generated/index.cjs +3 -5
- package/dist/components/icons-v2-generated/index.js +2 -4
- package/dist/components/index.cjs +87 -158
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +331 -402
- package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
- package/dist/components/meeting-scheduler/index.cjs +62 -64
- package/dist/components/meeting-scheduler/index.js +12 -14
- package/dist/components/navigation/index.cjs +28 -16
- package/dist/components/navigation/index.d.ts +14 -10
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +38 -26
- package/dist/components/navigation/mingo-ai-button.d.ts +38 -3
- package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts +3 -0
- package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +1 -0
- package/dist/components/navigation/mobile-nav-sheet.d.ts +48 -0
- package/dist/components/navigation/mobile-nav-sheet.d.ts.map +1 -0
- package/dist/components/navigation/nav-item-row.d.ts +27 -0
- package/dist/components/navigation/nav-item-row.d.ts.map +1 -0
- package/dist/components/navigation/nav-panel.d.ts +43 -0
- package/dist/components/navigation/nav-panel.d.ts.map +1 -0
- package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -2
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/site-footer.d.ts +28 -0
- package/dist/components/navigation/site-footer.d.ts.map +1 -0
- package/dist/components/navigation/site-header.d.ts +61 -0
- package/dist/components/navigation/site-header.d.ts.map +1 -0
- package/dist/components/navigation/site-nav-link.d.ts +26 -0
- package/dist/components/navigation/site-nav-link.d.ts.map +1 -0
- package/dist/components/navigation/top-navigation.d.ts +2 -2
- package/dist/components/navigation/top-navigation.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +15 -17
- package/dist/components/onboarding-guides/index.js +14 -16
- package/dist/components/platform/ToolBadge.d.ts +6 -0
- package/dist/components/platform/ToolBadge.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +10 -8
- package/dist/components/related-content/index.js +9 -7
- package/dist/components/tickets/index.cjs +16 -18
- package/dist/components/tickets/index.js +15 -17
- package/dist/components/ui/brand-association-card.d.ts +7 -0
- package/dist/components/ui/brand-association-card.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +14 -14
- package/dist/components/ui/index.js +19 -19
- package/dist/hooks/index.cjs +19 -11
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +19 -11
- package/dist/hooks/ui/index.d.ts +3 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-active-section.d.ts +10 -0
- package/dist/hooks/ui/use-active-section.d.ts.map +1 -0
- package/dist/hooks/ui/use-nav-menus.d.ts +48 -0
- package/dist/hooks/ui/use-nav-menus.d.ts.map +1 -0
- package/dist/hooks/ui/use-visitor-os.d.ts +15 -0
- package/dist/hooks/ui/use-visitor-os.d.ts.map +1 -0
- package/dist/hooks/use-location-hash.d.ts +9 -0
- package/dist/hooks/use-location-hash.d.ts.map +1 -0
- package/dist/index.cjs +56 -21
- package/dist/index.js +231 -196
- package/dist/types/case-study.d.ts +9 -0
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/types/navigation.d.ts +95 -65
- package/dist/types/navigation.d.ts.map +1 -1
- package/dist/utils/index.cjs +55 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +50 -1
- package/dist/utils/source-icons.d.ts.map +1 -1
- package/dist/utils/visitor-os.d.ts +45 -0
- package/dist/utils/visitor-os.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/chat/entity-cards/case-study-card.tsx +115 -5
- package/src/components/chat/index.ts +7 -1
- package/src/components/chat/nav-link-anchor-via-runtime.tsx +62 -9
- package/src/components/chat/utils/icon-library.tsx +35 -1
- package/src/components/index.ts +0 -2
- package/src/components/loading/page-layout-skeleton.tsx +1 -1
- package/src/components/navigation/index.ts +21 -14
- package/src/components/navigation/mingo-ai-button.tsx +139 -63
- package/src/components/navigation/mobile-nav-sheet-id.ts +2 -0
- package/src/components/navigation/mobile-nav-sheet.tsx +241 -0
- package/src/components/navigation/nav-item-row.tsx +129 -0
- package/src/components/navigation/nav-panel.tsx +196 -0
- package/src/components/navigation/navigation-sidebar-item.tsx +1 -2
- package/src/components/navigation/site-footer.tsx +256 -0
- package/src/components/navigation/site-header.tsx +339 -0
- package/src/components/navigation/site-nav-link.tsx +41 -0
- package/src/components/navigation/ticket-alerts-button.tsx +2 -2
- package/src/components/navigation/top-navigation.tsx +2 -2
- package/src/components/platform/ToolBadge.tsx +18 -1
- package/src/components/ui/brand-association-card.tsx +25 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/ui/index.ts +3 -0
- package/src/hooks/ui/use-active-section.ts +44 -0
- package/src/hooks/ui/use-nav-menus.ts +200 -0
- package/src/hooks/ui/use-visitor-os.ts +33 -0
- package/src/hooks/use-location-hash.ts +34 -0
- package/src/styles/chat-animations.css +57 -2
- package/src/types/case-study.ts +16 -0
- package/src/types/navigation.ts +80 -66
- package/src/utils/index.ts +1 -0
- package/src/utils/source-icons.ts +13 -0
- package/src/utils/visitor-os.ts +84 -0
- package/dist/chunk-LMBC5FFP.js +0 -43
- package/dist/chunk-O43V3EOS.js +0 -252
- package/dist/chunk-QZVSJF2K.cjs +0 -252
- package/dist/chunk-RALRPFDW.cjs +0 -43
- package/dist/components/footer-waitlist-button.d.ts +0 -29
- package/dist/components/footer-waitlist-button.d.ts.map +0 -1
- package/dist/components/footer.d.ts +0 -47
- package/dist/components/footer.d.ts.map +0 -1
- package/dist/components/navigation/client-only-header.d.ts +0 -8
- package/dist/components/navigation/client-only-header.d.ts.map +0 -1
- package/dist/components/navigation/header-skeleton.d.ts +0 -12
- package/dist/components/navigation/header-skeleton.d.ts.map +0 -1
- package/dist/components/navigation/header.d.ts +0 -9
- package/dist/components/navigation/header.d.ts.map +0 -1
- package/dist/components/navigation/mobile-nav-panel.d.ts +0 -10
- package/dist/components/navigation/mobile-nav-panel.d.ts.map +0 -1
- package/src/components/footer-waitlist-button.tsx +0 -53
- package/src/components/footer.tsx +0 -195
- package/src/components/navigation/client-only-header.tsx +0 -22
- package/src/components/navigation/header-skeleton.tsx +0 -74
- package/src/components/navigation/header.tsx +0 -429
- package/src/components/navigation/mobile-nav-panel.tsx +0 -155
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
interface FooterLink {
|
|
3
|
-
href: string;
|
|
4
|
-
label: string;
|
|
5
|
-
}
|
|
6
|
-
interface FooterSection {
|
|
7
|
-
title: string;
|
|
8
|
-
links: FooterLink[];
|
|
9
|
-
}
|
|
10
|
-
interface FooterConfig {
|
|
11
|
-
name: string;
|
|
12
|
-
legalName: string;
|
|
13
|
-
description: string;
|
|
14
|
-
logo?: ReactNode;
|
|
15
|
-
sections: FooterSection[];
|
|
16
|
-
customComponent?: ReactNode;
|
|
17
|
-
nameElement?: ReactNode;
|
|
18
|
-
hideSocialRow?: boolean;
|
|
19
|
-
rightColumnContent?: ReactNode;
|
|
20
|
-
belowDescriptionContent?: ReactNode;
|
|
21
|
-
moveDescriptionToRight?: boolean;
|
|
22
|
-
keepBelowDescriptionLeft?: boolean;
|
|
23
|
-
backgroundColor?: string;
|
|
24
|
-
social?: {
|
|
25
|
-
github?: string;
|
|
26
|
-
twitter?: string;
|
|
27
|
-
linkedin?: string;
|
|
28
|
-
reddit?: string;
|
|
29
|
-
youtube?: string;
|
|
30
|
-
instagram?: string;
|
|
31
|
-
facebook?: string;
|
|
32
|
-
discord?: string;
|
|
33
|
-
telegram?: string;
|
|
34
|
-
whatsapp?: string;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
interface FooterProps {
|
|
38
|
-
config?: FooterConfig;
|
|
39
|
-
renderLink?: (link: FooterLink) => ReactNode;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Platform-Aware Footer Component
|
|
43
|
-
* Accepts configuration from app-config.ts
|
|
44
|
-
*/
|
|
45
|
-
export declare function Footer({ config, renderLink }: FooterProps): import("react").JSX.Element | null;
|
|
46
|
-
export {};
|
|
47
|
-
//# sourceMappingURL=footer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../src/components/footer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,uBAAuB,CAAC,EAAE,SAAS,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,SAAS,CAAC;CAC9C;AAMD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,WAAW,sCAQzD"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import { type HeaderConfig } from './header';
|
|
3
|
-
export interface ClientOnlyHeaderProps {
|
|
4
|
-
config: HeaderConfig;
|
|
5
|
-
skeleton?: ReactNode;
|
|
6
|
-
}
|
|
7
|
-
export declare function ClientOnlyHeader({ config, skeleton }: ClientOnlyHeaderProps): string | number | bigint | true | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element;
|
|
8
|
-
//# sourceMappingURL=client-only-header.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-only-header.d.ts","sourceRoot":"","sources":["../../../src/components/navigation/client-only-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGrD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB,ySAS3E"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { HeaderConfig } from '../../types/navigation';
|
|
2
|
-
export interface HeaderSkeletonProps {
|
|
3
|
-
config?: HeaderConfig;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Loading skeleton mirroring the unified ODS top-navigation geometry
|
|
7
|
-
* (`TopNavigation`, Figma 2797-5978): 48px mobile / 56px md+, cell model.
|
|
8
|
-
* Keep in sync with `header.tsx` — a diverging skeleton makes the
|
|
9
|
-
* skeleton→live handoff jump.
|
|
10
|
-
*/
|
|
11
|
-
export declare function HeaderSkeleton({ config }: HeaderSkeletonProps): import("react").JSX.Element;
|
|
12
|
-
//# sourceMappingURL=header-skeleton.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header-skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/navigation/header-skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,+BA4D7D"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { HeaderConfig } from '../../types/navigation';
|
|
3
|
-
export interface HeaderProps {
|
|
4
|
-
config: HeaderConfig;
|
|
5
|
-
platform?: string;
|
|
6
|
-
}
|
|
7
|
-
export type { HeaderConfig } from '../../types/navigation';
|
|
8
|
-
export declare function Header({ config }: HeaderProps): React.JSX.Element;
|
|
9
|
-
//# sourceMappingURL=header.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/components/navigation/header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAU3E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,qBAiZ7C"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type React from 'react';
|
|
2
|
-
import type { MobileNavConfig } from '../../types/navigation';
|
|
3
|
-
/** DOM id of the panel — referenced by the header hamburger's `aria-controls`. */
|
|
4
|
-
export declare const MOBILE_NAV_PANEL_ID = "mobile-nav-panel";
|
|
5
|
-
export interface MobileNavPanelProps {
|
|
6
|
-
isOpen: boolean;
|
|
7
|
-
config: MobileNavConfig;
|
|
8
|
-
}
|
|
9
|
-
export declare function MobileNavPanel({ isOpen, config }: MobileNavPanelProps): React.JSX.Element | null;
|
|
10
|
-
//# sourceMappingURL=mobile-nav-panel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-nav-panel.d.ts","sourceRoot":"","sources":["../../../src/components/navigation/mobile-nav-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,wBAAwB,CAAC;AAK9E,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,mBAAmB,4BAqIrE"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useCallback } from 'react';
|
|
4
|
-
import { useChatRuntime } from '../contexts/chat-runtime-context';
|
|
5
|
-
import { useRouter } from '../embed-shims/next-navigation';
|
|
6
|
-
import { executeNavigationImperative } from './chat/utils/execute-navigation';
|
|
7
|
-
import { OpenFrameLogo } from './icons';
|
|
8
|
-
import { Button } from './ui/button';
|
|
9
|
-
|
|
10
|
-
export interface FooterWaitlistButtonProps {
|
|
11
|
-
className?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Small wrapper around JoinWaitlistButton for use inside the footer.
|
|
16
|
-
*
|
|
17
|
-
* Routes through the host's unified-navigation hook
|
|
18
|
-
* (`runtime.navigation.navigate`) when a `ChatRuntimeContext` is
|
|
19
|
-
* mounted — that's the same path EVERY other in-app navigation
|
|
20
|
-
* surface uses (source chips, inline cards, search-autocomplete,
|
|
21
|
-
* action cards). One rule, one decision tree across the whole app.
|
|
22
|
-
* The hub's `HubRuntimeProvider` wires `navigate` to its `useUnifiedNav`
|
|
23
|
-
* helper, so this button picks up cross-platform new-tab decisions,
|
|
24
|
-
* same-URL re-scroll handling, embed-mode short-circuiting, and any
|
|
25
|
-
* future host-side nav rules for free.
|
|
26
|
-
*
|
|
27
|
-
* Falls back to the embed-shim's `router.push` when no runtime is
|
|
28
|
-
* mounted (third-party embedders who haven't set up
|
|
29
|
-
* `ChatRuntimeContext` — the lib stays usable without forcing them
|
|
30
|
-
* to wire the full chat-runtime).
|
|
31
|
-
*
|
|
32
|
-
* Target URL: `/waitlist#top`. `#top` is the canonical "scroll to
|
|
33
|
-
* page top" anchor — the destination page has an explicit
|
|
34
|
-
* `<div id="top">` at the top of `<main>` so native browser anchor
|
|
35
|
-
* scroll works in every browser regardless of the HTML5 magic-anchor
|
|
36
|
-
* behavior.
|
|
37
|
-
*/
|
|
38
|
-
export function FooterWaitlistButton({ className }: FooterWaitlistButtonProps) {
|
|
39
|
-
const router = useRouter();
|
|
40
|
-
const runtime = useChatRuntime();
|
|
41
|
-
|
|
42
|
-
const handleClick = useCallback(() => {
|
|
43
|
-
// The unified nav primitive: host `navigation.navigate` if wired, else the
|
|
44
|
-
// embed-shim router; new-tab/embed decision handled internally.
|
|
45
|
-
executeNavigationImperative({ runtime, href: '/waitlist#top', fallbackNavigate: router.push });
|
|
46
|
-
}, [router, runtime]);
|
|
47
|
-
|
|
48
|
-
return (
|
|
49
|
-
<Button onClick={handleClick} className={className} leftIcon={<OpenFrameLogo />}>
|
|
50
|
-
Join Waitlist
|
|
51
|
-
</Button>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { Suspense } from 'react';
|
|
4
|
-
import type { ReactNode } from 'react';
|
|
5
|
-
import { copyrightLine } from '../utils/copyright-line';
|
|
6
|
-
import { SocialIconRow } from './social-icon-row';
|
|
7
|
-
import { Skeleton } from './ui/skeleton';
|
|
8
|
-
|
|
9
|
-
interface FooterLink {
|
|
10
|
-
href: string;
|
|
11
|
-
label: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface FooterSection {
|
|
15
|
-
title: string;
|
|
16
|
-
links: FooterLink[];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface FooterConfig {
|
|
20
|
-
name: string;
|
|
21
|
-
legalName: string;
|
|
22
|
-
description: string;
|
|
23
|
-
logo?: ReactNode;
|
|
24
|
-
sections: FooterSection[];
|
|
25
|
-
customComponent?: ReactNode; // Inject any custom component here
|
|
26
|
-
nameElement?: ReactNode; // Custom element for platform name with specific font
|
|
27
|
-
hideSocialRow?: boolean; // Hide the default social row
|
|
28
|
-
rightColumnContent?: ReactNode; // Custom content for right column
|
|
29
|
-
belowDescriptionContent?: ReactNode; // Custom content below description
|
|
30
|
-
moveDescriptionToRight?: boolean; // Move description and belowDescriptionContent to right column
|
|
31
|
-
keepBelowDescriptionLeft?: boolean; // Keep belowDescriptionContent on left even when moveDescriptionToRight is true
|
|
32
|
-
backgroundColor?: string; // ODS background color (e.g., 'bg-ods-card', 'bg-ods-bg')
|
|
33
|
-
social?: {
|
|
34
|
-
github?: string;
|
|
35
|
-
twitter?: string;
|
|
36
|
-
linkedin?: string;
|
|
37
|
-
reddit?: string;
|
|
38
|
-
youtube?: string;
|
|
39
|
-
instagram?: string;
|
|
40
|
-
facebook?: string;
|
|
41
|
-
discord?: string;
|
|
42
|
-
telegram?: string;
|
|
43
|
-
whatsapp?: string;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
interface FooterProps {
|
|
48
|
-
config?: FooterConfig;
|
|
49
|
-
renderLink?: (link: FooterLink) => ReactNode;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function NavLinkSkeleton() {
|
|
53
|
-
return <Skeleton className="h-5 w-20 md:h-6 md:w-24" />;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Platform-Aware Footer Component
|
|
58
|
-
* Accepts configuration from app-config.ts
|
|
59
|
-
*/
|
|
60
|
-
export function Footer({ config, renderLink }: FooterProps) {
|
|
61
|
-
// Config is required - no hardcoded fallbacks
|
|
62
|
-
if (!config) {
|
|
63
|
-
console.warn('Footer: No config provided');
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return <UniversalFooter config={config} renderLink={renderLink} />;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Universal Footer Component
|
|
72
|
-
* Renders footer based on provided config
|
|
73
|
-
*/
|
|
74
|
-
function UniversalFooter({
|
|
75
|
-
config,
|
|
76
|
-
renderLink,
|
|
77
|
-
}: {
|
|
78
|
-
config: FooterConfig;
|
|
79
|
-
renderLink?: (link: FooterLink) => ReactNode;
|
|
80
|
-
}) {
|
|
81
|
-
const defaultRenderLink = (link: FooterLink) => (
|
|
82
|
-
<a
|
|
83
|
-
href={link.href}
|
|
84
|
-
className="text-md md:text-md font-body font-medium leading-[1.33] text-ods-text-primary transition-colors hover:text-ods-accent"
|
|
85
|
-
>
|
|
86
|
-
{link.label}
|
|
87
|
-
</a>
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
const linkRenderer = renderLink || defaultRenderLink;
|
|
91
|
-
|
|
92
|
-
return (
|
|
93
|
-
<footer
|
|
94
|
-
className={`flex w-full flex-col items-center justify-center ${config.backgroundColor || 'bg-ods-card'} relative z-[44] min-h-[auto] gap-6 border-t border-ods-border px-6 py-10 md:min-h-[248px] md:gap-6`}
|
|
95
|
-
>
|
|
96
|
-
<div className="grid w-full grid-cols-2 items-start gap-6 md:gap-8 lg:grid-cols-4">
|
|
97
|
-
{/* Column 1: Logo and optionally description */}
|
|
98
|
-
<div className="col-span-2 flex flex-col items-start gap-4 text-left md:col-span-1 md:gap-6 lg:col-span-1">
|
|
99
|
-
{/* Logo and name */}
|
|
100
|
-
<div className="flex items-center gap-2">
|
|
101
|
-
{config.logo && <Suspense fallback={<Skeleton className="h-8 w-8" />}>{config.logo}</Suspense>}
|
|
102
|
-
{config.nameElement || (
|
|
103
|
-
<span className="whitespace-nowrap font-heading text-heading-5 font-bold text-ods-text-primary">
|
|
104
|
-
{config.name}
|
|
105
|
-
</span>
|
|
106
|
-
)}
|
|
107
|
-
</div>
|
|
108
|
-
|
|
109
|
-
{/* Only show description here if NOT moving to right */}
|
|
110
|
-
{!config.moveDescriptionToRight && (
|
|
111
|
-
<>
|
|
112
|
-
<p className="font-body text-sm font-medium leading-[1.43] text-ods-text-primary md:text-sm">
|
|
113
|
-
{config.description}
|
|
114
|
-
</p>
|
|
115
|
-
|
|
116
|
-
{/* Custom content below description */}
|
|
117
|
-
{config.belowDescriptionContent && (
|
|
118
|
-
<Suspense fallback={<Skeleton className="h-8 w-full" />}>{config.belowDescriptionContent}</Suspense>
|
|
119
|
-
)}
|
|
120
|
-
|
|
121
|
-
{/* Conditional social row - show by default unless hideSocialRow is true */}
|
|
122
|
-
{!config.hideSocialRow && (
|
|
123
|
-
<SocialIconRow
|
|
124
|
-
className="pt-2"
|
|
125
|
-
links={
|
|
126
|
-
config.social
|
|
127
|
-
? Object.entries(config.social)
|
|
128
|
-
.filter(([_, href]) => href)
|
|
129
|
-
.map(([platform, href]) => ({ platform, href: href }))
|
|
130
|
-
: undefined
|
|
131
|
-
}
|
|
132
|
-
/>
|
|
133
|
-
)}
|
|
134
|
-
</>
|
|
135
|
-
)}
|
|
136
|
-
|
|
137
|
-
{/* Show belowDescriptionContent on left even when description is moved to right */}
|
|
138
|
-
{config.moveDescriptionToRight && config.keepBelowDescriptionLeft && config.belowDescriptionContent && (
|
|
139
|
-
<Suspense fallback={<Skeleton className="h-8 w-full" />}>{config.belowDescriptionContent}</Suspense>
|
|
140
|
-
)}
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
{/* Dynamic sections - 1 column each on all screens */}
|
|
144
|
-
{config.sections.map((section, index) => (
|
|
145
|
-
<div key={index} className="col-span-1 flex flex-col items-start gap-3 text-left">
|
|
146
|
-
<h3 className="tracking-[-0.02em] text-ods-text-muted text-h5">{section.title}</h3>
|
|
147
|
-
<div className="flex flex-col gap-3">
|
|
148
|
-
{section.links.map((link, linkIndex) => (
|
|
149
|
-
<Suspense key={linkIndex} fallback={<NavLinkSkeleton />}>
|
|
150
|
-
{linkRenderer(link)}
|
|
151
|
-
</Suspense>
|
|
152
|
-
))}
|
|
153
|
-
</div>
|
|
154
|
-
</div>
|
|
155
|
-
))}
|
|
156
|
-
|
|
157
|
-
{/* Custom component column - full width on mobile and medium, 1 column on large */}
|
|
158
|
-
{config.customComponent && (
|
|
159
|
-
<div className="col-span-2 flex flex-col justify-center md:col-span-1 lg:col-span-1">
|
|
160
|
-
<Suspense fallback={<Skeleton className="h-32 w-full" />}>{config.customComponent}</Suspense>
|
|
161
|
-
</div>
|
|
162
|
-
)}
|
|
163
|
-
|
|
164
|
-
{/* Right column content - shows if rightColumnContent is provided OR if moving description to right */}
|
|
165
|
-
{(config.rightColumnContent || config.moveDescriptionToRight) && (
|
|
166
|
-
<div className="col-span-2 flex flex-col justify-start gap-4 md:col-span-1 md:gap-6 lg:col-span-1">
|
|
167
|
-
{/* Show description in right column if moveDescriptionToRight is true */}
|
|
168
|
-
{config.moveDescriptionToRight && (
|
|
169
|
-
<>
|
|
170
|
-
<p className="font-body text-sm font-medium leading-[1.43] text-ods-text-primary md:text-sm">
|
|
171
|
-
{config.description}
|
|
172
|
-
</p>
|
|
173
|
-
|
|
174
|
-
{/* Custom content below description - only if NOT keeping it on left */}
|
|
175
|
-
{config.belowDescriptionContent && !config.keepBelowDescriptionLeft && (
|
|
176
|
-
<Suspense fallback={<Skeleton className="h-8 w-full" />}>{config.belowDescriptionContent}</Suspense>
|
|
177
|
-
)}
|
|
178
|
-
</>
|
|
179
|
-
)}
|
|
180
|
-
|
|
181
|
-
{/* Regular right column content */}
|
|
182
|
-
{config.rightColumnContent && (
|
|
183
|
-
<Suspense fallback={<Skeleton className="h-32 w-full" />}>{config.rightColumnContent}</Suspense>
|
|
184
|
-
)}
|
|
185
|
-
</div>
|
|
186
|
-
)}
|
|
187
|
-
</div>
|
|
188
|
-
|
|
189
|
-
{/* Copyright */}
|
|
190
|
-
<p className="text-md md:text-md w-full pt-4 text-center font-body font-medium leading-[1.33] text-ods-text-muted md:pt-0">
|
|
191
|
-
{copyrightLine(config.legalName)}
|
|
192
|
-
</p>
|
|
193
|
-
</footer>
|
|
194
|
-
);
|
|
195
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import type { ReactNode } from 'react';
|
|
4
|
-
import { useIsHydrated } from '../../hooks/ui/use-is-hydrated';
|
|
5
|
-
import { Header, type HeaderConfig } from './header';
|
|
6
|
-
import { HeaderSkeleton } from './header-skeleton';
|
|
7
|
-
|
|
8
|
-
export interface ClientOnlyHeaderProps {
|
|
9
|
-
config: HeaderConfig;
|
|
10
|
-
skeleton?: ReactNode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function ClientOnlyHeader({ config, skeleton }: ClientOnlyHeaderProps) {
|
|
14
|
-
const isClient = useIsHydrated();
|
|
15
|
-
|
|
16
|
-
if (!isClient) {
|
|
17
|
-
// Return custom skeleton or default skeleton while client-side JavaScript loads
|
|
18
|
-
return skeleton || <HeaderSkeleton config={config} />;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return <Header config={config} />;
|
|
22
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import type { HeaderConfig } from '../../types/navigation';
|
|
2
|
-
import { cn } from '../../utils';
|
|
3
|
-
|
|
4
|
-
export interface HeaderSkeletonProps {
|
|
5
|
-
config?: HeaderConfig;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Loading skeleton mirroring the unified ODS top-navigation geometry
|
|
10
|
-
* (`TopNavigation`, Figma 2797-5978): 48px mobile / 56px md+, cell model.
|
|
11
|
-
* Keep in sync with `header.tsx` — a diverging skeleton makes the
|
|
12
|
-
* skeleton→live handoff jump.
|
|
13
|
-
*/
|
|
14
|
-
export function HeaderSkeleton({ config }: HeaderSkeletonProps) {
|
|
15
|
-
const showNavigation = config?.navigation && config.navigation.items.length > 0;
|
|
16
|
-
const showActions = config?.actions?.right && config.actions.right.length > 0;
|
|
17
|
-
const showMobileMenu = config?.mobile?.enabled;
|
|
18
|
-
const showLeftActions = !!config?.actions?.left;
|
|
19
|
-
|
|
20
|
-
return (
|
|
21
|
-
<div className="sticky top-0 z-[50] w-full">
|
|
22
|
-
<header
|
|
23
|
-
className={cn(
|
|
24
|
-
'flex h-[72px] w-full items-center border-b border-t border-ods-border md:border-t-0',
|
|
25
|
-
config?.backgroundColor || 'bg-ods-card',
|
|
26
|
-
config?.className,
|
|
27
|
-
)}
|
|
28
|
-
>
|
|
29
|
-
{/* Leading cells: admin toggle / burger */}
|
|
30
|
-
{showLeftActions && (
|
|
31
|
-
<div className="flex h-full w-[72px] items-center justify-center border-r border-ods-border">
|
|
32
|
-
<div className="h-6 w-6 animate-pulse rounded bg-ods-border" />
|
|
33
|
-
</div>
|
|
34
|
-
)}
|
|
35
|
-
{showMobileMenu && (
|
|
36
|
-
<div className="flex h-full w-[72px] items-center justify-center border-r border-ods-border lg:hidden">
|
|
37
|
-
<div className="h-6 w-6 animate-pulse rounded bg-ods-border" />
|
|
38
|
-
</div>
|
|
39
|
-
)}
|
|
40
|
-
|
|
41
|
-
{/* Logo zone */}
|
|
42
|
-
<div className="flex h-full flex-1 items-center gap-2 p-[var(--spacing-system-m)] md:pl-[var(--spacing-system-l)] lg:flex-none lg:pl-[var(--spacing-system-xxl)]">
|
|
43
|
-
<div className="h-6 w-6 animate-pulse rounded bg-ods-border" />
|
|
44
|
-
<div className="h-5 w-24 animate-pulse rounded bg-ods-border" />
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
{/* Center: navigation links (desktop only) */}
|
|
48
|
-
<div className="hidden h-full min-w-0 flex-1 items-center justify-center gap-2 lg:flex">
|
|
49
|
-
{showNavigation && (
|
|
50
|
-
<>
|
|
51
|
-
<div className="h-8 w-20 animate-pulse rounded bg-ods-border" />
|
|
52
|
-
<div className="h-8 w-28 animate-pulse rounded bg-ods-border" />
|
|
53
|
-
<div className="h-8 w-24 animate-pulse rounded bg-ods-border" />
|
|
54
|
-
</>
|
|
55
|
-
)}
|
|
56
|
-
</div>
|
|
57
|
-
|
|
58
|
-
{/* CTA zone */}
|
|
59
|
-
{showActions && (
|
|
60
|
-
<div className="hidden h-full items-center px-[var(--spacing-system-m)] lg:flex">
|
|
61
|
-
<div className="h-8 w-24 animate-pulse rounded bg-ods-border" />
|
|
62
|
-
</div>
|
|
63
|
-
)}
|
|
64
|
-
|
|
65
|
-
{/* Mingo cell */}
|
|
66
|
-
{config?.mingo?.enabled && (
|
|
67
|
-
<div className="flex h-full items-center border-l border-ods-border px-[var(--spacing-system-l)]">
|
|
68
|
-
<div className="h-8 w-8 animate-pulse rounded bg-ods-border md:w-28" />
|
|
69
|
-
</div>
|
|
70
|
-
)}
|
|
71
|
-
</header>
|
|
72
|
-
</div>
|
|
73
|
-
);
|
|
74
|
-
}
|