@flamingo-stack/openframe-frontend-core 0.0.711 → 0.0.712
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2NASBO7O.js +1137 -0
- package/dist/{chunk-RQRX4YC3.cjs → chunk-2RKFMUNW.cjs} +46 -46
- package/dist/chunk-2Y7QZAB2.cjs +158 -0
- package/dist/chunk-34I6XI3N.js +136 -0
- package/dist/chunk-3K5ZLZE7.js +292 -0
- package/dist/chunk-3LU4UFPS.cjs +14 -0
- package/dist/{chunk-3UNL26CD.cjs → chunk-3RKBJT6K.cjs} +8 -6
- package/dist/{chunk-6GLQLTJI.js → chunk-3SEEGNRE.js} +35 -27
- package/dist/{chunk-FEMAJES4.cjs → chunk-3UAJLO5U.cjs} +41 -39
- package/dist/chunk-4HJRHEXD.cjs +1612 -0
- package/dist/{chunk-JPG7OHEG.js → chunk-4QFWGLZO.js} +1 -1
- package/dist/chunk-4R2L3DSA.js +14 -0
- package/dist/{chunk-2JTGK64G.js → chunk-4UYKNOZG.js} +12 -10
- package/dist/{chunk-TKZXHVBG.js → chunk-5SDELRH3.js} +5 -5
- package/dist/{chunk-Q6B35Y7O.js → chunk-5Y72YQEK.js} +22 -113
- package/dist/{chunk-KUC673HM.js → chunk-6T3BTD6Q.js} +204 -982
- package/dist/{chunk-F57ECE2I.js → chunk-6YPTUHM7.js} +4 -4
- package/dist/{chunk-WJUIXU6Y.js → chunk-7HNYYNKE.js} +28 -22
- package/dist/{chunk-P6G3JZNC.cjs → chunk-7NSU5EQD.cjs} +57 -148
- package/dist/chunk-AAYNCJMW.cjs +48 -0
- package/dist/{chunk-FXJ3WWUB.js → chunk-ADBE7QF3.js} +5 -252
- package/dist/chunk-AECTRMGQ.cjs +334 -0
- package/dist/chunk-AGVXKD4K.js +334 -0
- package/dist/chunk-AL2GUHAJ.cjs +18 -0
- package/dist/{chunk-WMX26HB5.js → chunk-APJZBDQN.js} +12 -12
- package/dist/chunk-AUMKE74M.cjs +16 -0
- package/dist/chunk-B4NCVYEQ.cjs +292 -0
- package/dist/{chunk-XWEBHS7O.cjs → chunk-BXSRTBLU.cjs} +82 -54
- package/dist/chunk-CMGFZHCN.js +233 -0
- package/dist/chunk-CMZ3QTFQ.js +1207 -0
- package/dist/chunk-CPA2CKRZ.cjs +125 -0
- package/dist/{chunk-G47AP6LX.cjs → chunk-CSCJU6YC.cjs} +35 -33
- package/dist/chunk-CYUUHFXL.js +41 -0
- package/dist/chunk-DC4RTYWK.cjs +1122 -0
- package/dist/{chunk-NF7GNGYG.js → chunk-DDWFCWOE.js} +5 -7
- package/dist/{chunk-K4PTDK34.js → chunk-EFNKS5W4.js} +322 -428
- package/dist/{chunk-QA6TROME.cjs → chunk-EOKSKJSS.cjs} +25 -83
- package/dist/{chunk-6NTPY5QA.cjs → chunk-ETYLOZOB.cjs} +978 -2413
- package/dist/chunk-F5BPGWGT.cjs +931 -0
- package/dist/{chunk-5HB7FLCV.js → chunk-FCAVAEHF.js} +8277 -9990
- package/dist/chunk-FFT56TYB.cjs +401 -0
- package/dist/chunk-FYEJTF5Y.js +125 -0
- package/dist/chunk-G3GRYDMS.js +16 -0
- package/dist/{chunk-VWFZRMQR.js → chunk-G3OMVCID.js} +13 -7
- package/dist/chunk-G6OHIX5C.cjs +100 -0
- package/dist/{chunk-UDFRUKLC.cjs → chunk-GEDY7HQI.cjs} +2 -2
- package/dist/chunk-GQ7JJUIT.cjs +1207 -0
- package/dist/chunk-H3PKYE4N.js +18 -0
- package/dist/{chunk-AGDVEUVL.js → chunk-H5R7U2D2.js} +206 -5
- package/dist/{chunk-7AM6C6XH.cjs → chunk-HETQETPV.cjs} +9641 -9678
- package/dist/{chunk-Y2GSOUCS.cjs → chunk-HWVUR735.cjs} +2 -2
- package/dist/chunk-II4QMH26.cjs +35 -0
- package/dist/chunk-ILNN6QRW.js +1612 -0
- package/dist/chunk-IYVFSLWJ.js +931 -0
- package/dist/{chunk-C4HRRB3V.cjs → chunk-JGCFRTND.cjs} +23 -17
- package/dist/chunk-JHQ334WS.js +655 -0
- package/dist/{chunk-WCVZCGK5.cjs → chunk-JO5TLJPM.cjs} +129 -907
- package/dist/{chunk-PRX7HVLE.cjs → chunk-JVCAK4W3.cjs} +210 -9
- package/dist/chunk-KBJJQFYU.js +1122 -0
- package/dist/chunk-KEKCQENI.js +48 -0
- package/dist/chunk-KHXZFLIN.cjs +41 -0
- package/dist/chunk-KT3U3ZRP.cjs +1137 -0
- package/dist/chunk-L2VUINHN.js +35 -0
- package/dist/{chunk-FYOKS5RI.cjs → chunk-L6ZQGWCX.cjs} +4521 -6234
- package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
- package/dist/{chunk-VMMHJFHG.js → chunk-N67XG5GY.js} +10 -8
- package/dist/chunk-NPAQSMRY.js +2087 -0
- package/dist/{chunk-IFWLJ66M.js → chunk-NQWJAOHO.js} +6 -4
- package/dist/{chunk-6K7QZDA6.cjs → chunk-OBZJICEA.cjs} +8 -8
- package/dist/{chunk-62KNLDXK.js → chunk-OPYODNV2.js} +3 -3
- package/dist/chunk-P3JMAMHP.js +401 -0
- package/dist/chunk-PPXR22YC.cjs +2087 -0
- package/dist/chunk-PSVSEN4J.cjs +655 -0
- package/dist/{chunk-EQWD4IJE.js → chunk-RBYVFPER.js} +74 -46
- package/dist/{chunk-SMAAV3HL.js → chunk-ROBQ5TR7.js} +10541 -10578
- package/dist/{chunk-K6Y5NX6L.cjs → chunk-T3CLXR43.cjs} +114 -220
- package/dist/{chunk-FI6GMDO7.js → chunk-TTVOLEUS.js} +3605 -5040
- package/dist/{chunk-LM7TXMLU.cjs → chunk-ULWVKHSI.cjs} +8 -255
- package/dist/{chunk-EX6GGCAC.cjs → chunk-UT3ODMBU.cjs} +15 -15
- package/dist/chunk-WANCBTUE.js +71 -0
- package/dist/{chunk-BIZNSF3U.cjs → chunk-WBNAEYTQ.cjs} +2 -51
- package/dist/chunk-WFPCCBOM.cjs +71 -0
- package/dist/chunk-WI6FHKD7.js +158 -0
- package/dist/chunk-WMNCVLES.js +100 -0
- package/dist/{chunk-UT4YHQZW.js → chunk-WSDT7LYL.js} +0 -49
- package/dist/chunk-WVOTC7HW.cjs +136 -0
- package/dist/{chunk-6AMIRXKM.cjs → chunk-WWJG4GVG.cjs} +93 -87
- package/dist/chunk-XXBLN4BP.cjs +233 -0
- package/dist/{chunk-4IBPRIQH.js → chunk-YBQQNDC7.js} +1 -1
- package/dist/{chunk-QGZPZ3RL.js → chunk-YBS5QGON.js} +70 -128
- package/dist/{chunk-CDM7OSFB.cjs → chunk-Z5SWJW5Q.cjs} +125 -117
- package/dist/{chunk-YD4LJZV4.cjs → chunk-ZX7SCPLO.cjs} +6 -8
- package/dist/cloud-tenants-KZUZGD4A.cjs +117 -0
- package/dist/cloud-tenants-OGLVVQ7X.js +117 -0
- package/dist/components/case-studies/index.cjs +45 -29
- package/dist/components/case-studies/index.js +32 -16
- package/dist/components/chat/ask-prompts.d.ts +64 -0
- package/dist/components/chat/ask-prompts.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/case-study-card.d.ts +6 -3
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +27 -8
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +57 -38
- package/dist/components/chat/quick-action-chip.d.ts +7 -3
- package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +29 -13
- package/dist/components/contact/index.js +28 -12
- package/dist/components/docs/index.cjs +33 -16
- package/dist/components/docs/index.js +33 -16
- package/dist/components/docs/use-scroll-spy.d.ts +23 -1
- package/dist/components/docs/use-scroll-spy.d.ts.map +1 -1
- package/dist/components/embeds/index.cjs +29 -13
- package/dist/components/embeds/index.js +28 -12
- package/dist/components/faq/faq-section.d.ts +8 -1
- package/dist/components/faq/faq-section.d.ts.map +1 -1
- package/dist/components/faq/index.cjs +30 -14
- package/dist/components/faq/index.js +29 -13
- package/dist/components/features/array-entry-manager.d.ts +5 -1
- package/dist/components/features/array-entry-manager.d.ts.map +1 -1
- package/dist/components/features/board/board.d.ts +2 -0
- package/dist/components/features/board/board.d.ts.map +1 -1
- package/dist/components/features/board/ticket-card.d.ts.map +1 -1
- package/dist/components/features/board/touch-board.d.ts +1 -1
- package/dist/components/features/board/touch-board.d.ts.map +1 -1
- package/dist/components/features/board/types.d.ts +3 -0
- package/dist/components/features/board/types.d.ts.map +1 -1
- package/dist/components/features/board/use-board-collapse.d.ts +6 -1
- package/dist/components/features/board/use-board-collapse.d.ts.map +1 -1
- package/dist/components/features/capability-explorer.d.ts +94 -0
- package/dist/components/features/capability-explorer.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/index.d.ts +14 -0
- package/dist/components/features/cloud-tenants/index.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +9 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-cell.d.ts +8 -0
- package/dist/components/features/cloud-tenants/tenant-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +9 -0
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +42 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-row.d.ts +22 -0
- package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +42 -0
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +26 -0
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -0
- package/dist/components/features/devices/device-last-online.d.ts +3 -0
- package/dist/components/features/devices/device-last-online.d.ts.map +1 -0
- package/dist/components/features/devices/device-name.d.ts +42 -0
- package/dist/components/features/devices/device-name.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts +26 -0
- package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +25 -0
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector.d.ts +38 -0
- package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts +133 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/narrowing.d.ts +13 -0
- package/dist/components/features/devices/device-selector/narrowing.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/use-device-selector.d.ts +17 -0
- package/dist/components/features/devices/device-selector/use-device-selector.d.ts.map +1 -0
- package/dist/components/features/devices/device-status.d.ts +23 -0
- package/dist/components/features/devices/device-status.d.ts.map +1 -0
- package/dist/components/features/devices/device-statuses.d.ts +40 -0
- package/dist/components/features/devices/device-statuses.d.ts.map +1 -0
- package/dist/components/features/devices/device-tags-filter-button.d.ts +22 -0
- package/dist/components/features/devices/device-tags-filter-button.d.ts.map +1 -0
- package/dist/components/features/devices/device-type-icon.d.ts +11 -0
- package/dist/components/features/devices/device-type-icon.d.ts.map +1 -0
- package/dist/components/features/devices/device-type-tile.d.ts +9 -0
- package/dist/components/features/devices/device-type-tile.d.ts.map +1 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts +46 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -0
- package/dist/components/features/devices/devices-grid-filters.d.ts +25 -0
- package/dist/components/features/devices/devices-grid-filters.d.ts.map +1 -0
- package/dist/components/features/devices/devices-grid.d.ts +12 -0
- package/dist/components/features/devices/devices-grid.d.ts.map +1 -0
- package/dist/components/features/devices/devices-list.d.ts +131 -0
- package/dist/components/features/devices/devices-list.d.ts.map +1 -0
- package/dist/components/features/devices/devices-panel-header.d.ts +46 -0
- package/dist/components/features/devices/devices-panel-header.d.ts.map +1 -0
- package/dist/components/features/devices/devices-panel-view.d.ts +79 -0
- package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -0
- package/dist/components/features/devices/devices-table-columns.d.ts +76 -0
- package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -0
- package/dist/components/features/devices/devices-view-config.d.ts +25 -0
- package/dist/components/features/devices/devices-view-config.d.ts.map +1 -0
- package/dist/components/features/devices/index.d.ts +24 -0
- package/dist/components/features/devices/index.d.ts.map +1 -0
- package/dist/components/features/devices/types.d.ts +68 -0
- package/dist/components/features/devices/types.d.ts.map +1 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts +50 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -0
- package/dist/components/features/index.cjs +227 -12
- package/dist/components/features/index.d.ts +7 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +266 -51
- package/dist/components/features/knowledge-base/index.d.ts +7 -0
- package/dist/components/features/knowledge-base/index.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts +44 -0
- package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts +13 -0
- package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-status.d.ts +8 -0
- package/dist/components/features/knowledge-base/knowledge-base-status.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-table.d.ts +52 -0
- package/dist/components/features/knowledge-base/knowledge-base-table.d.ts.map +1 -0
- package/dist/components/features/logs/index.d.ts +12 -0
- package/dist/components/features/logs/index.d.ts.map +1 -0
- package/dist/components/features/logs/log-drawer.d.ts +29 -0
- package/dist/components/features/logs/log-drawer.d.ts.map +1 -0
- package/dist/components/features/logs/log-source-labels.d.ts +11 -0
- package/dist/components/features/logs/log-source-labels.d.ts.map +1 -0
- package/dist/components/features/logs/logs-page-view.d.ts +32 -0
- package/dist/components/features/logs/logs-page-view.d.ts.map +1 -0
- package/dist/components/features/logs/logs-table-columns.d.ts +15 -0
- package/dist/components/features/logs/logs-table-columns.d.ts.map +1 -0
- package/dist/components/features/logs/logs-table-view.d.ts +64 -0
- package/dist/components/features/logs/logs-table-view.d.ts.map +1 -0
- package/dist/components/features/logs/types.d.ts +52 -0
- package/dist/components/features/logs/types.d.ts.map +1 -0
- package/dist/components/features/policies/compute-policy-summary.d.ts +37 -0
- package/dist/components/features/policies/compute-policy-summary.d.ts.map +1 -0
- package/dist/components/features/policies/index.d.ts +8 -0
- package/dist/components/features/policies/index.d.ts.map +1 -0
- package/dist/components/features/policies/policies-table.d.ts +34 -0
- package/dist/components/features/policies/policies-table.d.ts.map +1 -0
- package/dist/components/features/policies/policy-summary-cards.d.ts +17 -0
- package/dist/components/features/policies/policy-summary-cards.d.ts.map +1 -0
- package/dist/components/features/policies/policy-table-row.d.ts +37 -0
- package/dist/components/features/policies/policy-table-row.d.ts.map +1 -0
- package/dist/components/features/remote-session/index.d.ts +8 -0
- package/dist/components/features/remote-session/index.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts +21 -0
- package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts +31 -0
- package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts +21 -0
- package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-view.d.ts +50 -0
- package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -0
- package/dist/components/features/software/index.d.ts +8 -0
- package/dist/components/features/software/index.d.ts.map +1 -0
- package/dist/components/features/software/package-managers.d.ts +30 -0
- package/dist/components/features/software/package-managers.d.ts.map +1 -0
- package/dist/components/features/software/package-search-field-placeholder.d.ts +7 -0
- package/dist/components/features/software/package-search-field-placeholder.d.ts.map +1 -0
- package/dist/components/features/software/schedule-fields.d.ts +34 -0
- package/dist/components/features/software/schedule-fields.d.ts.map +1 -0
- package/dist/components/features/software/software-action-copy.d.ts +25 -0
- package/dist/components/features/software/software-action-copy.d.ts.map +1 -0
- package/dist/components/features/software/software-action-form.d.ts +71 -0
- package/dist/components/features/software/software-action-form.d.ts.map +1 -0
- package/dist/components/features/software/software-row-fields.d.ts +23 -0
- package/dist/components/features/software/software-row-fields.d.ts.map +1 -0
- package/dist/components/features/software/software-row.d.ts +18 -0
- package/dist/components/features/software/software-row.d.ts.map +1 -0
- package/dist/components/features/sortable-list/index.d.ts +1 -0
- package/dist/components/features/sortable-list/index.d.ts.map +1 -1
- package/dist/components/features/sortable-list/sortable-drag-handle.d.ts +21 -0
- package/dist/components/features/sortable-list/sortable-drag-handle.d.ts.map +1 -0
- package/dist/components/help-center-pages/index.cjs +133 -114
- package/dist/components/help-center-pages/index.js +58 -39
- package/dist/components/index.cjs +320 -82
- package/dist/components/index.js +451 -213
- package/dist/components/layout/page-heading.d.ts +12 -3
- package/dist/components/layout/page-heading.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +120 -98
- package/dist/components/meeting-scheduler/index.js +50 -28
- package/dist/components/navigation/index.cjs +36 -17
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +36 -17
- package/dist/components/navigation/mingo-ai-button.d.ts +23 -10
- package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
- package/dist/components/navigation/sticky-section-nav.d.ts +14 -1
- package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +32 -16
- package/dist/components/onboarding-guides/index.js +31 -15
- package/dist/components/product-demo/cast.d.ts +58 -0
- package/dist/components/product-demo/cast.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/cloud-tenants.d.ts +10 -0
- package/dist/components/product-demo/fixtures/cloud-tenants.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/devices.d.ts +14 -0
- package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/knowledge.d.ts +14 -0
- package/dist/components/product-demo/fixtures/knowledge.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/logs.d.ts +15 -0
- package/dist/components/product-demo/fixtures/logs.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/policies.d.ts +13 -0
- package/dist/components/product-demo/fixtures/policies.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/remote-session.d.ts +20 -0
- package/dist/components/product-demo/fixtures/remote-session.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/shared.d.ts +156 -0
- package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/software-update.d.ts +19 -0
- package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/tickets-board.d.ts +8 -0
- package/dist/components/product-demo/fixtures/tickets-board.d.ts.map +1 -0
- package/dist/components/product-demo/index.cjs +112 -0
- package/dist/components/product-demo/index.d.ts +6 -0
- package/dist/components/product-demo/index.d.ts.map +1 -0
- package/dist/components/product-demo/index.js +112 -0
- package/dist/components/product-demo/product-screen.d.ts +22 -0
- package/dist/components/product-demo/product-screen.d.ts.map +1 -0
- package/dist/components/product-demo/registry.d.ts +13 -0
- package/dist/components/product-demo/registry.d.ts.map +1 -0
- package/dist/components/product-demo/screen-keys.cjs +25 -0
- package/dist/components/product-demo/screen-keys.d.ts +27 -0
- package/dist/components/product-demo/screen-keys.d.ts.map +1 -0
- package/dist/components/product-demo/screen-keys.js +20 -0
- package/dist/components/product-demo/screens/cloud-tenants.d.ts +8 -0
- package/dist/components/product-demo/screens/cloud-tenants.d.ts.map +1 -0
- package/dist/components/product-demo/screens/devices.d.ts +10 -0
- package/dist/components/product-demo/screens/devices.d.ts.map +1 -0
- package/dist/components/product-demo/screens/knowledge.d.ts +9 -0
- package/dist/components/product-demo/screens/knowledge.d.ts.map +1 -0
- package/dist/components/product-demo/screens/logs.d.ts +4 -0
- package/dist/components/product-demo/screens/logs.d.ts.map +1 -0
- package/dist/components/product-demo/screens/policies.d.ts +8 -0
- package/dist/components/product-demo/screens/policies.d.ts.map +1 -0
- package/dist/components/product-demo/screens/remote-desktop-picture.d.ts +11 -0
- package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -0
- package/dist/components/product-demo/screens/remote-session.d.ts +8 -0
- package/dist/components/product-demo/screens/remote-session.d.ts.map +1 -0
- package/dist/components/product-demo/screens/software-update.d.ts +12 -0
- package/dist/components/product-demo/screens/software-update.d.ts.map +1 -0
- package/dist/components/product-demo/screens/tickets-board.d.ts +4 -0
- package/dist/components/product-demo/screens/tickets-board.d.ts.map +1 -0
- package/dist/components/product-demo/types.d.ts +9 -0
- package/dist/components/product-demo/types.d.ts.map +1 -0
- package/dist/components/related-content/index.cjs +14 -8
- package/dist/components/related-content/index.js +13 -7
- package/dist/components/tickets/index.cjs +36 -20
- package/dist/components/tickets/index.js +35 -19
- package/dist/components/ui/file-manager/index.cjs +38 -34
- package/dist/components/ui/file-manager/index.js +8 -4
- package/dist/components/ui/index.cjs +57 -17
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +141 -101
- package/dist/components/ui/product-screen-frame.d.ts +45 -0
- package/dist/components/ui/product-screen-frame.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +5 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/snap-carousel.d.ts +11 -1
- package/dist/components/ui/snap-carousel.d.ts.map +1 -1
- package/dist/components/ui/tag.d.ts +1 -1
- package/dist/components/ui/tag.d.ts.map +1 -1
- package/dist/devices-LBMG42K6.js +81 -0
- package/dist/devices-YGYJIXQY.cjs +81 -0
- package/dist/hooks/index.cjs +17 -8
- package/dist/hooks/index.js +32 -23
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-header-height.d.ts +12 -0
- package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
- package/dist/hooks/ui/use-sticky-toolbar.d.ts +29 -0
- package/dist/hooks/ui/use-sticky-toolbar.d.ts.map +1 -0
- package/dist/hooks/use-location-hash.d.ts +2 -2
- package/dist/hooks/use-location-hash.d.ts.map +1 -1
- package/dist/hooks/use-scroll-to-hash.d.ts +7 -0
- package/dist/hooks/use-scroll-to-hash.d.ts.map +1 -1
- package/dist/index.cjs +276 -25
- package/dist/index.js +729 -478
- package/dist/knowledge-H5BIWJVI.js +108 -0
- package/dist/knowledge-KTCVJIWN.cjs +108 -0
- package/dist/logs-DB5Z7M5Q.js +216 -0
- package/dist/logs-RVCC2UQW.cjs +216 -0
- package/dist/policies-EWUULFBR.js +121 -0
- package/dist/policies-HV4IQCBV.cjs +121 -0
- package/dist/remote-session-GSGZOFDX.js +196 -0
- package/dist/remote-session-R6VAFESR.cjs +196 -0
- package/dist/software-update-6PXKRKBT.js +179 -0
- package/dist/software-update-D4OVSWSG.cjs +179 -0
- package/dist/tickets-board-BHLPAVNJ.cjs +137 -0
- package/dist/tickets-board-PYDNELSK.js +137 -0
- package/dist/types/case-study.d.ts +15 -1
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/utils/date-utils.d.ts +5 -0
- package/dist/utils/date-utils.d.ts.map +1 -1
- package/dist/utils/index.cjs +45 -2
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -3
- package/dist/utils/open-in-new-tab.d.ts +7 -0
- package/dist/utils/open-in-new-tab.d.ts.map +1 -0
- package/dist/utils/same-page-hash-nav.d.ts +31 -0
- package/dist/utils/same-page-hash-nav.d.ts.map +1 -1
- package/dist/utils/scroll-into-view.d.ts +14 -1
- package/dist/utils/scroll-into-view.d.ts.map +1 -1
- package/package.json +13 -1
- package/src/components/chat/ask-prompts.tsx +226 -0
- package/src/components/chat/embeddable-chat.tsx +36 -2
- package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
- package/src/components/chat/index.ts +1 -0
- package/src/components/chat/quick-action-chip.tsx +33 -9
- package/src/components/docs/use-scroll-spy.ts +93 -18
- package/src/components/faq/faq-section.tsx +82 -43
- package/src/components/features/array-entry-manager.tsx +10 -1
- package/src/components/features/board/board.tsx +4 -1
- package/src/components/features/board/ticket-card.tsx +11 -1
- package/src/components/features/board/touch-board.tsx +2 -1
- package/src/components/features/board/types.ts +3 -0
- package/src/components/features/board/use-board-collapse.ts +7 -2
- package/src/components/features/capability-explorer.tsx +412 -0
- package/src/components/features/cloud-tenants/index.ts +28 -0
- package/src/components/features/cloud-tenants/tenant-access-cell.tsx +24 -0
- package/src/components/features/cloud-tenants/tenant-cell.tsx +26 -0
- package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +27 -0
- package/src/components/features/cloud-tenants/tenant-presentation.ts +111 -0
- package/src/components/features/cloud-tenants/tenant-row.ts +21 -0
- package/src/components/features/cloud-tenants/tenants-table-columns.ts +30 -0
- package/src/components/features/cloud-tenants/tenants-table-view.tsx +142 -0
- package/src/components/features/devices/device-last-online.ts +6 -0
- package/src/components/features/devices/device-name.ts +51 -0
- package/src/components/features/devices/device-selector/device-selection-mode-radio.tsx +107 -0
- package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +32 -0
- package/src/components/features/devices/device-selector/device-selector.tsx +799 -0
- package/src/components/features/devices/device-selector/device-selector.types.ts +138 -0
- package/src/components/features/devices/device-selector/narrowing.ts +33 -0
- package/src/components/features/devices/device-selector/use-device-selector.ts +51 -0
- package/src/components/features/devices/device-status.ts +102 -0
- package/src/components/features/devices/device-statuses.ts +88 -0
- package/src/components/features/devices/device-tags-filter-button.tsx +49 -0
- package/src/components/features/devices/device-type-icon.tsx +29 -0
- package/src/components/features/devices/device-type-tile.tsx +17 -0
- package/src/components/features/devices/devices-filter-toolbar.tsx +114 -0
- package/src/components/features/devices/devices-grid-filters.tsx +99 -0
- package/src/components/features/devices/devices-grid.tsx +86 -0
- package/src/components/features/devices/devices-list.tsx +357 -0
- package/src/components/features/devices/devices-panel-header.tsx +97 -0
- package/src/components/features/devices/devices-panel-view.tsx +261 -0
- package/src/components/features/devices/devices-table-columns.tsx +356 -0
- package/src/components/features/devices/devices-view-config.tsx +38 -0
- package/src/components/features/devices/index.ts +89 -0
- package/src/components/features/devices/types.ts +74 -0
- package/src/components/features/devices/use-tag-filter-modal.ts +109 -0
- package/src/components/features/index.ts +9 -0
- package/src/components/features/knowledge-base/index.ts +19 -0
- package/src/components/features/knowledge-base/knowledge-base-article-view.tsx +134 -0
- package/src/components/features/knowledge-base/knowledge-base-item-icon.ts +14 -0
- package/src/components/features/knowledge-base/knowledge-base-status.ts +12 -0
- package/src/components/features/knowledge-base/knowledge-base-table.tsx +180 -0
- package/src/components/features/logs/index.ts +20 -0
- package/src/components/features/logs/log-drawer.tsx +138 -0
- package/src/components/features/logs/log-source-labels.ts +25 -0
- package/src/components/features/logs/logs-page-view.tsx +100 -0
- package/src/components/features/logs/logs-table-columns.ts +16 -0
- package/src/components/features/logs/logs-table-view.tsx +509 -0
- package/src/components/features/logs/types.ts +71 -0
- package/src/components/features/policies/compute-policy-summary.ts +115 -0
- package/src/components/features/policies/index.ts +14 -0
- package/src/components/features/policies/policies-table.tsx +235 -0
- package/src/components/features/policies/policy-summary-cards.tsx +69 -0
- package/src/components/features/policies/policy-table-row.ts +37 -0
- package/src/components/features/remote-session/index.ts +8 -0
- package/src/components/features/remote-session/remote-desktop-chat-message-row.tsx +56 -0
- package/src/components/features/remote-session/remote-desktop-chat-panel.tsx +102 -0
- package/src/components/features/remote-session/remote-desktop-fullscreen-toolbar.tsx +119 -0
- package/src/components/features/remote-session/remote-desktop-view.tsx +209 -0
- package/src/components/features/software/index.ts +39 -0
- package/src/components/features/software/package-managers.ts +54 -0
- package/src/components/features/software/package-search-field-placeholder.tsx +23 -0
- package/src/components/features/software/schedule-fields.tsx +105 -0
- package/src/components/features/software/software-action-copy.ts +70 -0
- package/src/components/features/software/software-action-form.tsx +199 -0
- package/src/components/features/software/software-row-fields.tsx +105 -0
- package/src/components/features/software/software-row.ts +22 -0
- package/src/components/features/sortable-list/index.ts +1 -0
- package/src/components/features/sortable-list/sortable-drag-handle.tsx +41 -0
- package/src/components/layout/page-heading.tsx +23 -6
- package/src/components/navigation/index.ts +5 -0
- package/src/components/navigation/mingo-ai-button.tsx +37 -13
- package/src/components/navigation/sticky-section-nav.tsx +99 -1
- package/src/components/product-demo/cast.tsx +78 -0
- package/src/components/product-demo/fixtures/cloud-tenants.ts +63 -0
- package/src/components/product-demo/fixtures/devices.ts +87 -0
- package/src/components/product-demo/fixtures/knowledge.ts +48 -0
- package/src/components/product-demo/fixtures/logs.ts +103 -0
- package/src/components/product-demo/fixtures/policies.ts +77 -0
- package/src/components/product-demo/fixtures/remote-session.ts +65 -0
- package/src/components/product-demo/fixtures/shared.ts +53 -0
- package/src/components/product-demo/fixtures/software-update.ts +63 -0
- package/src/components/product-demo/fixtures/tickets-board.ts +100 -0
- package/src/components/product-demo/index.ts +7 -0
- package/src/components/product-demo/product-screen.tsx +94 -0
- package/src/components/product-demo/registry.ts +20 -0
- package/src/components/product-demo/screen-keys.ts +31 -0
- package/src/components/product-demo/screens/cloud-tenants.tsx +23 -0
- package/src/components/product-demo/screens/devices.tsx +41 -0
- package/src/components/product-demo/screens/knowledge.tsx +27 -0
- package/src/components/product-demo/screens/logs.tsx +113 -0
- package/src/components/product-demo/screens/policies.tsx +29 -0
- package/src/components/product-demo/screens/remote-desktop-picture.tsx +118 -0
- package/src/components/product-demo/screens/remote-session.tsx +46 -0
- package/src/components/product-demo/screens/software-update.tsx +97 -0
- package/src/components/product-demo/screens/tickets-board.tsx +28 -0
- package/src/components/product-demo/types.ts +10 -0
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/product-screen-frame.tsx +136 -0
- package/src/components/ui/radio-group.tsx +16 -4
- package/src/components/ui/snap-carousel.tsx +26 -1
- package/src/components/ui/tag.tsx +5 -0
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-header-height.ts +51 -2
- package/src/hooks/ui/use-sticky-toolbar.ts +60 -0
- package/src/hooks/use-location-hash.ts +9 -5
- package/src/hooks/use-scroll-to-hash.ts +9 -1
- package/src/types/case-study.ts +21 -1
- package/src/utils/date-utils.ts +8 -1
- package/src/utils/index.ts +5 -0
- package/src/utils/open-in-new-tab.ts +12 -0
- package/src/utils/same-page-hash-nav.ts +57 -0
- package/src/utils/scroll-into-view.ts +21 -5
- package/dist/chunk-BM5MVGH3.cjs +0 -499
- package/dist/chunk-CUME3VTQ.js +0 -144
- package/dist/chunk-CZ7Y7UG4.js +0 -732
- package/dist/chunk-FLKJYMVB.js +0 -499
- package/dist/chunk-OF6GEI5A.cjs +0 -144
- package/dist/chunk-UVTD52MD.cjs +0 -732
|
@@ -1,51 +1,67 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
readLocalStorageUpdateDetail
|
|
4
|
+
} from "./chunk-3K5ZLZE7.js";
|
|
2
5
|
import {
|
|
3
6
|
useEndpointsRuntime,
|
|
4
7
|
useRequiredEndpointsRuntime
|
|
5
8
|
} from "./chunk-HFL2F4RM.js";
|
|
6
9
|
import {
|
|
7
|
-
contentFetch
|
|
8
|
-
|
|
9
|
-
parseSchemaParams,
|
|
10
|
-
positiveInt,
|
|
11
|
-
shouldIncludeInUrl
|
|
12
|
-
} from "./chunk-CUME3VTQ.js";
|
|
10
|
+
contentFetch
|
|
11
|
+
} from "./chunk-G3GRYDMS.js";
|
|
13
12
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ELAPSED_MS_FIELD,
|
|
14
|
+
FORM_RESCUE_ATTEMPT_FIELD,
|
|
15
|
+
FORM_RESCUE_DEBOUNCE_MS,
|
|
16
|
+
FORM_RESCUE_EVENTS,
|
|
17
|
+
FORM_RESCUE_RESUME_FIELD,
|
|
18
|
+
FORM_RESCUE_RESUME_PARAM,
|
|
19
|
+
HONEYPOT_FIELD,
|
|
20
|
+
LOCATION_HASH_SYNC_EVENT,
|
|
21
|
+
captureFormRescueEvent,
|
|
22
|
+
consumeAccessCode,
|
|
23
|
+
filledRescueFields,
|
|
16
24
|
getHashTargetElement,
|
|
25
|
+
isFormAttemptId,
|
|
26
|
+
isRescueEmail,
|
|
27
|
+
isResumeToken,
|
|
28
|
+
isScrollSyncedHash,
|
|
17
29
|
normalizeHashFragment,
|
|
30
|
+
rescueCompletionPct,
|
|
31
|
+
sanitizeRescueFieldName,
|
|
32
|
+
sanitizeRescueValues,
|
|
18
33
|
scrollElementIntoView,
|
|
34
|
+
toClaudeMirrorPath,
|
|
35
|
+
transformPlatformConfigsToOptions,
|
|
19
36
|
useAutoplay,
|
|
20
|
-
useDebounce
|
|
21
|
-
|
|
37
|
+
useDebounce,
|
|
38
|
+
validateAccessCode,
|
|
39
|
+
validateAndConsumeAccessCode
|
|
40
|
+
} from "./chunk-CMZ3QTFQ.js";
|
|
41
|
+
import {
|
|
42
|
+
ToolIcon,
|
|
43
|
+
apiErrorMessage
|
|
44
|
+
} from "./chunk-34I6XI3N.js";
|
|
22
45
|
import {
|
|
23
46
|
useRouter,
|
|
24
47
|
useSearchParams
|
|
25
48
|
} from "./chunk-GY4IZG22.js";
|
|
26
49
|
import {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
} from "./chunk-
|
|
32
|
-
import {
|
|
33
|
-
FlamingoLogo,
|
|
34
|
-
MiamiCyberGangLogoFaceOnly,
|
|
35
|
-
MlgLogo,
|
|
36
|
-
OpenFrameLogo,
|
|
37
|
-
OpenmspLogo
|
|
38
|
-
} from "./chunk-N45D4ZXQ.js";
|
|
50
|
+
createSearchParams,
|
|
51
|
+
parseSchemaParams,
|
|
52
|
+
positiveInt,
|
|
53
|
+
shouldIncludeInUrl
|
|
54
|
+
} from "./chunk-AGVXKD4K.js";
|
|
39
55
|
import {
|
|
40
56
|
Chevron02DownIcon,
|
|
41
57
|
XmarkIcon
|
|
42
58
|
} from "./chunk-NCPTID44.js";
|
|
43
|
-
import {
|
|
44
|
-
cn
|
|
45
|
-
} from "./chunk-7RXWKTAP.js";
|
|
46
59
|
import {
|
|
47
60
|
createNatsClient
|
|
48
61
|
} from "./chunk-V3JFVKHV.js";
|
|
62
|
+
import {
|
|
63
|
+
cn
|
|
64
|
+
} from "./chunk-7RXWKTAP.js";
|
|
49
65
|
|
|
50
66
|
// src/hooks/ui/use-auto-limit-tags.ts
|
|
51
67
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -142,12 +158,6 @@ function useDeferredError(error, value, delay = 1500) {
|
|
|
142
158
|
};
|
|
143
159
|
}
|
|
144
160
|
|
|
145
|
-
// src/hooks/ui/use-drag-and-drop-enabled.ts
|
|
146
|
-
var DRAG_AND_DROP_MEDIA_QUERY = `(pointer: fine) and (hover: hover) and ${breakpoints.md}`;
|
|
147
|
-
function useDragAndDropEnabled() {
|
|
148
|
-
return useMediaQuery(DRAG_AND_DROP_MEDIA_QUERY) ?? false;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
161
|
// src/hooks/ui/use-focus-trap.ts
|
|
152
162
|
import { useEffect as useEffect3, useRef as useRef2 } from "react";
|
|
153
163
|
var FOCUSABLE_SELECTOR = [
|
|
@@ -207,204 +217,29 @@ function useFocusTrap(containerRef, active, { onEscape, contain = true } = {}) {
|
|
|
207
217
|
}, [containerRef, active, contain]);
|
|
208
218
|
}
|
|
209
219
|
|
|
210
|
-
// src/hooks/ui/use-
|
|
211
|
-
import {
|
|
212
|
-
function
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if (!el || !thumb) return;
|
|
230
|
-
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
231
|
-
if (maxScroll <= 0) {
|
|
232
|
-
thumb.style.left = "0%";
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
const ratio = el.clientWidth / el.scrollWidth;
|
|
236
|
-
const fraction = Math.min(Math.max(el.scrollLeft, 0), maxScroll) / maxScroll;
|
|
237
|
-
thumb.style.left = `${fraction * (1 - ratio) * 100}%`;
|
|
238
|
-
}, []);
|
|
239
|
-
const syncEdgeFades = useCallback3(() => {
|
|
240
|
-
const el = scrollElRef.current;
|
|
241
|
-
if (!el) return;
|
|
242
|
-
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
243
|
-
const ratio = el.clientWidth / el.scrollWidth;
|
|
244
|
-
if (ratio >= 1 || maxScroll <= 0) {
|
|
245
|
-
if (prevCanScrollLeftRef.current) {
|
|
246
|
-
prevCanScrollLeftRef.current = false;
|
|
247
|
-
setCanScrollLeft(false);
|
|
248
|
-
}
|
|
249
|
-
if (prevCanScrollRightRef.current) {
|
|
250
|
-
prevCanScrollRightRef.current = false;
|
|
251
|
-
setCanScrollRight(false);
|
|
252
|
-
}
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
const fraction = Math.min(Math.max(el.scrollLeft, 0), maxScroll) / maxScroll;
|
|
256
|
-
const left = fraction > 1e-3;
|
|
257
|
-
const right = fraction < 0.999;
|
|
258
|
-
if (left !== prevCanScrollLeftRef.current) {
|
|
259
|
-
prevCanScrollLeftRef.current = left;
|
|
260
|
-
setCanScrollLeft(left);
|
|
261
|
-
}
|
|
262
|
-
if (right !== prevCanScrollRightRef.current) {
|
|
263
|
-
prevCanScrollRightRef.current = right;
|
|
264
|
-
setCanScrollRight(right);
|
|
265
|
-
}
|
|
266
|
-
}, []);
|
|
267
|
-
const measure2 = useCallback3(() => {
|
|
268
|
-
const el = scrollElRef.current;
|
|
269
|
-
if (!el) return;
|
|
270
|
-
const ratio = el.clientWidth / el.scrollWidth;
|
|
271
|
-
setThumbRatio(ratio >= 1 ? 0 : ratio);
|
|
272
|
-
syncThumbToDOM();
|
|
273
|
-
syncEdgeFades();
|
|
274
|
-
}, [syncThumbToDOM, syncEdgeFades]);
|
|
275
|
-
const scrollRef = useCallback3(
|
|
276
|
-
(node) => {
|
|
277
|
-
if (roRef.current) {
|
|
278
|
-
roRef.current.disconnect();
|
|
279
|
-
roRef.current = null;
|
|
280
|
-
}
|
|
281
|
-
if (moRef.current) {
|
|
282
|
-
moRef.current.disconnect();
|
|
283
|
-
moRef.current = null;
|
|
284
|
-
}
|
|
285
|
-
if (rafIdRef.current) {
|
|
286
|
-
cancelAnimationFrame(rafIdRef.current);
|
|
287
|
-
rafIdRef.current = 0;
|
|
288
|
-
}
|
|
289
|
-
scrollElRef.current = node;
|
|
290
|
-
if (node) {
|
|
291
|
-
const ratio = node.clientWidth / node.scrollWidth;
|
|
292
|
-
setThumbRatio(ratio >= 1 ? 0 : ratio);
|
|
293
|
-
const ro = new ResizeObserver(measure2);
|
|
294
|
-
roRef.current = ro;
|
|
295
|
-
const observeAll = () => {
|
|
296
|
-
ro.disconnect();
|
|
297
|
-
ro.observe(node);
|
|
298
|
-
for (const child of Array.from(node.children)) ro.observe(child);
|
|
299
|
-
};
|
|
300
|
-
observeAll();
|
|
301
|
-
moRef.current = new MutationObserver(() => {
|
|
302
|
-
observeAll();
|
|
303
|
-
measure2();
|
|
304
|
-
});
|
|
305
|
-
moRef.current.observe(node, { childList: true });
|
|
306
|
-
requestAnimationFrame(() => {
|
|
307
|
-
syncThumbToDOM();
|
|
308
|
-
syncEdgeFades();
|
|
309
|
-
});
|
|
310
|
-
} else {
|
|
311
|
-
setThumbRatio(0);
|
|
312
|
-
prevCanScrollLeftRef.current = false;
|
|
313
|
-
prevCanScrollRightRef.current = false;
|
|
314
|
-
setCanScrollLeft(false);
|
|
315
|
-
setCanScrollRight(false);
|
|
316
|
-
}
|
|
317
|
-
},
|
|
318
|
-
[measure2, syncThumbToDOM, syncEdgeFades]
|
|
319
|
-
);
|
|
320
|
-
const onScroll = useCallback3(() => {
|
|
321
|
-
if (isDraggingRef.current) return;
|
|
322
|
-
if (rafIdRef.current) cancelAnimationFrame(rafIdRef.current);
|
|
323
|
-
rafIdRef.current = requestAnimationFrame(() => {
|
|
324
|
-
syncThumbToDOM();
|
|
325
|
-
syncEdgeFades();
|
|
326
|
-
});
|
|
327
|
-
}, [syncThumbToDOM, syncEdgeFades]);
|
|
328
|
-
const onTrackClick = useCallback3((e) => {
|
|
329
|
-
if (e.target.closest("[data-scrollbar-thumb]")) return;
|
|
330
|
-
const track = trackRef.current;
|
|
331
|
-
const el = scrollElRef.current;
|
|
332
|
-
if (!track || !el) return;
|
|
333
|
-
const ratio = el.clientWidth / el.scrollWidth;
|
|
334
|
-
if (ratio >= 1) return;
|
|
335
|
-
const rect = track.getBoundingClientRect();
|
|
336
|
-
const thumbWidth = rect.width * ratio;
|
|
337
|
-
const maxThumbOffset = rect.width - thumbWidth;
|
|
338
|
-
if (maxThumbOffset <= 0) return;
|
|
339
|
-
const targetFraction = Math.max(0, Math.min(1, (e.clientX - rect.left - thumbWidth / 2) / maxThumbOffset));
|
|
340
|
-
const targetScrollLeft = targetFraction * (el.scrollWidth - el.clientWidth);
|
|
341
|
-
el.scrollTo({ left: targetScrollLeft, behavior: "smooth" });
|
|
342
|
-
}, []);
|
|
343
|
-
const onTrackWheel = useCallback3((e) => {
|
|
344
|
-
const el = scrollElRef.current;
|
|
345
|
-
if (!el) return;
|
|
346
|
-
e.preventDefault();
|
|
347
|
-
el.scrollLeft += e.deltaX || e.deltaY;
|
|
348
|
-
}, []);
|
|
349
|
-
const onThumbPointerDown = useCallback3((e) => {
|
|
350
|
-
e.preventDefault();
|
|
351
|
-
e.stopPropagation();
|
|
352
|
-
const el = scrollElRef.current;
|
|
353
|
-
if (!el) return;
|
|
354
|
-
isDraggingRef.current = true;
|
|
355
|
-
dragStartRef.current = { mouseX: e.clientX, scrollLeft: el.scrollLeft };
|
|
356
|
-
const target = e.currentTarget;
|
|
357
|
-
target.setPointerCapture(e.pointerId);
|
|
358
|
-
target.style.cursor = "grabbing";
|
|
359
|
-
}, []);
|
|
360
|
-
const onThumbPointerMove = useCallback3(
|
|
361
|
-
(e) => {
|
|
362
|
-
if (!isDraggingRef.current) return;
|
|
363
|
-
const el = scrollElRef.current;
|
|
364
|
-
const track = trackRef.current;
|
|
365
|
-
if (!el || !track) return;
|
|
366
|
-
const currentThumbRatio = el.clientWidth / el.scrollWidth;
|
|
367
|
-
if (currentThumbRatio >= 1) return;
|
|
368
|
-
const trackWidth = track.clientWidth;
|
|
369
|
-
const thumbWidth = trackWidth * currentThumbRatio;
|
|
370
|
-
const maxThumbTravel = trackWidth - thumbWidth;
|
|
371
|
-
if (maxThumbTravel <= 0) return;
|
|
372
|
-
const mouseDelta = e.clientX - dragStartRef.current.mouseX;
|
|
373
|
-
const scrollRange = el.scrollWidth - el.clientWidth;
|
|
374
|
-
el.scrollLeft = Math.min(
|
|
375
|
-
Math.max(dragStartRef.current.scrollLeft + mouseDelta / maxThumbTravel * scrollRange, 0),
|
|
376
|
-
scrollRange
|
|
377
|
-
);
|
|
378
|
-
syncThumbToDOM();
|
|
379
|
-
syncEdgeFades();
|
|
380
|
-
},
|
|
381
|
-
[syncThumbToDOM, syncEdgeFades]
|
|
382
|
-
);
|
|
383
|
-
const onThumbPointerUp = useCallback3((e) => {
|
|
384
|
-
isDraggingRef.current = false;
|
|
385
|
-
const target = e.currentTarget;
|
|
386
|
-
target.releasePointerCapture(e.pointerId);
|
|
387
|
-
target.style.cursor = "grab";
|
|
388
|
-
}, []);
|
|
389
|
-
const onThumbPointerCancel = useCallback3((e) => {
|
|
390
|
-
isDraggingRef.current = false;
|
|
391
|
-
const target = e.currentTarget;
|
|
392
|
-
target.style.cursor = "grab";
|
|
393
|
-
}, []);
|
|
220
|
+
// src/hooks/ui/use-sticky-toolbar.ts
|
|
221
|
+
import { useCallback as useCallback3, useEffect as useEffect4, useState as useState3 } from "react";
|
|
222
|
+
function useStickyToolbar() {
|
|
223
|
+
const [node, setNode] = useState3(null);
|
|
224
|
+
const [height, setHeight] = useState3(0);
|
|
225
|
+
const toolbarRef = useCallback3((el) => setNode(el), []);
|
|
226
|
+
const [lastNode, setLastNode] = useState3(node);
|
|
227
|
+
if (node !== lastNode) {
|
|
228
|
+
setLastNode(node);
|
|
229
|
+
if (!node) setHeight(0);
|
|
230
|
+
}
|
|
231
|
+
useEffect4(() => {
|
|
232
|
+
if (!node) return void 0;
|
|
233
|
+
const update = () => setHeight(node.offsetHeight);
|
|
234
|
+
update();
|
|
235
|
+
const observer = new ResizeObserver(update);
|
|
236
|
+
observer.observe(node);
|
|
237
|
+
return () => observer.disconnect();
|
|
238
|
+
}, [node]);
|
|
394
239
|
return {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
thumbRatio,
|
|
399
|
-
canScrollLeft,
|
|
400
|
-
canScrollRight,
|
|
401
|
-
onScroll,
|
|
402
|
-
onTrackClick,
|
|
403
|
-
onTrackWheel,
|
|
404
|
-
onThumbPointerDown,
|
|
405
|
-
onThumbPointerMove,
|
|
406
|
-
onThumbPointerUp,
|
|
407
|
-
onThumbPointerCancel
|
|
240
|
+
toolbarRef,
|
|
241
|
+
containerStyle: { "--sticky-toolbar-h": `${height}px` },
|
|
242
|
+
stickyHeaderOffset: "top-[var(--sticky-toolbar-h)]"
|
|
408
243
|
};
|
|
409
244
|
}
|
|
410
245
|
|
|
@@ -459,81 +294,10 @@ function useKeyboardCollisionPadding() {
|
|
|
459
294
|
);
|
|
460
295
|
}
|
|
461
296
|
|
|
462
|
-
// src/hooks/ui/use-local-storage.ts
|
|
463
|
-
import { useEffect as useEffect4, useMemo, useRef as useRef4, useState as useState4 } from "react";
|
|
464
|
-
|
|
465
|
-
// src/utils/storage-event.ts
|
|
466
|
-
function readLocalStorageUpdateDetail(event) {
|
|
467
|
-
if (!("detail" in event)) return null;
|
|
468
|
-
const detail = event.detail;
|
|
469
|
-
if (typeof detail !== "object" || detail === null) return null;
|
|
470
|
-
if (!("key" in detail) || typeof detail.key !== "string") return null;
|
|
471
|
-
const newValue = "newValue" in detail ? detail.newValue : null;
|
|
472
|
-
if (newValue !== null && newValue !== void 0 && typeof newValue !== "string") return null;
|
|
473
|
-
return { key: detail.key, newValue: newValue ?? null };
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// src/hooks/ui/use-local-storage.ts
|
|
477
|
-
function useLocalStorage(key, initialValue, options) {
|
|
478
|
-
const initialValueRef = useRef4(initialValue);
|
|
479
|
-
useEffect4(() => {
|
|
480
|
-
initialValueRef.current = initialValue;
|
|
481
|
-
});
|
|
482
|
-
const validate = options?.validate;
|
|
483
|
-
const storage = useMemo(
|
|
484
|
-
() => createLocalStorageAdapter({ key, validate, logTag: `[useLocalStorage:${key}]` }),
|
|
485
|
-
[key, validate]
|
|
486
|
-
);
|
|
487
|
-
const [storedValue, setStoredValue] = useState4(() => storage.load() ?? initialValue);
|
|
488
|
-
const isInitialized = useRef4(true);
|
|
489
|
-
const isFromStorageEvent = useRef4(false);
|
|
490
|
-
useEffect4(() => {
|
|
491
|
-
if (!isInitialized.current) return void 0;
|
|
492
|
-
const syncFromStorage = (source) => {
|
|
493
|
-
const next = storage.load();
|
|
494
|
-
isFromStorageEvent.current = true;
|
|
495
|
-
setStoredValue(next ?? initialValueRef.current);
|
|
496
|
-
console.log(`\u{1F504} ${next === null ? "Cleared" : "Updated"} localStorage key "${key}" from ${source}`);
|
|
497
|
-
};
|
|
498
|
-
const handleStorageChange = (e) => {
|
|
499
|
-
if (e.key !== key) return;
|
|
500
|
-
syncFromStorage("storage event");
|
|
501
|
-
};
|
|
502
|
-
const handleCustomStorageUpdate = (event) => {
|
|
503
|
-
const detail = readLocalStorageUpdateDetail(event);
|
|
504
|
-
if (detail?.key !== key) return;
|
|
505
|
-
syncFromStorage("custom storage event");
|
|
506
|
-
};
|
|
507
|
-
window.addEventListener("storage", handleStorageChange);
|
|
508
|
-
window.addEventListener("localStorageUpdate", handleCustomStorageUpdate);
|
|
509
|
-
return () => {
|
|
510
|
-
window.removeEventListener("storage", handleStorageChange);
|
|
511
|
-
window.removeEventListener("localStorageUpdate", handleCustomStorageUpdate);
|
|
512
|
-
};
|
|
513
|
-
}, [key, storage]);
|
|
514
|
-
useEffect4(() => {
|
|
515
|
-
if (!isInitialized.current) return;
|
|
516
|
-
if (isFromStorageEvent.current) {
|
|
517
|
-
isFromStorageEvent.current = false;
|
|
518
|
-
return;
|
|
519
|
-
}
|
|
520
|
-
storage.save(storedValue);
|
|
521
|
-
}, [storage, storedValue]);
|
|
522
|
-
const setValue = (value) => {
|
|
523
|
-
try {
|
|
524
|
-
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
525
|
-
setStoredValue(valueToStore);
|
|
526
|
-
} catch (error) {
|
|
527
|
-
console.error(`Error setting value for localStorage key "${key}":`, error);
|
|
528
|
-
}
|
|
529
|
-
};
|
|
530
|
-
return [storedValue, setValue];
|
|
531
|
-
}
|
|
532
|
-
|
|
533
297
|
// src/hooks/ui/use-memoized-callback.ts
|
|
534
|
-
import { useCallback as useCallback4, useEffect as useEffect5, useRef as
|
|
298
|
+
import { useCallback as useCallback4, useEffect as useEffect5, useRef as useRef3 } from "react";
|
|
535
299
|
function useMemoizedCallback(callback, _dependencies) {
|
|
536
|
-
const callbackRef =
|
|
300
|
+
const callbackRef = useRef3(callback);
|
|
537
301
|
useEffect5(() => {
|
|
538
302
|
callbackRef.current = callback;
|
|
539
303
|
});
|
|
@@ -542,10 +306,10 @@ function useMemoizedCallback(callback, _dependencies) {
|
|
|
542
306
|
}
|
|
543
307
|
|
|
544
308
|
// src/hooks/ui/use-notification-permission.ts
|
|
545
|
-
import { useCallback as useCallback5, useEffect as useEffect6, useState as
|
|
309
|
+
import { useCallback as useCallback5, useEffect as useEffect6, useState as useState4 } from "react";
|
|
546
310
|
function useNotificationPermission() {
|
|
547
|
-
const [supported, setSupported] =
|
|
548
|
-
const [permission, setPermission] =
|
|
311
|
+
const [supported, setSupported] = useState4(false);
|
|
312
|
+
const [permission, setPermission] = useState4("default");
|
|
549
313
|
useEffect6(() => {
|
|
550
314
|
if (typeof window === "undefined" || !("Notification" in window)) return void 0;
|
|
551
315
|
const sync2 = () => {
|
|
@@ -586,7 +350,7 @@ function useNotificationPermission() {
|
|
|
586
350
|
}
|
|
587
351
|
|
|
588
352
|
// src/hooks/ui/use-onboarding-state.ts
|
|
589
|
-
import { useState as
|
|
353
|
+
import { useState as useState5, useEffect as useEffect7, useCallback as useCallback6 } from "react";
|
|
590
354
|
|
|
591
355
|
// src/utils/onboarding-storage.ts
|
|
592
356
|
var DEFAULT_STATE = {
|
|
@@ -670,8 +434,8 @@ function resetOnboardingState(key) {
|
|
|
670
434
|
|
|
671
435
|
// src/hooks/ui/use-onboarding-state.ts
|
|
672
436
|
function useOnboardingState(storageKey = "openframe-onboarding-state") {
|
|
673
|
-
const [state, setState] =
|
|
674
|
-
const [, forceUpdate] =
|
|
437
|
+
const [state, setState] = useState5(() => loadOnboardingState(storageKey));
|
|
438
|
+
const [, forceUpdate] = useState5(0);
|
|
675
439
|
useEffect7(() => {
|
|
676
440
|
const handleStorageUpdate = (event) => {
|
|
677
441
|
const detail = readLocalStorageUpdateDetail(event);
|
|
@@ -751,16 +515,16 @@ function useOnboardingState(storageKey = "openframe-onboarding-state") {
|
|
|
751
515
|
}
|
|
752
516
|
|
|
753
517
|
// src/hooks/ui/use-search.ts
|
|
754
|
-
import { useState as
|
|
518
|
+
import { useState as useState6, useEffect as useEffect8, useCallback as useCallback7, useRef as useRef4 } from "react";
|
|
755
519
|
var NO_RESULTS = [];
|
|
756
520
|
function useSearch(config) {
|
|
757
521
|
const { searchFn, mapResult, debounceMs = 300, minQueryLength = 2 } = config;
|
|
758
|
-
const [query, setQuery] =
|
|
759
|
-
const [results, setResults] =
|
|
760
|
-
const [isLoading, setIsLoading] =
|
|
761
|
-
const [error, setError] =
|
|
762
|
-
const searchFnRef =
|
|
763
|
-
const mapResultRef =
|
|
522
|
+
const [query, setQuery] = useState6("");
|
|
523
|
+
const [results, setResults] = useState6(NO_RESULTS);
|
|
524
|
+
const [isLoading, setIsLoading] = useState6(false);
|
|
525
|
+
const [error, setError] = useState6(null);
|
|
526
|
+
const searchFnRef = useRef4(searchFn);
|
|
527
|
+
const mapResultRef = useRef4(mapResult);
|
|
764
528
|
useEffect8(() => {
|
|
765
529
|
searchFnRef.current = searchFn;
|
|
766
530
|
mapResultRef.current = mapResult;
|
|
@@ -771,7 +535,7 @@ function useSearch(config) {
|
|
|
771
535
|
setError(null);
|
|
772
536
|
}, []);
|
|
773
537
|
const searchable = Boolean(debouncedQuery) && debouncedQuery.length >= minQueryLength;
|
|
774
|
-
const [wasSearchable, setWasSearchable] =
|
|
538
|
+
const [wasSearchable, setWasSearchable] = useState6(searchable);
|
|
775
539
|
if (wasSearchable !== searchable) {
|
|
776
540
|
setWasSearchable(searchable);
|
|
777
541
|
if (!searchable) {
|
|
@@ -811,9 +575,9 @@ function useSearch(config) {
|
|
|
811
575
|
}
|
|
812
576
|
|
|
813
577
|
// src/hooks/ui/use-table-pagination.ts
|
|
814
|
-
import { useMemo
|
|
578
|
+
import { useMemo } from "react";
|
|
815
579
|
function useTablePagination(config) {
|
|
816
|
-
return
|
|
580
|
+
return useMemo(() => {
|
|
817
581
|
if (!config) return void 0;
|
|
818
582
|
if (config.type === "client") {
|
|
819
583
|
if (config.totalPages <= 1) return void 0;
|
|
@@ -848,11 +612,11 @@ function useTablePagination(config) {
|
|
|
848
612
|
}
|
|
849
613
|
|
|
850
614
|
// src/hooks/ui/use-throttle.ts
|
|
851
|
-
import { useState as
|
|
615
|
+
import { useState as useState7, useEffect as useEffect9, useRef as useRef5 } from "react";
|
|
852
616
|
function useThrottle(value, limit = 200) {
|
|
853
|
-
const [throttledValue, setThrottledValue] =
|
|
854
|
-
const [mountedAt] =
|
|
855
|
-
const lastUpdated =
|
|
617
|
+
const [throttledValue, setThrottledValue] = useState7(value);
|
|
618
|
+
const [mountedAt] = useState7(() => Date.now());
|
|
619
|
+
const lastUpdated = useRef5(mountedAt);
|
|
856
620
|
useEffect9(() => {
|
|
857
621
|
const now = Date.now();
|
|
858
622
|
const elapsed = now - lastUpdated.current;
|
|
@@ -873,9 +637,9 @@ function useThrottle(value, limit = 200) {
|
|
|
873
637
|
}
|
|
874
638
|
|
|
875
639
|
// src/hooks/ui/use-window-size.ts
|
|
876
|
-
import { useLayoutEffect, useState as
|
|
640
|
+
import { useLayoutEffect, useState as useState8 } from "react";
|
|
877
641
|
function useWindowSize() {
|
|
878
|
-
const [windowSize, setWindowSize] =
|
|
642
|
+
const [windowSize, setWindowSize] = useState8({
|
|
879
643
|
width: 0,
|
|
880
644
|
height: 0
|
|
881
645
|
});
|
|
@@ -896,7 +660,7 @@ function useWindowSize() {
|
|
|
896
660
|
import { usePreventScroll } from "@react-aria/overlays";
|
|
897
661
|
|
|
898
662
|
// src/hooks/ui/use-active-section.ts
|
|
899
|
-
import { useMemo as
|
|
663
|
+
import { useMemo as useMemo2 } from "react";
|
|
900
664
|
function pathOf(href) {
|
|
901
665
|
if (!href || !href.startsWith("/") || href.startsWith("//")) return null;
|
|
902
666
|
const path = href.split(/[?#]/)[0];
|
|
@@ -921,7 +685,7 @@ function resolveActiveSection(menus, pathname) {
|
|
|
921
685
|
return best?.id ?? null;
|
|
922
686
|
}
|
|
923
687
|
function useActiveSection(menus, pathname) {
|
|
924
|
-
return
|
|
688
|
+
return useMemo2(() => resolveActiveSection(menus, pathname), [menus, pathname]);
|
|
925
689
|
}
|
|
926
690
|
|
|
927
691
|
// src/hooks/ui/use-nav-menus.ts
|
|
@@ -929,8 +693,8 @@ import {
|
|
|
929
693
|
useCallback as useCallback8,
|
|
930
694
|
useEffect as useEffect10,
|
|
931
695
|
useId,
|
|
932
|
-
useRef as
|
|
933
|
-
useState as
|
|
696
|
+
useRef as useRef6,
|
|
697
|
+
useState as useState9
|
|
934
698
|
} from "react";
|
|
935
699
|
function useNavMenus({
|
|
936
700
|
pathname,
|
|
@@ -938,15 +702,15 @@ function useNavMenus({
|
|
|
938
702
|
hoverCloseMs = 300
|
|
939
703
|
}) {
|
|
940
704
|
const baseId = useId();
|
|
941
|
-
const [opened, setOpened] =
|
|
705
|
+
const [opened, setOpened] = useState9(null);
|
|
942
706
|
const stale = opened !== null && opened.pathname !== pathname;
|
|
943
707
|
if (stale) setOpened(null);
|
|
944
708
|
const openId = opened && !stale ? opened.id : null;
|
|
945
|
-
const triggers =
|
|
946
|
-
const panels =
|
|
947
|
-
const openTimer =
|
|
948
|
-
const closeTimer =
|
|
949
|
-
const openedByHover =
|
|
709
|
+
const triggers = useRef6(/* @__PURE__ */ new Map());
|
|
710
|
+
const panels = useRef6(/* @__PURE__ */ new Map());
|
|
711
|
+
const openTimer = useRef6(null);
|
|
712
|
+
const closeTimer = useRef6(null);
|
|
713
|
+
const openedByHover = useRef6(null);
|
|
950
714
|
const clearTimers = useCallback8(() => {
|
|
951
715
|
if (openTimer.current) clearTimeout(openTimer.current);
|
|
952
716
|
if (closeTimer.current) clearTimeout(closeTimer.current);
|
|
@@ -1046,145 +810,8 @@ function useNavMenus({
|
|
|
1046
810
|
return { openId, close, getTriggerProps, getPanelProps };
|
|
1047
811
|
}
|
|
1048
812
|
|
|
1049
|
-
// src/hooks/ui/use-visitor-os.ts
|
|
1050
|
-
import { useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
1051
|
-
|
|
1052
|
-
// src/utils/visitor-os.ts
|
|
1053
|
-
var DESKTOP_OSES = ["mac", "windows", "linux"];
|
|
1054
|
-
var HINT_PLATFORMS = {
|
|
1055
|
-
macos: "mac",
|
|
1056
|
-
windows: "windows",
|
|
1057
|
-
linux: "linux",
|
|
1058
|
-
"chrome os": "linux",
|
|
1059
|
-
"chromium os": "linux",
|
|
1060
|
-
android: "android",
|
|
1061
|
-
ios: "ios"
|
|
1062
|
-
};
|
|
1063
|
-
function detectVisitorOs(userAgent, hints = {}) {
|
|
1064
|
-
const touchMac = (os) => os === "mac" && (hints.maxTouchPoints ?? 0) > 1 ? "ios" : os;
|
|
1065
|
-
const hinted = HINT_PLATFORMS[(hints.platform ?? "").replace(/"/g, "").trim().toLowerCase()];
|
|
1066
|
-
if (hinted) return touchMac(hinted);
|
|
1067
|
-
const ua = userAgent ?? "";
|
|
1068
|
-
if (!ua) return null;
|
|
1069
|
-
if (/iPhone|iPad|iPod/i.test(ua)) return "ios";
|
|
1070
|
-
if (/Android/i.test(ua)) return "android";
|
|
1071
|
-
if (/Windows NT|Win64|Win32/i.test(ua)) return "windows";
|
|
1072
|
-
if (/Macintosh|Mac OS X/i.test(ua)) return touchMac("mac");
|
|
1073
|
-
if (/Linux|X11|CrOS/i.test(ua)) return "linux";
|
|
1074
|
-
return null;
|
|
1075
|
-
}
|
|
1076
|
-
function desktopOsOf(os) {
|
|
1077
|
-
return os !== null && DESKTOP_OSES.includes(os) ? os : null;
|
|
1078
|
-
}
|
|
1079
|
-
function detectDesktopOs(userAgent, hints) {
|
|
1080
|
-
return desktopOsOf(detectVisitorOs(userAgent, hints));
|
|
1081
|
-
}
|
|
1082
|
-
function usesCommandKey(os) {
|
|
1083
|
-
return os === "mac" || os === "ios";
|
|
1084
|
-
}
|
|
1085
|
-
function shortcutLabel(os, key) {
|
|
1086
|
-
return usesCommandKey(os) ? `\u2318${key}` : `Ctrl ${key}`;
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
// src/hooks/ui/use-visitor-os.ts
|
|
1090
|
-
var UNKNOWN = { known: false, os: null };
|
|
1091
|
-
var KNOWN = /* @__PURE__ */ new Map();
|
|
1092
|
-
var subscribe2 = () => () => {
|
|
1093
|
-
};
|
|
1094
|
-
var getServerSnapshot = () => UNKNOWN;
|
|
1095
|
-
function getSnapshot() {
|
|
1096
|
-
const stated = navigator.userAgentData?.platform;
|
|
1097
|
-
const os = detectVisitorOs(navigator.userAgent, { platform: stated, maxTouchPoints: navigator.maxTouchPoints });
|
|
1098
|
-
let state = KNOWN.get(os);
|
|
1099
|
-
if (!state) {
|
|
1100
|
-
state = { known: true, os };
|
|
1101
|
-
KNOWN.set(os, state);
|
|
1102
|
-
}
|
|
1103
|
-
return state;
|
|
1104
|
-
}
|
|
1105
|
-
function useVisitorOs() {
|
|
1106
|
-
return useSyncExternalStore2(subscribe2, getSnapshot, getServerSnapshot);
|
|
1107
|
-
}
|
|
1108
|
-
|
|
1109
|
-
// src/hooks/platform/use-platform-config.ts
|
|
1110
|
-
import { useState as useState11, useEffect as useEffect11 } from "react";
|
|
1111
|
-
|
|
1112
|
-
// src/utils/platform-config.tsx
|
|
1113
|
-
import { Globe } from "lucide-react";
|
|
1114
|
-
import { jsx } from "react/jsx-runtime";
|
|
1115
|
-
function renderPlatformIcon(platformName, className) {
|
|
1116
|
-
const tinted = cn(className, getPlatformBrandClasses(platformName).accentText);
|
|
1117
|
-
switch (platformName) {
|
|
1118
|
-
case "openframe":
|
|
1119
|
-
return /* @__PURE__ */ jsx(
|
|
1120
|
-
OpenFrameLogo,
|
|
1121
|
-
{
|
|
1122
|
-
className: tinted,
|
|
1123
|
-
lowerPathColor: "currentColor",
|
|
1124
|
-
upperPathColor: "var(--ods-system-greys-white)"
|
|
1125
|
-
}
|
|
1126
|
-
);
|
|
1127
|
-
case "openmsp":
|
|
1128
|
-
return /* @__PURE__ */ jsx(
|
|
1129
|
-
OpenmspLogo,
|
|
1130
|
-
{
|
|
1131
|
-
className: tinted,
|
|
1132
|
-
backBubbleColor: "currentColor",
|
|
1133
|
-
frontBubbleColor: "var(--ods-system-greys-white)",
|
|
1134
|
-
innerFrontBubbleColor: "var(--ods-system-greys-black)"
|
|
1135
|
-
}
|
|
1136
|
-
);
|
|
1137
|
-
case "tmcg":
|
|
1138
|
-
return /* @__PURE__ */ jsx(MiamiCyberGangLogoFaceOnly, { className });
|
|
1139
|
-
case "mlg":
|
|
1140
|
-
return /* @__PURE__ */ jsx(MlgLogo, { className: tinted, size: 20 });
|
|
1141
|
-
case "universal":
|
|
1142
|
-
return /* @__PURE__ */ jsx(Globe, { className: tinted });
|
|
1143
|
-
default:
|
|
1144
|
-
return /* @__PURE__ */ jsx(FlamingoLogo, { className: tinted, fill: "currentColor" });
|
|
1145
|
-
}
|
|
1146
|
-
}
|
|
1147
|
-
var platformIcons = {
|
|
1148
|
-
openframe: renderPlatformIcon("openframe", "h-5 w-5"),
|
|
1149
|
-
openmsp: renderPlatformIcon("openmsp", "h-5 w-5"),
|
|
1150
|
-
flamingo: renderPlatformIcon("flamingo", "h-5 w-5"),
|
|
1151
|
-
"flamingo-teaser": renderPlatformIcon("flamingo-teaser", "h-5 w-5"),
|
|
1152
|
-
"marketing-hub": renderPlatformIcon("marketing-hub", "h-5 w-5"),
|
|
1153
|
-
"product-hub": renderPlatformIcon("product-hub", "h-5 w-5"),
|
|
1154
|
-
"revenue-hub": renderPlatformIcon("revenue-hub", "h-5 w-5"),
|
|
1155
|
-
"people-hub": renderPlatformIcon("people-hub", "h-5 w-5"),
|
|
1156
|
-
"company-hub": renderPlatformIcon("company-hub", "h-5 w-5"),
|
|
1157
|
-
tmcg: renderPlatformIcon("tmcg", "h-5 w-5"),
|
|
1158
|
-
mlg: renderPlatformIcon("mlg", "h-5 w-5"),
|
|
1159
|
-
universal: renderPlatformIcon("universal", "h-5 w-5")
|
|
1160
|
-
};
|
|
1161
|
-
function transformPlatformConfigsToOptions(platformConfigs) {
|
|
1162
|
-
return platformConfigs.map((platform) => ({
|
|
1163
|
-
id: platform.id,
|
|
1164
|
-
// Database UUID for matching
|
|
1165
|
-
name: platform.name,
|
|
1166
|
-
// Platform name enum
|
|
1167
|
-
displayName: platform.display_name,
|
|
1168
|
-
// Human-readable name
|
|
1169
|
-
description: platform.description,
|
|
1170
|
-
icon: getPlatformIcon(platform.name),
|
|
1171
|
-
color: getPlatformColorClass(platform.name)
|
|
1172
|
-
}));
|
|
1173
|
-
}
|
|
1174
|
-
function getPlatformIcon(platformName) {
|
|
1175
|
-
return platformIcons[platformName] ?? platformIcons.universal;
|
|
1176
|
-
}
|
|
1177
|
-
function getSmallPlatformIcon(platformName) {
|
|
1178
|
-
return renderPlatformIcon(platformName, "h-4 w-4 flex-shrink-0");
|
|
1179
|
-
}
|
|
1180
|
-
function getPlatformIconComponent(platformName, className = "h-6 w-6") {
|
|
1181
|
-
return renderPlatformIcon(platformName, className);
|
|
1182
|
-
}
|
|
1183
|
-
function getPlatformColorClass(platformName) {
|
|
1184
|
-
return getPlatformBrandClasses(platformName).accentBg;
|
|
1185
|
-
}
|
|
1186
|
-
|
|
1187
813
|
// src/hooks/platform/use-platform-config.ts
|
|
814
|
+
import { useState as useState10, useEffect as useEffect11 } from "react";
|
|
1188
815
|
var platformCache = null;
|
|
1189
816
|
var fetchPromise = null;
|
|
1190
817
|
function isRecord(value) {
|
|
@@ -1220,9 +847,9 @@ function toPlatformConfigs(payload) {
|
|
|
1220
847
|
return configs;
|
|
1221
848
|
}
|
|
1222
849
|
function usePlatformConfig() {
|
|
1223
|
-
const [platforms, setPlatforms] =
|
|
1224
|
-
const [isLoading, setIsLoading] =
|
|
1225
|
-
const [error, setError] =
|
|
850
|
+
const [platforms, setPlatforms] = useState10(platformCache || []);
|
|
851
|
+
const [isLoading, setIsLoading] = useState10(!platformCache);
|
|
852
|
+
const [error, setError] = useState10(null);
|
|
1226
853
|
useEffect11(() => {
|
|
1227
854
|
const commit = (data) => {
|
|
1228
855
|
setPlatforms((prev) => prev === data ? prev : data);
|
|
@@ -1291,9 +918,9 @@ function useValidatePlatform(value) {
|
|
|
1291
918
|
import { toast as sonnerToast2 } from "sonner";
|
|
1292
919
|
|
|
1293
920
|
// src/components/ui/toaster.tsx
|
|
1294
|
-
import { useState as
|
|
921
|
+
import { useState as useState11 } from "react";
|
|
1295
922
|
import { Toaster as SonnerToaster, toast as sonnerToast } from "sonner";
|
|
1296
|
-
import { Fragment, jsx
|
|
923
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
1297
924
|
var dotColorByVariant = {
|
|
1298
925
|
default: "bg-ods-text-secondary",
|
|
1299
926
|
success: "bg-ods-success",
|
|
@@ -1319,9 +946,9 @@ function ToastHeader({
|
|
|
1319
946
|
showProgress = true
|
|
1320
947
|
}) {
|
|
1321
948
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative flex w-full items-start gap-2 overflow-hidden bg-ods-card p-3", className), children: [
|
|
1322
|
-
/* @__PURE__ */
|
|
949
|
+
/* @__PURE__ */ jsx("div", { className: "flex size-6 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: cn("size-[9px] rounded-full", dotColorByVariant[variant]) }) }),
|
|
1323
950
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col justify-center", children: [
|
|
1324
|
-
title ? /* @__PURE__ */
|
|
951
|
+
title ? /* @__PURE__ */ jsx(
|
|
1325
952
|
"p",
|
|
1326
953
|
{
|
|
1327
954
|
className: "truncate pr-5 text-ods-text-primary text-h4",
|
|
@@ -1329,7 +956,7 @@ function ToastHeader({
|
|
|
1329
956
|
children: title
|
|
1330
957
|
}
|
|
1331
958
|
) : null,
|
|
1332
|
-
description ? /* @__PURE__ */
|
|
959
|
+
description ? /* @__PURE__ */ jsx(
|
|
1333
960
|
"p",
|
|
1334
961
|
{
|
|
1335
962
|
className: "line-clamp-3 text-ods-text-secondary text-h6",
|
|
@@ -1338,17 +965,17 @@ function ToastHeader({
|
|
|
1338
965
|
}
|
|
1339
966
|
) : null
|
|
1340
967
|
] }),
|
|
1341
|
-
dismissible ? /* @__PURE__ */
|
|
968
|
+
dismissible ? /* @__PURE__ */ jsx(
|
|
1342
969
|
"button",
|
|
1343
970
|
{
|
|
1344
971
|
type: "button",
|
|
1345
972
|
"aria-label": "Close",
|
|
1346
973
|
onClick: () => sonnerToast.dismiss(id),
|
|
1347
974
|
className: "absolute right-[7px] top-[7px] flex size-4 items-center justify-center text-ods-text-secondary transition-colors hover:text-ods-text-primary",
|
|
1348
|
-
children: /* @__PURE__ */
|
|
975
|
+
children: /* @__PURE__ */ jsx(XmarkIcon, { size: 16 })
|
|
1349
976
|
}
|
|
1350
977
|
) : null,
|
|
1351
|
-
showProgress && duration !== Infinity && duration > 0 ? /* @__PURE__ */
|
|
978
|
+
showProgress && duration !== Infinity && duration > 0 ? /* @__PURE__ */ jsx(
|
|
1352
979
|
"div",
|
|
1353
980
|
{
|
|
1354
981
|
className: cn("absolute inset-x-0 bottom-0 h-1 origin-left", progressColorByVariant[variant]),
|
|
@@ -1368,7 +995,7 @@ function ToastCard({
|
|
|
1368
995
|
dismissible = true,
|
|
1369
996
|
className
|
|
1370
997
|
}) {
|
|
1371
|
-
return /* @__PURE__ */
|
|
998
|
+
return /* @__PURE__ */ jsx(
|
|
1372
999
|
"div",
|
|
1373
1000
|
{
|
|
1374
1001
|
role: "status",
|
|
@@ -1376,7 +1003,7 @@ function ToastCard({
|
|
|
1376
1003
|
"w-[368px] max-w-[calc(100vw-32px)] overflow-hidden rounded-md border border-ods-border bg-ods-card shadow-lg",
|
|
1377
1004
|
className
|
|
1378
1005
|
),
|
|
1379
|
-
children: /* @__PURE__ */
|
|
1006
|
+
children: /* @__PURE__ */ jsx(
|
|
1380
1007
|
ToastHeader,
|
|
1381
1008
|
{
|
|
1382
1009
|
id,
|
|
@@ -1407,7 +1034,7 @@ function CommandApprovalToast({
|
|
|
1407
1034
|
defaultExpanded = false,
|
|
1408
1035
|
className
|
|
1409
1036
|
}) {
|
|
1410
|
-
const [expanded, setExpanded] =
|
|
1037
|
+
const [expanded, setExpanded] = useState11(defaultExpanded);
|
|
1411
1038
|
const handleApprove = () => {
|
|
1412
1039
|
onApprove?.();
|
|
1413
1040
|
sonnerToast.dismiss(id);
|
|
@@ -1425,7 +1052,7 @@ function CommandApprovalToast({
|
|
|
1425
1052
|
className
|
|
1426
1053
|
),
|
|
1427
1054
|
children: [
|
|
1428
|
-
/* @__PURE__ */
|
|
1055
|
+
/* @__PURE__ */ jsx(
|
|
1429
1056
|
ToastHeader,
|
|
1430
1057
|
{
|
|
1431
1058
|
id,
|
|
@@ -1438,7 +1065,7 @@ function CommandApprovalToast({
|
|
|
1438
1065
|
className: "border-b border-ods-border"
|
|
1439
1066
|
}
|
|
1440
1067
|
),
|
|
1441
|
-
/* @__PURE__ */
|
|
1068
|
+
/* @__PURE__ */ jsx(
|
|
1442
1069
|
"div",
|
|
1443
1070
|
{
|
|
1444
1071
|
className: "grid transition-[grid-template-rows] duration-300 ease-out",
|
|
@@ -1446,13 +1073,13 @@ function CommandApprovalToast({
|
|
|
1446
1073
|
"aria-hidden": !expanded,
|
|
1447
1074
|
children: /* @__PURE__ */ jsxs("div", { className: "overflow-hidden", children: [
|
|
1448
1075
|
/* @__PURE__ */ jsxs("div", { className: "flex h-11 w-full items-center gap-2 border-b border-ods-border bg-ods-card px-3 py-2", children: [
|
|
1449
|
-
/* @__PURE__ */
|
|
1450
|
-
toolType ? /* @__PURE__ */
|
|
1076
|
+
/* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-ods-text-primary text-h6", title: command, children: command }),
|
|
1077
|
+
toolType ? /* @__PURE__ */ jsx(ToolIcon, { toolType, size: 16 }) : null
|
|
1451
1078
|
] }),
|
|
1452
1079
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 bg-ods-bg p-3", children: [
|
|
1453
|
-
approvalDescription ? /* @__PURE__ */
|
|
1080
|
+
approvalDescription ? /* @__PURE__ */ jsx("p", { className: "text-ods-text-secondary text-h6", children: approvalDescription }) : null,
|
|
1454
1081
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
1455
|
-
/* @__PURE__ */
|
|
1082
|
+
/* @__PURE__ */ jsx(
|
|
1456
1083
|
"button",
|
|
1457
1084
|
{
|
|
1458
1085
|
type: "button",
|
|
@@ -1462,7 +1089,7 @@ function CommandApprovalToast({
|
|
|
1462
1089
|
children: approveLabel
|
|
1463
1090
|
}
|
|
1464
1091
|
),
|
|
1465
|
-
/* @__PURE__ */
|
|
1092
|
+
/* @__PURE__ */ jsx(
|
|
1466
1093
|
"button",
|
|
1467
1094
|
{
|
|
1468
1095
|
type: "button",
|
|
@@ -1485,8 +1112,8 @@ function CommandApprovalToast({
|
|
|
1485
1112
|
className: "flex w-full items-center gap-2 bg-ods-card px-3 py-2 text-left text-ods-text-primary transition-colors text-h6 hover:bg-ods-bg-hover",
|
|
1486
1113
|
"aria-expanded": false,
|
|
1487
1114
|
children: [
|
|
1488
|
-
/* @__PURE__ */
|
|
1489
|
-
/* @__PURE__ */
|
|
1115
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: "Show Command" }),
|
|
1116
|
+
/* @__PURE__ */ jsx(Chevron02DownIcon, { size: 16 })
|
|
1490
1117
|
]
|
|
1491
1118
|
}
|
|
1492
1119
|
)
|
|
@@ -1497,13 +1124,13 @@ function CommandApprovalToast({
|
|
|
1497
1124
|
function Toaster({ position = "bottom-right", offset = 24, gap = 8, toastOptions, ...rest } = {}) {
|
|
1498
1125
|
const { classNames: userClassNames, ...restToastOptions } = toastOptions ?? {};
|
|
1499
1126
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1500
|
-
/* @__PURE__ */
|
|
1127
|
+
/* @__PURE__ */ jsx("style", { children: `
|
|
1501
1128
|
@keyframes toast-progress {
|
|
1502
1129
|
from { transform: scaleX(1); }
|
|
1503
1130
|
to { transform: scaleX(0); }
|
|
1504
1131
|
}
|
|
1505
1132
|
` }),
|
|
1506
|
-
/* @__PURE__ */
|
|
1133
|
+
/* @__PURE__ */ jsx(
|
|
1507
1134
|
SonnerToaster,
|
|
1508
1135
|
{
|
|
1509
1136
|
position,
|
|
@@ -1526,7 +1153,7 @@ function showToast(options) {
|
|
|
1526
1153
|
const opts = typeof options === "string" ? { title: options } : options;
|
|
1527
1154
|
const { title, description, variant = "default", duration = 4e3, dismissible = true, ...rest } = opts;
|
|
1528
1155
|
return sonnerToast.custom(
|
|
1529
|
-
(id) => /* @__PURE__ */
|
|
1156
|
+
(id) => /* @__PURE__ */ jsx(
|
|
1530
1157
|
ToastCard,
|
|
1531
1158
|
{
|
|
1532
1159
|
id,
|
|
@@ -1558,7 +1185,7 @@ function showCommandApprovalToast(options) {
|
|
|
1558
1185
|
...rest
|
|
1559
1186
|
} = options;
|
|
1560
1187
|
return sonnerToast.custom(
|
|
1561
|
-
(id) => /* @__PURE__ */
|
|
1188
|
+
(id) => /* @__PURE__ */ jsx(
|
|
1562
1189
|
CommandApprovalToast,
|
|
1563
1190
|
{
|
|
1564
1191
|
id,
|
|
@@ -1607,14 +1234,14 @@ var useToast = () => ({
|
|
|
1607
1234
|
});
|
|
1608
1235
|
|
|
1609
1236
|
// src/hooks/use-contact-submission.ts
|
|
1610
|
-
import { useState as
|
|
1237
|
+
import { useState as useState12, useCallback as useCallback9, useEffect as useEffect12 } from "react";
|
|
1611
1238
|
function useContactSubmission(options = {}) {
|
|
1612
1239
|
const { userId, successRedirectUrl, successToastMessage, onSuccess } = options;
|
|
1613
1240
|
const { toast: toast2 } = useToast();
|
|
1614
1241
|
const router = useRouter();
|
|
1615
1242
|
const { contactUrl } = useRequiredEndpointsRuntime();
|
|
1616
|
-
const [isSubmitting, setIsSubmitting] =
|
|
1617
|
-
const [isSuccess, setIsSuccess] =
|
|
1243
|
+
const [isSubmitting, setIsSubmitting] = useState12(false);
|
|
1244
|
+
const [isSuccess, setIsSuccess] = useState12(false);
|
|
1618
1245
|
const submit = useCallback9(
|
|
1619
1246
|
async (formData) => {
|
|
1620
1247
|
if (isSubmitting) return;
|
|
@@ -1675,7 +1302,7 @@ function useContactSubmission(options = {}) {
|
|
|
1675
1302
|
}
|
|
1676
1303
|
|
|
1677
1304
|
// src/hooks/use-copy-to-clipboard.ts
|
|
1678
|
-
import { useCallback as useCallback10, useState as
|
|
1305
|
+
import { useCallback as useCallback10, useState as useState13 } from "react";
|
|
1679
1306
|
function useCopyToClipboard({
|
|
1680
1307
|
successTitle = "Copied",
|
|
1681
1308
|
successDescription = "Copied to clipboard",
|
|
@@ -1684,7 +1311,7 @@ function useCopyToClipboard({
|
|
|
1684
1311
|
resetDelay = 2e3
|
|
1685
1312
|
} = {}) {
|
|
1686
1313
|
const { toast: toast2 } = useToast();
|
|
1687
|
-
const [copied, setCopied] =
|
|
1314
|
+
const [copied, setCopied] = useState13(false);
|
|
1688
1315
|
const copy = useCallback10(
|
|
1689
1316
|
async (text) => {
|
|
1690
1317
|
try {
|
|
@@ -1702,7 +1329,7 @@ function useCopyToClipboard({
|
|
|
1702
1329
|
}
|
|
1703
1330
|
|
|
1704
1331
|
// src/hooks/use-batch-images.ts
|
|
1705
|
-
import { useEffect as useEffect13, useMemo as
|
|
1332
|
+
import { useEffect as useEffect13, useMemo as useMemo3, useState as useState14, useRef as useRef7 } from "react";
|
|
1706
1333
|
var globalBatchImageConfig = {};
|
|
1707
1334
|
function configureBatchImageFetch(config) {
|
|
1708
1335
|
globalBatchImageConfig = { ...globalBatchImageConfig, ...config };
|
|
@@ -1775,13 +1402,13 @@ async function batchFetchAuthenticatedImages(imageUrls, config) {
|
|
|
1775
1402
|
return results;
|
|
1776
1403
|
}
|
|
1777
1404
|
function useBatchImages(imageUrls, config) {
|
|
1778
|
-
const [fetchedImages, setFetchedImages] =
|
|
1779
|
-
const uniqueUrls =
|
|
1405
|
+
const [fetchedImages, setFetchedImages] = useState14({});
|
|
1406
|
+
const uniqueUrls = useMemo3(
|
|
1780
1407
|
() => Array.from(new Set(imageUrls.filter((url) => Boolean(url)))),
|
|
1781
1408
|
[imageUrls]
|
|
1782
1409
|
);
|
|
1783
|
-
const requestedUrls =
|
|
1784
|
-
const fetchedImagesRef =
|
|
1410
|
+
const requestedUrls = useRef7(/* @__PURE__ */ new Set());
|
|
1411
|
+
const fetchedImagesRef = useRef7(fetchedImages);
|
|
1785
1412
|
useEffect13(() => {
|
|
1786
1413
|
fetchedImagesRef.current = fetchedImages;
|
|
1787
1414
|
}, [fetchedImages]);
|
|
@@ -1813,7 +1440,7 @@ function useBatchImages(imageUrls, config) {
|
|
|
1813
1440
|
}
|
|
1814
1441
|
|
|
1815
1442
|
// src/hooks/use-authenticated-image.ts
|
|
1816
|
-
import { useEffect as useEffect14, useState as
|
|
1443
|
+
import { useEffect as useEffect14, useState as useState15, useRef as useRef8 } from "react";
|
|
1817
1444
|
var globalImageConfig = {};
|
|
1818
1445
|
var imageCache = /* @__PURE__ */ new Map();
|
|
1819
1446
|
var pendingRequests = /* @__PURE__ */ new Map();
|
|
@@ -1842,8 +1469,8 @@ function getImageConfig() {
|
|
|
1842
1469
|
};
|
|
1843
1470
|
}
|
|
1844
1471
|
function useAuthenticatedImage(imageUrl, refreshKey, config) {
|
|
1845
|
-
const [settled, setSettled] =
|
|
1846
|
-
const currentCacheKeyRef =
|
|
1472
|
+
const [settled, setSettled] = useState15(null);
|
|
1473
|
+
const currentCacheKeyRef = useRef8(null);
|
|
1847
1474
|
const { tenantHostUrl, enableDevMode, accessTokenKey } = {
|
|
1848
1475
|
...getImageConfig(),
|
|
1849
1476
|
...config
|
|
@@ -1959,7 +1586,7 @@ function useAuthenticatedImage(imageUrl, refreshKey, config) {
|
|
|
1959
1586
|
}
|
|
1960
1587
|
|
|
1961
1588
|
// src/hooks/state/use-query-params.ts
|
|
1962
|
-
import { useEffect as useEffect15, useState as
|
|
1589
|
+
import { useEffect as useEffect15, useState as useState16, useMemo as useMemo4, useCallback as useCallback11, useRef as useRef9 } from "react";
|
|
1963
1590
|
|
|
1964
1591
|
// src/hooks/state/flatten-schema.ts
|
|
1965
1592
|
function flattenQueryVariables(queryVariables, introspector2) {
|
|
@@ -2410,14 +2037,14 @@ function validateVariables(variables, schema) {
|
|
|
2410
2037
|
function useQueryParams(query, options = {}) {
|
|
2411
2038
|
const router = useRouter();
|
|
2412
2039
|
const searchParams = useSearchParams();
|
|
2413
|
-
const [isLoading, setIsLoading] =
|
|
2414
|
-
const [isReady, setIsReady] =
|
|
2415
|
-
const [error, setError] =
|
|
2416
|
-
const [schema, setSchema] =
|
|
2417
|
-
const defaultValues =
|
|
2040
|
+
const [isLoading, setIsLoading] = useState16(true);
|
|
2041
|
+
const [isReady, setIsReady] = useState16(false);
|
|
2042
|
+
const [error, setError] = useState16(null);
|
|
2043
|
+
const [schema, setSchema] = useState16({});
|
|
2044
|
+
const defaultValues = useMemo4(() => options.defaultValues || {}, [options.defaultValues]);
|
|
2418
2045
|
const skipIntrospection = options.skipIntrospection || false;
|
|
2419
2046
|
const debug = options.debug || false;
|
|
2420
|
-
const initSourceRef =
|
|
2047
|
+
const initSourceRef = useRef9({
|
|
2421
2048
|
introspectionHeaders: options.introspectionHeaders,
|
|
2422
2049
|
paramMapping: options.paramMapping,
|
|
2423
2050
|
defaultValues
|
|
@@ -2476,7 +2103,7 @@ function useQueryParams(query, options = {}) {
|
|
|
2476
2103
|
cancelled = true;
|
|
2477
2104
|
};
|
|
2478
2105
|
}, [query, options.introspectionEndpoint, skipIntrospection, debug]);
|
|
2479
|
-
const variables =
|
|
2106
|
+
const variables = useMemo4(() => {
|
|
2480
2107
|
if (!isReady) {
|
|
2481
2108
|
return defaultValues;
|
|
2482
2109
|
}
|
|
@@ -2492,7 +2119,7 @@ function useQueryParams(query, options = {}) {
|
|
|
2492
2119
|
return defaultValues;
|
|
2493
2120
|
}
|
|
2494
2121
|
}, [searchParams, schema, isReady, defaultValues, debug]);
|
|
2495
|
-
const params =
|
|
2122
|
+
const params = useMemo4(() => {
|
|
2496
2123
|
const result = {};
|
|
2497
2124
|
searchParams.forEach((value, key) => {
|
|
2498
2125
|
const existing = result[key];
|
|
@@ -2599,9 +2226,9 @@ function applyParamMapping(schema, mapping) {
|
|
|
2599
2226
|
}
|
|
2600
2227
|
|
|
2601
2228
|
// src/hooks/state/use-api-params.ts
|
|
2602
|
-
import { useCallback as useCallback12, useEffect as useEffect16, useMemo as
|
|
2229
|
+
import { useCallback as useCallback12, useEffect as useEffect16, useMemo as useMemo5, useRef as useRef10, useState as useState17 } from "react";
|
|
2603
2230
|
function useContentStable(value, key) {
|
|
2604
|
-
const [cached, setCached] =
|
|
2231
|
+
const [cached, setCached] = useState17({ value, key });
|
|
2605
2232
|
if (cached.key !== key) setCached({ value, key });
|
|
2606
2233
|
return cached.key === key ? cached.value : value;
|
|
2607
2234
|
}
|
|
@@ -2628,14 +2255,14 @@ function useApiParams(schema, options = {}) {
|
|
|
2628
2255
|
const searchParamsLive = useSearchParams();
|
|
2629
2256
|
const debug = options.debug || false;
|
|
2630
2257
|
const searchString = searchParamsLive.toString();
|
|
2631
|
-
const pendingRef =
|
|
2632
|
-
const [pendingTail, setPendingTail] =
|
|
2258
|
+
const pendingRef = useRef10([]);
|
|
2259
|
+
const [pendingTail, setPendingTail] = useState17(void 0);
|
|
2633
2260
|
const syncPendingTail = useCallback12(() => {
|
|
2634
2261
|
setPendingTail(pendingRef.current[pendingRef.current.length - 1]);
|
|
2635
2262
|
}, []);
|
|
2636
|
-
const schemaKey =
|
|
2263
|
+
const schemaKey = useMemo5(() => JSON.stringify(schema), [schema]);
|
|
2637
2264
|
const stableSchema = useContentStable(schema, schemaKey);
|
|
2638
|
-
const flattenedSchema =
|
|
2265
|
+
const flattenedSchema = useMemo5(() => {
|
|
2639
2266
|
const flattened = {};
|
|
2640
2267
|
for (const [key, config] of Object.entries(stableSchema)) {
|
|
2641
2268
|
flattened[key] = {
|
|
@@ -2649,7 +2276,7 @@ function useApiParams(schema, options = {}) {
|
|
|
2649
2276
|
}
|
|
2650
2277
|
return flattened;
|
|
2651
2278
|
}, [stableSchema]);
|
|
2652
|
-
const rawParams =
|
|
2279
|
+
const rawParams = useMemo5(() => {
|
|
2653
2280
|
const result = parseSchemaParams(stableSchema, new URLSearchParams(searchString), {
|
|
2654
2281
|
absent: options.absent === "null" ? "null" : "undefined"
|
|
2655
2282
|
});
|
|
@@ -2658,7 +2285,7 @@ function useApiParams(schema, options = {}) {
|
|
|
2658
2285
|
}
|
|
2659
2286
|
return result;
|
|
2660
2287
|
}, [searchString, debug, stableSchema, options.absent]);
|
|
2661
|
-
const [paramsCache, setParamsCache] =
|
|
2288
|
+
const [paramsCache, setParamsCache] = useState17(() => ({ src: rawParams, value: rawParams }));
|
|
2662
2289
|
let stableParams = paramsCache.value;
|
|
2663
2290
|
if (paramsCache.src !== rawParams) {
|
|
2664
2291
|
stableParams = reuseArrayRefs(paramsCache.value, rawParams);
|
|
@@ -2668,7 +2295,7 @@ function useApiParams(schema, options = {}) {
|
|
|
2668
2295
|
const addParamToSearchParams = useCallback12((searchParams, key, value) => {
|
|
2669
2296
|
for (const [k, v] of createSearchParams({ [key]: value })) searchParams.append(k, v);
|
|
2670
2297
|
}, []);
|
|
2671
|
-
const urlSearchParams =
|
|
2298
|
+
const urlSearchParams = useMemo5(() => {
|
|
2672
2299
|
const newParams = new URLSearchParams();
|
|
2673
2300
|
for (const key of Object.keys(stableSchema)) {
|
|
2674
2301
|
const value = params[key];
|
|
@@ -2772,7 +2399,7 @@ function useApiParams(schema, options = {}) {
|
|
|
2772
2399
|
}
|
|
2773
2400
|
router.replace(window.location.pathname, { scroll: false });
|
|
2774
2401
|
}, [router, debug]);
|
|
2775
|
-
const pendingParams =
|
|
2402
|
+
const pendingParams = useMemo5(() => {
|
|
2776
2403
|
if (pendingTail === void 0 || pendingTail === searchString) return params;
|
|
2777
2404
|
return parseSchemaParams(stableSchema, new URLSearchParams(pendingTail), {
|
|
2778
2405
|
absent: options.absent === "null" ? "null" : "undefined"
|
|
@@ -2790,7 +2417,7 @@ function useApiParams(schema, options = {}) {
|
|
|
2790
2417
|
}
|
|
2791
2418
|
|
|
2792
2419
|
// src/hooks/state/use-cursor-pagination-state.ts
|
|
2793
|
-
import { useCallback as useCallback13, useEffect as useEffect17, useRef as
|
|
2420
|
+
import { useCallback as useCallback13, useEffect as useEffect17, useRef as useRef11, useState as useState18 } from "react";
|
|
2794
2421
|
var urlSchema = {
|
|
2795
2422
|
search: { type: "string", default: "" },
|
|
2796
2423
|
cursor: { type: "string", default: "" }
|
|
@@ -2798,15 +2425,15 @@ var urlSchema = {
|
|
|
2798
2425
|
function useCursorPaginationState(options) {
|
|
2799
2426
|
const { onInitialLoad, onSearchChange } = options;
|
|
2800
2427
|
const { params, setParam, setParams } = useApiParams(urlSchema);
|
|
2801
|
-
const [searchInput, setSearchInput] =
|
|
2802
|
-
const [hasLoadedBeyondFirst, setHasLoadedBeyondFirst] =
|
|
2803
|
-
const [initialLoadCount, setInitialLoadCount] =
|
|
2804
|
-
const lastSearchRef =
|
|
2805
|
-
const isSyncingFromUrl =
|
|
2806
|
-
const isInitialLoadInProgress =
|
|
2807
|
-
const searchInputRef =
|
|
2808
|
-
const onInitialLoadRef =
|
|
2809
|
-
const paramsRef =
|
|
2428
|
+
const [searchInput, setSearchInput] = useState18(params.search || "");
|
|
2429
|
+
const [hasLoadedBeyondFirst, setHasLoadedBeyondFirst] = useState18(false);
|
|
2430
|
+
const [initialLoadCount, setInitialLoadCount] = useState18(0);
|
|
2431
|
+
const lastSearchRef = useRef11(null);
|
|
2432
|
+
const isSyncingFromUrl = useRef11(false);
|
|
2433
|
+
const isInitialLoadInProgress = useRef11(true);
|
|
2434
|
+
const searchInputRef = useRef11(searchInput);
|
|
2435
|
+
const onInitialLoadRef = useRef11(onInitialLoad);
|
|
2436
|
+
const paramsRef = useRef11(params);
|
|
2810
2437
|
useEffect17(() => {
|
|
2811
2438
|
searchInputRef.current = searchInput;
|
|
2812
2439
|
onInitialLoadRef.current = onInitialLoad;
|
|
@@ -2892,16 +2519,16 @@ function useCursorPaginationState(options) {
|
|
|
2892
2519
|
}
|
|
2893
2520
|
|
|
2894
2521
|
// src/hooks/nats/use-nats-client.ts
|
|
2895
|
-
import { useEffect as useEffect18, useMemo as
|
|
2522
|
+
import { useEffect as useEffect18, useMemo as useMemo6, useState as useState19 } from "react";
|
|
2896
2523
|
function useNatsClient(clientOptions, options = {}) {
|
|
2897
2524
|
const { autoConnect = true } = options;
|
|
2898
|
-
const client =
|
|
2525
|
+
const client = useMemo6(() => {
|
|
2899
2526
|
if (!clientOptions) return null;
|
|
2900
2527
|
return createNatsClient(clientOptions);
|
|
2901
2528
|
}, [clientOptions]);
|
|
2902
|
-
const [status, setStatus] =
|
|
2903
|
-
const [lastError, setLastError] =
|
|
2904
|
-
const [statusClient, setStatusClient] =
|
|
2529
|
+
const [status, setStatus] = useState19("disconnected");
|
|
2530
|
+
const [lastError, setLastError] = useState19(null);
|
|
2531
|
+
const [statusClient, setStatusClient] = useState19(client);
|
|
2905
2532
|
if (statusClient !== client) {
|
|
2906
2533
|
setStatusClient(client);
|
|
2907
2534
|
setStatus("disconnected");
|
|
@@ -2934,7 +2561,7 @@ function useNatsClient(clientOptions, options = {}) {
|
|
|
2934
2561
|
}
|
|
2935
2562
|
|
|
2936
2563
|
// src/hooks/use-scenario-player.ts
|
|
2937
|
-
import { useCallback as useCallback14, useEffect as useEffect19, useRef as
|
|
2564
|
+
import { useCallback as useCallback14, useEffect as useEffect19, useRef as useRef12, useState as useState20 } from "react";
|
|
2938
2565
|
var START_MS = 300;
|
|
2939
2566
|
function useScenarioPlayer({
|
|
2940
2567
|
scenarioCount,
|
|
@@ -2947,13 +2574,13 @@ function useScenarioPlayer({
|
|
|
2947
2574
|
}) {
|
|
2948
2575
|
const auto = useAutoplay(enabled);
|
|
2949
2576
|
const { reducedMotion, paused, setPaused } = auto;
|
|
2950
|
-
const [scenario, setScenario] =
|
|
2951
|
-
const [rawStep, setRawStep] =
|
|
2577
|
+
const [scenario, setScenario] = useState20(initialScenario);
|
|
2578
|
+
const [rawStep, setRawStep] = useState20(startAtEnd ? Number.MAX_SAFE_INTEGER : 0);
|
|
2952
2579
|
const lastStep = typeof lastStepOption === "function" ? lastStepOption(scenario) : lastStepOption;
|
|
2953
2580
|
const step = reducedMotion ? lastStep : Math.min(rawStep, lastStep);
|
|
2954
2581
|
const playing = auto.playing && scenarioCount > 0;
|
|
2955
|
-
const starting =
|
|
2956
|
-
const wasPlaying =
|
|
2582
|
+
const starting = useRef12(false);
|
|
2583
|
+
const wasPlaying = useRef12(false);
|
|
2957
2584
|
useEffect19(() => {
|
|
2958
2585
|
if (playing && !wasPlaying.current) starting.current = true;
|
|
2959
2586
|
wasPlaying.current = playing;
|
|
@@ -2994,65 +2621,6 @@ function useScenarioPlayer({
|
|
|
2994
2621
|
|
|
2995
2622
|
// src/hooks/use-access-code-integration.ts
|
|
2996
2623
|
import React from "react";
|
|
2997
|
-
|
|
2998
|
-
// src/utils/access-code-client.ts
|
|
2999
|
-
async function validateAccessCode(email, code, endpoints) {
|
|
3000
|
-
try {
|
|
3001
|
-
const response = await fetch(endpoints.validateUrl, {
|
|
3002
|
-
method: "POST",
|
|
3003
|
-
headers: {
|
|
3004
|
-
"Content-Type": "application/json"
|
|
3005
|
-
},
|
|
3006
|
-
body: JSON.stringify({ email, code })
|
|
3007
|
-
});
|
|
3008
|
-
if (!response.ok) {
|
|
3009
|
-
const failure = await response.json().catch(() => null);
|
|
3010
|
-
throw new Error(apiErrorMessage(failure, "Validation request failed"));
|
|
3011
|
-
}
|
|
3012
|
-
return await response.json();
|
|
3013
|
-
} catch (error) {
|
|
3014
|
-
return {
|
|
3015
|
-
valid: false,
|
|
3016
|
-
message: error instanceof Error ? error.message : "Validation failed"
|
|
3017
|
-
};
|
|
3018
|
-
}
|
|
3019
|
-
}
|
|
3020
|
-
async function consumeAccessCode(email, code, endpoints) {
|
|
3021
|
-
try {
|
|
3022
|
-
const response = await fetch(endpoints.consumeUrl, {
|
|
3023
|
-
method: "POST",
|
|
3024
|
-
headers: {
|
|
3025
|
-
"Content-Type": "application/json"
|
|
3026
|
-
},
|
|
3027
|
-
body: JSON.stringify({ email, code })
|
|
3028
|
-
});
|
|
3029
|
-
if (!response.ok) {
|
|
3030
|
-
const failure = await response.json().catch(() => null);
|
|
3031
|
-
throw new Error(apiErrorMessage(failure, "Consumption request failed"));
|
|
3032
|
-
}
|
|
3033
|
-
return await response.json();
|
|
3034
|
-
} catch (error) {
|
|
3035
|
-
return {
|
|
3036
|
-
success: false,
|
|
3037
|
-
consumed: false,
|
|
3038
|
-
message: error instanceof Error ? error.message : "Consumption failed"
|
|
3039
|
-
};
|
|
3040
|
-
}
|
|
3041
|
-
}
|
|
3042
|
-
async function validateAndConsumeAccessCode(email, code, endpoints) {
|
|
3043
|
-
const validation = await validateAccessCode(email, code, endpoints);
|
|
3044
|
-
if (!validation.valid) {
|
|
3045
|
-
return validation;
|
|
3046
|
-
}
|
|
3047
|
-
const consumption = await consumeAccessCode(email, code, endpoints);
|
|
3048
|
-
return {
|
|
3049
|
-
...validation,
|
|
3050
|
-
consumed: consumption.consumed,
|
|
3051
|
-
message: consumption.consumed ? `Access granted for ${validation.cohort_name}` : consumption.message || validation.message
|
|
3052
|
-
};
|
|
3053
|
-
}
|
|
3054
|
-
|
|
3055
|
-
// src/hooks/use-access-code-integration.ts
|
|
3056
2624
|
function useAccessCodeIntegration() {
|
|
3057
2625
|
const runtime = useRequiredEndpointsRuntime();
|
|
3058
2626
|
const endpoints = runtime.accessCode;
|
|
@@ -3095,83 +2663,7 @@ function useAccessCodeIntegration() {
|
|
|
3095
2663
|
}
|
|
3096
2664
|
|
|
3097
2665
|
// src/hooks/use-claude-mirror-src.ts
|
|
3098
|
-
import { useEffect as useEffect20, useState as
|
|
3099
|
-
|
|
3100
|
-
// src/utils/embed-url-converters.ts
|
|
3101
|
-
function toGoogleSheetsEmbedUrl(url) {
|
|
3102
|
-
if (url.includes("/htmlembed")) return url;
|
|
3103
|
-
const match = url.match(/\/spreadsheets\/d\/([a-zA-Z0-9-_]+)/);
|
|
3104
|
-
if (!match) return url;
|
|
3105
|
-
const gidMatch = url.match(/[#?&]gid=(\d+)/);
|
|
3106
|
-
const gid = gidMatch ? gidMatch[1] : "0";
|
|
3107
|
-
return `https://docs.google.com/spreadsheets/d/${match[1]}/htmlembed?widget=true&chrome=false&headers=false&gid=${gid}`;
|
|
3108
|
-
}
|
|
3109
|
-
function toGoogleSheetsOriginalUrl(url) {
|
|
3110
|
-
const match = url.match(/\/spreadsheets\/d\/([a-zA-Z0-9-_]+)/);
|
|
3111
|
-
if (!match) return url;
|
|
3112
|
-
const gidMatch = url.match(/[#?&]gid=(\d+)/);
|
|
3113
|
-
const gid = gidMatch ? gidMatch[1] : "0";
|
|
3114
|
-
return `https://docs.google.com/spreadsheets/d/${match[1]}/edit#gid=${gid}`;
|
|
3115
|
-
}
|
|
3116
|
-
function toFigmaEmbedUrl(url, opts) {
|
|
3117
|
-
if (url.includes("embed.figma.com")) return url;
|
|
3118
|
-
if (url.includes("figma.com/embed")) return url;
|
|
3119
|
-
const match = url.match(/figma\.com\/(design|file|proto|board|slides|deck)\/([a-zA-Z0-9]+)(?:\/([^?]*))?(\?.*)?$/);
|
|
3120
|
-
if (match) {
|
|
3121
|
-
const [, urlType, fileKey, titleSlug, queryString] = match;
|
|
3122
|
-
const isSlides = urlType === "slides" || urlType === "deck";
|
|
3123
|
-
const embedType = urlType === "proto" ? "proto" : isSlides ? opts?.slidesView === "browse" ? "slides" : "deck" : "design";
|
|
3124
|
-
const pathSuffix = titleSlug ? `/${titleSlug}` : "";
|
|
3125
|
-
const params = new URLSearchParams(queryString?.replace(/^\?/, "") || "");
|
|
3126
|
-
if (!params.has("embed-host")) {
|
|
3127
|
-
params.set("embed-host", "flamingo");
|
|
3128
|
-
}
|
|
3129
|
-
const clientId = process.env.NEXT_PUBLIC_FIGMA_CLIENT_ID;
|
|
3130
|
-
if (clientId && !params.has("client-id")) {
|
|
3131
|
-
params.set("client-id", clientId);
|
|
3132
|
-
}
|
|
3133
|
-
return `https://embed.figma.com/${embedType}/${fileKey}${pathSuffix}?${params.toString()}`;
|
|
3134
|
-
}
|
|
3135
|
-
return `https://www.figma.com/embed?embed-host=flamingo&url=${encodeURIComponent(url)}`;
|
|
3136
|
-
}
|
|
3137
|
-
function isFigmaSlidesUrl(url) {
|
|
3138
|
-
if (!url) return false;
|
|
3139
|
-
return /(?:www\.|embed\.)?figma\.com\/(?:slides|deck)\/[a-zA-Z0-9]+/.test(url);
|
|
3140
|
-
}
|
|
3141
|
-
function toFigmaOriginalUrl(url) {
|
|
3142
|
-
if (url.includes("embed.figma.com")) {
|
|
3143
|
-
return url.replace("embed.figma.com", "www.figma.com").replace(/\?.*$/, "");
|
|
3144
|
-
}
|
|
3145
|
-
return url.replace(/\?.*$/, "");
|
|
3146
|
-
}
|
|
3147
|
-
function toClaudeMirrorPath(url, storageViewBaseUrl) {
|
|
3148
|
-
if (!url || !storageViewBaseUrl) return null;
|
|
3149
|
-
try {
|
|
3150
|
-
const u = new URL(url);
|
|
3151
|
-
const host = u.hostname.toLowerCase();
|
|
3152
|
-
const id = host === "claude.ai" && /^\/(?:code\/artifact|public\/artifacts)\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i.exec(
|
|
3153
|
-
u.pathname
|
|
3154
|
-
)?.[1] || host === "claude.site" && /^\/artifacts\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i.exec(
|
|
3155
|
-
u.pathname
|
|
3156
|
-
)?.[1] || null;
|
|
3157
|
-
return id ? `${storageViewBaseUrl.replace(/\/$/, "")}/design-briefs/${id.toLowerCase()}.html` : null;
|
|
3158
|
-
} catch {
|
|
3159
|
-
return null;
|
|
3160
|
-
}
|
|
3161
|
-
}
|
|
3162
|
-
function toClaudeEmbedUrl(url) {
|
|
3163
|
-
if (!url) return null;
|
|
3164
|
-
try {
|
|
3165
|
-
const u = new URL(url);
|
|
3166
|
-
const host = u.hostname.toLowerCase();
|
|
3167
|
-
const publicId = host === "claude.ai" && /^\/public\/artifacts\/([\w-]+)(?:\/embed)?\/?$/.exec(u.pathname)?.[1] || host === "claude.site" && /^\/artifacts\/([\w-]+)(?:\/embed)?\/?$/.exec(u.pathname)?.[1] || null;
|
|
3168
|
-
return publicId ? `https://claude.ai/public/artifacts/${publicId}/embed` : null;
|
|
3169
|
-
} catch {
|
|
3170
|
-
return null;
|
|
3171
|
-
}
|
|
3172
|
-
}
|
|
3173
|
-
|
|
3174
|
-
// src/hooks/use-claude-mirror-src.ts
|
|
2666
|
+
import { useEffect as useEffect20, useState as useState21 } from "react";
|
|
3175
2667
|
async function revalidateMirror(mirrorPath) {
|
|
3176
2668
|
try {
|
|
3177
2669
|
const res = await fetch(`${mirrorPath}?revalidate=1`);
|
|
@@ -3185,7 +2677,7 @@ async function revalidateMirror(mirrorPath) {
|
|
|
3185
2677
|
function useClaudeMirrorSrc(url) {
|
|
3186
2678
|
const endpoints = useEndpointsRuntime();
|
|
3187
2679
|
const mirrorPath = toClaudeMirrorPath(url, endpoints?.storageViewBaseUrl);
|
|
3188
|
-
const [resolved, setResolved] =
|
|
2680
|
+
const [resolved, setResolved] = useState21(null);
|
|
3189
2681
|
const state = resolved && resolved.key === mirrorPath ? resolved.value : { src: null, status: mirrorPath ? "probing" : "absent" };
|
|
3190
2682
|
useEffect20(() => {
|
|
3191
2683
|
if (!mirrorPath) return void 0;
|
|
@@ -3214,9 +2706,9 @@ function useClaudeMirrorSrc(url) {
|
|
|
3214
2706
|
}
|
|
3215
2707
|
|
|
3216
2708
|
// src/hooks/use-location-hash.ts
|
|
3217
|
-
import { useSyncExternalStore as
|
|
3218
|
-
var HASH_EVENTS = ["hashchange", "popstate"];
|
|
3219
|
-
function
|
|
2709
|
+
import { useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
2710
|
+
var HASH_EVENTS = ["hashchange", "popstate", LOCATION_HASH_SYNC_EVENT];
|
|
2711
|
+
function subscribe2(onChange) {
|
|
3220
2712
|
for (const event of HASH_EVENTS) window.addEventListener(event, onChange);
|
|
3221
2713
|
return () => {
|
|
3222
2714
|
for (const event of HASH_EVENTS) window.removeEventListener(event, onChange);
|
|
@@ -3231,7 +2723,7 @@ function readHash() {
|
|
|
3231
2723
|
}
|
|
3232
2724
|
}
|
|
3233
2725
|
function useLocationHash() {
|
|
3234
|
-
return
|
|
2726
|
+
return useSyncExternalStore2(subscribe2, readHash, () => "");
|
|
3235
2727
|
}
|
|
3236
2728
|
|
|
3237
2729
|
// src/hooks/use-scroll-to-hash.ts
|
|
@@ -3250,6 +2742,7 @@ function useScrollToHash(readyDep = true, options) {
|
|
|
3250
2742
|
}
|
|
3251
2743
|
};
|
|
3252
2744
|
const tryScrollToHash = () => {
|
|
2745
|
+
if (isScrollSyncedHash()) return;
|
|
3253
2746
|
const hash = normalizeHashFragment(window.location.hash).slice(1);
|
|
3254
2747
|
if (!hash) return;
|
|
3255
2748
|
cancelPoll();
|
|
@@ -3279,71 +2772,11 @@ function useScrollToHash(readyDep = true, options) {
|
|
|
3279
2772
|
}
|
|
3280
2773
|
|
|
3281
2774
|
// src/hooks/use-humanity-signals.ts
|
|
3282
|
-
import { useCallback as useCallback15, useRef as
|
|
3283
|
-
|
|
3284
|
-
// src/utils/humanity-signals.ts
|
|
3285
|
-
var HONEYPOT_FIELD = "form_extra_note";
|
|
3286
|
-
var ELAPSED_MS_FIELD = "form_elapsed_ms";
|
|
3287
|
-
var DEFAULT_MIN_FILL_MS = 700;
|
|
3288
|
-
var HUMANITY_SIGNAL_KEYS = [HONEYPOT_FIELD, ELAPSED_MS_FIELD];
|
|
3289
|
-
var isHumanitySignalKey = (key) => HUMANITY_SIGNAL_KEYS.includes(key);
|
|
3290
|
-
function extractHumanitySignals(body) {
|
|
3291
|
-
const b = body ?? {};
|
|
3292
|
-
const rawHp = b[HONEYPOT_FIELD];
|
|
3293
|
-
const honeypot = rawHp == null ? "" : typeof rawHp === "string" ? rawHp : JSON.stringify(rawHp) ?? String(rawHp);
|
|
3294
|
-
const rawMs = b[ELAPSED_MS_FIELD];
|
|
3295
|
-
const elapsedMs = typeof rawMs === "number" && Number.isFinite(rawMs) ? rawMs : null;
|
|
3296
|
-
return { honeypot, elapsedMs };
|
|
3297
|
-
}
|
|
3298
|
-
var normalizeForCopyMatch = (s) => s.normalize("NFKC").trim().toLowerCase();
|
|
3299
|
-
var digitsOf = (s) => s.replace(/\D/g, "");
|
|
3300
|
-
var MIN_COPY_MATCH_LENGTH = 2;
|
|
3301
|
-
var MIN_PHONE_DIGITS = 7;
|
|
3302
|
-
var phoneDigitsMatch = (a, b) => a.length >= MIN_PHONE_DIGITS && b.length >= MIN_PHONE_DIGITS && (a.endsWith(b) || b.endsWith(a));
|
|
3303
|
-
function findHoneypotCopySource(body, honeypot) {
|
|
3304
|
-
const hpNorm = normalizeForCopyMatch(honeypot);
|
|
3305
|
-
const hpDigits = digitsOf(honeypot);
|
|
3306
|
-
const phoneCandidate = hpDigits.length >= MIN_PHONE_DIGITS;
|
|
3307
|
-
if (hpNorm.length < MIN_COPY_MATCH_LENGTH && !phoneCandidate) return null;
|
|
3308
|
-
const matches = (value) => {
|
|
3309
|
-
if (typeof value !== "string" || value.trim() === "") return false;
|
|
3310
|
-
if (normalizeForCopyMatch(value) === hpNorm) return true;
|
|
3311
|
-
return phoneCandidate && phoneDigitsMatch(digitsOf(value), hpDigits);
|
|
3312
|
-
};
|
|
3313
|
-
const matchInArray = (value) => Array.isArray(value) && value.some(matches);
|
|
3314
|
-
const b = body ?? {};
|
|
3315
|
-
for (const [key, value] of Object.entries(b)) {
|
|
3316
|
-
if (isHumanitySignalKey(key)) continue;
|
|
3317
|
-
if (matches(value)) return key;
|
|
3318
|
-
if (matchInArray(value)) return `${key}[]`;
|
|
3319
|
-
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
3320
|
-
for (const [nestedKey, nested] of Object.entries(value)) {
|
|
3321
|
-
if (matches(nested)) return `${key}.${nestedKey}`;
|
|
3322
|
-
if (matchInArray(nested)) return `${key}.${nestedKey}[]`;
|
|
3323
|
-
}
|
|
3324
|
-
}
|
|
3325
|
-
}
|
|
3326
|
-
return null;
|
|
3327
|
-
}
|
|
3328
|
-
function evaluateHumanitySignals(body, opts) {
|
|
3329
|
-
const { honeypot, elapsedMs } = extractHumanitySignals(body);
|
|
3330
|
-
const diagnostics = {
|
|
3331
|
-
honeypotLength: honeypot.length,
|
|
3332
|
-
timingAffirmed: elapsedMs !== null && elapsedMs >= opts.minFillMs
|
|
3333
|
-
};
|
|
3334
|
-
const filled = honeypot.trim() !== "";
|
|
3335
|
-
const sourceField = filled ? findHoneypotCopySource(body, honeypot) : null;
|
|
3336
|
-
if (filled && sourceField === null) return { ...diagnostics, ok: false, reason: "honeypot" };
|
|
3337
|
-
if (elapsedMs !== null && elapsedMs < opts.minFillMs) return { ...diagnostics, ok: false, reason: "too_fast" };
|
|
3338
|
-
return sourceField !== null ? { ...diagnostics, ok: true, note: "honeypot_autofill", sourceField } : { ...diagnostics, ok: true };
|
|
3339
|
-
}
|
|
3340
|
-
var splitCsvEnv = (s) => s?.split(",").map((t) => t.trim()).filter(Boolean) ?? [];
|
|
3341
|
-
|
|
3342
|
-
// src/hooks/use-humanity-signals.ts
|
|
2775
|
+
import { useCallback as useCallback15, useRef as useRef13, useState as useState22 } from "react";
|
|
3343
2776
|
function useHumanitySignals() {
|
|
3344
|
-
const ref =
|
|
3345
|
-
const [mountedAt] =
|
|
3346
|
-
const startedAtRef =
|
|
2777
|
+
const ref = useRef13(null);
|
|
2778
|
+
const [mountedAt] = useState22(() => typeof performance !== "undefined" ? performance.now() : 0);
|
|
2779
|
+
const startedAtRef = useRef13(mountedAt);
|
|
3347
2780
|
const getSignals = useCallback15(
|
|
3348
2781
|
() => ({
|
|
3349
2782
|
[HONEYPOT_FIELD]: ref.current?.value ?? "",
|
|
@@ -3359,162 +2792,10 @@ function useHumanitySignals() {
|
|
|
3359
2792
|
}
|
|
3360
2793
|
|
|
3361
2794
|
// src/hooks/use-form-rescue.ts
|
|
3362
|
-
import { useCallback as useCallback16, useEffect as useEffect22, useMemo as
|
|
3363
|
-
|
|
3364
|
-
// src/utils/form-rescue.ts
|
|
3365
|
-
var FORM_ID_PATTERN = /^[a-z][a-z0-9_]{1,47}$/;
|
|
3366
|
-
var definitions = /* @__PURE__ */ new Map();
|
|
3367
|
-
function defineRescueForm(definition) {
|
|
3368
|
-
if (!FORM_ID_PATTERN.test(definition.id)) throw new Error(`[form-rescue] invalid form id "${definition.id}"`);
|
|
3369
|
-
const existing = definitions.get(definition.id);
|
|
3370
|
-
if (existing) {
|
|
3371
|
-
if (existing.label !== definition.label) {
|
|
3372
|
-
throw new Error(`[form-rescue] form id "${definition.id}" is already defined as "${existing.label}"`);
|
|
3373
|
-
}
|
|
3374
|
-
return existing;
|
|
3375
|
-
}
|
|
3376
|
-
const frozen = Object.freeze({ id: definition.id, label: definition.label });
|
|
3377
|
-
definitions.set(frozen.id, frozen);
|
|
3378
|
-
return frozen;
|
|
3379
|
-
}
|
|
3380
|
-
function getRescueForm(id) {
|
|
3381
|
-
return typeof id === "string" ? definitions.get(id) ?? null : null;
|
|
3382
|
-
}
|
|
3383
|
-
function listRescueForms() {
|
|
3384
|
-
return [...definitions.values()];
|
|
3385
|
-
}
|
|
3386
|
-
var RESCUE_FORMS = {
|
|
3387
|
-
contact: defineRescueForm({ id: "contact", label: "Contact form" }),
|
|
3388
|
-
caseStudyPitch: defineRescueForm({ id: "case_study_pitch", label: "Case study pitch" }),
|
|
3389
|
-
dataRoomRequest: defineRescueForm({ id: "data_room_request", label: "Data room request" }),
|
|
3390
|
-
trustCenterRequest: defineRescueForm({ id: "trust_center_request", label: "Trust Center document request" }),
|
|
3391
|
-
meetingBooking: defineRescueForm({ id: "meeting_booking", label: "Meeting booking" }),
|
|
3392
|
-
waitlist: defineRescueForm({ id: "waitlist", label: "Waitlist" })
|
|
3393
|
-
};
|
|
3394
|
-
var FORM_RESCUE_VALUE_FIELDS = [
|
|
3395
|
-
"email",
|
|
3396
|
-
"name",
|
|
3397
|
-
"firstName",
|
|
3398
|
-
"lastName",
|
|
3399
|
-
"company",
|
|
3400
|
-
"jobtitle",
|
|
3401
|
-
"companySize",
|
|
3402
|
-
"linkedin_url"
|
|
3403
|
-
];
|
|
3404
|
-
var EXCLUDED_FIELD_PATTERN = /pass(word|code)?|card|cvv|cvc|ssn|social.?security|iban|bank|routing|token|secret|otp|pin$/i;
|
|
3405
|
-
function isExcludedRescueField(name) {
|
|
3406
|
-
return EXCLUDED_FIELD_PATTERN.test(name);
|
|
3407
|
-
}
|
|
3408
|
-
var FORM_RESCUE_MAX_VALUE_CHARS = 200;
|
|
3409
|
-
var FORM_RESCUE_DEBOUNCE_MS = 1500;
|
|
3410
|
-
var FORM_RESCUE_MAX_FIELDS = 40;
|
|
3411
|
-
var FORM_RESCUE_ATTEMPT_FIELD = "form_attempt_id";
|
|
3412
|
-
var FORM_RESCUE_RESUME_FIELD = "form_resume_token";
|
|
3413
|
-
var FORM_RESCUE_SUBMIT_KEYS = [FORM_RESCUE_ATTEMPT_FIELD, FORM_RESCUE_RESUME_FIELD];
|
|
3414
|
-
var FORM_RESCUE_RESUME_PARAM = "resume";
|
|
3415
|
-
var RESUME_TOKEN_PATTERN = /^[A-Za-z0-9_-]{16,128}$/;
|
|
3416
|
-
function isResumeToken(value) {
|
|
3417
|
-
return typeof value === "string" && RESUME_TOKEN_PATTERN.test(value);
|
|
3418
|
-
}
|
|
3419
|
-
var FORM_DRAFT_STATUSES = ["started", "rescuable", "rescued", "submitted"];
|
|
3420
|
-
var FORM_RESCUE_SKIP_REASONS = {
|
|
3421
|
-
finishedElsewhere: "finished_elsewhere",
|
|
3422
|
-
alreadyRescued: "already_rescued",
|
|
3423
|
-
internal: "internal_email"
|
|
3424
|
-
};
|
|
3425
|
-
var EMAIL_PATTERN = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
|
|
3426
|
-
function isRescueEmail(value) {
|
|
3427
|
-
return typeof value === "string" && value.length <= FORM_RESCUE_MAX_VALUE_CHARS && EMAIL_PATTERN.test(value.trim());
|
|
3428
|
-
}
|
|
3429
|
-
var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
3430
|
-
function isFormAttemptId(value) {
|
|
3431
|
-
return typeof value === "string" && UUID_PATTERN.test(value);
|
|
3432
|
-
}
|
|
3433
|
-
function isFilled(value) {
|
|
3434
|
-
if (value == null) return false;
|
|
3435
|
-
if (typeof value === "string") return value.trim().length > 0;
|
|
3436
|
-
if (typeof value === "boolean") return value;
|
|
3437
|
-
if (Array.isArray(value)) return value.length > 0;
|
|
3438
|
-
if (typeof value === "object") return Object.values(value).some(isFilled);
|
|
3439
|
-
return true;
|
|
3440
|
-
}
|
|
3441
|
-
function sanitizeRescueValues(values) {
|
|
3442
|
-
const out = {};
|
|
3443
|
-
if (!values || typeof values !== "object") return out;
|
|
3444
|
-
for (const key of FORM_RESCUE_VALUE_FIELDS) {
|
|
3445
|
-
if (isExcludedRescueField(key)) continue;
|
|
3446
|
-
const raw = values[key];
|
|
3447
|
-
if (typeof raw !== "string") continue;
|
|
3448
|
-
const trimmed = raw.trim().slice(0, FORM_RESCUE_MAX_VALUE_CHARS);
|
|
3449
|
-
if (trimmed) out[key] = trimmed;
|
|
3450
|
-
}
|
|
3451
|
-
return out;
|
|
3452
|
-
}
|
|
3453
|
-
function filledRescueFields(values, fieldNames) {
|
|
3454
|
-
return fieldNames.filter((name) => !isExcludedRescueField(name) && isFilled(values[name])).slice(0, FORM_RESCUE_MAX_FIELDS);
|
|
3455
|
-
}
|
|
3456
|
-
function rescueCompletionPct(filledCount, totalCount) {
|
|
3457
|
-
if (totalCount <= 0) return 0;
|
|
3458
|
-
return Math.max(0, Math.min(100, Math.round(filledCount / totalCount * 100)));
|
|
3459
|
-
}
|
|
3460
|
-
function sanitizeRescueFieldName(value) {
|
|
3461
|
-
if (typeof value !== "string") return null;
|
|
3462
|
-
const trimmed = value.trim();
|
|
3463
|
-
return /^[A-Za-z0-9_.-]{1,64}$/.test(trimmed) && !isExcludedRescueField(trimmed) ? trimmed : null;
|
|
3464
|
-
}
|
|
3465
|
-
var UTM_KEYS = ["source", "medium", "campaign", "content", "term"];
|
|
3466
|
-
var MAX_SOURCE_PATH_CHARS = 500;
|
|
3467
|
-
function parseFormDraftSaveRequest(body) {
|
|
3468
|
-
const form = getRescueForm(body.form_id);
|
|
3469
|
-
if (!isFormAttemptId(body.attempt_id) || !form) return null;
|
|
3470
|
-
const rawValues = body.values && typeof body.values === "object" ? body.values : {};
|
|
3471
|
-
const values = sanitizeRescueValues(rawValues);
|
|
3472
|
-
const fieldsFilled = (Array.isArray(body.fields_filled) ? body.fields_filled : []).map(sanitizeRescueFieldName).filter((name) => name !== null).slice(0, FORM_RESCUE_MAX_FIELDS);
|
|
3473
|
-
const path = typeof body.source_path === "string" ? body.source_path : "";
|
|
3474
|
-
const utmIn = body.utm && typeof body.utm === "object" ? body.utm : {};
|
|
3475
|
-
const utm = {};
|
|
3476
|
-
for (const key of UTM_KEYS) {
|
|
3477
|
-
const value = utmIn[key];
|
|
3478
|
-
if (typeof value === "string" && value.trim()) utm[key] = value.trim().slice(0, FORM_RESCUE_MAX_VALUE_CHARS);
|
|
3479
|
-
}
|
|
3480
|
-
return {
|
|
3481
|
-
request: {
|
|
3482
|
-
attempt_id: body.attempt_id,
|
|
3483
|
-
form_id: form.id,
|
|
3484
|
-
values,
|
|
3485
|
-
fields_filled: fieldsFilled,
|
|
3486
|
-
last_field: sanitizeRescueFieldName(body.last_field),
|
|
3487
|
-
completion_pct: typeof body.completion_pct === "number" ? rescueCompletionPct(body.completion_pct, 100) : 0,
|
|
3488
|
-
// Same-site only: a path, never a scheme-relative or absolute URL.
|
|
3489
|
-
source_path: path.startsWith("/") && !path.startsWith("//") ? path.slice(0, MAX_SOURCE_PATH_CHARS) : "",
|
|
3490
|
-
...Object.keys(utm).length ? { utm } : {},
|
|
3491
|
-
...isResumeToken(body.resume_token) ? { resume_token: body.resume_token } : {}
|
|
3492
|
-
},
|
|
3493
|
-
dropped: Object.keys(rawValues).filter((key) => !(key in values))
|
|
3494
|
-
};
|
|
3495
|
-
}
|
|
3496
|
-
var FORM_RESCUE_EVENTS = {
|
|
3497
|
-
started: "form_started",
|
|
3498
|
-
progress: "form_progress",
|
|
3499
|
-
leadCaptured: "form_lead_captured",
|
|
3500
|
-
abandoned: "form_abandoned",
|
|
3501
|
-
submitted: "form_submitted",
|
|
3502
|
-
rescued: "form_rescued",
|
|
3503
|
-
resumed: "form_resumed"
|
|
3504
|
-
};
|
|
3505
|
-
function captureFormRescueEvent(event, properties) {
|
|
3506
|
-
try {
|
|
3507
|
-
if (typeof window === "undefined") return;
|
|
3508
|
-
const ph = window.posthog;
|
|
3509
|
-
if (typeof ph?.capture === "function") ph.capture(event, properties);
|
|
3510
|
-
} catch {
|
|
3511
|
-
}
|
|
3512
|
-
}
|
|
3513
|
-
|
|
3514
|
-
// src/hooks/use-form-rescue.ts
|
|
2795
|
+
import { useCallback as useCallback16, useEffect as useEffect22, useMemo as useMemo7, useRef as useRef14 } from "react";
|
|
3515
2796
|
var LOCAL_DRAFT_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
3516
2797
|
var STORAGE_PREFIX = "form-rescue:v1:";
|
|
3517
|
-
var
|
|
2798
|
+
var UTM_KEYS = ["source", "medium", "campaign", "content", "term"];
|
|
3518
2799
|
function newAttemptId() {
|
|
3519
2800
|
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return crypto.randomUUID();
|
|
3520
2801
|
const bytes = new Uint8Array(16);
|
|
@@ -3561,7 +2842,7 @@ function readUtm() {
|
|
|
3561
2842
|
try {
|
|
3562
2843
|
const params = new URLSearchParams(window.location.search);
|
|
3563
2844
|
const utm = {};
|
|
3564
|
-
for (const key of
|
|
2845
|
+
for (const key of UTM_KEYS) {
|
|
3565
2846
|
const value = params.get(`utm_${key}`);
|
|
3566
2847
|
if (value) utm[key] = value.slice(0, 200);
|
|
3567
2848
|
}
|
|
@@ -3573,17 +2854,17 @@ function readUtm() {
|
|
|
3573
2854
|
function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
|
|
3574
2855
|
const draftsUrl = useEndpointsRuntime()?.formDraftsUrl;
|
|
3575
2856
|
const formId = form?.id ?? null;
|
|
3576
|
-
const attemptIdRef =
|
|
3577
|
-
const resumeTokenRef =
|
|
3578
|
-
const latestRef =
|
|
3579
|
-
const dirtyRef =
|
|
3580
|
-
const startedRef =
|
|
3581
|
-
const leadCapturedRef =
|
|
3582
|
-
const completedRef =
|
|
3583
|
-
const timerRef =
|
|
3584
|
-
const fieldNamesRef =
|
|
3585
|
-
const onRestoreRef =
|
|
3586
|
-
const getSignalsRef =
|
|
2857
|
+
const attemptIdRef = useRef14(null);
|
|
2858
|
+
const resumeTokenRef = useRef14(null);
|
|
2859
|
+
const latestRef = useRef14(null);
|
|
2860
|
+
const dirtyRef = useRef14(false);
|
|
2861
|
+
const startedRef = useRef14(false);
|
|
2862
|
+
const leadCapturedRef = useRef14(false);
|
|
2863
|
+
const completedRef = useRef14(false);
|
|
2864
|
+
const timerRef = useRef14(null);
|
|
2865
|
+
const fieldNamesRef = useRef14(fieldNames);
|
|
2866
|
+
const onRestoreRef = useRef14(onRestore);
|
|
2867
|
+
const getSignalsRef = useRef14(getSignals);
|
|
3587
2868
|
useEffect22(() => {
|
|
3588
2869
|
fieldNamesRef.current = fieldNames;
|
|
3589
2870
|
onRestoreRef.current = onRestore;
|
|
@@ -3735,7 +3016,7 @@ function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
|
|
|
3735
3016
|
startedRef.current = false;
|
|
3736
3017
|
leadCapturedRef.current = false;
|
|
3737
3018
|
}, [attemptId, form, formId]);
|
|
3738
|
-
return
|
|
3019
|
+
return useMemo7(() => ({ track, submitFields, complete }), [track, submitFields, complete]);
|
|
3739
3020
|
}
|
|
3740
3021
|
|
|
3741
3022
|
// src/hooks/use-rescued-form.ts
|
|
@@ -3776,11 +3057,8 @@ export {
|
|
|
3776
3057
|
useAutoLimitTags,
|
|
3777
3058
|
useKeyboardCollisionPadding,
|
|
3778
3059
|
useDeferredError,
|
|
3779
|
-
DRAG_AND_DROP_MEDIA_QUERY,
|
|
3780
|
-
useDragAndDropEnabled,
|
|
3781
3060
|
useFocusTrap,
|
|
3782
|
-
|
|
3783
|
-
useLocalStorage,
|
|
3061
|
+
useStickyToolbar,
|
|
3784
3062
|
useMemoizedCallback,
|
|
3785
3063
|
useNotificationPermission,
|
|
3786
3064
|
useOnboardingState,
|
|
@@ -3791,19 +3069,7 @@ export {
|
|
|
3791
3069
|
resolveActiveSection,
|
|
3792
3070
|
useActiveSection,
|
|
3793
3071
|
useNavMenus,
|
|
3794
|
-
DESKTOP_OSES,
|
|
3795
|
-
detectVisitorOs,
|
|
3796
|
-
desktopOsOf,
|
|
3797
|
-
detectDesktopOs,
|
|
3798
|
-
usesCommandKey,
|
|
3799
|
-
shortcutLabel,
|
|
3800
|
-
useVisitorOs,
|
|
3801
3072
|
usePreventScroll,
|
|
3802
|
-
platformIcons,
|
|
3803
|
-
transformPlatformConfigsToOptions,
|
|
3804
|
-
getPlatformIcon,
|
|
3805
|
-
getSmallPlatformIcon,
|
|
3806
|
-
getPlatformIconComponent,
|
|
3807
3073
|
usePlatformConfig,
|
|
3808
3074
|
usePlatformByValue,
|
|
3809
3075
|
useValidatePlatform,
|
|
@@ -3846,55 +3112,11 @@ export {
|
|
|
3846
3112
|
useCursorPaginationState,
|
|
3847
3113
|
useNatsClient,
|
|
3848
3114
|
useScenarioPlayer,
|
|
3849
|
-
validateAccessCode,
|
|
3850
|
-
consumeAccessCode,
|
|
3851
|
-
validateAndConsumeAccessCode,
|
|
3852
3115
|
useAccessCodeIntegration,
|
|
3853
|
-
toGoogleSheetsEmbedUrl,
|
|
3854
|
-
toGoogleSheetsOriginalUrl,
|
|
3855
|
-
toFigmaEmbedUrl,
|
|
3856
|
-
isFigmaSlidesUrl,
|
|
3857
|
-
toFigmaOriginalUrl,
|
|
3858
|
-
toClaudeMirrorPath,
|
|
3859
|
-
toClaudeEmbedUrl,
|
|
3860
3116
|
useClaudeMirrorSrc,
|
|
3861
3117
|
useLocationHash,
|
|
3862
3118
|
useScrollToHash,
|
|
3863
|
-
HONEYPOT_FIELD,
|
|
3864
|
-
ELAPSED_MS_FIELD,
|
|
3865
|
-
DEFAULT_MIN_FILL_MS,
|
|
3866
|
-
HUMANITY_SIGNAL_KEYS,
|
|
3867
|
-
isHumanitySignalKey,
|
|
3868
|
-
extractHumanitySignals,
|
|
3869
|
-
findHoneypotCopySource,
|
|
3870
|
-
evaluateHumanitySignals,
|
|
3871
|
-
splitCsvEnv,
|
|
3872
3119
|
useHumanitySignals,
|
|
3873
|
-
defineRescueForm,
|
|
3874
|
-
getRescueForm,
|
|
3875
|
-
listRescueForms,
|
|
3876
|
-
RESCUE_FORMS,
|
|
3877
|
-
FORM_RESCUE_VALUE_FIELDS,
|
|
3878
|
-
isExcludedRescueField,
|
|
3879
|
-
FORM_RESCUE_MAX_VALUE_CHARS,
|
|
3880
|
-
FORM_RESCUE_DEBOUNCE_MS,
|
|
3881
|
-
FORM_RESCUE_MAX_FIELDS,
|
|
3882
|
-
FORM_RESCUE_ATTEMPT_FIELD,
|
|
3883
|
-
FORM_RESCUE_RESUME_FIELD,
|
|
3884
|
-
FORM_RESCUE_SUBMIT_KEYS,
|
|
3885
|
-
FORM_RESCUE_RESUME_PARAM,
|
|
3886
|
-
isResumeToken,
|
|
3887
|
-
FORM_DRAFT_STATUSES,
|
|
3888
|
-
FORM_RESCUE_SKIP_REASONS,
|
|
3889
|
-
isRescueEmail,
|
|
3890
|
-
isFormAttemptId,
|
|
3891
|
-
sanitizeRescueValues,
|
|
3892
|
-
filledRescueFields,
|
|
3893
|
-
rescueCompletionPct,
|
|
3894
|
-
sanitizeRescueFieldName,
|
|
3895
|
-
parseFormDraftSaveRequest,
|
|
3896
|
-
FORM_RESCUE_EVENTS,
|
|
3897
|
-
captureFormRescueEvent,
|
|
3898
3120
|
completeFormRescue,
|
|
3899
3121
|
useFormRescue,
|
|
3900
3122
|
useRescuedForm
|