@flamingo-stack/openframe-frontend-core 0.0.719 → 0.0.721

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 (228) hide show
  1. package/dist/assets/index.cjs +6 -0
  2. package/dist/assets/index.d.ts +1 -0
  3. package/dist/assets/index.d.ts.map +1 -1
  4. package/dist/assets/index.js +5 -1
  5. package/dist/assets/mobile-app-qr.d.ts +17 -0
  6. package/dist/assets/mobile-app-qr.d.ts.map +1 -0
  7. package/dist/{chunk-2JLP2X2M.js → chunk-2P2M27EW.js} +2396 -2369
  8. package/dist/{chunk-IWCPXJEE.js → chunk-2TXGR7IK.js} +138 -63
  9. package/dist/{chunk-FVQJBII6.js → chunk-3LY7V3RF.js} +3 -3
  10. package/dist/{chunk-HCFNEKO3.cjs → chunk-3R32ZNA2.cjs} +46 -46
  11. package/dist/{chunk-WSDT7LYL.js → chunk-3UBWDR65.js} +1 -1
  12. package/dist/{chunk-NZ5BHDFZ.js → chunk-44Q6MV7C.js} +2 -2
  13. package/dist/{chunk-CMZ3QTFQ.js → chunk-4I3K6LEH.js} +24 -0
  14. package/dist/{chunk-ZXCZYMN4.cjs → chunk-4LY6R4TN.cjs} +137 -62
  15. package/dist/{chunk-EAHOB64X.js → chunk-57UTI7ZH.js} +106 -42
  16. package/dist/{chunk-XGHGGBM3.js → chunk-5QXE5HMV.js} +4 -4
  17. package/dist/{chunk-NYWESHOQ.cjs → chunk-6AJIOW3S.cjs} +57 -57
  18. package/dist/{chunk-4QFWGLZO.js → chunk-6YBUQAOH.js} +1 -1
  19. package/dist/{chunk-JHQ334WS.js → chunk-742BGXNX.js} +2 -0
  20. package/dist/{chunk-D6PMVWDI.js → chunk-74N742ZG.js} +6 -6
  21. package/dist/{chunk-AECTRMGQ.cjs → chunk-7GRPR7XA.cjs} +13 -1
  22. package/dist/{chunk-4HJRHEXD.cjs → chunk-7Z5FMQYR.cjs} +22 -22
  23. package/dist/chunk-AFTRPEXO.js +13 -0
  24. package/dist/{chunk-WBNAEYTQ.cjs → chunk-BYUIFT7Q.cjs} +6 -6
  25. package/dist/{chunk-LCLDFMDF.cjs → chunk-BYVVE7HP.cjs} +58 -58
  26. package/dist/{chunk-JPD4NXH6.js → chunk-CO3FOZIH.js} +1 -1
  27. package/dist/{chunk-E7YCPY7K.cjs → chunk-D2DH6VZL.cjs} +3 -3
  28. package/dist/{chunk-HWVUR735.cjs → chunk-DFM572VH.cjs} +2 -2
  29. package/dist/{chunk-YDPKUAP4.js → chunk-DJ4IFQNQ.js} +2 -0
  30. package/dist/{chunk-5U3KWQXP.js → chunk-E6SMMMKV.js} +13 -13
  31. package/dist/chunk-EWPR7662.cjs +13 -0
  32. package/dist/{chunk-SWAVO7BB.cjs → chunk-F7ORKKEF.cjs} +108 -108
  33. package/dist/{chunk-AGVXKD4K.js → chunk-FSQQZFVG.js} +12 -0
  34. package/dist/{chunk-ETYLOZOB.cjs → chunk-GCK75D7F.cjs} +109 -22
  35. package/dist/{chunk-ZKNZ2CXW.cjs → chunk-GGBYZKMS.cjs} +11 -11
  36. package/dist/{chunk-Y4MB25KW.js → chunk-GYAXV3MZ.js} +3 -3
  37. package/dist/{chunk-UWQWMGJ7.cjs → chunk-HJMSNOBT.cjs} +1040 -696
  38. package/dist/{chunk-DFQYAYBH.cjs → chunk-HQIOMFJH.cjs} +2 -0
  39. package/dist/{chunk-JH2SIWPQ.js → chunk-HXB7SEYG.js} +1611 -1267
  40. package/dist/{chunk-LE5WKGJV.cjs → chunk-I2254QN6.cjs} +16 -16
  41. package/dist/{chunk-PSVSEN4J.cjs → chunk-IMTY3GRR.cjs} +2 -0
  42. package/dist/{chunk-ILNN6QRW.js → chunk-JDBZ4ZHU.js} +3 -3
  43. package/dist/{chunk-GQ7JJUIT.cjs → chunk-K2JUJ37D.cjs} +25 -1
  44. package/dist/{chunk-6YPTUHM7.js → chunk-K76ACBR3.js} +3 -3
  45. package/dist/{chunk-2NASBO7O.js → chunk-KFOAV77K.js} +2 -2
  46. package/dist/{chunk-CU6NWO2M.js → chunk-LAXKEBDD.js} +14 -18
  47. package/dist/{chunk-5YAGX5DY.js → chunk-LGKMR7NZ.js} +7 -7
  48. package/dist/{chunk-E2V2EH2G.cjs → chunk-LODMNSQY.cjs} +16 -16
  49. package/dist/{chunk-4D6NMPOO.js → chunk-NJ5TBTJG.js} +7 -7
  50. package/dist/{chunk-TDZ76NCB.cjs → chunk-NMPVK53I.cjs} +29 -29
  51. package/dist/{chunk-TTVOLEUS.js → chunk-NPSJE7J3.js} +90 -3
  52. package/dist/{chunk-H5VIMBRN.cjs → chunk-O5EHOJZD.cjs} +4 -4
  53. package/dist/{chunk-KT3U3ZRP.cjs → chunk-OKE5BIQH.cjs} +8 -8
  54. package/dist/{chunk-DC4RTYWK.cjs → chunk-QLTXT562.cjs} +5 -5
  55. package/dist/{chunk-H5V7GRN5.js → chunk-QQCFPMAA.js} +5 -7
  56. package/dist/{chunk-7BREFV7G.cjs → chunk-QYS4YVEP.cjs} +34 -36
  57. package/dist/{chunk-7BCY77W6.js → chunk-RCI3PALX.js} +8 -10
  58. package/dist/{chunk-P3JMAMHP.js → chunk-REETLEL5.js} +1 -1
  59. package/dist/{chunk-4JIGEK7C.cjs → chunk-RJMWJAJO.cjs} +97 -33
  60. package/dist/{chunk-WS7WRR5Z.cjs → chunk-RQZQHLNS.cjs} +86 -90
  61. package/dist/{chunk-FFT56TYB.cjs → chunk-RUZIICXT.cjs} +2 -2
  62. package/dist/{chunk-AJHSQ5XK.js → chunk-S63QBBT7.js} +6 -6
  63. package/dist/{chunk-TELAANY6.js → chunk-UXU7Y5BH.js} +2 -2
  64. package/dist/{chunk-NQVS4G7G.cjs → chunk-UZTOI6FJ.cjs} +773 -746
  65. package/dist/{chunk-DFEPUYTF.cjs → chunk-VFICDEYJ.cjs} +45 -47
  66. package/dist/{chunk-LOZLHG2U.cjs → chunk-XE2K53GH.cjs} +20 -20
  67. package/dist/{chunk-QBCDSTLE.cjs → chunk-XXO52RZR.cjs} +26 -26
  68. package/dist/{chunk-TTEFN6VO.js → chunk-ZLUFEWZZ.js} +10 -10
  69. package/dist/{chunk-MA4Q5RBP.cjs → chunk-ZSOFLPQN.cjs} +9 -9
  70. package/dist/{chunk-KBJJQFYU.js → chunk-ZZEKXGFS.js} +2 -2
  71. package/dist/{cloud-tenants-FBUO66GW.cjs → cloud-tenants-HZHKRUIW.cjs} +16 -16
  72. package/dist/{cloud-tenants-DNBPNQNP.js → cloud-tenants-Q4TCJS5Y.js} +15 -15
  73. package/dist/components/calendar.cjs +4 -4
  74. package/dist/components/calendar.js +1 -1
  75. package/dist/components/case-studies/index.cjs +30 -30
  76. package/dist/components/case-studies/index.js +16 -16
  77. package/dist/components/chat/ask-prompts.d.ts +10 -2
  78. package/dist/components/chat/ask-prompts.d.ts.map +1 -1
  79. package/dist/components/chat/assistant-ask-prompts.d.ts +27 -0
  80. package/dist/components/chat/assistant-ask-prompts.d.ts.map +1 -0
  81. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  82. package/dist/components/chat/hooks/index.d.ts +1 -0
  83. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  84. package/dist/components/chat/hooks/use-ask-prompts.d.ts +63 -0
  85. package/dist/components/chat/hooks/use-ask-prompts.d.ts.map +1 -0
  86. package/dist/components/chat/index.cjs +27 -10
  87. package/dist/components/chat/index.d.ts +1 -0
  88. package/dist/components/chat/index.d.ts.map +1 -1
  89. package/dist/components/chat/index.js +26 -9
  90. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  91. package/dist/components/contact/index.cjs +17 -17
  92. package/dist/components/contact/index.js +16 -16
  93. package/dist/components/docs/index.cjs +20 -20
  94. package/dist/components/docs/index.js +19 -19
  95. package/dist/components/embeds/index.cjs +17 -17
  96. package/dist/components/embeds/index.js +16 -16
  97. package/dist/components/faq/faq-ask-card.d.ts +44 -0
  98. package/dist/components/faq/faq-ask-card.d.ts.map +1 -0
  99. package/dist/components/faq/faq-document-page.d.ts +5 -1
  100. package/dist/components/faq/faq-document-page.d.ts.map +1 -1
  101. package/dist/components/faq/faq-section.d.ts +18 -5
  102. package/dist/components/faq/faq-section.d.ts.map +1 -1
  103. package/dist/components/faq/index.cjs +19 -18
  104. package/dist/components/faq/index.d.ts +1 -0
  105. package/dist/components/faq/index.d.ts.map +1 -1
  106. package/dist/components/faq/index.js +18 -17
  107. package/dist/components/features/auth/auth-benefits-panel.d.ts.map +1 -1
  108. package/dist/components/features/index.cjs +16 -16
  109. package/dist/components/features/index.js +15 -15
  110. package/dist/components/help-center-pages/download-apps-page.d.ts +55 -0
  111. package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -0
  112. package/dist/components/help-center-pages/index.cjs +333 -119
  113. package/dist/components/help-center-pages/index.d.ts +1 -0
  114. package/dist/components/help-center-pages/index.d.ts.map +1 -1
  115. package/dist/components/help-center-pages/index.js +251 -37
  116. package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
  117. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  118. package/dist/components/index.cjs +131 -217
  119. package/dist/components/index.js +236 -322
  120. package/dist/components/meeting-scheduler/index.cjs +61 -62
  121. package/dist/components/meeting-scheduler/index.js +18 -19
  122. package/dist/components/navigation/index.cjs +19 -19
  123. package/dist/components/navigation/index.js +18 -18
  124. package/dist/components/navigation/mingo-ai-button.d.ts +1 -1
  125. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  126. package/dist/components/onboarding-guides/index.cjs +19 -20
  127. package/dist/components/onboarding-guides/index.js +18 -19
  128. package/dist/components/product-demo/index.cjs +8 -8
  129. package/dist/components/product-demo/index.js +8 -8
  130. package/dist/components/related-content/index.cjs +7 -9
  131. package/dist/components/related-content/index.js +6 -8
  132. package/dist/components/tickets/index.cjs +21 -21
  133. package/dist/components/tickets/index.js +20 -20
  134. package/dist/components/ui/button/button.d.ts.map +1 -1
  135. package/dist/components/ui/file-manager/index.cjs +11 -11
  136. package/dist/components/ui/file-manager/index.js +1 -1
  137. package/dist/components/ui/index.cjs +34 -16
  138. package/dist/components/ui/index.d.ts +1 -0
  139. package/dist/components/ui/index.d.ts.map +1 -1
  140. package/dist/components/ui/index.js +33 -15
  141. package/dist/components/ui/mobile-app-qr.d.ts +23 -0
  142. package/dist/components/ui/mobile-app-qr.d.ts.map +1 -0
  143. package/dist/components/ui/store-badges.d.ts +7 -4
  144. package/dist/components/ui/store-badges.d.ts.map +1 -1
  145. package/dist/contexts/assistant-runtime-context.d.ts +74 -0
  146. package/dist/contexts/assistant-runtime-context.d.ts.map +1 -0
  147. package/dist/contexts/index.cjs +7 -1
  148. package/dist/contexts/index.d.ts +1 -0
  149. package/dist/contexts/index.d.ts.map +1 -1
  150. package/dist/contexts/index.js +6 -0
  151. package/dist/{devices-5A5TY4JD.cjs → devices-6XHUFIC6.cjs} +17 -17
  152. package/dist/{devices-PLDAEUSL.js → devices-NOUGVTES.js} +15 -15
  153. package/dist/hooks/index.cjs +10 -5
  154. package/dist/hooks/index.d.ts +1 -0
  155. package/dist/hooks/index.d.ts.map +1 -1
  156. package/dist/hooks/index.js +9 -4
  157. package/dist/hooks/use-downloads.d.ts +41 -0
  158. package/dist/hooks/use-downloads.d.ts.map +1 -0
  159. package/dist/index.cjs +80 -20
  160. package/dist/index.js +79 -19
  161. package/dist/{knowledge-G6Q5KRWV.js → knowledge-2YTUXQ2Z.js} +15 -15
  162. package/dist/{knowledge-FKTJ723Z.cjs → knowledge-ANEKPMO2.cjs} +17 -17
  163. package/dist/{logs-CJCXUBU6.cjs → logs-U3IB3HUM.cjs} +25 -25
  164. package/dist/{logs-QMV6XIC4.js → logs-WVQIONUT.js} +15 -15
  165. package/dist/{policies-G6D7AX6F.js → policies-66EGDW2H.js} +15 -15
  166. package/dist/{policies-QMRTK3CY.cjs → policies-UFRN2EQF.cjs} +20 -20
  167. package/dist/{remote-session-DBD6OSTX.js → remote-session-6WEUJZDC.js} +5 -5
  168. package/dist/{remote-session-2JVI7RVA.cjs → remote-session-A75X5NPC.cjs} +7 -7
  169. package/dist/{software-update-PNZMRDBT.cjs → software-update-2MHKL76D.cjs} +20 -20
  170. package/dist/{software-update-6BQM6BKH.js → software-update-3ZD3MXF3.js} +15 -15
  171. package/dist/{tickets-board-BHLPAVNJ.cjs → tickets-board-IFWMIZ35.cjs} +9 -9
  172. package/dist/{tickets-board-PYDNELSK.js → tickets-board-MYXG3V72.js} +4 -4
  173. package/dist/types/downloads.d.ts +67 -0
  174. package/dist/types/downloads.d.ts.map +1 -0
  175. package/dist/types/index.cjs +24 -0
  176. package/dist/types/index.d.ts +1 -0
  177. package/dist/types/index.d.ts.map +1 -1
  178. package/dist/types/index.js +16 -1
  179. package/dist/utils/index.cjs +46 -2
  180. package/dist/utils/index.d.ts +2 -0
  181. package/dist/utils/index.d.ts.map +1 -1
  182. package/dist/utils/index.js +40 -3
  183. package/dist/utils/list-url.d.ts.map +1 -1
  184. package/dist/utils/mobile-app.cjs +46 -0
  185. package/dist/utils/mobile-app.d.ts +40 -0
  186. package/dist/utils/mobile-app.d.ts.map +1 -0
  187. package/dist/utils/mobile-app.js +40 -0
  188. package/dist/utils/source-icons.d.ts.map +1 -1
  189. package/dist/utils/trial.d.ts +18 -0
  190. package/dist/utils/trial.d.ts.map +1 -0
  191. package/package.json +7 -1
  192. package/src/assets/index.ts +1 -0
  193. package/src/assets/mobile-app-qr.ts +19 -0
  194. package/src/components/chat/ask-prompts.tsx +25 -3
  195. package/src/components/chat/assistant-ask-prompts.tsx +78 -0
  196. package/src/components/chat/entity-cards/dispatch.tsx +38 -4
  197. package/src/components/chat/hooks/index.ts +12 -0
  198. package/src/components/chat/hooks/use-ask-prompts.ts +188 -0
  199. package/src/components/chat/index.ts +1 -0
  200. package/src/components/chat/utils/icon-library.tsx +6 -0
  201. package/src/components/faq/faq-ask-card.tsx +115 -0
  202. package/src/components/faq/faq-document-page.tsx +6 -1
  203. package/src/components/faq/faq-section.tsx +27 -5
  204. package/src/components/faq/index.ts +1 -0
  205. package/src/components/features/auth/auth-benefits-panel.tsx +5 -4
  206. package/src/components/help-center-pages/download-apps-page.tsx +364 -0
  207. package/src/components/help-center-pages/index.ts +1 -0
  208. package/src/components/help-center-pages/trust-center-page.tsx +5 -2
  209. package/src/components/navigation/mingo-ai-button.tsx +27 -6
  210. package/src/components/ui/button/button.tsx +3 -0
  211. package/src/components/ui/index.ts +1 -0
  212. package/src/components/ui/mobile-app-qr.tsx +40 -0
  213. package/src/components/ui/store-badges.tsx +17 -9
  214. package/src/contexts/assistant-runtime-context.tsx +84 -0
  215. package/src/contexts/index.ts +9 -0
  216. package/src/hooks/index.ts +1 -0
  217. package/src/hooks/use-downloads.ts +138 -0
  218. package/src/types/downloads.ts +82 -0
  219. package/src/types/index.ts +1 -0
  220. package/src/utils/index.ts +3 -0
  221. package/src/utils/list-url.ts +4 -0
  222. package/src/utils/mobile-app.ts +57 -0
  223. package/src/utils/source-icons.ts +10 -2
  224. package/src/utils/trial.ts +19 -0
  225. package/dist/chunk-6X3O67OL.cjs +0 -89
  226. package/dist/chunk-AUMKE74M.cjs +0 -16
  227. package/dist/chunk-G3GRYDMS.js +0 -16
  228. package/dist/chunk-RR6PY34K.js +0 -89
