@flamingo-stack/openframe-frontend-core 0.0.296 → 0.0.297
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/README.md +9 -0
- package/dist/{chunk-7RIYT7ZH.js → chunk-2QG57XOJ.js} +1067 -205
- package/dist/chunk-2QG57XOJ.js.map +1 -0
- package/dist/{chunk-WHMATDVP.js → chunk-3JIQVE7T.js} +9 -15
- package/dist/{chunk-WHMATDVP.js.map → chunk-3JIQVE7T.js.map} +1 -1
- package/dist/{chunk-GLLDTKZK.cjs → chunk-4PSQS3SW.cjs} +7 -9
- package/dist/chunk-4PSQS3SW.cjs.map +1 -0
- package/dist/{chunk-OY7OF7E7.js → chunk-4TLE6VLU.js} +30 -24
- package/dist/chunk-4TLE6VLU.js.map +1 -0
- package/dist/{chunk-W6M2FLLT.cjs → chunk-53FUMSZ5.cjs} +40 -46
- package/dist/chunk-53FUMSZ5.cjs.map +1 -0
- package/dist/{chunk-D3LEFMOA.cjs → chunk-54KNMC2R.cjs} +3 -3
- package/dist/{chunk-D3LEFMOA.cjs.map → chunk-54KNMC2R.cjs.map} +1 -1
- package/dist/{chunk-EYEW6PTA.cjs → chunk-6C526VNN.cjs} +358 -118
- package/dist/chunk-6C526VNN.cjs.map +1 -0
- package/dist/{chunk-XREEV72C.cjs → chunk-7OVGB2DQ.cjs} +19 -25
- package/dist/chunk-7OVGB2DQ.cjs.map +1 -0
- package/dist/{chunk-6GCI7JOE.js → chunk-AD6C23QY.js} +8 -7
- package/dist/{chunk-6GCI7JOE.js.map → chunk-AD6C23QY.js.map} +1 -1
- package/dist/chunk-F5OB2YAL.cjs +144 -0
- package/dist/chunk-F5OB2YAL.cjs.map +1 -0
- package/dist/chunk-FBWXMMRB.cjs +2 -0
- package/dist/chunk-FBWXMMRB.cjs.map +1 -0
- package/dist/{chunk-YIGPRLQY.cjs → chunk-FCDQNTDG.cjs} +21 -20
- package/dist/chunk-FCDQNTDG.cjs.map +1 -0
- package/dist/{chunk-IE6OU3WQ.cjs → chunk-FQOTC3UU.cjs} +318 -16
- package/dist/chunk-FQOTC3UU.cjs.map +1 -0
- package/dist/{chunk-QHIXS3W2.cjs → chunk-GUTS7HGA.cjs} +11590 -2105
- package/dist/chunk-GUTS7HGA.cjs.map +1 -0
- package/dist/chunk-GZ4C3XW6.js +2 -0
- package/dist/chunk-GZ4C3XW6.js.map +1 -0
- package/dist/{chunk-5P3B2LZW.js → chunk-IL47XWV5.js} +8 -14
- package/dist/{chunk-5P3B2LZW.js.map → chunk-IL47XWV5.js.map} +1 -1
- package/dist/{chunk-LCNMR277.js → chunk-IZ7JSBFP.js} +1 -1
- package/dist/chunk-IZ7JSBFP.js.map +1 -0
- package/dist/{chunk-EL6QLAWX.js → chunk-JALO4TAZ.js} +357 -55
- package/dist/chunk-JALO4TAZ.js.map +1 -0
- package/dist/{chunk-AQOWFSMB.cjs → chunk-L6PSSIUQ.cjs} +1 -1
- package/dist/chunk-L6PSSIUQ.cjs.map +1 -0
- package/dist/{chunk-MBFWU2EM.js → chunk-L7ULJKG7.js} +6 -10
- package/dist/{chunk-MBFWU2EM.js.map → chunk-L7ULJKG7.js.map} +1 -1
- package/dist/{chunk-K2PFPBMF.js → chunk-PC746XCO.js} +15050 -5565
- package/dist/chunk-PC746XCO.js.map +1 -0
- package/dist/{chunk-3ZXUQQL4.js → chunk-PI4WSYQV.js} +2 -2
- package/dist/{chunk-E4XABBSU.js → chunk-PWQUAVA3.js} +338 -98
- package/dist/chunk-PWQUAVA3.js.map +1 -0
- package/dist/chunk-SA2WPJVO.js +144 -0
- package/dist/chunk-SA2WPJVO.js.map +1 -0
- package/dist/{chunk-X6BV7MB7.cjs → chunk-UNVE2SDJ.cjs} +37 -31
- package/dist/chunk-UNVE2SDJ.cjs.map +1 -0
- package/dist/{chunk-5E2HOSSH.cjs → chunk-WMSTJAZT.cjs} +913 -51
- package/dist/chunk-WMSTJAZT.cjs.map +1 -0
- package/dist/{chunk-ZP4AVIZP.js → chunk-X4DOXQRT.js} +4 -6
- package/dist/{chunk-ZP4AVIZP.js.map → chunk-X4DOXQRT.js.map} +1 -1
- package/dist/{chunk-X647HY3F.cjs → chunk-YBYI62OE.cjs} +33 -37
- package/dist/chunk-YBYI62OE.cjs.map +1 -0
- package/dist/components/case-studies/index.cjs +126 -0
- package/dist/components/case-studies/index.cjs.map +1 -0
- package/dist/components/case-studies/index.d.ts +2 -0
- package/dist/components/case-studies/index.d.ts.map +1 -0
- package/dist/components/case-studies/index.js +126 -0
- package/dist/components/case-studies/index.js.map +1 -0
- package/dist/components/case-studies/share-experience-section.d.ts +48 -0
- package/dist/components/case-studies/share-experience-section.d.ts.map +1 -0
- package/dist/components/chat/index.cjs +8 -18
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +75 -85
- package/dist/components/contact/index.cjs +8 -15
- package/dist/components/contact/index.cjs.map +1 -1
- package/dist/components/contact/index.js +7 -14
- package/dist/components/docs/doc-viewer.d.ts +39 -2
- package/dist/components/docs/doc-viewer.d.ts.map +1 -1
- package/dist/components/docs/docs-hub-page.d.ts +46 -0
- package/dist/components/docs/docs-hub-page.d.ts.map +1 -0
- package/dist/components/docs/index.cjs +17 -9
- package/dist/components/docs/index.cjs.map +1 -1
- package/dist/components/docs/index.d.ts +4 -0
- package/dist/components/docs/index.d.ts.map +1 -1
- package/dist/components/docs/index.js +16 -8
- package/dist/components/docs/skeletons.d.ts +32 -0
- package/dist/components/docs/skeletons.d.ts.map +1 -0
- package/dist/components/docs/use-docs-resolve-link.d.ts +20 -0
- package/dist/components/docs/use-docs-resolve-link.d.ts.map +1 -0
- package/dist/components/docs/use-document-tree.d.ts.map +1 -1
- package/dist/components/embeds/embed-container.d.ts +37 -0
- package/dist/components/embeds/embed-container.d.ts.map +1 -0
- package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
- package/dist/components/embeds/file-download-card.d.ts +18 -0
- package/dist/components/embeds/file-download-card.d.ts.map +1 -0
- package/dist/components/embeds/index.cjs +38 -15
- package/dist/components/embeds/index.cjs.map +1 -1
- package/dist/components/embeds/index.d.ts +8 -0
- package/dist/components/embeds/index.d.ts.map +1 -1
- package/dist/components/embeds/index.js +40 -17
- package/dist/components/embeds/linkedin-embed-client.d.ts +8 -0
- package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -0
- package/dist/components/embeds/markdown-image.d.ts +5 -0
- package/dist/components/embeds/markdown-image.d.ts.map +1 -0
- package/dist/components/embeds/reddit-embed-client.d.ts +7 -0
- package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -0
- package/dist/components/embeds/rich-markdown-runtime.d.ts +46 -0
- package/dist/components/embeds/rich-markdown-runtime.d.ts.map +1 -0
- package/dist/components/embeds/twitter-embed-client.d.ts +8 -0
- package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -0
- package/dist/components/faq/index.cjs +9 -16
- package/dist/components/faq/index.cjs.map +1 -1
- package/dist/components/faq/index.js +8 -15
- package/dist/components/features/index.cjs +8 -16
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.js +24 -32
- package/dist/components/index.cjs +257 -452
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +781 -976
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/page-header.d.ts +78 -0
- package/dist/components/layout/page-header.d.ts.map +1 -0
- package/dist/components/layout/page-layout.d.ts +10 -1
- package/dist/components/layout/page-layout.d.ts.map +1 -1
- package/dist/components/layout/page-with-header.d.ts +67 -0
- package/dist/components/layout/page-with-header.d.ts.map +1 -0
- package/dist/components/layout/title-block.d.ts +17 -1
- package/dist/components/layout/title-block.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +7 -15
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.js +9 -17
- package/dist/components/onboarding-guides/index.cjs +35 -36
- package/dist/components/onboarding-guides/index.cjs.map +1 -1
- package/dist/components/onboarding-guides/index.js +13 -14
- package/dist/components/onboarding-guides/index.js.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +1 -1
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +9 -16
- package/dist/components/related-content/index.cjs.map +1 -1
- package/dist/components/related-content/index.js +8 -15
- package/dist/components/shared/dev-section/dev-section-page.d.ts +9 -0
- package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
- package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
- package/dist/components/shared/dev-section/index.d.ts +1 -1
- package/dist/components/shared/dev-section/index.d.ts.map +1 -1
- package/dist/components/shared/doc-search/use-doc-search.d.ts.map +1 -1
- package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +100 -112
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +20 -32
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -52
- package/dist/components/ui/file-manager/index.cjs.map +1 -1
- package/dist/components/ui/file-manager/index.js +4 -6
- package/dist/components/ui/file-manager/index.js.map +1 -1
- package/dist/components/ui/index.cjs +13 -19
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +2 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +133 -139
- package/dist/components/ui/release-changelog-section.d.ts +6 -2
- package/dist/components/ui/release-changelog-section.d.ts.map +1 -1
- package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
- package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
- package/dist/components/ui/simple-markdown-renderer.d.ts +2 -8
- package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
- package/dist/contexts/chat-runtime-context.d.ts +14 -0
- package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
- package/dist/contexts/index.cjs +3 -3
- package/dist/contexts/index.js +5 -5
- package/dist/embed-shims/index.cjs +3 -3
- package/dist/embed-shims/index.cjs.map +1 -1
- package/dist/embed-shims/index.js +4 -4
- package/dist/hooks/index.cjs +4 -9
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +6 -11
- package/dist/index.cjs +14 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +362 -368
- package/dist/types/doc-source.d.ts +31 -1
- package/dist/types/doc-source.d.ts.map +1 -1
- package/dist/utils/index.cjs +4 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/page-header-constants.d.ts +15 -0
- package/dist/utils/page-header-constants.d.ts.map +1 -0
- package/dist/utils/social-embed-cache.d.ts +29 -0
- package/dist/utils/social-embed-cache.d.ts.map +1 -0
- package/package.json +7 -1
- package/src/components/case-studies/index.ts +4 -0
- package/src/components/case-studies/share-experience-section.tsx +185 -0
- package/src/components/chat/embeddable-chat.tsx +1 -1
- package/src/components/docs/doc-viewer.tsx +111 -19
- package/src/components/docs/docs-hub-page.tsx +149 -0
- package/src/components/docs/index.ts +17 -0
- package/src/components/docs/skeletons.tsx +138 -0
- package/src/components/docs/use-docs-resolve-link.ts +52 -0
- package/src/components/docs/use-document-tree.ts +21 -0
- package/src/components/embeds/embed-container.tsx +80 -0
- package/src/components/embeds/embed-iframe.tsx +7 -9
- package/src/components/embeds/file-download-card.tsx +54 -0
- package/src/components/embeds/index.ts +30 -0
- package/src/components/embeds/linkedin-embed-client.tsx +100 -0
- package/src/components/embeds/markdown-image.tsx +88 -0
- package/src/components/embeds/og-link-preview.tsx +13 -13
- package/src/components/embeds/reddit-embed-client.tsx +550 -0
- package/src/components/embeds/rich-markdown-runtime.tsx +79 -0
- package/src/components/embeds/twitter-embed-client.tsx +308 -0
- package/src/components/layout/page-header.tsx +182 -0
- package/src/components/layout/page-layout.tsx +14 -1
- package/src/components/layout/page-with-header.tsx +110 -0
- package/src/components/layout/title-block.tsx +40 -62
- package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +3 -3
- package/src/components/shared/dev-section/dev-section-page.tsx +9 -1
- package/src/components/shared/dev-section/dev-section-view.tsx +14 -9
- package/src/components/shared/dev-section/index.ts +1 -1
- package/src/components/shared/doc-search/use-doc-search.ts +7 -3
- package/src/components/shared/legal-document/legal-document-page.tsx +2 -2
- package/src/components/shared/product-release/release-detail-page.tsx +6 -4
- package/src/components/ui/index.ts +2 -0
- package/src/components/ui/release-changelog-section.tsx +7 -2
- package/src/components/ui/rich-markdown-renderer.tsx +1203 -0
- package/src/components/ui/simple-markdown-renderer.tsx +7 -11
- package/src/contexts/chat-runtime-context.tsx +14 -0
- package/src/types/doc-source.ts +33 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/page-header-constants.ts +15 -0
- package/src/utils/social-embed-cache.ts +391 -0
- package/dist/chunk-26PKDALD.js +0 -2379
- package/dist/chunk-26PKDALD.js.map +0 -1
- package/dist/chunk-3MCHAFHB.js +0 -89
- package/dist/chunk-3MCHAFHB.js.map +0 -1
- package/dist/chunk-5E2HOSSH.cjs.map +0 -1
- package/dist/chunk-66AANIOC.cjs +0 -619
- package/dist/chunk-66AANIOC.cjs.map +0 -1
- package/dist/chunk-6JINAOI7.cjs +0 -311
- package/dist/chunk-6JINAOI7.cjs.map +0 -1
- package/dist/chunk-7RIYT7ZH.js.map +0 -1
- package/dist/chunk-AQOWFSMB.cjs.map +0 -1
- package/dist/chunk-BOCFIKYS.cjs +0 -3009
- package/dist/chunk-BOCFIKYS.cjs.map +0 -1
- package/dist/chunk-D652TJBQ.js +0 -3009
- package/dist/chunk-D652TJBQ.js.map +0 -1
- package/dist/chunk-E4XABBSU.js.map +0 -1
- package/dist/chunk-EL6QLAWX.js.map +0 -1
- package/dist/chunk-EYEW6PTA.cjs.map +0 -1
- package/dist/chunk-FQJK446R.js +0 -1606
- package/dist/chunk-FQJK446R.js.map +0 -1
- package/dist/chunk-GLLDTKZK.cjs.map +0 -1
- package/dist/chunk-IE6OU3WQ.cjs.map +0 -1
- package/dist/chunk-J54Z3OCR.cjs +0 -1606
- package/dist/chunk-J54Z3OCR.cjs.map +0 -1
- package/dist/chunk-K2PFPBMF.js.map +0 -1
- package/dist/chunk-KXCRGTRN.cjs +0 -2379
- package/dist/chunk-KXCRGTRN.cjs.map +0 -1
- package/dist/chunk-LCNMR277.js.map +0 -1
- package/dist/chunk-LFGGF7OT.cjs +0 -449
- package/dist/chunk-LFGGF7OT.cjs.map +0 -1
- package/dist/chunk-M2OCXTNT.js +0 -311
- package/dist/chunk-M2OCXTNT.js.map +0 -1
- package/dist/chunk-ME4EVDFP.js +0 -619
- package/dist/chunk-ME4EVDFP.js.map +0 -1
- package/dist/chunk-OQ6X7ZOC.js +0 -449
- package/dist/chunk-OQ6X7ZOC.js.map +0 -1
- package/dist/chunk-OY7OF7E7.js.map +0 -1
- package/dist/chunk-POKKCWKF.js +0 -354
- package/dist/chunk-POKKCWKF.js.map +0 -1
- package/dist/chunk-QHIXS3W2.cjs.map +0 -1
- package/dist/chunk-TFSYSWPS.cjs +0 -89
- package/dist/chunk-TFSYSWPS.cjs.map +0 -1
- package/dist/chunk-W6M2FLLT.cjs.map +0 -1
- package/dist/chunk-X647HY3F.cjs.map +0 -1
- package/dist/chunk-X6BV7MB7.cjs.map +0 -1
- package/dist/chunk-XREEV72C.cjs.map +0 -1
- package/dist/chunk-YETA25JW.cjs +0 -354
- package/dist/chunk-YETA25JW.cjs.map +0 -1
- package/dist/chunk-YIGPRLQY.cjs.map +0 -1
- /package/dist/{chunk-3ZXUQQL4.js.map → chunk-PI4WSYQV.js.map} +0 -0
|
@@ -1,51 +1,130 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
var _chunk27APPAJNcjs = require('./chunk-27APPAJN.cjs');
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
|
|
9
|
+
var _chunkG7UE6RKVcjs = require('./chunk-G7UE6RKV.cjs');
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
|
|
12
|
-
var _chunkLFGGF7OTcjs = require('./chunk-LFGGF7OT.cjs');
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _chunk27APPAJNcjs = require('./chunk-27APPAJN.cjs');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var _chunkPXXS27EEcjs = require('./chunk-PXXS27EE.cjs');
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
var _chunkTFSYSWPScjs = require('./chunk-TFSYSWPS.cjs');
|
|
22
|
-
|
|
23
14
|
|
|
24
|
-
var
|
|
15
|
+
var _chunkLGLPNWS6cjs = require('./chunk-LGLPNWS6.cjs');
|
|
25
16
|
|
|
26
17
|
|
|
27
18
|
|
|
19
|
+
var _chunkFIG2RKZFcjs = require('./chunk-FIG2RKZF.cjs');
|
|
28
20
|
|
|
29
|
-
var _chunkG7UE6RKVcjs = require('./chunk-G7UE6RKV.cjs');
|
|
30
21
|
|
|
31
22
|
|
|
32
|
-
var _chunkLGLPNWS6cjs = require('./chunk-LGLPNWS6.cjs');
|
|
33
23
|
|
|
34
24
|
|
|
35
25
|
|
|
36
|
-
var _chunkFIG2RKZFcjs = require('./chunk-FIG2RKZF.cjs');
|
|
37
|
-
|
|
38
26
|
|
|
39
27
|
|
|
28
|
+
var _chunkZS2SBWBRcjs = require('./chunk-ZS2SBWBR.cjs');
|
|
40
29
|
|
|
41
30
|
|
|
31
|
+
var _chunkPXXS27EEcjs = require('./chunk-PXXS27EE.cjs');
|
|
42
32
|
|
|
33
|
+
// src/hooks/ui/use-auto-limit-tags.ts
|
|
34
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
35
|
+
function useAutoLimitTags({
|
|
36
|
+
count,
|
|
37
|
+
limitTags = "auto",
|
|
38
|
+
placeholder = "",
|
|
39
|
+
reserveInputWidth = true
|
|
40
|
+
}) {
|
|
41
|
+
const middleRef = _react.useRef.call(void 0, null);
|
|
42
|
+
const measureRef = _react.useRef.call(void 0, null);
|
|
43
|
+
const textMeasureRef = _react.useRef.call(void 0, null);
|
|
44
|
+
const badgeRef = _react.useRef.call(void 0, null);
|
|
45
|
+
const inputRef = _react.useRef.call(void 0, null);
|
|
46
|
+
const [visibleCount, setVisibleCount] = _react.useState.call(void 0, count);
|
|
47
|
+
const recalculate = _react.useCallback.call(void 0, () => {
|
|
48
|
+
if (limitTags !== "auto") {
|
|
49
|
+
setVisibleCount(Math.min(limitTags, count));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const middle = middleRef.current;
|
|
53
|
+
const measure = measureRef.current;
|
|
54
|
+
if (!middle || !measure) {
|
|
55
|
+
setVisibleCount(count);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (count === 0) {
|
|
59
|
+
setVisibleCount(0);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const cs = getComputedStyle(middle);
|
|
63
|
+
const padL = parseFloat(cs.paddingLeft) || 0;
|
|
64
|
+
const padR = parseFloat(cs.paddingRight) || 0;
|
|
65
|
+
const gap = parseFloat(cs.gap) || 0;
|
|
66
|
+
const middleW = middle.clientWidth;
|
|
67
|
+
let inputReservedW = 0;
|
|
68
|
+
let trailingGap = 0;
|
|
69
|
+
if (reserveInputWidth) {
|
|
70
|
+
const textW = _nullishCoalesce(_optionalChain([textMeasureRef, 'access', _2 => _2.current, 'optionalAccess', _3 => _3.offsetWidth]), () => ( 60));
|
|
71
|
+
const inputMinW = inputRef.current ? parseFloat(getComputedStyle(inputRef.current).minWidth) || 60 : 60;
|
|
72
|
+
inputReservedW = Math.max(textW + 8, inputMinW);
|
|
73
|
+
trailingGap = gap;
|
|
74
|
+
}
|
|
75
|
+
const available = middleW - padL - padR - inputReservedW - trailingGap;
|
|
76
|
+
const tagEls = Array.from(measure.children);
|
|
77
|
+
const widths = tagEls.map((el) => el.offsetWidth);
|
|
78
|
+
let total = 0;
|
|
79
|
+
for (let i = 0; i < widths.length; i++) {
|
|
80
|
+
total += widths[i] + (i > 0 ? gap : 0);
|
|
81
|
+
}
|
|
82
|
+
if (total <= available) {
|
|
83
|
+
setVisibleCount(count);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const badgeW = _nullishCoalesce(_optionalChain([badgeRef, 'access', _4 => _4.current, 'optionalAccess', _5 => _5.offsetWidth]), () => ( 40));
|
|
87
|
+
const spaceWithBadge = available - badgeW - gap;
|
|
88
|
+
let used = 0;
|
|
89
|
+
let fitCount = 0;
|
|
90
|
+
for (let i = 0; i < widths.length; i++) {
|
|
91
|
+
const need = widths[i] + (i > 0 ? gap : 0);
|
|
92
|
+
if (used + need > spaceWithBadge) break;
|
|
93
|
+
used += need;
|
|
94
|
+
fitCount++;
|
|
95
|
+
}
|
|
96
|
+
setVisibleCount(Math.max(0, fitCount));
|
|
97
|
+
}, [count, limitTags, placeholder, reserveInputWidth]);
|
|
98
|
+
_react.useEffect.call(void 0, () => {
|
|
99
|
+
recalculate();
|
|
100
|
+
}, [recalculate]);
|
|
101
|
+
_react.useEffect.call(void 0, () => {
|
|
102
|
+
const el = middleRef.current;
|
|
103
|
+
if (!el) return;
|
|
104
|
+
const ro = new ResizeObserver(recalculate);
|
|
105
|
+
ro.observe(el);
|
|
106
|
+
return () => ro.disconnect();
|
|
107
|
+
}, [recalculate]);
|
|
108
|
+
return { visibleCount, middleRef, measureRef, textMeasureRef, badgeRef, inputRef };
|
|
109
|
+
}
|
|
43
110
|
|
|
111
|
+
// src/hooks/ui/use-debounce.ts
|
|
44
112
|
|
|
45
|
-
|
|
113
|
+
function useDebounce(value, delay = 500) {
|
|
114
|
+
const [debouncedValue, setDebouncedValue] = _react.useState.call(void 0, value);
|
|
115
|
+
_react.useEffect.call(void 0, () => {
|
|
116
|
+
const timer = setTimeout(() => {
|
|
117
|
+
setDebouncedValue(value);
|
|
118
|
+
}, delay);
|
|
119
|
+
return () => {
|
|
120
|
+
clearTimeout(timer);
|
|
121
|
+
};
|
|
122
|
+
}, [value, delay]);
|
|
123
|
+
return debouncedValue;
|
|
124
|
+
}
|
|
46
125
|
|
|
47
126
|
// src/hooks/ui/use-header-height.ts
|
|
48
|
-
|
|
127
|
+
|
|
49
128
|
function useHeaderHeight(defaultHeight = 64) {
|
|
50
129
|
const [height, setHeight] = _react.useState.call(void 0, defaultHeight);
|
|
51
130
|
_react.useEffect.call(void 0, () => {
|
|
@@ -504,16 +583,16 @@ function useNotificationPermission() {
|
|
|
504
583
|
sync();
|
|
505
584
|
let cancelled = false;
|
|
506
585
|
let status;
|
|
507
|
-
_optionalChain([navigator, 'access',
|
|
586
|
+
_optionalChain([navigator, 'access', _6 => _6.permissions, 'optionalAccess', _7 => _7.query, 'call', _8 => _8({ name: "notifications" }), 'access', _9 => _9.then, 'call', _10 => _10((s) => {
|
|
508
587
|
if (cancelled) return;
|
|
509
588
|
status = s;
|
|
510
589
|
s.addEventListener("change", sync);
|
|
511
|
-
}), 'access',
|
|
590
|
+
}), 'access', _11 => _11.catch, 'call', _12 => _12(() => void 0)]);
|
|
512
591
|
document.addEventListener("visibilitychange", sync);
|
|
513
592
|
window.addEventListener("focus", sync);
|
|
514
593
|
return () => {
|
|
515
594
|
cancelled = true;
|
|
516
|
-
_optionalChain([status, 'optionalAccess',
|
|
595
|
+
_optionalChain([status, 'optionalAccess', _13 => _13.removeEventListener, 'call', _14 => _14("change", sync)]);
|
|
517
596
|
document.removeEventListener("visibilitychange", sync);
|
|
518
597
|
window.removeEventListener("focus", sync);
|
|
519
598
|
};
|
|
@@ -678,7 +757,7 @@ function useSearch(config) {
|
|
|
678
757
|
const [results, setResults] = _react.useState.call(void 0, []);
|
|
679
758
|
const [isLoading, setIsLoading] = _react.useState.call(void 0, false);
|
|
680
759
|
const [error, setError] = _react.useState.call(void 0, null);
|
|
681
|
-
const debouncedQuery =
|
|
760
|
+
const debouncedQuery = useDebounce(query, debounceMs);
|
|
682
761
|
const clearResults = _react.useCallback.call(void 0, () => {
|
|
683
762
|
setResults([]);
|
|
684
763
|
setError(null);
|
|
@@ -805,6 +884,180 @@ function useWindowSize() {
|
|
|
805
884
|
|
|
806
885
|
// src/hooks/platform/use-platform-config.ts
|
|
807
886
|
|
|
887
|
+
|
|
888
|
+
// src/utils/platform-config.tsx
|
|
889
|
+
var _lucidereact = require('lucide-react');
|
|
890
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
891
|
+
var platformIcons = {
|
|
892
|
+
openframe: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenFrameLogo, { className: "h-5 w-5", lowerPathColor: "#FFC008", upperPathColor: "#ffffff" }),
|
|
893
|
+
openmsp: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenmspLogo, { className: "h-5 w-5" }),
|
|
894
|
+
flamingo: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#EC4899" }),
|
|
895
|
+
"flamingo-teaser": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#EC4899" }),
|
|
896
|
+
"marketing-hub": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#F357BB" }),
|
|
897
|
+
"product-hub": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#5EA62E" }),
|
|
898
|
+
"revenue-hub": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#FFC008" }),
|
|
899
|
+
"people-hub": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#5EFAF0" }),
|
|
900
|
+
"company-hub": /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: "h-5 w-5", fill: "#f36666" }),
|
|
901
|
+
tmcg: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.MiamiCyberGangLogoFaceOnly, { className: "h-5 w-5" }),
|
|
902
|
+
universal: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Globe, { className: "h-5 w-5 text-[#10B981]" })
|
|
903
|
+
};
|
|
904
|
+
var platformColors = {
|
|
905
|
+
openmsp: "bg-[#3B82F6]",
|
|
906
|
+
openframe: "bg-[#8B5CF6]",
|
|
907
|
+
flamingo: "bg-[#EC4899]",
|
|
908
|
+
"flamingo-teaser": "bg-[#F59E0B]",
|
|
909
|
+
"marketing-hub": "bg-[#F357BB]",
|
|
910
|
+
"product-hub": "bg-[#5EA62E]",
|
|
911
|
+
"revenue-hub": "bg-[#FFC008]",
|
|
912
|
+
"people-hub": "bg-[#5EFAF0]",
|
|
913
|
+
"company-hub": "bg-[#f36666]",
|
|
914
|
+
tmcg: "bg-[#FF6B6B]",
|
|
915
|
+
universal: "bg-[#10B981]"
|
|
916
|
+
};
|
|
917
|
+
var platformDisplayNames = {
|
|
918
|
+
openmsp: "OpenMSP",
|
|
919
|
+
openframe: "OpenFrame",
|
|
920
|
+
flamingo: "Flamingo",
|
|
921
|
+
"flamingo-teaser": "Flamingo Teaser",
|
|
922
|
+
"marketing-hub": "Flamingo Marketing Hub",
|
|
923
|
+
"product-hub": "Flamingo Product Hub",
|
|
924
|
+
"revenue-hub": "Flamingo Revenue Hub",
|
|
925
|
+
"people-hub": "Flamingo People Hub",
|
|
926
|
+
"company-hub": "Flamingo Company Hub",
|
|
927
|
+
tmcg: "TMCG",
|
|
928
|
+
universal: "Universal"
|
|
929
|
+
};
|
|
930
|
+
var platformDescriptions = {
|
|
931
|
+
openmsp: "Comprehensive directory and comparison platform for managed service providers (MSPs) and technology vendors. Reduce vendor costs and discover open-source alternatives.",
|
|
932
|
+
openframe: "AI-driven open-source security operations center (SOC) and endpoint detection platform for MSPs.",
|
|
933
|
+
flamingo: "AI-driven open-source OS for MSPs. Swap bloated vendor tools for open ones. Automate the boring crap. Take your margin back.",
|
|
934
|
+
"flamingo-teaser": "Preview of Flamingo - the AI-driven open-source OS for MSPs.",
|
|
935
|
+
tmcg: "The Miami Cyber Gang - A cybersecurity community focused on education and collaboration.",
|
|
936
|
+
universal: "Cross-platform universal content."
|
|
937
|
+
};
|
|
938
|
+
var platformSlogans = {
|
|
939
|
+
openmsp: "Find Your Perfect MSP Partner",
|
|
940
|
+
openframe: "Open-Source Security Operations",
|
|
941
|
+
flamingo: "Open-Source OS for MSPs",
|
|
942
|
+
"flamingo-teaser": "Coming Soon: Open-Source OS for MSPs",
|
|
943
|
+
tmcg: "Miami Cyber Community",
|
|
944
|
+
universal: "Universal Platform"
|
|
945
|
+
};
|
|
946
|
+
var platformHexColors = {
|
|
947
|
+
openmsp: "#FFC008",
|
|
948
|
+
openframe: "#FFC008",
|
|
949
|
+
flamingo: "#FF6B9D",
|
|
950
|
+
universal: "#FFC008",
|
|
951
|
+
"flamingo-teaser": "#F59E0B",
|
|
952
|
+
"marketing-hub": "#F357BB",
|
|
953
|
+
"product-hub": "#5EA62E",
|
|
954
|
+
"revenue-hub": "#FFC008",
|
|
955
|
+
"people-hub": "#5EFAF0",
|
|
956
|
+
"company-hub": "#f36666",
|
|
957
|
+
tmcg: "#FF6B6B"
|
|
958
|
+
};
|
|
959
|
+
var platformIconNames = {
|
|
960
|
+
openmsp: "openmsp-logo",
|
|
961
|
+
openframe: "openframe-logo",
|
|
962
|
+
flamingo: "flamingo-logo",
|
|
963
|
+
universal: "globe",
|
|
964
|
+
"flamingo-teaser": "flamingo-logo",
|
|
965
|
+
"marketing-hub": "flamingo-logo",
|
|
966
|
+
"product-hub": "flamingo-logo",
|
|
967
|
+
"revenue-hub": "flamingo-logo",
|
|
968
|
+
"people-hub": "flamingo-logo",
|
|
969
|
+
"company-hub": "flamingo-logo",
|
|
970
|
+
tmcg: "tmcg-logo"
|
|
971
|
+
};
|
|
972
|
+
function getDefaultColorForPlatform(platformName) {
|
|
973
|
+
return platformHexColors[platformName] || platformHexColors.universal;
|
|
974
|
+
}
|
|
975
|
+
function getDefaultIconForPlatform(platformName) {
|
|
976
|
+
return platformIconNames[platformName] || platformIconNames.universal;
|
|
977
|
+
}
|
|
978
|
+
function transformPlatformConfigsToOptions(platformConfigs) {
|
|
979
|
+
return platformConfigs.map((platform) => ({
|
|
980
|
+
id: platform.id,
|
|
981
|
+
// Database UUID for matching
|
|
982
|
+
name: platform.name,
|
|
983
|
+
// Platform name enum
|
|
984
|
+
displayName: platform.display_name,
|
|
985
|
+
// Human-readable name
|
|
986
|
+
description: platform.description,
|
|
987
|
+
icon: platformIcons[platform.name] || platformIcons.universal,
|
|
988
|
+
color: platformColors[platform.name] || platformColors.universal
|
|
989
|
+
}));
|
|
990
|
+
}
|
|
991
|
+
function getPlatformIcon(platformName) {
|
|
992
|
+
return platformIcons[platformName] || platformIcons.universal;
|
|
993
|
+
}
|
|
994
|
+
function getPlatformColor(platformName) {
|
|
995
|
+
return platformColors[platformName] || platformColors.universal;
|
|
996
|
+
}
|
|
997
|
+
function getPlatformDisplayName(platformName) {
|
|
998
|
+
return platformDisplayNames[platformName] || platformName;
|
|
999
|
+
}
|
|
1000
|
+
function getPlatformDescription(platformName) {
|
|
1001
|
+
return platformDescriptions[platformName] || platformName;
|
|
1002
|
+
}
|
|
1003
|
+
function getPlatformSlogan(platformName) {
|
|
1004
|
+
return platformSlogans[platformName] || platformName;
|
|
1005
|
+
}
|
|
1006
|
+
function getSmallPlatformIcon(platformName) {
|
|
1007
|
+
const className = "h-4 w-4 flex-shrink-0";
|
|
1008
|
+
switch (platformName) {
|
|
1009
|
+
case "openframe":
|
|
1010
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenFrameLogo, { className, lowerPathColor: "#FFC008", upperPathColor: "#ffffff" });
|
|
1011
|
+
case "openmsp":
|
|
1012
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenmspLogo, { className, frontBubbleColor: "#f1f1f1", innerFrontBubbleColor: "#000000", backBubbleColor: "#FFC008" });
|
|
1013
|
+
case "flamingo":
|
|
1014
|
+
case "flamingo-teaser":
|
|
1015
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: `${className}`, fill: "#EC4899" });
|
|
1016
|
+
case "marketing-hub":
|
|
1017
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-flamingo-pink-base)" });
|
|
1018
|
+
case "product-hub":
|
|
1019
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-green-success)" });
|
|
1020
|
+
case "revenue-hub":
|
|
1021
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-yellow-warning)" });
|
|
1022
|
+
case "people-hub":
|
|
1023
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-flamingo-cyan-base)" });
|
|
1024
|
+
case "company-hub":
|
|
1025
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-red-error)" });
|
|
1026
|
+
case "tmcg":
|
|
1027
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.MiamiCyberGangLogoFaceOnly, { className });
|
|
1028
|
+
case "universal":
|
|
1029
|
+
default:
|
|
1030
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Globe, { className });
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
function getPlatformIconComponent(platformName, className = "h-6 w-6") {
|
|
1034
|
+
switch (platformName) {
|
|
1035
|
+
case "openframe":
|
|
1036
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenFrameLogo, { className });
|
|
1037
|
+
case "openmsp":
|
|
1038
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.OpenmspLogo, { className, color: "#f1f1f1" });
|
|
1039
|
+
case "flamingo":
|
|
1040
|
+
case "flamingo-teaser":
|
|
1041
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className: `${className} text-white` });
|
|
1042
|
+
case "marketing-hub":
|
|
1043
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-flamingo-pink-base)" });
|
|
1044
|
+
case "product-hub":
|
|
1045
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-green-success)" });
|
|
1046
|
+
case "revenue-hub":
|
|
1047
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-yellow-warning)" });
|
|
1048
|
+
case "people-hub":
|
|
1049
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-flamingo-cyan-base)" });
|
|
1050
|
+
case "company-hub":
|
|
1051
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.FlamingoLogo, { className, fill: "var(--ods-attention-red-error)" });
|
|
1052
|
+
case "tmcg":
|
|
1053
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLGLPNWS6cjs.MiamiCyberGangLogoFaceOnly, { size: 24, className });
|
|
1054
|
+
case "universal":
|
|
1055
|
+
default:
|
|
1056
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Globe, { className });
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
// src/hooks/platform/use-platform-config.ts
|
|
808
1061
|
var platformCache = null;
|
|
809
1062
|
var fetchPromise = null;
|
|
810
1063
|
function usePlatformConfig() {
|
|
@@ -857,7 +1110,7 @@ function usePlatformConfig() {
|
|
|
857
1110
|
label: platform.label
|
|
858
1111
|
}))
|
|
859
1112
|
];
|
|
860
|
-
const selectableOptions =
|
|
1113
|
+
const selectableOptions = transformPlatformConfigsToOptions(platforms);
|
|
861
1114
|
return {
|
|
862
1115
|
platforms,
|
|
863
1116
|
platformOptions,
|
|
@@ -882,8 +1135,32 @@ var _sonner = require('sonner');
|
|
|
882
1135
|
|
|
883
1136
|
|
|
884
1137
|
|
|
1138
|
+
// src/types/tool.types.ts
|
|
1139
|
+
var ToolTypeValues = {
|
|
1140
|
+
TACTICAL_RMM: "TACTICAL_RMM",
|
|
1141
|
+
FLEET_MDM: "FLEET_MDM",
|
|
1142
|
+
MESHCENTRAL: "MESHCENTRAL",
|
|
1143
|
+
AUTHENTIK: "AUTHENTIK",
|
|
1144
|
+
OPENFRAME: "OPENFRAME",
|
|
1145
|
+
OPENFRAME_CHAT: "OPENFRAME_CHAT",
|
|
1146
|
+
OPENFRAME_CLIENT: "OPENFRAME_CLIENT",
|
|
1147
|
+
OSQUERY: "OSQUERY",
|
|
1148
|
+
SYSTEM: "SYSTEM"
|
|
1149
|
+
};
|
|
1150
|
+
var toolLabels = {
|
|
1151
|
+
TACTICAL_RMM: "Tactical",
|
|
1152
|
+
FLEET_MDM: "Fleet",
|
|
1153
|
+
MESHCENTRAL: "MeshCentral",
|
|
1154
|
+
AUTHENTIK: "Authentik",
|
|
1155
|
+
OPENFRAME: "OpenFrame",
|
|
1156
|
+
OPENFRAME_CHAT: "OpenFrame Chat",
|
|
1157
|
+
OPENFRAME_CLIENT: "OpenFrame Client",
|
|
1158
|
+
OSQUERY: "Osquery",
|
|
1159
|
+
SYSTEM: "System"
|
|
1160
|
+
};
|
|
1161
|
+
|
|
885
1162
|
// src/components/tool-icon.tsx
|
|
886
|
-
|
|
1163
|
+
|
|
887
1164
|
var renderOpenFrameLogo = (_size, className) => (
|
|
888
1165
|
// eslint-disable-next-line deprecation/deprecation
|
|
889
1166
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
@@ -896,17 +1173,17 @@ var renderOpenFrameLogo = (_size, className) => (
|
|
|
896
1173
|
)
|
|
897
1174
|
);
|
|
898
1175
|
var toolIconMap = {
|
|
899
|
-
[
|
|
900
|
-
[
|
|
901
|
-
[
|
|
902
|
-
[
|
|
903
|
-
[
|
|
904
|
-
[
|
|
905
|
-
[
|
|
906
|
-
[
|
|
907
|
-
[
|
|
1176
|
+
[ToolTypeValues.FLEET_MDM]: (size, className) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.FleetMdmLogoGreyIcon, { size, className }),
|
|
1177
|
+
[ToolTypeValues.MESHCENTRAL]: (size, className) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.MeshcentralLogoGreyIcon, { size, className }),
|
|
1178
|
+
[ToolTypeValues.TACTICAL_RMM]: (size, className) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.TacticalRmmLogoIcon, { size, className }),
|
|
1179
|
+
[ToolTypeValues.OPENFRAME]: renderOpenFrameLogo,
|
|
1180
|
+
[ToolTypeValues.OPENFRAME_CHAT]: renderOpenFrameLogo,
|
|
1181
|
+
[ToolTypeValues.OPENFRAME_CLIENT]: renderOpenFrameLogo,
|
|
1182
|
+
[ToolTypeValues.AUTHENTIK]: (size, className) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.AuthentikLogoGreyIcon, { size, className }),
|
|
1183
|
+
[ToolTypeValues.OSQUERY]: (size, className) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZS2SBWBRcjs.OsqueryLogoGreyIcon, { size, className }),
|
|
1184
|
+
[ToolTypeValues.SYSTEM]: () => null
|
|
908
1185
|
};
|
|
909
|
-
var ToolIcon = ({ toolType, size = 16, className }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: _nullishCoalesce(_optionalChain([toolIconMap, 'access',
|
|
1186
|
+
var ToolIcon = ({ toolType, size = 16, className }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: _nullishCoalesce(_optionalChain([toolIconMap, 'access', _15 => _15[toolType], 'optionalCall', _16 => _16(size, className)]), () => ( null)) });
|
|
910
1187
|
ToolIcon.displayName = "ToolIcon";
|
|
911
1188
|
|
|
912
1189
|
// src/components/ui/toaster.tsx
|
|
@@ -1025,11 +1302,11 @@ function CommandApprovalToast({
|
|
|
1025
1302
|
}) {
|
|
1026
1303
|
const [expanded, setExpanded] = React.useState(defaultExpanded);
|
|
1027
1304
|
const handleApprove = () => {
|
|
1028
|
-
_optionalChain([onApprove, 'optionalCall',
|
|
1305
|
+
_optionalChain([onApprove, 'optionalCall', _17 => _17()]);
|
|
1029
1306
|
_sonner.toast.dismiss(id);
|
|
1030
1307
|
};
|
|
1031
1308
|
const handleReject = () => {
|
|
1032
|
-
_optionalChain([onReject, 'optionalCall',
|
|
1309
|
+
_optionalChain([onReject, 'optionalCall', _18 => _18()]);
|
|
1033
1310
|
_sonner.toast.dismiss(id);
|
|
1034
1311
|
};
|
|
1035
1312
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
@@ -1238,6 +1515,260 @@ var useToast = () => ({
|
|
|
1238
1515
|
// src/hooks/use-contact-submission.ts
|
|
1239
1516
|
|
|
1240
1517
|
_chunkG7UE6RKVcjs.init_next_navigation.call(void 0, );
|
|
1518
|
+
|
|
1519
|
+
// src/utils/local-storage-adapter.ts
|
|
1520
|
+
function getStorage(backend) {
|
|
1521
|
+
if (typeof window === "undefined") return null;
|
|
1522
|
+
try {
|
|
1523
|
+
return backend === "session" ? window.sessionStorage : window.localStorage;
|
|
1524
|
+
} catch (e3) {
|
|
1525
|
+
return null;
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
function createLocalStorageAdapter(options) {
|
|
1529
|
+
const tag = _nullishCoalesce(options.logTag, () => ( "[local-storage]"));
|
|
1530
|
+
const backend = _nullishCoalesce(options.backend, () => ( "local"));
|
|
1531
|
+
const resolveKey = () => {
|
|
1532
|
+
const ns = _optionalChain([options, 'access', _19 => _19.namespace, 'optionalCall', _20 => _20()]);
|
|
1533
|
+
return ns ? `${ns}.${options.key}` : options.key;
|
|
1534
|
+
};
|
|
1535
|
+
return {
|
|
1536
|
+
resolveKey,
|
|
1537
|
+
load() {
|
|
1538
|
+
const storage = getStorage(backend);
|
|
1539
|
+
if (!storage) return null;
|
|
1540
|
+
try {
|
|
1541
|
+
const raw = storage.getItem(resolveKey());
|
|
1542
|
+
if (!raw) return null;
|
|
1543
|
+
const parsed = JSON.parse(raw);
|
|
1544
|
+
if (options.validate && !options.validate(parsed)) return null;
|
|
1545
|
+
return parsed;
|
|
1546
|
+
} catch (err) {
|
|
1547
|
+
console.warn(`${tag} parse failed for key ${resolveKey()}:`, err);
|
|
1548
|
+
return null;
|
|
1549
|
+
}
|
|
1550
|
+
},
|
|
1551
|
+
save(value) {
|
|
1552
|
+
const storage = getStorage(backend);
|
|
1553
|
+
if (!storage) return;
|
|
1554
|
+
try {
|
|
1555
|
+
storage.setItem(resolveKey(), JSON.stringify(value));
|
|
1556
|
+
} catch (err) {
|
|
1557
|
+
console.warn(`${tag} write failed for key ${resolveKey()}:`, err);
|
|
1558
|
+
}
|
|
1559
|
+
},
|
|
1560
|
+
clear() {
|
|
1561
|
+
const storage = getStorage(backend);
|
|
1562
|
+
if (!storage) return;
|
|
1563
|
+
try {
|
|
1564
|
+
storage.removeItem(resolveKey());
|
|
1565
|
+
} catch (err) {
|
|
1566
|
+
console.warn(`${tag} clear failed for key ${resolveKey()}:`, err);
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
};
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
// src/utils/app-config.ts
|
|
1573
|
+
function getAppType() {
|
|
1574
|
+
return process.env.NEXT_PUBLIC_APP_TYPE || "openmsp";
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
// src/utils/embed-proxy-auth-storage.ts
|
|
1578
|
+
function isValidPersistedAuth(value) {
|
|
1579
|
+
if (!value || typeof value !== "object") return false;
|
|
1580
|
+
const v = value;
|
|
1581
|
+
if (typeof v.secret !== "string" || v.secret.trim().length === 0 || typeof v.email !== "string" || v.email.trim().length === 0) return false;
|
|
1582
|
+
if (v.firstName != null && typeof v.firstName !== "string") return false;
|
|
1583
|
+
if (v.lastName != null && typeof v.lastName !== "string") return false;
|
|
1584
|
+
if (v.avatarUrl != null && typeof v.avatarUrl !== "string") return false;
|
|
1585
|
+
return true;
|
|
1586
|
+
}
|
|
1587
|
+
var adapter = createLocalStorageAdapter({
|
|
1588
|
+
// Storage key unchanged from the legacy chat-prefixed helper. Renaming
|
|
1589
|
+
// it would silently log every existing admin out — the key is a
|
|
1590
|
+
// storage contract, not a code identifier.
|
|
1591
|
+
key: "chat.proxy-auth.v1",
|
|
1592
|
+
namespace: () => getAppType(),
|
|
1593
|
+
validate: isValidPersistedAuth,
|
|
1594
|
+
logTag: "[embed-proxy-auth-storage]",
|
|
1595
|
+
// localStorage — survives tab close, new tabs, and browser restarts.
|
|
1596
|
+
// Admin re-pasting creds every tab cycle was the dev-experience
|
|
1597
|
+
// tradeoff prior `sessionStorage` setup demanded — rejected. See
|
|
1598
|
+
// file-level doc comment for the security tradeoff rationale.
|
|
1599
|
+
backend: "local"
|
|
1600
|
+
});
|
|
1601
|
+
function normalizeOptional(value) {
|
|
1602
|
+
if (!value) return void 0;
|
|
1603
|
+
const trimmed = value.trim();
|
|
1604
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
1605
|
+
}
|
|
1606
|
+
function getEmbedProxyAuth() {
|
|
1607
|
+
const persisted = adapter.load();
|
|
1608
|
+
if (!persisted) return null;
|
|
1609
|
+
return {
|
|
1610
|
+
secret: persisted.secret,
|
|
1611
|
+
email: persisted.email.trim().toLowerCase(),
|
|
1612
|
+
firstName: normalizeOptional(persisted.firstName),
|
|
1613
|
+
lastName: normalizeOptional(persisted.lastName),
|
|
1614
|
+
avatarUrl: normalizeOptional(persisted.avatarUrl)
|
|
1615
|
+
};
|
|
1616
|
+
}
|
|
1617
|
+
function getPersistedProxyEmail() {
|
|
1618
|
+
const persisted = adapter.load();
|
|
1619
|
+
return _nullishCoalesce(_optionalChain([persisted, 'optionalAccess', _21 => _21.email, 'access', _22 => _22.trim, 'call', _23 => _23(), 'access', _24 => _24.toLowerCase, 'call', _25 => _25()]), () => ( null));
|
|
1620
|
+
}
|
|
1621
|
+
function setEmbedProxyAuth(value) {
|
|
1622
|
+
adapter.save({
|
|
1623
|
+
secret: value.secret,
|
|
1624
|
+
email: value.email.trim().toLowerCase(),
|
|
1625
|
+
firstName: normalizeOptional(value.firstName),
|
|
1626
|
+
lastName: normalizeOptional(value.lastName),
|
|
1627
|
+
avatarUrl: normalizeOptional(value.avatarUrl)
|
|
1628
|
+
});
|
|
1629
|
+
}
|
|
1630
|
+
function clearEmbedProxyAuth() {
|
|
1631
|
+
adapter.clear();
|
|
1632
|
+
}
|
|
1633
|
+
function applyProxyAuth(url, baseHeaders = { "Content-Type": "application/json" }) {
|
|
1634
|
+
const auth = getEmbedProxyAuth();
|
|
1635
|
+
const headers = { ...baseHeaders };
|
|
1636
|
+
if (_optionalChain([auth, 'optionalAccess', _26 => _26.secret])) {
|
|
1637
|
+
headers.Authorization = `Bearer ${auth.secret}`;
|
|
1638
|
+
}
|
|
1639
|
+
if (_optionalChain([auth, 'optionalAccess', _27 => _27.email])) {
|
|
1640
|
+
headers["X-Chat-Act-As"] = auth.email;
|
|
1641
|
+
}
|
|
1642
|
+
if (_optionalChain([auth, 'optionalAccess', _28 => _28.firstName])) headers["X-Chat-First-Name"] = auth.firstName;
|
|
1643
|
+
if (_optionalChain([auth, 'optionalAccess', _29 => _29.lastName])) headers["X-Chat-Last-Name"] = auth.lastName;
|
|
1644
|
+
if (_optionalChain([auth, 'optionalAccess', _30 => _30.avatarUrl])) headers["X-Chat-Avatar-Url"] = auth.avatarUrl;
|
|
1645
|
+
return { url, headers };
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
// src/utils/embed-authed-fetch.ts
|
|
1649
|
+
var ADAPTER_GLOBAL_KEY = "__embedAuthedFetchAdapter__";
|
|
1650
|
+
function getRegisteredAuthAdapter() {
|
|
1651
|
+
if (typeof globalThis === "undefined") return null;
|
|
1652
|
+
return _nullishCoalesce(globalThis[ADAPTER_GLOBAL_KEY], () => ( null));
|
|
1653
|
+
}
|
|
1654
|
+
function storeRegisteredAuthAdapter(adapter2) {
|
|
1655
|
+
if (typeof globalThis === "undefined") return;
|
|
1656
|
+
globalThis[ADAPTER_GLOBAL_KEY] = adapter2;
|
|
1657
|
+
}
|
|
1658
|
+
function setEmbedAuthAdapter(adapter2) {
|
|
1659
|
+
if (adapter2 && getRegisteredAuthAdapter() && process.env.NODE_ENV !== "production") {
|
|
1660
|
+
console.warn(
|
|
1661
|
+
"[setEmbedAuthAdapter] overwriting a previously-registered auth adapter. Two chat-runtime providers should not coexist \u2014 verify mount order and pass `null` from the unmounting provider."
|
|
1662
|
+
);
|
|
1663
|
+
}
|
|
1664
|
+
storeRegisteredAuthAdapter(adapter2);
|
|
1665
|
+
}
|
|
1666
|
+
function hasEmbedAuthAdapter() {
|
|
1667
|
+
return getRegisteredAuthAdapter() !== null;
|
|
1668
|
+
}
|
|
1669
|
+
function embedAuthedFetch(url, init = {}) {
|
|
1670
|
+
assertSameOrigin(url);
|
|
1671
|
+
let baseHeaders;
|
|
1672
|
+
if (init.headers === void 0) {
|
|
1673
|
+
baseHeaders = { "Content-Type": "application/json" };
|
|
1674
|
+
} else {
|
|
1675
|
+
baseHeaders = {};
|
|
1676
|
+
if (init.headers instanceof Headers) {
|
|
1677
|
+
init.headers.forEach((v, k) => {
|
|
1678
|
+
baseHeaders[k] = v;
|
|
1679
|
+
});
|
|
1680
|
+
} else if (Array.isArray(init.headers)) {
|
|
1681
|
+
for (const [k, v] of init.headers) baseHeaders[k] = v;
|
|
1682
|
+
} else {
|
|
1683
|
+
Object.assign(baseHeaders, init.headers);
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
return fetchWithRefresh(url, init, baseHeaders, false);
|
|
1687
|
+
}
|
|
1688
|
+
var IN_FLIGHT_REFRESH_GLOBAL_KEY = "__embedAuthedFetchInFlightRefresh__";
|
|
1689
|
+
function getInFlightRefresh() {
|
|
1690
|
+
if (typeof globalThis === "undefined") return null;
|
|
1691
|
+
return _nullishCoalesce(globalThis[IN_FLIGHT_REFRESH_GLOBAL_KEY], () => ( null));
|
|
1692
|
+
}
|
|
1693
|
+
function setInFlightRefresh(refresh) {
|
|
1694
|
+
if (typeof globalThis === "undefined") return;
|
|
1695
|
+
globalThis[IN_FLIGHT_REFRESH_GLOBAL_KEY] = refresh;
|
|
1696
|
+
}
|
|
1697
|
+
function dedupedRefresh() {
|
|
1698
|
+
const adapter2 = getRegisteredAuthAdapter();
|
|
1699
|
+
if (!_optionalChain([adapter2, 'optionalAccess', _31 => _31.refresh])) return Promise.resolve(false);
|
|
1700
|
+
let inFlightRefresh = getInFlightRefresh();
|
|
1701
|
+
if (!inFlightRefresh) {
|
|
1702
|
+
inFlightRefresh = Promise.resolve().then(() => adapter2.refresh()).catch(() => false).finally(() => {
|
|
1703
|
+
setInFlightRefresh(null);
|
|
1704
|
+
});
|
|
1705
|
+
setInFlightRefresh(inFlightRefresh);
|
|
1706
|
+
}
|
|
1707
|
+
return inFlightRefresh;
|
|
1708
|
+
}
|
|
1709
|
+
async function fetchWithRefresh(url, init, baseHeaders, isRetry) {
|
|
1710
|
+
const { url: authedUrl, headers } = applyProxyAuth(url, { ...baseHeaders });
|
|
1711
|
+
const adapter2 = getRegisteredAuthAdapter();
|
|
1712
|
+
if (_optionalChain([adapter2, 'optionalAccess', _32 => _32.getHeaders])) {
|
|
1713
|
+
for (const [k, v] of Object.entries(adapter2.getHeaders())) {
|
|
1714
|
+
if (v !== void 0) headers[k] = v;
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
const credentials = _nullishCoalesce(_nullishCoalesce(_optionalChain([adapter2, 'optionalAccess', _33 => _33.credentials]), () => ( init.credentials)), () => ( "same-origin"));
|
|
1718
|
+
const response = await fetch(authedUrl, {
|
|
1719
|
+
...init,
|
|
1720
|
+
headers,
|
|
1721
|
+
// Default `same-origin` carries Supabase cookies for the MPH proxy-
|
|
1722
|
+
// auth model. Hosts on different origins (openframe-frontend ↔
|
|
1723
|
+
// openframe gateway) register `credentials: 'include'` via the
|
|
1724
|
+
// adapter to make their own cookies travel cross-origin (CORS +
|
|
1725
|
+
// `SameSite=None` must be configured server-side for that to work).
|
|
1726
|
+
credentials
|
|
1727
|
+
});
|
|
1728
|
+
if (response.status === 401 && !isRetry && _optionalChain([adapter2, 'optionalAccess', _34 => _34.refresh])) {
|
|
1729
|
+
const refreshed = await dedupedRefresh();
|
|
1730
|
+
if (refreshed) {
|
|
1731
|
+
return fetchWithRefresh(url, init, baseHeaders, true);
|
|
1732
|
+
}
|
|
1733
|
+
}
|
|
1734
|
+
return response;
|
|
1735
|
+
}
|
|
1736
|
+
function assertSameOrigin(url) {
|
|
1737
|
+
if (typeof window === "undefined") return;
|
|
1738
|
+
let target;
|
|
1739
|
+
let pageOrigin;
|
|
1740
|
+
try {
|
|
1741
|
+
target = new URL(url, window.location.href);
|
|
1742
|
+
pageOrigin = new URL(window.location.href).origin;
|
|
1743
|
+
} catch (e4) {
|
|
1744
|
+
throw new Error(`embedAuthedFetch: refusing to fetch malformed URL (${JSON.stringify(url)})`);
|
|
1745
|
+
}
|
|
1746
|
+
if (target.protocol !== "http:" && target.protocol !== "https:") {
|
|
1747
|
+
throw new Error(
|
|
1748
|
+
`embedAuthedFetch: refusing non-http(s) URL (${target.protocol}) \u2014 pass a relative /api/* path instead`
|
|
1749
|
+
);
|
|
1750
|
+
}
|
|
1751
|
+
if (target.origin !== pageOrigin) {
|
|
1752
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1753
|
+
console.warn(
|
|
1754
|
+
`[embedAuthedFetch] cross-origin fetch to ${target.origin} allowed in dev (NODE_ENV !== 'production'). Production builds will reject this \u2014 wire a same-origin proxy before shipping.`
|
|
1755
|
+
);
|
|
1756
|
+
return;
|
|
1757
|
+
}
|
|
1758
|
+
throw new Error(
|
|
1759
|
+
`embedAuthedFetch: refusing cross-origin fetch to ${target.origin} \u2014 pass a relative /api/* path instead`
|
|
1760
|
+
);
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
// src/utils/embed-content-fetch.ts
|
|
1765
|
+
var contentFetch = (input, init) => {
|
|
1766
|
+
if (!hasEmbedAuthAdapter()) return fetch(input, init);
|
|
1767
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
1768
|
+
return embedAuthedFetch(url, init);
|
|
1769
|
+
};
|
|
1770
|
+
|
|
1771
|
+
// src/hooks/use-contact-submission.ts
|
|
1241
1772
|
function useContactSubmission(options = {}) {
|
|
1242
1773
|
const { userId, successRedirectUrl, successToastMessage, onSuccess } = options;
|
|
1243
1774
|
const { toast: toast2 } = useToast();
|
|
@@ -1249,7 +1780,7 @@ function useContactSubmission(options = {}) {
|
|
|
1249
1780
|
if (isSubmitting) return;
|
|
1250
1781
|
setIsSubmitting(true);
|
|
1251
1782
|
try {
|
|
1252
|
-
const response = await
|
|
1783
|
+
const response = await contentFetch(contactUrl, {
|
|
1253
1784
|
method: "POST",
|
|
1254
1785
|
headers: { "Content-Type": "application/json" },
|
|
1255
1786
|
body: JSON.stringify({
|
|
@@ -1389,7 +1920,7 @@ function useCopyToClipboard({
|
|
|
1389
1920
|
setCopied(true);
|
|
1390
1921
|
toast2({ title: successTitle, description: successDescription, variant: "success" });
|
|
1391
1922
|
setTimeout(() => setCopied(false), resetDelay);
|
|
1392
|
-
} catch (
|
|
1923
|
+
} catch (e5) {
|
|
1393
1924
|
toast2({ title: errorTitle, description: errorDescription, variant: "destructive" });
|
|
1394
1925
|
}
|
|
1395
1926
|
},
|
|
@@ -1883,7 +2414,7 @@ function setNestedValue(obj, path, value) {
|
|
|
1883
2414
|
}
|
|
1884
2415
|
function getNestedValue(obj, path) {
|
|
1885
2416
|
return path.split(".").reduce((current, key) => {
|
|
1886
|
-
return _optionalChain([current, 'optionalAccess',
|
|
2417
|
+
return _optionalChain([current, 'optionalAccess', _35 => _35[key]]);
|
|
1887
2418
|
}, obj);
|
|
1888
2419
|
}
|
|
1889
2420
|
function mergeVariables(currentVariables, updates, schema) {
|
|
@@ -2052,7 +2583,7 @@ var GraphQLIntrospector = class {
|
|
|
2052
2583
|
try {
|
|
2053
2584
|
localStorage.removeItem(this.cacheKey);
|
|
2054
2585
|
this.schema = null;
|
|
2055
|
-
} catch (
|
|
2586
|
+
} catch (e6) {
|
|
2056
2587
|
}
|
|
2057
2588
|
}
|
|
2058
2589
|
/**
|
|
@@ -2616,8 +3147,125 @@ function useNatsClient(clientOptions, options = {}) {
|
|
|
2616
3147
|
};
|
|
2617
3148
|
}
|
|
2618
3149
|
|
|
3150
|
+
// src/hooks/use-near-viewport.ts
|
|
3151
|
+
|
|
3152
|
+
var observers = /* @__PURE__ */ new Map();
|
|
3153
|
+
var subscribers = /* @__PURE__ */ new WeakMap();
|
|
3154
|
+
function getObserverFor(rootMargin) {
|
|
3155
|
+
const existing = observers.get(rootMargin);
|
|
3156
|
+
if (existing) return existing;
|
|
3157
|
+
const io = new IntersectionObserver(
|
|
3158
|
+
(entries) => {
|
|
3159
|
+
entries.forEach((entry) => {
|
|
3160
|
+
if (!entry.isIntersecting) return;
|
|
3161
|
+
const cb = subscribers.get(entry.target);
|
|
3162
|
+
if (cb) {
|
|
3163
|
+
cb();
|
|
3164
|
+
io.unobserve(entry.target);
|
|
3165
|
+
subscribers.delete(entry.target);
|
|
3166
|
+
}
|
|
3167
|
+
});
|
|
3168
|
+
},
|
|
3169
|
+
{ rootMargin }
|
|
3170
|
+
);
|
|
3171
|
+
observers.set(rootMargin, io);
|
|
3172
|
+
return io;
|
|
3173
|
+
}
|
|
3174
|
+
function useNearViewport(rootMargin = "500px") {
|
|
3175
|
+
const [isNear, setIsNear] = _react.useState.call(void 0, false);
|
|
3176
|
+
const elRef = _react.useRef.call(void 0, null);
|
|
3177
|
+
const ref = _react.useCallback.call(void 0,
|
|
3178
|
+
(node) => {
|
|
3179
|
+
const prev = elRef.current;
|
|
3180
|
+
if (prev) {
|
|
3181
|
+
const stillOurs = subscribers.get(prev);
|
|
3182
|
+
if (stillOurs) {
|
|
3183
|
+
subscribers.delete(prev);
|
|
3184
|
+
_optionalChain([observers, 'access', _36 => _36.get, 'call', _37 => _37(rootMargin), 'optionalAccess', _38 => _38.unobserve, 'call', _39 => _39(prev)]);
|
|
3185
|
+
}
|
|
3186
|
+
}
|
|
3187
|
+
elRef.current = node;
|
|
3188
|
+
if (!node) return;
|
|
3189
|
+
const cb = () => setIsNear(true);
|
|
3190
|
+
subscribers.set(node, cb);
|
|
3191
|
+
getObserverFor(rootMargin).observe(node);
|
|
3192
|
+
},
|
|
3193
|
+
[rootMargin]
|
|
3194
|
+
);
|
|
3195
|
+
_react.useEffect.call(void 0, () => {
|
|
3196
|
+
return () => {
|
|
3197
|
+
const el = elRef.current;
|
|
3198
|
+
if (!el) return;
|
|
3199
|
+
if (subscribers.get(el)) {
|
|
3200
|
+
subscribers.delete(el);
|
|
3201
|
+
_optionalChain([observers, 'access', _40 => _40.get, 'call', _41 => _41(rootMargin), 'optionalAccess', _42 => _42.unobserve, 'call', _43 => _43(el)]);
|
|
3202
|
+
}
|
|
3203
|
+
};
|
|
3204
|
+
}, [rootMargin]);
|
|
3205
|
+
return { ref, isNear };
|
|
3206
|
+
}
|
|
3207
|
+
|
|
2619
3208
|
// src/hooks/use-access-code-integration.ts
|
|
2620
3209
|
|
|
3210
|
+
|
|
3211
|
+
// src/utils/access-code-client.ts
|
|
3212
|
+
async function validateAccessCode(email, code, endpoints) {
|
|
3213
|
+
try {
|
|
3214
|
+
const response = await fetch(endpoints.validateUrl, {
|
|
3215
|
+
method: "POST",
|
|
3216
|
+
headers: {
|
|
3217
|
+
"Content-Type": "application/json"
|
|
3218
|
+
},
|
|
3219
|
+
body: JSON.stringify({ email, code })
|
|
3220
|
+
});
|
|
3221
|
+
if (!response.ok) {
|
|
3222
|
+
const error = await response.json().catch(() => ({}));
|
|
3223
|
+
throw new Error(error.error || "Validation request failed");
|
|
3224
|
+
}
|
|
3225
|
+
return await response.json();
|
|
3226
|
+
} catch (error) {
|
|
3227
|
+
return {
|
|
3228
|
+
valid: false,
|
|
3229
|
+
message: error instanceof Error ? error.message : "Validation failed"
|
|
3230
|
+
};
|
|
3231
|
+
}
|
|
3232
|
+
}
|
|
3233
|
+
async function consumeAccessCode(email, code, endpoints) {
|
|
3234
|
+
try {
|
|
3235
|
+
const response = await fetch(endpoints.consumeUrl, {
|
|
3236
|
+
method: "POST",
|
|
3237
|
+
headers: {
|
|
3238
|
+
"Content-Type": "application/json"
|
|
3239
|
+
},
|
|
3240
|
+
body: JSON.stringify({ email, code })
|
|
3241
|
+
});
|
|
3242
|
+
if (!response.ok) {
|
|
3243
|
+
const error = await response.json().catch(() => ({}));
|
|
3244
|
+
throw new Error(error.error || "Consumption request failed");
|
|
3245
|
+
}
|
|
3246
|
+
return await response.json();
|
|
3247
|
+
} catch (error) {
|
|
3248
|
+
return {
|
|
3249
|
+
success: false,
|
|
3250
|
+
consumed: false,
|
|
3251
|
+
message: error instanceof Error ? error.message : "Consumption failed"
|
|
3252
|
+
};
|
|
3253
|
+
}
|
|
3254
|
+
}
|
|
3255
|
+
async function validateAndConsumeAccessCode(email, code, endpoints) {
|
|
3256
|
+
const validation = await validateAccessCode(email, code, endpoints);
|
|
3257
|
+
if (!validation.valid) {
|
|
3258
|
+
return validation;
|
|
3259
|
+
}
|
|
3260
|
+
const consumption = await consumeAccessCode(email, code, endpoints);
|
|
3261
|
+
return {
|
|
3262
|
+
...validation,
|
|
3263
|
+
consumed: consumption.consumed,
|
|
3264
|
+
message: consumption.consumed ? `Access granted for ${validation.cohort_name}` : consumption.message || validation.message
|
|
3265
|
+
};
|
|
3266
|
+
}
|
|
3267
|
+
|
|
3268
|
+
// src/hooks/use-access-code-integration.ts
|
|
2621
3269
|
function useAccessCodeIntegration() {
|
|
2622
3270
|
const runtime = _chunk27APPAJNcjs.useRequiredEndpointsRuntime.call(void 0, );
|
|
2623
3271
|
const endpoints = runtime.accessCode;
|
|
@@ -2626,7 +3274,7 @@ function useAccessCodeIntegration() {
|
|
|
2626
3274
|
const validate = async (email, code) => {
|
|
2627
3275
|
setIsValidating(true);
|
|
2628
3276
|
try {
|
|
2629
|
-
return await
|
|
3277
|
+
return await validateAccessCode(email, code, endpoints);
|
|
2630
3278
|
} finally {
|
|
2631
3279
|
setIsValidating(false);
|
|
2632
3280
|
}
|
|
@@ -2634,7 +3282,7 @@ function useAccessCodeIntegration() {
|
|
|
2634
3282
|
const consume = async (email, code) => {
|
|
2635
3283
|
setIsConsuming(true);
|
|
2636
3284
|
try {
|
|
2637
|
-
return await
|
|
3285
|
+
return await consumeAccessCode(email, code, endpoints);
|
|
2638
3286
|
} finally {
|
|
2639
3287
|
setIsConsuming(false);
|
|
2640
3288
|
}
|
|
@@ -2643,7 +3291,7 @@ function useAccessCodeIntegration() {
|
|
|
2643
3291
|
setIsValidating(true);
|
|
2644
3292
|
setIsConsuming(true);
|
|
2645
3293
|
try {
|
|
2646
|
-
return await
|
|
3294
|
+
return await validateAndConsumeAccessCode(email, code, endpoints);
|
|
2647
3295
|
} finally {
|
|
2648
3296
|
setIsValidating(false);
|
|
2649
3297
|
setIsConsuming(false);
|
|
@@ -2659,11 +3307,157 @@ function useAccessCodeIntegration() {
|
|
|
2659
3307
|
};
|
|
2660
3308
|
}
|
|
2661
3309
|
|
|
3310
|
+
// src/hooks/use-og-placeholder.ts
|
|
3311
|
+
|
|
3312
|
+
function useOgPlaceholder(buildUrl, title, siteName = "", enabled = true, aspect = "wide") {
|
|
3313
|
+
return _react.useMemo.call(void 0, () => {
|
|
3314
|
+
if (!enabled || !title) return null;
|
|
3315
|
+
const options = {};
|
|
3316
|
+
if (siteName) options.site = siteName;
|
|
3317
|
+
if (aspect === "square") options.aspect = "square";
|
|
3318
|
+
return buildUrl(title, options);
|
|
3319
|
+
}, [buildUrl, title, siteName, enabled, aspect]);
|
|
3320
|
+
}
|
|
3321
|
+
|
|
2662
3322
|
// src/hooks/use-scroll-to-hash.ts
|
|
2663
3323
|
|
|
3324
|
+
|
|
3325
|
+
// src/utils/scroll-into-view.ts
|
|
3326
|
+
var activeRaf = 0;
|
|
3327
|
+
var teardownActive = null;
|
|
3328
|
+
function cancelActiveScroll() {
|
|
3329
|
+
if (activeRaf) {
|
|
3330
|
+
cancelAnimationFrame(activeRaf);
|
|
3331
|
+
activeRaf = 0;
|
|
3332
|
+
}
|
|
3333
|
+
if (teardownActive) {
|
|
3334
|
+
teardownActive();
|
|
3335
|
+
teardownActive = null;
|
|
3336
|
+
}
|
|
3337
|
+
}
|
|
3338
|
+
var easeOutCubic = (t) => 1 - Math.pow(1 - t, 3);
|
|
3339
|
+
function getScrollableAncestor(el) {
|
|
3340
|
+
for (let node = el.parentElement; node; node = node.parentElement) {
|
|
3341
|
+
const overflowY = getComputedStyle(node).overflowY;
|
|
3342
|
+
if ((overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay") && node.scrollHeight > node.clientHeight) {
|
|
3343
|
+
return node;
|
|
3344
|
+
}
|
|
3345
|
+
}
|
|
3346
|
+
return null;
|
|
3347
|
+
}
|
|
3348
|
+
function scrollElementIntoView(target, options = {}) {
|
|
3349
|
+
if (typeof window === "undefined" || !target) return;
|
|
3350
|
+
const { headerOffset = 0, behavior = "smooth", adjustTargetY, durationMs = 320 } = options;
|
|
3351
|
+
const container = getScrollableAncestor(target);
|
|
3352
|
+
const readCurrent = () => container ? container.scrollTop : window.scrollY;
|
|
3353
|
+
const writeTo = (y) => {
|
|
3354
|
+
if (container) container.scrollTop = y;
|
|
3355
|
+
else window.scrollTo(0, y);
|
|
3356
|
+
};
|
|
3357
|
+
const computeTarget = () => {
|
|
3358
|
+
const raw = container ? container.scrollTop + (target.getBoundingClientRect().top - container.getBoundingClientRect().top) - headerOffset : target.getBoundingClientRect().top + window.scrollY - headerOffset;
|
|
3359
|
+
const adjusted = adjustTargetY ? adjustTargetY(raw) : raw;
|
|
3360
|
+
const maxScroll = container ? Math.max(0, container.scrollHeight - container.clientHeight) : Math.max(0, document.documentElement.scrollHeight - window.innerHeight);
|
|
3361
|
+
return Math.min(Math.max(0, adjusted), maxScroll);
|
|
3362
|
+
};
|
|
3363
|
+
cancelActiveScroll();
|
|
3364
|
+
const prefersReduced = typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
3365
|
+
if (behavior === "instant" || behavior === "auto" || prefersReduced) {
|
|
3366
|
+
writeTo(computeTarget());
|
|
3367
|
+
return;
|
|
3368
|
+
}
|
|
3369
|
+
let startY = null;
|
|
3370
|
+
let startTime = 0;
|
|
3371
|
+
const onUserGesture = () => cancelActiveScroll();
|
|
3372
|
+
window.addEventListener("wheel", onUserGesture, { passive: true });
|
|
3373
|
+
window.addEventListener("touchmove", onUserGesture, { passive: true });
|
|
3374
|
+
teardownActive = () => {
|
|
3375
|
+
window.removeEventListener("wheel", onUserGesture);
|
|
3376
|
+
window.removeEventListener("touchmove", onUserGesture);
|
|
3377
|
+
};
|
|
3378
|
+
const step = (now) => {
|
|
3379
|
+
if (startY === null) {
|
|
3380
|
+
startY = readCurrent();
|
|
3381
|
+
startTime = now;
|
|
3382
|
+
}
|
|
3383
|
+
const targetY = computeTarget();
|
|
3384
|
+
const t = Math.min(1, (now - startTime) / durationMs);
|
|
3385
|
+
const y = startY + (targetY - startY) * easeOutCubic(t);
|
|
3386
|
+
writeTo(y);
|
|
3387
|
+
if (t < 1) {
|
|
3388
|
+
activeRaf = requestAnimationFrame(step);
|
|
3389
|
+
} else {
|
|
3390
|
+
writeTo(computeTarget());
|
|
3391
|
+
activeRaf = 0;
|
|
3392
|
+
if (teardownActive) {
|
|
3393
|
+
teardownActive();
|
|
3394
|
+
teardownActive = null;
|
|
3395
|
+
}
|
|
3396
|
+
}
|
|
3397
|
+
};
|
|
3398
|
+
activeRaf = requestAnimationFrame(step);
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3401
|
+
// src/utils/same-page-hash-nav.ts
|
|
3402
|
+
var STICKY_HEADER_OFFSET_PX = 96;
|
|
3403
|
+
var HUB_HEADER_OFFSET_PX = 80;
|
|
3404
|
+
function normalizeHashFragment(hash) {
|
|
3405
|
+
if (!hash) return "";
|
|
3406
|
+
const second = hash.indexOf("#", 1);
|
|
3407
|
+
return second < 0 ? hash : hash.slice(0, second);
|
|
3408
|
+
}
|
|
3409
|
+
function navigateSamePageHash(target, options = {}) {
|
|
3410
|
+
if (typeof window === "undefined") return false;
|
|
3411
|
+
const { headerOffset = 0, history: historyMode = "push" } = options;
|
|
3412
|
+
const normalizedTarget = target.startsWith("#") ? window.location.pathname + window.location.search + target : target;
|
|
3413
|
+
let url;
|
|
3414
|
+
try {
|
|
3415
|
+
url = new URL(normalizedTarget, window.location.href);
|
|
3416
|
+
} catch (e7) {
|
|
3417
|
+
return false;
|
|
3418
|
+
}
|
|
3419
|
+
if (url.origin !== window.location.origin || url.pathname !== window.location.pathname || url.search !== window.location.search) {
|
|
3420
|
+
return false;
|
|
3421
|
+
}
|
|
3422
|
+
const current = window.location.pathname + window.location.search + window.location.hash;
|
|
3423
|
+
const normalizedHash = normalizeHashFragment(url.hash);
|
|
3424
|
+
if (process.env.NODE_ENV === "development" && normalizedHash !== url.hash) {
|
|
3425
|
+
console.warn(
|
|
3426
|
+
`[navigateSamePageHash] malformed fragment "${url.hash}" \u2192 normalizing to "${normalizedHash}". Fix the upstream composer.`
|
|
3427
|
+
);
|
|
3428
|
+
}
|
|
3429
|
+
const next = url.pathname + url.search + normalizedHash;
|
|
3430
|
+
const id = normalizedHash && normalizedHash !== "#" ? normalizedHash.slice(1) : "";
|
|
3431
|
+
if (!id && next !== current) return false;
|
|
3432
|
+
if (next !== current) {
|
|
3433
|
+
const oldURL = window.location.href;
|
|
3434
|
+
if (historyMode === "replace") {
|
|
3435
|
+
window.history.replaceState(null, "", next);
|
|
3436
|
+
} else {
|
|
3437
|
+
window.history.pushState(null, "", next);
|
|
3438
|
+
}
|
|
3439
|
+
window.dispatchEvent(new HashChangeEvent("hashchange", {
|
|
3440
|
+
oldURL,
|
|
3441
|
+
newURL: window.location.href
|
|
3442
|
+
}));
|
|
3443
|
+
}
|
|
3444
|
+
const el = id ? document.getElementById(id) : null;
|
|
3445
|
+
if (id && !el && process.env.NODE_ENV === "development") {
|
|
3446
|
+
console.warn(
|
|
3447
|
+
`[navigateSamePageHash] anchor "#${id}" not found \u2014 scrolling to top.`
|
|
3448
|
+
);
|
|
3449
|
+
}
|
|
3450
|
+
scrollElementIntoView(_nullishCoalesce(el, () => ( document.documentElement)), {
|
|
3451
|
+
behavior: "smooth",
|
|
3452
|
+
headerOffset
|
|
3453
|
+
});
|
|
3454
|
+
return true;
|
|
3455
|
+
}
|
|
3456
|
+
|
|
3457
|
+
// src/hooks/use-scroll-to-hash.ts
|
|
2664
3458
|
var MAX_POLL_FRAMES = 60;
|
|
2665
3459
|
function useScrollToHash(readyDep = true, options) {
|
|
2666
|
-
const headerOffset = _nullishCoalesce(_optionalChain([options, 'optionalAccess',
|
|
3460
|
+
const headerOffset = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _44 => _44.headerOffset]), () => ( 0));
|
|
2667
3461
|
_react.useEffect.call(void 0, () => {
|
|
2668
3462
|
if (typeof window === "undefined") return;
|
|
2669
3463
|
if (readyDep === null || readyDep === false) return;
|
|
@@ -2675,7 +3469,7 @@ function useScrollToHash(readyDep = true, options) {
|
|
|
2675
3469
|
}
|
|
2676
3470
|
};
|
|
2677
3471
|
const tryScrollToHash = () => {
|
|
2678
|
-
const hash =
|
|
3472
|
+
const hash = normalizeHashFragment(window.location.hash).slice(1);
|
|
2679
3473
|
if (!hash) return;
|
|
2680
3474
|
cancelPoll();
|
|
2681
3475
|
let frames = 0;
|
|
@@ -2683,7 +3477,7 @@ function useScrollToHash(readyDep = true, options) {
|
|
|
2683
3477
|
const el = document.getElementById(hash);
|
|
2684
3478
|
if (el) {
|
|
2685
3479
|
rafId = null;
|
|
2686
|
-
|
|
3480
|
+
scrollElementIntoView(el, { headerOffset });
|
|
2687
3481
|
return;
|
|
2688
3482
|
}
|
|
2689
3483
|
if (frames++ < MAX_POLL_FRAMES) {
|
|
@@ -2705,13 +3499,35 @@ function useScrollToHash(readyDep = true, options) {
|
|
|
2705
3499
|
|
|
2706
3500
|
// src/hooks/use-humanity-signals.ts
|
|
2707
3501
|
|
|
3502
|
+
|
|
3503
|
+
// src/utils/humanity-signals.ts
|
|
3504
|
+
var HONEYPOT_FIELD = "contact_url_confirm";
|
|
3505
|
+
var ELAPSED_MS_FIELD = "form_elapsed_ms";
|
|
3506
|
+
var DEFAULT_MIN_FILL_MS = 700;
|
|
3507
|
+
function extractHumanitySignals(body) {
|
|
3508
|
+
const b = _nullishCoalesce(body, () => ( {}));
|
|
3509
|
+
const rawHp = b[HONEYPOT_FIELD];
|
|
3510
|
+
const honeypot = rawHp == null ? "" : String(rawHp);
|
|
3511
|
+
const rawMs = b[ELAPSED_MS_FIELD];
|
|
3512
|
+
const elapsedMs = typeof rawMs === "number" && Number.isFinite(rawMs) ? rawMs : null;
|
|
3513
|
+
return { honeypot, elapsedMs };
|
|
3514
|
+
}
|
|
3515
|
+
function evaluateHumanitySignals(body, opts) {
|
|
3516
|
+
const { honeypot, elapsedMs } = extractHumanitySignals(body);
|
|
3517
|
+
if (honeypot.trim() !== "") return { ok: false, reason: "honeypot" };
|
|
3518
|
+
if (elapsedMs !== null && elapsedMs < opts.minFillMs) return { ok: false, reason: "too_fast" };
|
|
3519
|
+
return { ok: true };
|
|
3520
|
+
}
|
|
3521
|
+
var splitCsvEnv = (s) => _nullishCoalesce(_optionalChain([s, 'optionalAccess', _45 => _45.split, 'call', _46 => _46(","), 'access', _47 => _47.map, 'call', _48 => _48((t) => t.trim()), 'access', _49 => _49.filter, 'call', _50 => _50(Boolean)]), () => ( []));
|
|
3522
|
+
|
|
3523
|
+
// src/hooks/use-humanity-signals.ts
|
|
2708
3524
|
function useHumanitySignals() {
|
|
2709
3525
|
const ref = _react.useRef.call(void 0, null);
|
|
2710
3526
|
const mountedAt = _react.useRef.call(void 0, typeof performance !== "undefined" ? performance.now() : 0);
|
|
2711
3527
|
const getSignals = _react.useCallback.call(void 0,
|
|
2712
3528
|
() => ({
|
|
2713
|
-
[
|
|
2714
|
-
[
|
|
3529
|
+
[HONEYPOT_FIELD]: _nullishCoalesce(_optionalChain([ref, 'access', _51 => _51.current, 'optionalAccess', _52 => _52.value]), () => ( "")),
|
|
3530
|
+
[ELAPSED_MS_FIELD]: typeof performance !== "undefined" ? Math.round(performance.now() - mountedAt.current) : 0
|
|
2715
3531
|
}),
|
|
2716
3532
|
[]
|
|
2717
3533
|
);
|
|
@@ -2719,7 +3535,7 @@ function useHumanitySignals() {
|
|
|
2719
3535
|
if (ref.current) ref.current.value = "";
|
|
2720
3536
|
if (typeof performance !== "undefined") mountedAt.current = performance.now();
|
|
2721
3537
|
}, []);
|
|
2722
|
-
return { honeypotInputProps: { ref, name:
|
|
3538
|
+
return { honeypotInputProps: { ref, name: HONEYPOT_FIELD }, getSignals, resetSignals };
|
|
2723
3539
|
}
|
|
2724
3540
|
|
|
2725
3541
|
|
|
@@ -2787,5 +3603,51 @@ function useHumanitySignals() {
|
|
|
2787
3603
|
|
|
2788
3604
|
|
|
2789
3605
|
|
|
2790
|
-
|
|
2791
|
-
|
|
3606
|
+
|
|
3607
|
+
|
|
3608
|
+
|
|
3609
|
+
|
|
3610
|
+
|
|
3611
|
+
|
|
3612
|
+
|
|
3613
|
+
|
|
3614
|
+
|
|
3615
|
+
|
|
3616
|
+
|
|
3617
|
+
|
|
3618
|
+
|
|
3619
|
+
|
|
3620
|
+
|
|
3621
|
+
|
|
3622
|
+
|
|
3623
|
+
|
|
3624
|
+
|
|
3625
|
+
|
|
3626
|
+
|
|
3627
|
+
|
|
3628
|
+
|
|
3629
|
+
|
|
3630
|
+
|
|
3631
|
+
|
|
3632
|
+
|
|
3633
|
+
|
|
3634
|
+
|
|
3635
|
+
|
|
3636
|
+
|
|
3637
|
+
|
|
3638
|
+
|
|
3639
|
+
|
|
3640
|
+
|
|
3641
|
+
|
|
3642
|
+
|
|
3643
|
+
|
|
3644
|
+
|
|
3645
|
+
|
|
3646
|
+
|
|
3647
|
+
|
|
3648
|
+
|
|
3649
|
+
|
|
3650
|
+
|
|
3651
|
+
|
|
3652
|
+
exports.useAutoLimitTags = useAutoLimitTags; exports.useDebounce = useDebounce; exports.useHeaderHeight = useHeaderHeight; exports.useHorizontalScrollbar = useHorizontalScrollbar; exports.useImageEdgeColor = useImageEdgeColor; exports.useLocalStorage = useLocalStorage; exports.useMediaQuery = useMediaQuery; exports.breakpoints = breakpoints; exports.useSmUp = useSmUp; exports.useMdUp = useMdUp; exports.useLgUp = useLgUp; exports.useMemoizedCallback = useMemoizedCallback; exports.useNotificationPermission = useNotificationPermission; exports.useOnboardingState = useOnboardingState; exports.useSearch = useSearch; exports.useTablePagination = useTablePagination; exports.useThrottle = useThrottle; exports.useWindowSize = useWindowSize; exports.platformIcons = platformIcons; exports.platformColors = platformColors; exports.platformDisplayNames = platformDisplayNames; exports.platformDescriptions = platformDescriptions; exports.platformSlogans = platformSlogans; exports.platformHexColors = platformHexColors; exports.platformIconNames = platformIconNames; exports.getDefaultColorForPlatform = getDefaultColorForPlatform; exports.getDefaultIconForPlatform = getDefaultIconForPlatform; exports.transformPlatformConfigsToOptions = transformPlatformConfigsToOptions; exports.getPlatformIcon = getPlatformIcon; exports.getPlatformColor = getPlatformColor; exports.getPlatformDisplayName = getPlatformDisplayName; exports.getPlatformDescription = getPlatformDescription; exports.getPlatformSlogan = getPlatformSlogan; exports.getSmallPlatformIcon = getSmallPlatformIcon; exports.getPlatformIconComponent = getPlatformIconComponent; exports.usePlatformConfig = usePlatformConfig; exports.usePlatformByValue = usePlatformByValue; exports.useValidatePlatform = useValidatePlatform; exports.ToolTypeValues = ToolTypeValues; exports.toolLabels = toolLabels; exports.ToolIcon = ToolIcon; exports.dotColorByVariant = dotColorByVariant; exports.progressColorByVariant = progressColorByVariant; exports.ToastCard = ToastCard; exports.CommandApprovalToast = CommandApprovalToast; exports.Toaster = Toaster; exports.showToast = showToast; exports.showCommandApprovalToast = showCommandApprovalToast; exports.toast = toast; exports.useToast = useToast; exports.getAppType = getAppType; exports.getEmbedProxyAuth = getEmbedProxyAuth; exports.getPersistedProxyEmail = getPersistedProxyEmail; exports.setEmbedProxyAuth = setEmbedProxyAuth; exports.clearEmbedProxyAuth = clearEmbedProxyAuth; exports.applyProxyAuth = applyProxyAuth; exports.setEmbedAuthAdapter = setEmbedAuthAdapter; exports.embedAuthedFetch = embedAuthedFetch; exports.contentFetch = contentFetch; exports.useContactSubmission = useContactSubmission; exports.useQuickActionHint = useQuickActionHint; exports.useCopyToClipboard = useCopyToClipboard; exports.configureBatchImageFetch = configureBatchImageFetch; exports.batchFetchAuthenticatedImages = batchFetchAuthenticatedImages; exports.useBatchImages = useBatchImages; exports.configureAuthenticatedImage = configureAuthenticatedImage; exports.useAuthenticatedImage = useAuthenticatedImage; exports.extractVariablesFromQuery = extractVariablesFromQuery; exports.isScalarType = isScalarType; exports.isInputObjectType = isInputObjectType; exports.flattenQueryVariables = flattenQueryVariables; exports.mergeDefaults = mergeDefaults; exports.validateSchema = validateSchema; exports.getArrayParams = getArrayParams; exports.getRequiredParams = getRequiredParams; exports.shouldIncludeInUrl = shouldIncludeInUrl; exports.urlParamsToVariables = urlParamsToVariables; exports.variablesToUrlParams = variablesToUrlParams; exports.coerceValue = coerceValue; exports.setNestedValue = setNestedValue; exports.getNestedValue = getNestedValue; exports.mergeVariables = mergeVariables; exports.clearParams = clearParams; exports.validateVariables = validateVariables; exports.GraphQLIntrospector = GraphQLIntrospector; exports.introspector = introspector; exports.useQueryParams = useQueryParams; exports.useApiParams = useApiParams; exports.createSearchParams = createSearchParams; exports.useCursorPaginationState = useCursorPaginationState; exports.useNatsClient = useNatsClient; exports.useNearViewport = useNearViewport; exports.validateAccessCode = validateAccessCode; exports.consumeAccessCode = consumeAccessCode; exports.validateAndConsumeAccessCode = validateAndConsumeAccessCode; exports.useAccessCodeIntegration = useAccessCodeIntegration; exports.useOgPlaceholder = useOgPlaceholder; exports.scrollElementIntoView = scrollElementIntoView; exports.STICKY_HEADER_OFFSET_PX = STICKY_HEADER_OFFSET_PX; exports.HUB_HEADER_OFFSET_PX = HUB_HEADER_OFFSET_PX; exports.normalizeHashFragment = normalizeHashFragment; exports.navigateSamePageHash = navigateSamePageHash; exports.useScrollToHash = useScrollToHash; exports.HONEYPOT_FIELD = HONEYPOT_FIELD; exports.ELAPSED_MS_FIELD = ELAPSED_MS_FIELD; exports.DEFAULT_MIN_FILL_MS = DEFAULT_MIN_FILL_MS; exports.extractHumanitySignals = extractHumanitySignals; exports.evaluateHumanitySignals = evaluateHumanitySignals; exports.splitCsvEnv = splitCsvEnv; exports.useHumanitySignals = useHumanitySignals;
|
|
3653
|
+
//# sourceMappingURL=chunk-WMSTJAZT.cjs.map
|