@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.
Files changed (206) hide show
  1. package/dist/{chunk-4KX6OED2.cjs → chunk-2G7UYK35.cjs} +46 -46
  2. package/dist/{chunk-KOWVJD4V.cjs → chunk-2KXTOP6G.cjs} +70 -57
  3. package/dist/{chunk-A75QY6CD.cjs → chunk-2RNB5DTN.cjs} +21 -21
  4. package/dist/{chunk-PN2RKPDF.js → chunk-36BCTE7D.js} +10 -10
  5. package/dist/{chunk-ZSAGLQOD.cjs → chunk-3AHTOSXJ.cjs} +17 -17
  6. package/dist/{chunk-VR2ZLFCP.js → chunk-4IBPRIQH.js} +1 -1
  7. package/dist/{chunk-FCGC42TS.js → chunk-4L6XCMOU.js} +66 -62
  8. package/dist/{chunk-X5MQ7JRP.js → chunk-4UM2ETLM.js} +9 -9
  9. package/dist/{chunk-6NJKKO73.cjs → chunk-6I4ZAFO2.cjs} +15 -15
  10. package/dist/{chunk-RBDP4WDE.js → chunk-6IW7TWPV.js} +6 -6
  11. package/dist/{chunk-MMOODW57.cjs → chunk-6NTPY5QA.cjs} +1887 -94
  12. package/dist/{chunk-QFXRPRFT.js → chunk-6YKAT7NV.js} +3 -3
  13. package/dist/{chunk-HPWWNJE7.cjs → chunk-AOWDNSTM.cjs} +89 -89
  14. package/dist/{chunk-IHERL5V4.cjs → chunk-B73373AG.cjs} +34 -34
  15. package/dist/{chunk-DENB2XJC.js → chunk-CNWOMQQJ.js} +2 -2
  16. package/dist/{chunk-MP2C3LJ4.js → chunk-CUME3VTQ.js} +1 -1
  17. package/dist/{chunk-PDWVPI3S.js → chunk-CZ7Y7UG4.js} +4 -72
  18. package/dist/{chunk-YHM5AWTT.js → chunk-CZSZSDD4.js} +6 -6
  19. package/dist/{chunk-F6I6XZMN.js → chunk-DA5UDTLG.js} +5 -5
  20. package/dist/{chunk-MFFCUVWG.js → chunk-F57ECE2I.js} +1 -1
  21. package/dist/{chunk-CH5232HV.js → chunk-FI6GMDO7.js} +2455 -662
  22. package/dist/{chunk-NDESEPW5.js → chunk-FXJ3WWUB.js} +68 -0
  23. package/dist/{chunk-G5A3PSPV.js → chunk-HDOYSEOJ.js} +1080 -691
  24. package/dist/{chunk-VA5T32XA.js → chunk-I3ST4PLM.js} +2 -2
  25. package/dist/{chunk-5HBHO5TB.js → chunk-JPG7OHEG.js} +1 -1
  26. package/dist/{chunk-YFBM2K6X.cjs → chunk-JRU2CXLB.cjs} +4 -4
  27. package/dist/{chunk-MKXO4Q5P.js → chunk-KUC673HM.js} +383 -142
  28. package/dist/{chunk-JEZKGCZI.cjs → chunk-L6Y6OOKG.cjs} +26 -26
  29. package/dist/{chunk-F6AFPNDF.js → chunk-LFFB6EMB.js} +29 -16
  30. package/dist/{chunk-X72J4ACL.cjs → chunk-LLSUVPQC.cjs} +252 -8
  31. package/dist/{chunk-RKV5B7EU.cjs → chunk-LM7TXMLU.cjs} +72 -4
  32. package/dist/{chunk-6SEANMOU.js → chunk-LNW45N2C.js} +11 -11
  33. package/dist/{chunk-OUY3HHW6.cjs → chunk-LRQTJOF2.cjs} +928 -539
  34. package/dist/{chunk-DW7G4KG3.js → chunk-MR3A4MZV.js} +3 -3
  35. package/dist/{chunk-2YXVWZVF.js → chunk-N45D4ZXQ.js} +959 -715
  36. package/dist/{chunk-Z2VNQQ74.js → chunk-NCPTID44.js} +978 -942
  37. package/dist/{chunk-WA6GUYQ4.cjs → chunk-NSGXARGJ.cjs} +104 -104
  38. package/dist/{chunk-ABU3TGXA.cjs → chunk-OF6GEI5A.cjs} +3 -3
  39. package/dist/{chunk-IKTQ3ZAG.cjs → chunk-OJLR5MEO.cjs} +6 -6
  40. package/dist/{chunk-VESKITRQ.cjs → chunk-P42V6N34.cjs} +736 -732
  41. package/dist/{chunk-OHFS7VOU.cjs → chunk-PLYEKV3N.cjs} +2 -2
  42. package/dist/{chunk-7VVFKJY5.js → chunk-PO33GZVY.js} +1799 -3449
  43. package/dist/{chunk-7LS22BZU.cjs → chunk-QAOFMK2A.cjs} +14 -14
  44. package/dist/{chunk-VHCACDKP.cjs → chunk-RQRX4YC3.cjs} +39 -39
  45. package/dist/{chunk-3MX5S4CF.cjs → chunk-SEXWHIMS.cjs} +899 -2549
  46. package/dist/{chunk-AQWZNP6A.js → chunk-SS5MBHDP.js} +4 -4
  47. package/dist/{chunk-ZSAO2HBW.js → chunk-TDYIREDJ.js} +15 -15
  48. package/dist/{chunk-XOYH2YQE.cjs → chunk-UDFRUKLC.cjs} +2 -2
  49. package/dist/{chunk-TYWLNCNH.cjs → chunk-UVTD52MD.cjs} +14 -82
  50. package/dist/{chunk-N3COXDBH.cjs → chunk-VX4E6YSB.cjs} +41 -5
  51. package/dist/{chunk-2QEUFXNS.cjs → chunk-WCVZCGK5.cjs} +312 -71
  52. package/dist/{chunk-6XIF2Z7I.js → chunk-WMX26HB5.js} +3 -3
  53. package/dist/{chunk-D7BTSVMS.cjs → chunk-Y2GSOUCS.cjs} +2 -2
  54. package/dist/{chunk-4I45Y3DN.cjs → chunk-YBUT4AMG.cjs} +6 -6
  55. package/dist/components/case-studies/index.cjs +30 -32
  56. package/dist/components/case-studies/index.js +14 -16
  57. package/dist/components/chat/entity-cards/case-study-card.d.ts +11 -4
  58. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  59. package/dist/components/chat/index.cjs +11 -11
  60. package/dist/components/chat/index.d.ts +1 -1
  61. package/dist/components/chat/index.d.ts.map +1 -1
  62. package/dist/components/chat/index.js +16 -16
  63. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +34 -5
  64. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -1
  65. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  66. package/dist/components/contact/index.cjs +12 -14
  67. package/dist/components/contact/index.js +11 -13
  68. package/dist/components/docs/index.cjs +15 -17
  69. package/dist/components/docs/index.js +14 -16
  70. package/dist/components/embeds/index.cjs +12 -14
  71. package/dist/components/embeds/index.js +11 -13
  72. package/dist/components/faq/index.cjs +13 -15
  73. package/dist/components/faq/index.js +12 -14
  74. package/dist/components/features/index.cjs +12 -14
  75. package/dist/components/features/index.js +21 -23
  76. package/dist/components/help-center-pages/index.cjs +118 -120
  77. package/dist/components/help-center-pages/index.js +33 -35
  78. package/dist/components/icons/index.cjs +3 -5
  79. package/dist/components/icons/index.js +9 -11
  80. package/dist/components/icons-v2-generated/index.cjs +3 -5
  81. package/dist/components/icons-v2-generated/index.js +2 -4
  82. package/dist/components/index.cjs +87 -158
  83. package/dist/components/index.d.ts +0 -2
  84. package/dist/components/index.d.ts.map +1 -1
  85. package/dist/components/index.js +331 -402
  86. package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
  87. package/dist/components/meeting-scheduler/index.cjs +62 -64
  88. package/dist/components/meeting-scheduler/index.js +12 -14
  89. package/dist/components/navigation/index.cjs +28 -16
  90. package/dist/components/navigation/index.d.ts +14 -10
  91. package/dist/components/navigation/index.d.ts.map +1 -1
  92. package/dist/components/navigation/index.js +38 -26
  93. package/dist/components/navigation/mingo-ai-button.d.ts +38 -3
  94. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  95. package/dist/components/navigation/mobile-nav-sheet-id.d.ts +3 -0
  96. package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +1 -0
  97. package/dist/components/navigation/mobile-nav-sheet.d.ts +48 -0
  98. package/dist/components/navigation/mobile-nav-sheet.d.ts.map +1 -0
  99. package/dist/components/navigation/nav-item-row.d.ts +27 -0
  100. package/dist/components/navigation/nav-item-row.d.ts.map +1 -0
  101. package/dist/components/navigation/nav-panel.d.ts +43 -0
  102. package/dist/components/navigation/nav-panel.d.ts.map +1 -0
  103. package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -2
  104. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  105. package/dist/components/navigation/site-footer.d.ts +28 -0
  106. package/dist/components/navigation/site-footer.d.ts.map +1 -0
  107. package/dist/components/navigation/site-header.d.ts +61 -0
  108. package/dist/components/navigation/site-header.d.ts.map +1 -0
  109. package/dist/components/navigation/site-nav-link.d.ts +26 -0
  110. package/dist/components/navigation/site-nav-link.d.ts.map +1 -0
  111. package/dist/components/navigation/top-navigation.d.ts +2 -2
  112. package/dist/components/navigation/top-navigation.d.ts.map +1 -1
  113. package/dist/components/onboarding-guides/index.cjs +15 -17
  114. package/dist/components/onboarding-guides/index.js +14 -16
  115. package/dist/components/platform/ToolBadge.d.ts +6 -0
  116. package/dist/components/platform/ToolBadge.d.ts.map +1 -1
  117. package/dist/components/related-content/index.cjs +10 -8
  118. package/dist/components/related-content/index.js +9 -7
  119. package/dist/components/tickets/index.cjs +16 -18
  120. package/dist/components/tickets/index.js +15 -17
  121. package/dist/components/ui/brand-association-card.d.ts +7 -0
  122. package/dist/components/ui/brand-association-card.d.ts.map +1 -1
  123. package/dist/components/ui/index.cjs +14 -14
  124. package/dist/components/ui/index.js +19 -19
  125. package/dist/hooks/index.cjs +19 -11
  126. package/dist/hooks/index.d.ts +1 -0
  127. package/dist/hooks/index.d.ts.map +1 -1
  128. package/dist/hooks/index.js +19 -11
  129. package/dist/hooks/ui/index.d.ts +3 -0
  130. package/dist/hooks/ui/index.d.ts.map +1 -1
  131. package/dist/hooks/ui/use-active-section.d.ts +10 -0
  132. package/dist/hooks/ui/use-active-section.d.ts.map +1 -0
  133. package/dist/hooks/ui/use-nav-menus.d.ts +48 -0
  134. package/dist/hooks/ui/use-nav-menus.d.ts.map +1 -0
  135. package/dist/hooks/ui/use-visitor-os.d.ts +15 -0
  136. package/dist/hooks/ui/use-visitor-os.d.ts.map +1 -0
  137. package/dist/hooks/use-location-hash.d.ts +9 -0
  138. package/dist/hooks/use-location-hash.d.ts.map +1 -0
  139. package/dist/index.cjs +56 -21
  140. package/dist/index.js +231 -196
  141. package/dist/types/case-study.d.ts +9 -0
  142. package/dist/types/case-study.d.ts.map +1 -1
  143. package/dist/types/navigation.d.ts +95 -65
  144. package/dist/types/navigation.d.ts.map +1 -1
  145. package/dist/utils/index.cjs +55 -0
  146. package/dist/utils/index.d.ts +1 -0
  147. package/dist/utils/index.d.ts.map +1 -1
  148. package/dist/utils/index.js +50 -1
  149. package/dist/utils/source-icons.d.ts.map +1 -1
  150. package/dist/utils/visitor-os.d.ts +45 -0
  151. package/dist/utils/visitor-os.d.ts.map +1 -0
  152. package/package.json +1 -1
  153. package/src/components/chat/entity-cards/case-study-card.tsx +115 -5
  154. package/src/components/chat/index.ts +7 -1
  155. package/src/components/chat/nav-link-anchor-via-runtime.tsx +62 -9
  156. package/src/components/chat/utils/icon-library.tsx +35 -1
  157. package/src/components/index.ts +0 -2
  158. package/src/components/loading/page-layout-skeleton.tsx +1 -1
  159. package/src/components/navigation/index.ts +21 -14
  160. package/src/components/navigation/mingo-ai-button.tsx +139 -63
  161. package/src/components/navigation/mobile-nav-sheet-id.ts +2 -0
  162. package/src/components/navigation/mobile-nav-sheet.tsx +241 -0
  163. package/src/components/navigation/nav-item-row.tsx +129 -0
  164. package/src/components/navigation/nav-panel.tsx +196 -0
  165. package/src/components/navigation/navigation-sidebar-item.tsx +1 -2
  166. package/src/components/navigation/site-footer.tsx +256 -0
  167. package/src/components/navigation/site-header.tsx +339 -0
  168. package/src/components/navigation/site-nav-link.tsx +41 -0
  169. package/src/components/navigation/ticket-alerts-button.tsx +2 -2
  170. package/src/components/navigation/top-navigation.tsx +2 -2
  171. package/src/components/platform/ToolBadge.tsx +18 -1
  172. package/src/components/ui/brand-association-card.tsx +25 -3
  173. package/src/hooks/index.ts +1 -0
  174. package/src/hooks/ui/index.ts +3 -0
  175. package/src/hooks/ui/use-active-section.ts +44 -0
  176. package/src/hooks/ui/use-nav-menus.ts +200 -0
  177. package/src/hooks/ui/use-visitor-os.ts +33 -0
  178. package/src/hooks/use-location-hash.ts +34 -0
  179. package/src/styles/chat-animations.css +57 -2
  180. package/src/types/case-study.ts +16 -0
  181. package/src/types/navigation.ts +80 -66
  182. package/src/utils/index.ts +1 -0
  183. package/src/utils/source-icons.ts +13 -0
  184. package/src/utils/visitor-os.ts +84 -0
  185. package/dist/chunk-LMBC5FFP.js +0 -43
  186. package/dist/chunk-O43V3EOS.js +0 -252
  187. package/dist/chunk-QZVSJF2K.cjs +0 -252
  188. package/dist/chunk-RALRPFDW.cjs +0 -43
  189. package/dist/components/footer-waitlist-button.d.ts +0 -29
  190. package/dist/components/footer-waitlist-button.d.ts.map +0 -1
  191. package/dist/components/footer.d.ts +0 -47
  192. package/dist/components/footer.d.ts.map +0 -1
  193. package/dist/components/navigation/client-only-header.d.ts +0 -8
  194. package/dist/components/navigation/client-only-header.d.ts.map +0 -1
  195. package/dist/components/navigation/header-skeleton.d.ts +0 -12
  196. package/dist/components/navigation/header-skeleton.d.ts.map +0 -1
  197. package/dist/components/navigation/header.d.ts +0 -9
  198. package/dist/components/navigation/header.d.ts.map +0 -1
  199. package/dist/components/navigation/mobile-nav-panel.d.ts +0 -10
  200. package/dist/components/navigation/mobile-nav-panel.d.ts.map +0 -1
  201. package/src/components/footer-waitlist-button.tsx +0 -53
  202. package/src/components/footer.tsx +0 -195
  203. package/src/components/navigation/client-only-header.tsx +0 -22
  204. package/src/components/navigation/header-skeleton.tsx +0 -74
  205. package/src/components/navigation/header.tsx +0 -429
  206. 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
- }