@@ -3,39 +3,36 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkZKNZ2CXWcjs = require('./chunk-ZKNZ2CXW.cjs');
6
+ var _chunkGGBYZKMScjs = require('./chunk-GGBYZKMS.cjs');
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
- var _chunkLE5WKGJVcjs = require('./chunk-LE5WKGJV.cjs');
12
+ var _chunkI2254QN6cjs = require('./chunk-I2254QN6.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkE2V2EH2Gcjs = require('./chunk-E2V2EH2G.cjs');
16
+ var _chunkLODMNSQYcjs = require('./chunk-LODMNSQY.cjs');
17
17
 
18
18
 
19
19
 
20
20
 
21
- var _chunkNQVS4G7Gcjs = require('./chunk-NQVS4G7G.cjs');
21
+ var _chunkUZTOI6FJcjs = require('./chunk-UZTOI6FJ.cjs');
22
22
 
23
23
 
24
- var _chunkLCLDFMDFcjs = require('./chunk-LCLDFMDF.cjs');
24
+ var _chunkBYVVE7HPcjs = require('./chunk-BYVVE7HP.cjs');
25
25
 
26
26
 
27
- var _chunkAUMKE74Mcjs = require('./chunk-AUMKE74M.cjs');
28
27
 
29
28
 
30
29
 
30
+ var _chunkHJMSNOBTcjs = require('./chunk-HJMSNOBT.cjs');
31
31
 
32
32
 
33
- var _chunkUWQWMGJ7cjs = require('./chunk-UWQWMGJ7.cjs');
34
33
 
35
34
 
36
-
37
-
38
- var _chunkGQ7JJUITcjs = require('./chunk-GQ7JJUIT.cjs');
35
+ var _chunkK2JUJ37Dcjs = require('./chunk-K2JUJ37D.cjs');
39
36
 
40
37
 
41
38
  var _chunkWVOTC7HWcjs = require('./chunk-WVOTC7HW.cjs');
@@ -44,6 +41,9 @@ var _chunkWVOTC7HWcjs = require('./chunk-WVOTC7HW.cjs');
44
41
  var _chunk7DNL734Scjs = require('./chunk-7DNL734S.cjs');
45
42
 
46
43
 
44
+ var _chunk7GRPR7XAcjs = require('./chunk-7GRPR7XA.cjs');
45
+
46
+
47
47
  var _chunkUJ7AXHRZcjs = require('./chunk-UJ7AXHRZ.cjs');
48
48
 
49
49
 
@@ -212,7 +212,7 @@ function useDocsResolveLink(sourceId, resolveLinkEndpoint) {
212
212
  return _react.useCallback.call(void 0,
213
213
  async (href, currentPath) => {
214
214
  try {
215
- const response = await _chunkAUMKE74Mcjs.contentFetch.call(void 0, resolvedResolveLinkEndpoint, {
215
+ const response = await _chunk7GRPR7XAcjs.contentFetch.call(void 0, resolvedResolveLinkEndpoint, {
216
216
  method: "POST",
217
217
  headers: { "Content-Type": "application/json" },
218
218
  body: JSON.stringify({ link: href, currentPath, source: sourceId })
@@ -238,9 +238,9 @@ function useDocsResolveLink(sourceId, resolveLinkEndpoint) {
238
238
  function scrollToContent() {
239
239
  const article = document.querySelector("article");
240
240
  if (article) {
241
- _chunkGQ7JJUITcjs.scrollElementIntoView.call(void 0, article, { headerOffset: _chunkGQ7JJUITcjs.HUB_HEADER_OFFSET_PX });
241
+ _chunkK2JUJ37Dcjs.scrollElementIntoView.call(void 0, article, { headerOffset: _chunkK2JUJ37Dcjs.HUB_HEADER_OFFSET_PX });
242
242
  } else {
243
- _chunkGQ7JJUITcjs.scrollElementIntoView.call(void 0, document.documentElement);
243
+ _chunkK2JUJ37Dcjs.scrollElementIntoView.call(void 0, document.documentElement);
244
244
  }
245
245
  }
246
246
  function findFirstDocPath(folder) {
@@ -339,8 +339,8 @@ function toDocContent(value, requestedPath) {
339
339
  }
340
340
  function useDocumentTree(config, initialPath) {
341
341
  const { structureEndpoint, contentEndpoint, baseRoute } = config;
342
- const folderIndexFile = _nullishCoalesce(config.folderIndexFile, () => ( _chunkUWQWMGJ7cjs.DEFAULT_FOLDER_INDEX_FILE));
343
- const cleanInitialPath = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, _optionalChain([initialPath, 'optionalAccess', _4 => _4.replace, 'call', _5 => _5(/\/$/, "")]) || "", folderIndexFile);
342
+ const folderIndexFile = _nullishCoalesce(config.folderIndexFile, () => ( _chunkHJMSNOBTcjs.DEFAULT_FOLDER_INDEX_FILE));
343
+ const cleanInitialPath = _chunkHJMSNOBTcjs.stripFolderIndexFromPath.call(void 0, _optionalChain([initialPath, 'optionalAccess', _4 => _4.replace, 'call', _5 => _5(/\/$/, "")]) || "", folderIndexFile);
344
344
  const [structure, setStructure] = _react.useState.call(void 0, []);
345
345
  const [selectedPath, setSelectedPath] = _react.useState.call(void 0, cleanInitialPath);
346
346
  const [content, setContent] = _react.useState.call(void 0, null);
@@ -364,12 +364,12 @@ function useDocumentTree(config, initialPath) {
364
364
  } else if (pathname.startsWith(`${normalizedBaseRoute}/`)) {
365
365
  pathFromUrl = pathname.substring(`${normalizedBaseRoute}/`.length);
366
366
  }
367
- pathFromUrl = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, pathFromUrl, folderIndexFile);
367
+ pathFromUrl = _chunkHJMSNOBTcjs.stripFolderIndexFromPath.call(void 0, pathFromUrl, folderIndexFile);
368
368
  if (pathFromUrl !== selectedPathRef.current) {
369
369
  setSelectedPath(pathFromUrl);
370
370
  if (pathFromUrl) {
371
371
  const parentPath = pathFromUrl.includes("/") ? pathFromUrl.substring(0, pathFromUrl.lastIndexOf("/")) : pathFromUrl;
372
- setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, parentPath)));
372
+ setExpandedNodes(new Set(_chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, parentPath)));
373
373
  }
374
374
  setTimeout(() => {
375
375
  scrollToContent();
@@ -387,7 +387,7 @@ function useDocumentTree(config, initialPath) {
387
387
  setSelectedPath(cleanInitialPath);
388
388
  if (cleanInitialPath) {
389
389
  const parentPath = cleanInitialPath.includes("/") ? cleanInitialPath.substring(0, cleanInitialPath.lastIndexOf("/")) : cleanInitialPath;
390
- setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, parentPath)));
390
+ setExpandedNodes(new Set(_chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, parentPath)));
391
391
  }
392
392
  setExternalNavCount((n) => n + 1);
393
393
  }
@@ -401,7 +401,7 @@ function useDocumentTree(config, initialPath) {
401
401
  try {
402
402
  setIsLoadingStructure(true);
403
403
  setError(null);
404
- const response = await _chunkAUMKE74Mcjs.contentFetch.call(void 0, structureEndpoint);
404
+ const response = await _chunk7GRPR7XAcjs.contentFetch.call(void 0, structureEndpoint);
405
405
  if (!response.ok) {
406
406
  throw new Error("Failed to load documentation structure");
407
407
  }
@@ -412,7 +412,7 @@ function useDocumentTree(config, initialPath) {
412
412
  if (cleanInitialPath) {
413
413
  const pathForExpansion = cleanInitialPath.includes(".") ? cleanInitialPath.substring(0, cleanInitialPath.lastIndexOf("/")) : cleanInitialPath;
414
414
  if (pathForExpansion) {
415
- setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, pathForExpansion)));
415
+ setExpandedNodes(new Set(_chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, pathForExpansion)));
416
416
  }
417
417
  } else if (nodes.length > 0) {
418
418
  const hasRootReadme = nodes.some((node) => node.type === "file" && node.path === folderIndexFile);
@@ -440,7 +440,7 @@ function useDocumentTree(config, initialPath) {
440
440
  const fetchContent = async (path) => {
441
441
  try {
442
442
  setIsLoadingContent(true);
443
- const response = await _chunkAUMKE74Mcjs.contentFetch.call(void 0, `${contentEndpoint}?path=${encodeURIComponent(path)}`);
443
+ const response = await _chunk7GRPR7XAcjs.contentFetch.call(void 0, `${contentEndpoint}?path=${encodeURIComponent(path)}`);
444
444
  if (path !== lastFetchedPath.current) return;
445
445
  if (!response.ok) {
446
446
  if (response.status === 404) {
@@ -452,7 +452,7 @@ function useDocumentTree(config, initialPath) {
452
452
  setContent(null);
453
453
  return;
454
454
  }
455
- const probe = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, path, folderIndexFile), structure);
455
+ const probe = _chunkHJMSNOBTcjs.findDocNodeByPath.call(void 0, _chunkHJMSNOBTcjs.stripFolderIndexFromPath.call(void 0, path, folderIndexFile), structure);
456
456
  const probeIsNoReadmeFolder = !!probe && probe.type === "folder" && !probe.hasReadme;
457
457
  const preStructureFolderLike = structure.length === 0 && !path.endsWith(".md");
458
458
  if (probeIsNoReadmeFolder || preStructureFolderLike) {
@@ -509,7 +509,7 @@ function useDocumentTree(config, initialPath) {
509
509
  if (selectedPath === "") {
510
510
  pathToFetch = folderIndexFile;
511
511
  } else {
512
- const node = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure);
512
+ const node = _chunkHJMSNOBTcjs.findDocNodeByPath.call(void 0, selectedPath, structure);
513
513
  if (node && node.type === "folder" && !node.hasReadme) {
514
514
  const firstDocPath = findFirstDocPath(node);
515
515
  if (!firstDocPath) {
@@ -550,16 +550,16 @@ function useDocumentTree(config, initialPath) {
550
550
  if (node.type === "folder") {
551
551
  setExpandedNodes((prev) => {
552
552
  if (prev.has(node.id)) {
553
- const ancestorIds = _chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path);
553
+ const ancestorIds = _chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, node.path);
554
554
  ancestorIds.pop();
555
555
  return new Set(ancestorIds);
556
556
  }
557
- return new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path));
557
+ return new Set(_chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, node.path));
558
558
  });
559
559
  } else {
560
560
  const lastSlash = node.path.lastIndexOf("/");
561
561
  if (lastSlash > 0) {
562
- setExpandedNodes(new Set(_chunkUWQWMGJ7cjs.getDocAncestorNodeIds.call(void 0, node.path.substring(0, lastSlash))));
562
+ setExpandedNodes(new Set(_chunkHJMSNOBTcjs.getDocAncestorNodeIds.call(void 0, node.path.substring(0, lastSlash))));
563
563
  }
564
564
  }
565
565
  lastFetchedPath.current = null;
@@ -574,9 +574,9 @@ function useDocumentTree(config, initialPath) {
574
574
  const hashIndex = path.indexOf("#");
575
575
  const anchor = hashIndex !== -1 ? path.substring(hashIndex) : "";
576
576
  const cleanPath = path.replace(/\/$/, "").split("#")[0];
577
- const pathForSelection = anchor && _optionalChain([options, 'optionalAccess', _6 => _6.fromInternalLink]) && cleanPath === "" ? selectedPathRef.current : _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, cleanPath, folderIndexFile);
577
+ const pathForSelection = anchor && _optionalChain([options, 'optionalAccess', _6 => _6.fromInternalLink]) && cleanPath === "" ? selectedPathRef.current : _chunkHJMSNOBTcjs.stripFolderIndexFromPath.call(void 0, cleanPath, folderIndexFile);
578
578
  if (anchor && _optionalChain([options, 'optionalAccess', _7 => _7.fromInternalLink]) && pathForSelection === selectedPathRef.current) {
579
- _chunkGQ7JJUITcjs.navigateSamePageHash.call(void 0, anchor, { headerOffset: _chunkGQ7JJUITcjs.HUB_HEADER_OFFSET_PX });
579
+ _chunkK2JUJ37Dcjs.navigateSamePageHash.call(void 0, anchor, { headerOffset: _chunkK2JUJ37Dcjs.HUB_HEADER_OFFSET_PX });
580
580
  return;
581
581
  }
582
582
  const scrollAfterNav = () => {
@@ -584,7 +584,7 @@ function useDocumentTree(config, initialPath) {
584
584
  setTimeout(() => {
585
585
  const el = document.getElementById(anchor.substring(1));
586
586
  if (el) {
587
- _chunkGQ7JJUITcjs.scrollElementIntoView.call(void 0, el, { headerOffset: _chunkGQ7JJUITcjs.HUB_HEADER_OFFSET_PX });
587
+ _chunkK2JUJ37Dcjs.scrollElementIntoView.call(void 0, el, { headerOffset: _chunkK2JUJ37Dcjs.HUB_HEADER_OFFSET_PX });
588
588
  } else {
589
589
  scrollToContent();
590
590
  }
@@ -638,15 +638,15 @@ function useDocumentTree(config, initialPath) {
638
638
  return docNavigation.register({
639
639
  baseRoute: normalizedBaseRoute,
640
640
  findNodeByPath: (path) => {
641
- const clean = _chunkUWQWMGJ7cjs.stripFolderIndexFromPath.call(void 0, path.replace(/\/$/, "").split("#")[0], folderIndexFile);
642
- return _nullishCoalesce(_chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, clean, structure), () => ( null));
641
+ const clean = _chunkHJMSNOBTcjs.stripFolderIndexFromPath.call(void 0, path.replace(/\/$/, "").split("#")[0], folderIndexFile);
642
+ return _nullishCoalesce(_chunkHJMSNOBTcjs.findDocNodeByPath.call(void 0, clean, structure), () => ( null));
643
643
  },
644
644
  selectNode
645
645
  });
646
646
  }, [docNavigation, normalizedBaseRoute, structure, selectNode, folderIndexFile]);
647
647
  const isEmptyFolder = _react.useMemo.call(void 0, () => {
648
648
  if (!selectedPath || structure.length === 0) return false;
649
- const node = _chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure);
649
+ const node = _chunkHJMSNOBTcjs.findDocNodeByPath.call(void 0, selectedPath, structure);
650
650
  return !!node && node.type === "folder" && !node.hasReadme && !findFirstDocPath(node);
651
651
  }, [selectedPath, structure]);
652
652
  return {
@@ -726,14 +726,14 @@ function DocViewerContent({
726
726
  },
727
727
  docPath
728
728
  );
729
- const { activeSection, handleSectionClick } = _chunkLE5WKGJVcjs.useScrollSpy.call(void 0, _optionalChain([content, 'optionalAccess', _11 => _11.sections]));
729
+ const { activeSection, handleSectionClick } = _chunkI2254QN6cjs.useScrollSpy.call(void 0, _optionalChain([content, 'optionalAccess', _11 => _11.sections]));
730
730
  const docNav = useDocNavigation();
731
731
  const router = _chunk7DNL734Scjs.useRouter.call(void 0, );
732
732
  const backCfg = backButton === false ? null : {
733
733
  label: _nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _12 => _12.label]), () => ( "Back to home")),
734
734
  onClick: () => router.push(_nullishCoalesce(_optionalChain([backButton, 'optionalAccess', _13 => _13.href]), () => ( "/")))
735
735
  };
736
- const docSearch = _chunkE2V2EH2Gcjs.useDocSearch.call(void 0, {
736
+ const docSearch = _chunkLODMNSQYcjs.useDocSearch.call(void 0, {
737
737
  source: chatSource,
738
738
  baseRoute,
739
739
  searchEndpoint,
@@ -757,7 +757,7 @@ function DocViewerContent({
757
757
  onResolveLink: resolveLink
758
758
  });
759
759
  }, [content, renderContent, navigateToDoc, sourceId, resolveLink]);
760
- const selectedNodeDocType = selectedPath && structure.length > 0 ? _optionalChain([_chunkUWQWMGJ7cjs.findDocNodeByPath.call(void 0, selectedPath, structure), 'optionalAccess', _14 => _14.documentType]) : void 0;
760
+ const selectedNodeDocType = selectedPath && structure.length > 0 ? _optionalChain([_chunkHJMSNOBTcjs.findDocNodeByPath.call(void 0, selectedPath, structure), 'optionalAccess', _14 => _14.documentType]) : void 0;
761
761
  const activeDocType = _nullishCoalesce(_optionalChain([content, 'optionalAccess', _15 => _15.documentType]), () => ( selectedNodeDocType));
762
762
  const isMarkdownContent = !activeDocType || activeDocType === "markdown";
763
763
  const showStickyNav = isMarkdownContent;
@@ -768,9 +768,9 @@ function DocViewerContent({
768
768
  const containerBgStyle = colorPalette.containerBackground !== "transparent" ? { backgroundColor: colorPalette.containerBackground } : {};
769
769
  const defaultEmptyText = structure.length > 0 ? "Select a document from the sidebar to view" : "No documents yet. Add content from the admin panel.";
770
770
  const resolvedEmptyText = emptyStateText || defaultEmptyText;
771
- const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { ...bgStyle, ...containerBgStyle }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLCLDFMDFcjs.PageLayout, { title, subtitle, titleSize: "h1", titleWrap: true, backButton: _nullishCoalesce(backCfg, () => ( void 0)), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-10", children: [
771
+ const inner = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { ...bgStyle, ...containerBgStyle }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBYVVE7HPcjs.PageLayout, { title, subtitle, titleSize: "h1", titleWrap: true, backButton: _nullishCoalesce(backCfg, () => ( void 0)), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-10", children: [
772
772
  showAIChat && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
773
- _chunkE2V2EH2Gcjs.DocSearchBar,
773
+ _chunkLODMNSQYcjs.DocSearchBar,
774
774
  {
775
775
  placeholder: `Search ${_optionalChain([sidebarLabel, 'optionalAccess', _19 => _19.toLowerCase, 'call', _20 => _20()]) || "documents"}...`,
776
776
  query: docSearch.query,
@@ -789,9 +789,9 @@ function DocViewerContent({
789
789
  ] })
790
790
  ] }) }),
791
791
  !error && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-1 flex-col items-start gap-6 content-lg:flex-row content-lg:gap-10", children: [
792
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full content-lg:w-[320px] content-lg:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "content-lg:sticky content-lg:top-20", children: isLoadingStructure ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNQVS4G7Gcjs.CategorySidebarSkeleton, {}) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
792
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full content-lg:w-[320px] content-lg:shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "content-lg:sticky content-lg:top-20", children: isLoadingStructure ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUZTOI6FJcjs.CategorySidebarSkeleton, {}) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
793
793
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PersistentMobileDropdown, { isLoading: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
794
- _chunkLE5WKGJVcjs.MobileNavigationDropdown,
794
+ _chunkI2254QN6cjs.MobileNavigationDropdown,
795
795
  {
796
796
  nodes: structure,
797
797
  selectedPath,
@@ -805,7 +805,7 @@ function DocViewerContent({
805
805
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PersistentSidebar, { isLoading: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden content-lg:block", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
806
806
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-semibold text-ods-text-secondary text-h5", children: sidebarLabel }),
807
807
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
808
- _chunkLE5WKGJVcjs.MultiLevelNavigation,
808
+ _chunkI2254QN6cjs.MultiLevelNavigation,
809
809
  {
810
810
  nodes: structure,
811
811
  selectedPath,
@@ -844,7 +844,7 @@ function DocViewerContent({
844
844
  showStickyNav && content && stickyNavSections.length > 0 && !isLoadingContent && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "hidden content-lg:block", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "sticky top-24", children: [
845
845
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "mb-4 font-semibold text-ods-text-secondary text-h5", children: "ON THIS PAGE" }),
846
846
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
847
- _chunkLE5WKGJVcjs.StickySectionNav,
847
+ _chunkI2254QN6cjs.StickySectionNav,
848
848
  {
849
849
  sections: stickyNavSections,
850
850
  activeSection,
@@ -859,7 +859,7 @@ function DocViewerContent({
859
859
  ) })
860
860
  ] })
861
861
  ] }) }) });
862
- return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNQVS4G7Gcjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
862
+ return shell ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUZTOI6FJcjs.PageShell, { contentClassName: `${bgClass} ${className}`, children: inner }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `page-shell-content ${bgClass} ${className}`.trim(), children: inner });
863
863
  }
