@flamingo-stack/openframe-frontend-core 0.0.424 → 0.0.425
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-5TCOKIAS.js → chunk-2NHRQU5S.js} +3 -3
- package/dist/{chunk-H2ECFX4G.js → chunk-3RVXNWM4.js} +9 -3
- package/dist/{chunk-H2ECFX4G.js.map → chunk-3RVXNWM4.js.map} +1 -1
- package/dist/{chunk-XMCURSQ7.js → chunk-7DLIR4M3.js} +7 -7
- package/dist/{chunk-4XLJWX2N.js → chunk-7EUIW46X.js} +2 -2
- package/dist/{chunk-FVL25VKT.cjs → chunk-AXQ6VG3I.cjs} +14 -14
- package/dist/{chunk-FVL25VKT.cjs.map → chunk-AXQ6VG3I.cjs.map} +1 -1
- package/dist/{chunk-C7AAFHP5.cjs → chunk-BOL6YTLK.cjs} +40 -40
- package/dist/{chunk-C7AAFHP5.cjs.map → chunk-BOL6YTLK.cjs.map} +1 -1
- package/dist/{chunk-OXE2PNKV.js → chunk-BZE76SU7.js} +6 -6
- package/dist/{chunk-VFKQMAUF.cjs → chunk-C5RS3QLV.cjs} +3 -3
- package/dist/{chunk-VFKQMAUF.cjs.map → chunk-C5RS3QLV.cjs.map} +1 -1
- package/dist/{chunk-ZKIYCRVQ.cjs → chunk-EE5NH5SH.cjs} +3 -3
- package/dist/{chunk-ZKIYCRVQ.cjs.map → chunk-EE5NH5SH.cjs.map} +1 -1
- package/dist/{chunk-LYO2FUKU.cjs → chunk-EOKZ25ZX.cjs} +21 -21
- package/dist/{chunk-LYO2FUKU.cjs.map → chunk-EOKZ25ZX.cjs.map} +1 -1
- package/dist/{chunk-JSO2EOOV.cjs → chunk-F5NW3B2W.cjs} +36 -36
- package/dist/{chunk-JSO2EOOV.cjs.map → chunk-F5NW3B2W.cjs.map} +1 -1
- package/dist/{chunk-X3IHSMPD.cjs → chunk-GS5QSGGP.cjs} +91 -85
- package/dist/{chunk-X3IHSMPD.cjs.map → chunk-GS5QSGGP.cjs.map} +1 -1
- package/dist/{chunk-NMKIS3JX.cjs → chunk-JUICPZB2.cjs} +43 -43
- package/dist/{chunk-NMKIS3JX.cjs.map → chunk-JUICPZB2.cjs.map} +1 -1
- package/dist/{chunk-6PB5HGFM.js → chunk-KJKLNI4T.js} +5 -5
- package/dist/{chunk-BM5RER5N.cjs → chunk-LC47IZTB.cjs} +86 -86
- package/dist/{chunk-BM5RER5N.cjs.map → chunk-LC47IZTB.cjs.map} +1 -1
- package/dist/{chunk-M3ROXRUZ.cjs → chunk-LMJ6E6EL.cjs} +27 -27
- package/dist/{chunk-M3ROXRUZ.cjs.map → chunk-LMJ6E6EL.cjs.map} +1 -1
- package/dist/{chunk-RUQ4MVBN.js → chunk-LRSJJVYR.js} +6 -6
- package/dist/{chunk-SR6LEWCF.cjs → chunk-N2TJ3HAM.cjs} +10 -10
- package/dist/{chunk-SR6LEWCF.cjs.map → chunk-N2TJ3HAM.cjs.map} +1 -1
- package/dist/{chunk-Y4WY2AF6.js → chunk-NAASWINZ.js} +2 -2
- package/dist/{chunk-445ZGRPE.cjs → chunk-QA3KNB3D.cjs} +29 -29
- package/dist/{chunk-445ZGRPE.cjs.map → chunk-QA3KNB3D.cjs.map} +1 -1
- package/dist/{chunk-APWAFTFL.js → chunk-QQOR52ER.js} +3 -3
- package/dist/{chunk-FFCGB73K.js → chunk-QXYOGJQJ.js} +2 -2
- package/dist/{chunk-OMUCATVA.js → chunk-RVWC4P3H.js} +2 -2
- package/dist/{chunk-G7UE6RKV.cjs → chunk-SSJNN5BS.cjs} +20 -3
- package/dist/chunk-SSJNN5BS.cjs.map +1 -0
- package/dist/{chunk-TMITO43G.cjs → chunk-T6MEF4BK.cjs} +7 -7
- package/dist/{chunk-TMITO43G.cjs.map → chunk-T6MEF4BK.cjs.map} +1 -1
- package/dist/{chunk-56NEIHTC.js → chunk-UVDVZB6I.js} +3 -3
- package/dist/{chunk-ORKNKKOH.js → chunk-UYC52F32.js} +4 -4
- package/dist/{chunk-X7UBB6F6.js → chunk-XDBFXCLE.js} +7 -7
- package/dist/{chunk-AD4A44US.js → chunk-XRZSYFLR.js} +2 -2
- package/dist/{chunk-AEUFBPB3.cjs → chunk-Z7HY7C7P.cjs} +77 -77
- package/dist/{chunk-AEUFBPB3.cjs.map → chunk-Z7HY7C7P.cjs.map} +1 -1
- package/dist/{chunk-PLJLE4A4.js → chunk-ZJJERZUA.js} +20 -3
- package/dist/chunk-ZJJERZUA.js.map +1 -0
- package/dist/{chunk-J2WSWXJN.cjs → chunk-ZKN4UR2X.cjs} +5 -5
- package/dist/{chunk-J2WSWXJN.cjs.map → chunk-ZKN4UR2X.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +11 -11
- package/dist/components/case-studies/index.js +5 -5
- package/dist/components/chat/index.cjs +5 -5
- package/dist/components/chat/index.js +4 -4
- package/dist/components/contact/index.cjs +6 -6
- package/dist/components/contact/index.js +5 -5
- package/dist/components/docs/index.cjs +8 -8
- package/dist/components/docs/index.js +7 -7
- package/dist/components/embeds/index.cjs +6 -6
- package/dist/components/embeds/index.js +5 -5
- package/dist/components/faq/index.cjs +7 -7
- package/dist/components/faq/index.js +6 -6
- package/dist/components/features/index.cjs +5 -5
- package/dist/components/features/index.js +4 -4
- package/dist/components/help-center-pages/index.cjs +24 -24
- package/dist/components/help-center-pages/index.js +15 -15
- package/dist/components/index.cjs +141 -141
- package/dist/components/index.js +13 -13
- package/dist/components/navigation/index.cjs +5 -5
- package/dist/components/navigation/index.js +4 -4
- package/dist/components/onboarding-guides/index.cjs +9 -9
- package/dist/components/onboarding-guides/index.js +8 -8
- package/dist/components/related-content/index.cjs +7 -7
- package/dist/components/related-content/index.js +6 -6
- package/dist/components/tickets/index.cjs +8 -8
- package/dist/components/tickets/index.js +7 -7
- package/dist/components/ui/index.cjs +5 -5
- package/dist/components/ui/index.js +4 -4
- package/dist/components/ui/stacked-rows-panel.d.ts +3 -0
- package/dist/components/ui/stacked-rows-panel.d.ts.map +1 -1
- package/dist/embed-shims/index.cjs +3 -3
- package/dist/embed-shims/index.js +2 -2
- package/dist/embed-shims/next-navigation.cjs +3 -3
- package/dist/embed-shims/next-navigation.d.ts.map +1 -1
- package/dist/embed-shims/next-navigation.js +1 -1
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +5 -5
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/src/components/ui/stacked-rows-panel.tsx +14 -0
- package/src/embed-shims/__tests__/next-navigation.test.ts +165 -0
- package/src/embed-shims/next-navigation.tsx +46 -9
- package/src/stories/StackedRowsPanel.stories.tsx +21 -0
- package/dist/chunk-G7UE6RKV.cjs.map +0 -1
- package/dist/chunk-PLJLE4A4.js.map +0 -1
- /package/dist/{chunk-5TCOKIAS.js.map → chunk-2NHRQU5S.js.map} +0 -0
- /package/dist/{chunk-XMCURSQ7.js.map → chunk-7DLIR4M3.js.map} +0 -0
- /package/dist/{chunk-4XLJWX2N.js.map → chunk-7EUIW46X.js.map} +0 -0
- /package/dist/{chunk-OXE2PNKV.js.map → chunk-BZE76SU7.js.map} +0 -0
- /package/dist/{chunk-6PB5HGFM.js.map → chunk-KJKLNI4T.js.map} +0 -0
- /package/dist/{chunk-RUQ4MVBN.js.map → chunk-LRSJJVYR.js.map} +0 -0
- /package/dist/{chunk-Y4WY2AF6.js.map → chunk-NAASWINZ.js.map} +0 -0
- /package/dist/{chunk-APWAFTFL.js.map → chunk-QQOR52ER.js.map} +0 -0
- /package/dist/{chunk-FFCGB73K.js.map → chunk-QXYOGJQJ.js.map} +0 -0
- /package/dist/{chunk-OMUCATVA.js.map → chunk-RVWC4P3H.js.map} +0 -0
- /package/dist/{chunk-56NEIHTC.js.map → chunk-UVDVZB6I.js.map} +0 -0
- /package/dist/{chunk-ORKNKKOH.js.map → chunk-UYC52F32.js.map} +0 -0
- /package/dist/{chunk-X7UBB6F6.js.map → chunk-XDBFXCLE.js.map} +0 -0
- /package/dist/{chunk-AD4A44US.js.map → chunk-XRZSYFLR.js.map} +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Regression tests for the `next/navigation` shim fallback (unregistered host).
|
|
5
|
+
*
|
|
6
|
+
* The guarantee under test: an unregistered `useRouter().push/replace` must
|
|
7
|
+
* perform a same-origin SPA navigation via the History API and NEVER hard-load
|
|
8
|
+
* the document — a `?search=` write from `useApiParams` used to hard-reload via
|
|
9
|
+
* `window.location.replace`. The registered path must delegate to the host
|
|
10
|
+
* router untouched.
|
|
11
|
+
*
|
|
12
|
+
* `impl` is module-level singleton state, so each test re-imports the module
|
|
13
|
+
* fresh via `vi.resetModules()` to isolate registration state. We also stub
|
|
14
|
+
* `window.location` with a spy object so any hard navigation (assign/replace/
|
|
15
|
+
* reload) is observable — jsdom leaves those methods unimplemented anyway.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const ORIGIN = 'http://localhost:3000'
|
|
19
|
+
|
|
20
|
+
async function freshModule() {
|
|
21
|
+
vi.resetModules()
|
|
22
|
+
return import('../next-navigation')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let assignSpy: ReturnType<typeof vi.fn>
|
|
26
|
+
let replaceSpy: ReturnType<typeof vi.fn>
|
|
27
|
+
let reloadSpy: ReturnType<typeof vi.fn>
|
|
28
|
+
let pushStateSpy: ReturnType<typeof vi.spyOn>
|
|
29
|
+
let replaceStateSpy: ReturnType<typeof vi.spyOn>
|
|
30
|
+
let originalLocation: Location
|
|
31
|
+
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
originalLocation = window.location
|
|
34
|
+
assignSpy = vi.fn()
|
|
35
|
+
replaceSpy = vi.fn()
|
|
36
|
+
reloadSpy = vi.fn()
|
|
37
|
+
Object.defineProperty(window, 'location', {
|
|
38
|
+
configurable: true,
|
|
39
|
+
value: {
|
|
40
|
+
href: `${ORIGIN}/`,
|
|
41
|
+
origin: ORIGIN,
|
|
42
|
+
pathname: '/',
|
|
43
|
+
search: '',
|
|
44
|
+
assign: assignSpy,
|
|
45
|
+
replace: replaceSpy,
|
|
46
|
+
reload: reloadSpy,
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
// Real jsdom history — spy without changing behavior so we can assert which
|
|
50
|
+
// History API the fallback used (push vs replace encodes the nav semantics).
|
|
51
|
+
pushStateSpy = vi.spyOn(window.history, 'pushState')
|
|
52
|
+
replaceStateSpy = vi.spyOn(window.history, 'replaceState')
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
afterEach(() => {
|
|
56
|
+
Object.defineProperty(window, 'location', { configurable: true, value: originalLocation })
|
|
57
|
+
vi.restoreAllMocks()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
describe('fallback useRouter (unregistered host)', () => {
|
|
61
|
+
it('replace() writes the URL via history.replaceState — never a hard navigation', async () => {
|
|
62
|
+
const { useRouter } = await freshModule()
|
|
63
|
+
const popstate = vi.fn()
|
|
64
|
+
window.addEventListener('popstate', popstate)
|
|
65
|
+
|
|
66
|
+
useRouter().replace('?search=laptop')
|
|
67
|
+
|
|
68
|
+
expect(replaceStateSpy).toHaveBeenCalledWith(null, '', `${ORIGIN}/?search=laptop`)
|
|
69
|
+
expect(pushStateSpy).not.toHaveBeenCalled()
|
|
70
|
+
// No full-document navigation of any kind — this is the reported bug.
|
|
71
|
+
expect(assignSpy).not.toHaveBeenCalled()
|
|
72
|
+
expect(replaceSpy).not.toHaveBeenCalled()
|
|
73
|
+
expect(reloadSpy).not.toHaveBeenCalled()
|
|
74
|
+
// Subscribers (usePathname/useSearchParams) get a re-render signal.
|
|
75
|
+
expect(popstate).toHaveBeenCalledTimes(1)
|
|
76
|
+
|
|
77
|
+
window.removeEventListener('popstate', popstate)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('push() uses history.pushState (new entry) — never a hard navigation', async () => {
|
|
81
|
+
const { useRouter } = await freshModule()
|
|
82
|
+
useRouter().push('/scripts?tab=list')
|
|
83
|
+
|
|
84
|
+
expect(pushStateSpy).toHaveBeenCalledWith(null, '', `${ORIGIN}/scripts?tab=list`)
|
|
85
|
+
expect(replaceStateSpy).not.toHaveBeenCalled()
|
|
86
|
+
expect(assignSpy).not.toHaveBeenCalled()
|
|
87
|
+
expect(reloadSpy).not.toHaveBeenCalled()
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it('falls back to a real navigation for cross-origin targets, honoring replace semantics', async () => {
|
|
91
|
+
const { useRouter } = await freshModule()
|
|
92
|
+
useRouter().replace('https://example.com/evil')
|
|
93
|
+
|
|
94
|
+
// replace() must use location.replace (no back-button entry), not assign.
|
|
95
|
+
expect(replaceSpy).toHaveBeenCalledWith('https://example.com/evil')
|
|
96
|
+
expect(assignSpy).not.toHaveBeenCalled()
|
|
97
|
+
expect(replaceStateSpy).not.toHaveBeenCalled()
|
|
98
|
+
expect(pushStateSpy).not.toHaveBeenCalled()
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('uses location.assign for a cross-origin push (new history entry)', async () => {
|
|
102
|
+
const { useRouter } = await freshModule()
|
|
103
|
+
useRouter().push('https://example.com/evil')
|
|
104
|
+
|
|
105
|
+
expect(assignSpy).toHaveBeenCalledWith('https://example.com/evil')
|
|
106
|
+
expect(replaceSpy).not.toHaveBeenCalled()
|
|
107
|
+
expect(pushStateSpy).not.toHaveBeenCalled()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it('falls back to a real navigation for a malformed href (push → assign)', async () => {
|
|
111
|
+
const { useRouter } = await freshModule()
|
|
112
|
+
useRouter().push('http://[invalid')
|
|
113
|
+
|
|
114
|
+
expect(assignSpy).toHaveBeenCalledWith('http://[invalid')
|
|
115
|
+
expect(replaceSpy).not.toHaveBeenCalled()
|
|
116
|
+
expect(pushStateSpy).not.toHaveBeenCalled()
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it('falls back to a real navigation for a malformed href (replace → replace)', async () => {
|
|
120
|
+
const { useRouter } = await freshModule()
|
|
121
|
+
useRouter().replace('http://[invalid')
|
|
122
|
+
|
|
123
|
+
expect(replaceSpy).toHaveBeenCalledWith('http://[invalid')
|
|
124
|
+
expect(assignSpy).not.toHaveBeenCalled()
|
|
125
|
+
expect(replaceStateSpy).not.toHaveBeenCalled()
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it('back/forward remain history-based (unchanged)', async () => {
|
|
129
|
+
const { useRouter } = await freshModule()
|
|
130
|
+
const backSpy = vi.spyOn(window.history, 'back').mockImplementation(() => {})
|
|
131
|
+
const forwardSpy = vi.spyOn(window.history, 'forward').mockImplementation(() => {})
|
|
132
|
+
useRouter().back()
|
|
133
|
+
useRouter().forward()
|
|
134
|
+
expect(backSpy).toHaveBeenCalledTimes(1)
|
|
135
|
+
expect(forwardSpy).toHaveBeenCalledTimes(1)
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
describe('registered useRouter (Next host)', () => {
|
|
140
|
+
it('delegates to the host router and never touches window.location or history', async () => {
|
|
141
|
+
const { useRouter, registerNavigation } = await freshModule()
|
|
142
|
+
const hostRouter = {
|
|
143
|
+
push: vi.fn(),
|
|
144
|
+
replace: vi.fn(),
|
|
145
|
+
back: vi.fn(),
|
|
146
|
+
forward: vi.fn(),
|
|
147
|
+
refresh: vi.fn(),
|
|
148
|
+
prefetch: vi.fn(),
|
|
149
|
+
}
|
|
150
|
+
registerNavigation({ useRouter: () => hostRouter })
|
|
151
|
+
|
|
152
|
+
const r = useRouter()
|
|
153
|
+
r.replace('?search=laptop', { scroll: false })
|
|
154
|
+
r.push('/scripts')
|
|
155
|
+
|
|
156
|
+
expect(hostRouter.replace).toHaveBeenCalledWith('?search=laptop', { scroll: false })
|
|
157
|
+
expect(hostRouter.push).toHaveBeenCalledWith('/scripts')
|
|
158
|
+
// The fallback path is completely bypassed — no navigation side effects.
|
|
159
|
+
expect(assignSpy).not.toHaveBeenCalled()
|
|
160
|
+
expect(replaceSpy).not.toHaveBeenCalled()
|
|
161
|
+
expect(reloadSpy).not.toHaveBeenCalled()
|
|
162
|
+
expect(pushStateSpy).not.toHaveBeenCalled()
|
|
163
|
+
expect(replaceStateSpy).not.toHaveBeenCalled()
|
|
164
|
+
})
|
|
165
|
+
})
|
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
* After registration, every exported hook in this file delegates to
|
|
23
23
|
* the real implementation. Without registration, the stubs run:
|
|
24
24
|
*
|
|
25
|
-
* - `useRouter()` → push/replace
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* - `useRouter()` → push/replace do a same-origin SPA navigation via the
|
|
26
|
+
* History API (`pushState`/`replaceState` + a synthetic `popstate`), so a
|
|
27
|
+
* query-param write never reloads the document; cross-origin/malformed
|
|
28
|
+
* hrefs fall back to `window.location`. back/forward use
|
|
29
|
+
* `history.back/forward`; refresh reloads; prefetch is a no-op.
|
|
28
30
|
* - `usePathname()` → returns `window.location.pathname` (popstate-
|
|
29
31
|
* subscribed so back/forward re-renders).
|
|
30
32
|
* - `useSearchParams()` → returns `URLSearchParams` view of
|
|
@@ -34,10 +36,12 @@
|
|
|
34
36
|
* - `notFound()` / `redirect()` / `permanentRedirect()` —
|
|
35
37
|
* best-effort equivalents using `window.location`.
|
|
36
38
|
*
|
|
37
|
-
* The fallback path subscribes to `popstate
|
|
38
|
-
* `
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* The fallback path subscribes to `popstate`. Native `pushState`/
|
|
40
|
+
* `replaceState` do NOT fire popstate, but the fallback `useRouter`'s
|
|
41
|
+
* push/replace dispatch a synthetic `popstate` so this file's own
|
|
42
|
+
* `usePathname`/`useSearchParams` subscribers re-render. A URL mutated
|
|
43
|
+
* through some OTHER API still won't auto-re-render here — embedders
|
|
44
|
+
* that need that should register a real router or supply their own.
|
|
41
45
|
*/
|
|
42
46
|
'use client'
|
|
43
47
|
import { useEffect, useState } from 'react'
|
|
@@ -95,11 +99,44 @@ const noopRouter: RouterStub = {
|
|
|
95
99
|
prefetch: () => {},
|
|
96
100
|
}
|
|
97
101
|
|
|
102
|
+
/**
|
|
103
|
+
* SPA navigation for the unregistered fallback. Uses the History API instead of
|
|
104
|
+
* `window.location.assign/replace` so a same-origin URL change (e.g. a table's
|
|
105
|
+
* `?search=` write via `useApiParams`) never triggers a full document reload —
|
|
106
|
+
* even if a real router was never registered, or the registration landed on a
|
|
107
|
+
* DIFFERENT module instance than this one (duplicate lib copy / ESM-CJS dual
|
|
108
|
+
* package). A synthetic `popstate` is dispatched so this file's own
|
|
109
|
+
* `usePathname`/`useSearchParams` subscribers re-render in response.
|
|
110
|
+
* Cross-origin or malformed hrefs still fall back to a real `window.location`
|
|
111
|
+
* navigation, which is the only correct behavior there.
|
|
112
|
+
*/
|
|
113
|
+
function softNavigate(href: string, mode: 'push' | 'replace'): void {
|
|
114
|
+
if (typeof window === 'undefined') return
|
|
115
|
+
try {
|
|
116
|
+
const url = new URL(href, window.location.href)
|
|
117
|
+
if (url.origin !== window.location.origin) {
|
|
118
|
+
// Preserve the caller's history semantics: replace() must not leave a
|
|
119
|
+
// back-button entry, so it uses `location.replace`, not `location.assign`.
|
|
120
|
+
if (mode === 'push') window.location.assign(url.href)
|
|
121
|
+
else window.location.replace(url.href)
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
if (mode === 'push') window.history.pushState(null, '', url.href)
|
|
125
|
+
else window.history.replaceState(null, '', url.href)
|
|
126
|
+
window.dispatchEvent(new PopStateEvent('popstate'))
|
|
127
|
+
} catch {
|
|
128
|
+
// Malformed href — a real navigation is safer than swallowing it, but still
|
|
129
|
+
// honor push vs replace history semantics.
|
|
130
|
+
if (mode === 'push') window.location.assign(href)
|
|
131
|
+
else window.location.replace(href)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
98
135
|
function fallbackUseRouter(): RouterStub {
|
|
99
136
|
if (typeof window === 'undefined') return noopRouter
|
|
100
137
|
return {
|
|
101
|
-
push: (href: string) =>
|
|
102
|
-
replace: (href: string) =>
|
|
138
|
+
push: (href: string) => softNavigate(href, 'push'),
|
|
139
|
+
replace: (href: string) => softNavigate(href, 'replace'),
|
|
103
140
|
back: () => window.history.back(),
|
|
104
141
|
forward: () => window.history.forward(),
|
|
105
142
|
refresh: () => window.location.reload(),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
|
|
2
2
|
import { useMemo } from 'react'
|
|
3
|
+
import { InfoCircleIcon } from '../components/icons-v2-generated/signs-and-symbols'
|
|
3
4
|
import { type ColumnDef, DataTable, type Row, useDataTable } from '../components/ui/data-table'
|
|
4
5
|
import { EntityImage } from '../components/ui/entity-image'
|
|
5
6
|
import { StackedRowsPanel } from '../components/ui/stacked-rows-panel'
|
|
@@ -105,6 +106,26 @@ export const SingleRow: Story = {
|
|
|
105
106
|
},
|
|
106
107
|
}
|
|
107
108
|
|
|
109
|
+
/** Info-banner row: `leadingIcon` centers a 24px glyph against both text lines. */
|
|
110
|
+
export const InfoBanner: Story = {
|
|
111
|
+
args: {
|
|
112
|
+
rows: [
|
|
113
|
+
{
|
|
114
|
+
id: 'banner',
|
|
115
|
+
className: 'p-[var(--spacing-system-s)]',
|
|
116
|
+
columns: [
|
|
117
|
+
{
|
|
118
|
+
key: 'banner',
|
|
119
|
+
leadingIcon: <InfoCircleIcon className="size-6 text-ods-text-secondary" />,
|
|
120
|
+
value: 'Using OpenFrame default actions',
|
|
121
|
+
label: 'These quick actions are curated and approved by OpenFrame.',
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
}
|
|
128
|
+
|
|
108
129
|
interface DemoDevice {
|
|
109
130
|
id: string
|
|
110
131
|
name: string
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-G7UE6RKV.cjs","../src/embed-shims/next-navigation.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-G7UE6RKV.cjs","sourcesContent":[null,"/**\n * `next/navigation` shim — environment-aware app-router hooks.\n *\n * Defaults to lightweight stubs backed by `window.location` and\n * `URLSearchParams` so lib components that read the URL work outside\n * a Next.js router shell. Next.js hosts can opt into the REAL\n * `next/navigation` exports (full client-router integration —\n * `router.replace(href, { scroll: false })`, etc.) by calling\n * {@link registerNavigation} ONCE at app init:\n *\n * // hub: lib/embed-shim-registration.ts\n * import {\n * useRouter, usePathname, useSearchParams, useParams,\n * redirect, permanentRedirect, notFound,\n * } from 'next/navigation'\n * import { registerNavigation } from '@flamingo-stack/openframe-frontend-core/embed-shims'\n * registerNavigation({\n * useRouter, usePathname, useSearchParams, useParams,\n * redirect, permanentRedirect, notFound,\n * })\n *\n * After registration, every exported hook in this file delegates to\n * the real implementation. Without registration, the stubs run:\n *\n * - `useRouter()` → push/replace use `window.location.assign/replace`;\n * back/forward use `history.back/forward`; refresh reloads; prefetch\n * is a no-op.\n * - `usePathname()` → returns `window.location.pathname` (popstate-\n * subscribed so back/forward re-renders).\n * - `useSearchParams()` → returns `URLSearchParams` view of\n * `window.location.search` (popstate-subscribed).\n * - `useParams()` → returns `{}` — embedders that need dynamic\n * params should parse them from `usePathname()` themselves.\n * - `notFound()` / `redirect()` / `permanentRedirect()` —\n * best-effort equivalents using `window.location`.\n *\n * The fallback path subscribes to `popstate` only. Programmatic\n * `pushState`/`replaceState` does NOT fire popstate, so the fallback\n * does not auto-re-render on programmatic navigation. Embedders that\n * need that should register a real router or supply their own.\n */\n'use client'\nimport { useEffect, useState } from 'react'\n\n// --- Router shape — matches Next's AppRouterInstance surface enough to\n// --- satisfy hub callsites that pass options like `{ scroll: false }`.\ninterface NavigateOptions {\n scroll?: boolean\n}\n\ninterface PrefetchOptions {\n kind?: unknown\n}\n\ninterface RouterStub {\n push: (href: string, options?: NavigateOptions) => void\n replace: (href: string, options?: NavigateOptions) => void\n back: () => void\n forward: () => void\n refresh: () => void\n prefetch: (href: string, options?: PrefetchOptions) => void\n}\n\n// --- Registration surface — partial so a host can register only the\n// --- hooks it needs (e.g. routes that don't use redirect()).\nexport interface NavigationImpl {\n useRouter: () => RouterStub\n usePathname: () => string\n useSearchParams: () => URLSearchParams\n useParams: <T extends Record<string, string | string[]>>() => T\n redirect: (url: string, type?: unknown) => never\n permanentRedirect: (url: string, type?: unknown) => never\n notFound: () => never\n}\n\nlet impl: Partial<NavigationImpl> = {}\n\n/**\n * Register real `next/navigation` exports. Merges with any prior\n * registration so partial-overrides are safe. Call ONCE at app init\n * in a Next.js host.\n */\nexport function registerNavigation(nav: Partial<NavigationImpl>): void {\n impl = { ...impl, ...nav }\n}\n\n// --- Fallback impls ----------------------------------------------------\n\nconst noopRouter: RouterStub = {\n push: () => {},\n replace: () => {},\n back: () => {},\n forward: () => {},\n refresh: () => {},\n prefetch: () => {},\n}\n\nfunction fallbackUseRouter(): RouterStub {\n if (typeof window === 'undefined') return noopRouter\n return {\n push: (href: string) => window.location.assign(href),\n replace: (href: string) => window.location.replace(href),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n refresh: () => window.location.reload(),\n prefetch: () => {},\n }\n}\n\nfunction readLocation<T>(read: () => T, fallback: T): T {\n return typeof window === 'undefined' ? fallback : read()\n}\n\n/** Subscribes to `popstate` only. pushState/replaceState do NOT fire\n * popstate by design — callers that mutate the URL programmatically\n * (and want their component to re-render in response) need a real\n * router. */\nfunction useLocationSubscription(): number {\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (typeof window === 'undefined') return\n const onChange = () => setTick((t) => t + 1)\n window.addEventListener('popstate', onChange)\n return () => window.removeEventListener('popstate', onChange)\n }, [])\n return tick\n}\n\nfunction fallbackUsePathname(): string {\n useLocationSubscription()\n return readLocation(() => window.location.pathname, '/')\n}\n\nfunction fallbackUseSearchParams(): URLSearchParams {\n useLocationSubscription()\n return readLocation(\n () => new URLSearchParams(window.location.search),\n new URLSearchParams(),\n )\n}\n\nfunction fallbackUseParams<T extends Record<string, string | string[]>>(): T {\n return {} as T\n}\n\nfunction fallbackRedirect(url: string): never {\n if (typeof window !== 'undefined') window.location.assign(url)\n throw new Error(`[next-navigation shim] redirect(${url})`)\n}\n\nfunction fallbackPermanentRedirect(url: string): never {\n if (typeof window !== 'undefined') window.location.replace(url)\n throw new Error(`[next-navigation shim] permanentRedirect(${url})`)\n}\n\nfunction fallbackNotFound(): never {\n throw new Error('[next-navigation shim] notFound()')\n}\n\n// --- Public surface — each export checks the registry and falls\n// --- through to the fallback. Hooks must remain hooks (no early-\n// --- return-before-hook) — the registry lookup is itself synchronous\n// --- and the registered impl is a hook in its own right.\n\nexport function useRouter(): RouterStub {\n return (impl.useRouter ?? fallbackUseRouter)()\n}\n\nexport function usePathname(): string {\n return (impl.usePathname ?? fallbackUsePathname)()\n}\n\nexport function useSearchParams(): URLSearchParams {\n return (impl.useSearchParams ?? fallbackUseSearchParams)()\n}\n\nexport function useParams<T extends Record<string, string | string[]>>(): T {\n return ((impl.useParams as (() => T) | undefined) ?? fallbackUseParams)()\n}\n\nexport function redirect(url: string, type?: unknown): never {\n return (impl.redirect ?? fallbackRedirect)(url, type)\n}\n\nexport function permanentRedirect(url: string, type?: unknown): never {\n return (impl.permanentRedirect ?? fallbackPermanentRedirect)(url, type)\n}\n\nexport function notFound(): never {\n return (impl.notFound ?? fallbackNotFound)()\n}\n\n/** Match Next's RedirectType enum surface for code that imports it. */\nexport const RedirectType = {\n push: 'push' as const,\n replace: 'replace' as const,\n}\n\n/** Match Next's ServerInsertedHTMLContext surface — non-functional in\n * the embed environment but importable so consumers don't crash. */\nexport const ServerInsertedHTMLContext = null as any\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embed-shims/next-navigation.tsx"],"sourcesContent":["/**\n * `next/navigation` shim — environment-aware app-router hooks.\n *\n * Defaults to lightweight stubs backed by `window.location` and\n * `URLSearchParams` so lib components that read the URL work outside\n * a Next.js router shell. Next.js hosts can opt into the REAL\n * `next/navigation` exports (full client-router integration —\n * `router.replace(href, { scroll: false })`, etc.) by calling\n * {@link registerNavigation} ONCE at app init:\n *\n * // hub: lib/embed-shim-registration.ts\n * import {\n * useRouter, usePathname, useSearchParams, useParams,\n * redirect, permanentRedirect, notFound,\n * } from 'next/navigation'\n * import { registerNavigation } from '@flamingo-stack/openframe-frontend-core/embed-shims'\n * registerNavigation({\n * useRouter, usePathname, useSearchParams, useParams,\n * redirect, permanentRedirect, notFound,\n * })\n *\n * After registration, every exported hook in this file delegates to\n * the real implementation. Without registration, the stubs run:\n *\n * - `useRouter()` → push/replace use `window.location.assign/replace`;\n * back/forward use `history.back/forward`; refresh reloads; prefetch\n * is a no-op.\n * - `usePathname()` → returns `window.location.pathname` (popstate-\n * subscribed so back/forward re-renders).\n * - `useSearchParams()` → returns `URLSearchParams` view of\n * `window.location.search` (popstate-subscribed).\n * - `useParams()` → returns `{}` — embedders that need dynamic\n * params should parse them from `usePathname()` themselves.\n * - `notFound()` / `redirect()` / `permanentRedirect()` —\n * best-effort equivalents using `window.location`.\n *\n * The fallback path subscribes to `popstate` only. Programmatic\n * `pushState`/`replaceState` does NOT fire popstate, so the fallback\n * does not auto-re-render on programmatic navigation. Embedders that\n * need that should register a real router or supply their own.\n */\n'use client'\nimport { useEffect, useState } from 'react'\n\n// --- Router shape — matches Next's AppRouterInstance surface enough to\n// --- satisfy hub callsites that pass options like `{ scroll: false }`.\ninterface NavigateOptions {\n scroll?: boolean\n}\n\ninterface PrefetchOptions {\n kind?: unknown\n}\n\ninterface RouterStub {\n push: (href: string, options?: NavigateOptions) => void\n replace: (href: string, options?: NavigateOptions) => void\n back: () => void\n forward: () => void\n refresh: () => void\n prefetch: (href: string, options?: PrefetchOptions) => void\n}\n\n// --- Registration surface — partial so a host can register only the\n// --- hooks it needs (e.g. routes that don't use redirect()).\nexport interface NavigationImpl {\n useRouter: () => RouterStub\n usePathname: () => string\n useSearchParams: () => URLSearchParams\n useParams: <T extends Record<string, string | string[]>>() => T\n redirect: (url: string, type?: unknown) => never\n permanentRedirect: (url: string, type?: unknown) => never\n notFound: () => never\n}\n\nlet impl: Partial<NavigationImpl> = {}\n\n/**\n * Register real `next/navigation` exports. Merges with any prior\n * registration so partial-overrides are safe. Call ONCE at app init\n * in a Next.js host.\n */\nexport function registerNavigation(nav: Partial<NavigationImpl>): void {\n impl = { ...impl, ...nav }\n}\n\n// --- Fallback impls ----------------------------------------------------\n\nconst noopRouter: RouterStub = {\n push: () => {},\n replace: () => {},\n back: () => {},\n forward: () => {},\n refresh: () => {},\n prefetch: () => {},\n}\n\nfunction fallbackUseRouter(): RouterStub {\n if (typeof window === 'undefined') return noopRouter\n return {\n push: (href: string) => window.location.assign(href),\n replace: (href: string) => window.location.replace(href),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n refresh: () => window.location.reload(),\n prefetch: () => {},\n }\n}\n\nfunction readLocation<T>(read: () => T, fallback: T): T {\n return typeof window === 'undefined' ? fallback : read()\n}\n\n/** Subscribes to `popstate` only. pushState/replaceState do NOT fire\n * popstate by design — callers that mutate the URL programmatically\n * (and want their component to re-render in response) need a real\n * router. */\nfunction useLocationSubscription(): number {\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (typeof window === 'undefined') return\n const onChange = () => setTick((t) => t + 1)\n window.addEventListener('popstate', onChange)\n return () => window.removeEventListener('popstate', onChange)\n }, [])\n return tick\n}\n\nfunction fallbackUsePathname(): string {\n useLocationSubscription()\n return readLocation(() => window.location.pathname, '/')\n}\n\nfunction fallbackUseSearchParams(): URLSearchParams {\n useLocationSubscription()\n return readLocation(\n () => new URLSearchParams(window.location.search),\n new URLSearchParams(),\n )\n}\n\nfunction fallbackUseParams<T extends Record<string, string | string[]>>(): T {\n return {} as T\n}\n\nfunction fallbackRedirect(url: string): never {\n if (typeof window !== 'undefined') window.location.assign(url)\n throw new Error(`[next-navigation shim] redirect(${url})`)\n}\n\nfunction fallbackPermanentRedirect(url: string): never {\n if (typeof window !== 'undefined') window.location.replace(url)\n throw new Error(`[next-navigation shim] permanentRedirect(${url})`)\n}\n\nfunction fallbackNotFound(): never {\n throw new Error('[next-navigation shim] notFound()')\n}\n\n// --- Public surface — each export checks the registry and falls\n// --- through to the fallback. Hooks must remain hooks (no early-\n// --- return-before-hook) — the registry lookup is itself synchronous\n// --- and the registered impl is a hook in its own right.\n\nexport function useRouter(): RouterStub {\n return (impl.useRouter ?? fallbackUseRouter)()\n}\n\nexport function usePathname(): string {\n return (impl.usePathname ?? fallbackUsePathname)()\n}\n\nexport function useSearchParams(): URLSearchParams {\n return (impl.useSearchParams ?? fallbackUseSearchParams)()\n}\n\nexport function useParams<T extends Record<string, string | string[]>>(): T {\n return ((impl.useParams as (() => T) | undefined) ?? fallbackUseParams)()\n}\n\nexport function redirect(url: string, type?: unknown): never {\n return (impl.redirect ?? fallbackRedirect)(url, type)\n}\n\nexport function permanentRedirect(url: string, type?: unknown): never {\n return (impl.permanentRedirect ?? fallbackPermanentRedirect)(url, type)\n}\n\nexport function notFound(): never {\n return (impl.notFound ?? fallbackNotFound)()\n}\n\n/** Match Next's RedirectType enum surface for code that imports it. */\nexport const RedirectType = {\n push: 'push' as const,\n replace: 'replace' as const,\n}\n\n/** Match Next's ServerInsertedHTMLContext surface — non-functional in\n * the embed environment but importable so consumers don't crash. */\nexport const ServerInsertedHTMLContext = null as any\n"],"mappings":";;;;;;AA0CA,SAAS,WAAW,gBAAgB;AAwC7B,SAAS,mBAAmB,KAAoC;AACrE,SAAO,EAAE,GAAG,MAAM,GAAG,IAAI;AAC3B;AAaA,SAAS,oBAAgC;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO;AAAA,IACL,MAAM,CAAC,SAAiB,OAAO,SAAS,OAAO,IAAI;AAAA,IACnD,SAAS,CAAC,SAAiB,OAAO,SAAS,QAAQ,IAAI;AAAA,IACvD,MAAM,MAAM,OAAO,QAAQ,KAAK;AAAA,IAChC,SAAS,MAAM,OAAO,QAAQ,QAAQ;AAAA,IACtC,SAAS,MAAM,OAAO,SAAS,OAAO;AAAA,IACtC,UAAU,MAAM;AAAA,IAAC;AAAA,EACnB;AACF;AAEA,SAAS,aAAgB,MAAe,UAAgB;AACtD,SAAO,OAAO,WAAW,cAAc,WAAW,KAAK;AACzD;AAMA,SAAS,0BAAkC;AACzC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,CAAC;AAClC,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,YAAa;AACnC,UAAM,WAAW,MAAM,QAAQ,CAAC,MAAM,IAAI,CAAC;AAC3C,WAAO,iBAAiB,YAAY,QAAQ;AAC5C,WAAO,MAAM,OAAO,oBAAoB,YAAY,QAAQ;AAAA,EAC9D,GAAG,CAAC,CAAC;AACL,SAAO;AACT;AAEA,SAAS,sBAA8B;AACrC,0BAAwB;AACxB,SAAO,aAAa,MAAM,OAAO,SAAS,UAAU,GAAG;AACzD;AAEA,SAAS,0BAA2C;AAClD,0BAAwB;AACxB,SAAO;AAAA,IACL,MAAM,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAAA,IAChD,IAAI,gBAAgB;AAAA,EACtB;AACF;AAEA,SAAS,oBAAoE;AAC3E,SAAO,CAAC;AACV;AAEA,SAAS,iBAAiB,KAAoB;AAC5C,MAAI,OAAO,WAAW,YAAa,QAAO,SAAS,OAAO,GAAG;AAC7D,QAAM,IAAI,MAAM,mCAAmC,GAAG,GAAG;AAC3D;AAEA,SAAS,0BAA0B,KAAoB;AACrD,MAAI,OAAO,WAAW,YAAa,QAAO,SAAS,QAAQ,GAAG;AAC9D,QAAM,IAAI,MAAM,4CAA4C,GAAG,GAAG;AACpE;AAEA,SAAS,mBAA0B;AACjC,QAAM,IAAI,MAAM,mCAAmC;AACrD;AAOO,SAAS,YAAwB;AACtC,UAAQ,KAAK,aAAa,mBAAmB;AAC/C;AAEO,SAAS,cAAsB;AACpC,UAAQ,KAAK,eAAe,qBAAqB;AACnD;AAEO,SAAS,kBAAmC;AACjD,UAAQ,KAAK,mBAAmB,yBAAyB;AAC3D;AAEO,SAAS,YAA4D;AAC1E,UAAS,KAAK,aAAuC,mBAAmB;AAC1E;AAEO,SAAS,SAAS,KAAa,MAAuB;AAC3D,UAAQ,KAAK,YAAY,kBAAkB,KAAK,IAAI;AACtD;AAEO,SAAS,kBAAkB,KAAa,MAAuB;AACpE,UAAQ,KAAK,qBAAqB,2BAA2B,KAAK,IAAI;AACxE;AAEO,SAAS,WAAkB;AAChC,UAAQ,KAAK,YAAY,kBAAkB;AAC7C;AA9LA,IA2EI,MAaE,YAyGO,cAOA;AAxMb;AAAA;AA2EA,IAAI,OAAgC,CAAC;AAarC,IAAM,aAAyB;AAAA,MAC7B,MAAM,MAAM;AAAA,MAAC;AAAA,MACb,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,MAAM,MAAM;AAAA,MAAC;AAAA,MACb,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,UAAU,MAAM;AAAA,MAAC;AAAA,IACnB;AAkGO,IAAM,eAAe;AAAA,MAC1B,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAIO,IAAM,4BAA4B;AAAA;AAAA;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|