@flamingo-stack/openframe-frontend-core 0.0.415 → 0.0.416
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-VENX4SF4.cjs → chunk-234A5WF2.cjs} +26 -26
- package/dist/{chunk-VENX4SF4.cjs.map → chunk-234A5WF2.cjs.map} +1 -1
- package/dist/{chunk-NG6F7TM4.cjs → chunk-3F4LKYIK.cjs} +7 -7
- package/dist/{chunk-NG6F7TM4.cjs.map → chunk-3F4LKYIK.cjs.map} +1 -1
- package/dist/{chunk-OTUNYR26.cjs → chunk-3OSTXIB6.cjs} +59 -59
- package/dist/{chunk-OTUNYR26.cjs.map → chunk-3OSTXIB6.cjs.map} +1 -1
- package/dist/{chunk-XUWZHO32.js → chunk-3RW27WRK.js} +2 -2
- package/dist/{chunk-EB4USXFD.js → chunk-43AKGHDL.js} +4 -4
- package/dist/{chunk-I6LSGR3V.js → chunk-4AFA5N5Q.js} +2 -2
- package/dist/{chunk-IKWWXX4V.js → chunk-BGSIZWAK.js} +2 -2
- package/dist/{chunk-NM4WUXPO.cjs → chunk-BIFZRCGN.cjs} +31 -31
- package/dist/{chunk-NM4WUXPO.cjs.map → chunk-BIFZRCGN.cjs.map} +1 -1
- package/dist/{chunk-VVAAUQKZ.js → chunk-CQ6MF7KT.js} +4 -4
- package/dist/{chunk-LAGZ56MO.cjs → chunk-CQG77HCB.cjs} +11 -11
- package/dist/{chunk-LAGZ56MO.cjs.map → chunk-CQG77HCB.cjs.map} +1 -1
- package/dist/{chunk-ZE5CY2H2.cjs → chunk-CRPIHDEI.cjs} +9 -9
- package/dist/{chunk-ZE5CY2H2.cjs.map → chunk-CRPIHDEI.cjs.map} +1 -1
- package/dist/{chunk-24IQYYNK.cjs → chunk-D4NSPERU.cjs} +26 -26
- package/dist/{chunk-24IQYYNK.cjs.map → chunk-D4NSPERU.cjs.map} +1 -1
- package/dist/{chunk-2MEM6QO4.cjs → chunk-DQMH6NAF.cjs} +15 -15
- package/dist/{chunk-2MEM6QO4.cjs.map → chunk-DQMH6NAF.cjs.map} +1 -1
- package/dist/{chunk-YQBAYZZV.js → chunk-FHAMKB5L.js} +2 -2
- package/dist/{chunk-2HBGX2VN.js → chunk-GEUZA4VP.js} +2 -2
- package/dist/{chunk-P7NC3H2Y.js → chunk-GIHNDMGI.js} +2 -2
- package/dist/{chunk-57IHEHW3.cjs → chunk-IVWQIWZI.cjs} +5 -5
- package/dist/{chunk-57IHEHW3.cjs.map → chunk-IVWQIWZI.cjs.map} +1 -1
- package/dist/{chunk-CCEQDC7F.js → chunk-N6T7CDEN.js} +2 -1
- package/dist/chunk-N6T7CDEN.js.map +1 -0
- package/dist/{chunk-XAVAHIZR.cjs → chunk-QMGXJEZ3.cjs} +62 -62
- package/dist/{chunk-XAVAHIZR.cjs.map → chunk-QMGXJEZ3.cjs.map} +1 -1
- package/dist/{chunk-F5US4NUC.js → chunk-QO2JZYIB.js} +4 -4
- package/dist/{chunk-ND4AYD6P.cjs → chunk-RQLQOH46.cjs} +37 -37
- package/dist/{chunk-ND4AYD6P.cjs.map → chunk-RQLQOH46.cjs.map} +1 -1
- package/dist/{chunk-SUOPU3OE.cjs → chunk-S3PO5NOK.cjs} +2 -1
- package/dist/chunk-S3PO5NOK.cjs.map +1 -0
- package/dist/{chunk-47FXB4DR.js → chunk-SFZ2BJST.js} +2 -2
- package/dist/{chunk-MHOKOUKE.js → chunk-VBJC75FT.js} +4 -4
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/utils/is-cross-origin-url.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +128 -128
- package/dist/components/index.js +9 -9
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/utils/index.cjs +1 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/utils/__tests__/is-cross-origin-url.test.ts +43 -0
- package/src/components/chat/utils/is-cross-origin-url.ts +4 -0
- package/dist/chunk-CCEQDC7F.js.map +0 -1
- package/dist/chunk-SUOPU3OE.cjs.map +0 -1
- /package/dist/{chunk-XUWZHO32.js.map → chunk-3RW27WRK.js.map} +0 -0
- /package/dist/{chunk-EB4USXFD.js.map → chunk-43AKGHDL.js.map} +0 -0
- /package/dist/{chunk-I6LSGR3V.js.map → chunk-4AFA5N5Q.js.map} +0 -0
- /package/dist/{chunk-IKWWXX4V.js.map → chunk-BGSIZWAK.js.map} +0 -0
- /package/dist/{chunk-VVAAUQKZ.js.map → chunk-CQ6MF7KT.js.map} +0 -0
- /package/dist/{chunk-YQBAYZZV.js.map → chunk-FHAMKB5L.js.map} +0 -0
- /package/dist/{chunk-2HBGX2VN.js.map → chunk-GEUZA4VP.js.map} +0 -0
- /package/dist/{chunk-P7NC3H2Y.js.map → chunk-GIHNDMGI.js.map} +0 -0
- /package/dist/{chunk-F5US4NUC.js.map → chunk-QO2JZYIB.js.map} +0 -0
- /package/dist/{chunk-47FXB4DR.js.map → chunk-SFZ2BJST.js.map} +0 -0
- /package/dist/{chunk-MHOKOUKE.js.map → chunk-VBJC75FT.js.map} +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { isCrossOriginUrl } from '../is-cross-origin-url'
|
|
3
|
+
import { decideNewTab } from '../decide-new-tab'
|
|
4
|
+
|
|
5
|
+
describe('isCrossOriginUrl', () => {
|
|
6
|
+
it('treats falsy values as same-origin', () => {
|
|
7
|
+
expect(isCrossOriginUrl(null)).toBe(false)
|
|
8
|
+
expect(isCrossOriginUrl(undefined)).toBe(false)
|
|
9
|
+
expect(isCrossOriginUrl('')).toBe(false)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('treats same-document references as same-origin', () => {
|
|
13
|
+
// Regression: bare-hash anchors ("More coming in Next Generations" on
|
|
14
|
+
// /pricing) were classified cross-origin and opened in a new tab.
|
|
15
|
+
expect(isCrossOriginUrl('#next-generations')).toBe(false)
|
|
16
|
+
expect(isCrossOriginUrl('?tab=pricing')).toBe(false)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('treats rooted relative paths as same-origin', () => {
|
|
20
|
+
expect(isCrossOriginUrl('/support')).toBe(false)
|
|
21
|
+
expect(isCrossOriginUrl('/roadmap#top')).toBe(false)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('treats explicit-host URLs as cross-origin', () => {
|
|
25
|
+
expect(isCrossOriginUrl('https://flamingo.run/support')).toBe(true)
|
|
26
|
+
expect(isCrossOriginUrl('http://example.com')).toBe(true)
|
|
27
|
+
expect(isCrossOriginUrl('//cdn.example.com/file.js')).toBe(true)
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
describe('decideNewTab fallback (no targetPlatform)', () => {
|
|
32
|
+
it('keeps same-page hash CTAs in the same tab', () => {
|
|
33
|
+
expect(
|
|
34
|
+
decideNewTab({ href: '#next-generations', currentSource: 'flamingo' }),
|
|
35
|
+
).toBe(false)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('still opens explicit-host URLs in a new tab', () => {
|
|
39
|
+
expect(
|
|
40
|
+
decideNewTab({ href: 'https://example.com', currentSource: 'flamingo' }),
|
|
41
|
+
).toBe(true)
|
|
42
|
+
})
|
|
43
|
+
})
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export function isCrossOriginUrl(url: string | null | undefined): boolean {
|
|
22
22
|
if (!url) return false
|
|
23
|
+
// Same-document references — a bare fragment (`#anchor`) or query
|
|
24
|
+
// (`?tab=x`) resolves against the current page and can never leave
|
|
25
|
+
// the origin.
|
|
26
|
+
if (url.startsWith('#') || url.startsWith('?')) return false
|
|
23
27
|
// Relative URL — by definition same origin.
|
|
24
28
|
if (url.startsWith('/') && !url.startsWith('//')) return false
|
|
25
29
|
// Anything else — absolute URL (http(s)://) or protocol-relative (//)
|