864
864
 
865
865
  // src/components/docs/skeletons.tsx
@@ -955,11 +955,11 @@ function EmbedSkeleton({ documentType } = {}) {
955
955
 
956
956
  var DEFAULT_TITLE = "Documents";
957
957
  var defaultFallbackRenderer = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "py-16 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary", children: "Unsupported document type" }) });
958
- var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZKNZ2CXWcjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
959
- var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZKNZ2CXWcjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
960
- var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNQVS4G7Gcjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
958
+ var defaultPdfRenderer = (content, handlers) => content.fileUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGGBYZKMScjs.PdfViewer, { src: content.fileUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
959
+ var defaultGoogleSheetRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGGBYZKMScjs.GoogleSheetsViewer, { externalUrl: content.externalUrl, fileName: content.fileName }) : defaultFallbackRenderer(content, handlers);
960
+ var defaultFigmaRenderer = (content, handlers) => content.externalUrl ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUZTOI6FJcjs.FigmaEmbed, { url: content.externalUrl, title: content.fileName, loading: "eager" }) : defaultFallbackRenderer(content, handlers);
961
961
  var defaultFileRenderer = (content) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
962
- _chunkZKNZ2CXWcjs.FileDownloadCard,
962
+ _chunkGGBYZKMScjs.FileDownloadCard,
963
963
  {
964
964
  fileName: content.fileName,
965
965
  mimeType: content.mimeType,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  Button
4
- } from "./chunk-YDPKUAP4.js";
4
+ } from "./chunk-DJ4IFQNQ.js";
5
5
  import {
6
6
  cn
7
7
  } from "./chunk-7RXWKTAP.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  DEFAULT_FOLDER_INDEX_FILE,
4
4
  ScrollShadow
5
- } from "./chunk-JH2SIWPQ.js";
5
+ } from "./chunk-HXB7SEYG.js";
6
6
  import {
7
7
  ACTIVE_ANCHOR_ATTRIBUTE,
8
8
  declaredScrollMarginTop,
@@ -12,7 +12,7 @@ import {
12
12
  normalizeHashFragment,
13
13
  replaceLocationHash,
14
14
  scrollElementIntoView
15
- } from "./chunk-CMZ3QTFQ.js";
15
+ } from "./chunk-4I3K6LEH.js";
16
16
  import {
17
17
  next_link_default
18
18
  } from "./chunk-DAAVMYUT.js";
@@ -429,6 +429,21 @@ function getPlatformColorClass(platformName) {
429
429
  return getPlatformBrandClasses(platformName).accentBg;
430
430
  }
431
431
 
432
+ // src/types/downloads.ts
433
+ var DOWNLOADS_API_PATH = "/api/downloads";
434
+ var DOWNLOADS_CACHE_SECONDS = 300;
435
+ var DOWNLOADS_TITLE = "Download OpenFrame";
436
+ var DOWNLOADS_TAGLINE = "Install it on the computer you manage IT from, and on your phone. One account everywhere.";
437
+ var DOWNLOADS_MOBILE_TITLE = "Get the OpenFrame app";
438
+ var DOWNLOADS_MOBILE_TAGLINE = "Alerts and tickets on your phone, signed in with the account you already have.";
439
+ var APP_DOWNLOAD_KINDS = ["binary", "command"];
440
+ var DESKTOP_OS_LABELS = { mac: "Mac", windows: "Windows", linux: "Linux" };
441
+ var DOWNLOAD_ARCHITECTURE_LABELS = {
442
+ universal: "Apple Silicon and Intel",
443
+ x64: "x64",
444
+ arm64: "ARM"
445
+ };
446
+
432
447
  // src/utils/access-code-client.ts
433
448
  async function validateAccessCode(email, code, endpoints) {
434
449
  try {
@@ -1138,6 +1153,15 @@ export {
1138
1153
  getPlatformIcon,
1139
1154
  getSmallPlatformIcon,
1140
1155
  getPlatformIconComponent,
1156
+ DOWNLOADS_API_PATH,
1157
+ DOWNLOADS_CACHE_SECONDS,
1158
+ DOWNLOADS_TITLE,
1159
+ DOWNLOADS_TAGLINE,
1160
+ DOWNLOADS_MOBILE_TITLE,
1161
+ DOWNLOADS_MOBILE_TAGLINE,
1162
+ APP_DOWNLOAD_KINDS,
1163
+ DESKTOP_OS_LABELS,
1164
+ DOWNLOAD_ARCHITECTURE_LABELS,
1141
1165
  validateAccessCode,
1142
1166
  consumeAccessCode,
1143
1167
  validateAndConsumeAccessCode,