@tappify/extension-sdk 2.1.0-beta.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -54
- package/dist/{chunk-6HETNZJY.cjs → chunk-2DBSVKAU.cjs} +1 -1
- package/dist/{chunk-6HETNZJY.cjs.map → chunk-2DBSVKAU.cjs.map} +1 -1
- package/dist/{chunk-O357OJXL.cjs → chunk-3YWVYA42.cjs} +18 -14
- package/dist/chunk-3YWVYA42.cjs.map +1 -0
- package/dist/{chunk-GAUZYBXE.cjs → chunk-5AAPD5WV.cjs} +11 -11
- package/dist/chunk-5AAPD5WV.cjs.map +1 -0
- package/dist/{chunk-SGEYDV3K.mjs → chunk-BDCX6LRQ.mjs} +3 -3
- package/dist/chunk-BDCX6LRQ.mjs.map +1 -0
- package/dist/{chunk-KZ5NGFUP.mjs → chunk-C3YNVHBP.mjs} +7 -20
- package/dist/chunk-C3YNVHBP.mjs.map +1 -0
- package/dist/{chunk-QXD7WVKK.mjs → chunk-CSTYBKZC.mjs} +1 -1
- package/dist/chunk-CSTYBKZC.mjs.map +1 -0
- package/dist/{chunk-SWG7CNTZ.mjs → chunk-CTSZ5D7S.mjs} +5 -9
- package/dist/chunk-CTSZ5D7S.mjs.map +1 -0
- package/dist/chunk-EW54H7CR.cjs +722 -0
- package/dist/chunk-EW54H7CR.cjs.map +1 -0
- package/dist/chunk-EX3NFXDK.mjs +722 -0
- package/dist/chunk-EX3NFXDK.mjs.map +1 -0
- package/dist/{chunk-A74HCO6T.cjs → chunk-G7XZSN2Q.cjs} +18 -31
- package/dist/chunk-G7XZSN2Q.cjs.map +1 -0
- package/dist/{chunk-RBIQT75L.mjs → chunk-GG3IX52W.mjs} +2 -2
- package/dist/{chunk-SLGOHIBL.mjs → chunk-IGK2AP6J.mjs} +17 -13
- package/dist/chunk-IGK2AP6J.mjs.map +1 -0
- package/dist/{chunk-VV7ELNRW.cjs → chunk-JMUK3K47.cjs} +3 -3
- package/dist/{chunk-VV7ELNRW.cjs.map → chunk-JMUK3K47.cjs.map} +1 -1
- package/dist/{chunk-SGCYEEXD.mjs → chunk-MNDVYPEP.mjs} +2 -9
- package/dist/chunk-MNDVYPEP.mjs.map +1 -0
- package/dist/{chunk-BPCGXXMD.cjs → chunk-NFUPPCX4.cjs} +18 -22
- package/dist/chunk-NFUPPCX4.cjs.map +1 -0
- package/dist/{chunk-PRCZMOLD.cjs → chunk-OPPYEA7F.cjs} +3 -3
- package/dist/{chunk-PRCZMOLD.cjs.map → chunk-OPPYEA7F.cjs.map} +1 -1
- package/dist/{chunk-7YKH4LZN.cjs → chunk-PYJMJF44.cjs} +2 -9
- package/dist/chunk-PYJMJF44.cjs.map +1 -0
- package/dist/{chunk-QA5AL3VZ.mjs → chunk-QHM7XNRK.mjs} +2 -2
- package/dist/{chunk-QA5AL3VZ.mjs.map → chunk-QHM7XNRK.mjs.map} +1 -1
- package/dist/codegen.cjs.map +1 -1
- package/dist/codegen.d.cts +7 -40
- package/dist/codegen.d.ts +7 -40
- package/dist/codegen.mjs.map +1 -1
- package/dist/{constants-BAimnqOK.d.cts → constants-DJ_KgZpN.d.cts} +8 -41
- package/dist/{constants-BAimnqOK.d.ts → constants-DJ_KgZpN.d.ts} +8 -41
- package/dist/{context-Cr93B05o.d.ts → context-Dt6xh_5t.d.cts} +4 -5
- package/dist/{context-DJ3REtdT.d.cts → context-Ml7k_V14.d.ts} +4 -5
- package/dist/{errors-Cqh0wrqt.d.ts → errors-COsBh7kd.d.cts} +2 -3
- package/dist/{errors-Cqh0wrqt.d.cts → errors-COsBh7kd.d.ts} +2 -3
- package/dist/handler-CZIlZ5vu.d.ts +227 -0
- package/dist/handler-kU9Jf36K.d.cts +227 -0
- package/dist/host.cjs +4 -4
- package/dist/host.d.cts +4 -4
- package/dist/host.d.ts +4 -4
- package/dist/host.mjs +3 -3
- package/dist/index.cjs +34 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +627 -69
- package/dist/index.d.ts +627 -69
- package/dist/index.mjs +33 -4
- package/dist/manifest.cjs +23 -132
- package/dist/manifest.cjs.map +1 -1
- package/dist/manifest.d.cts +12 -93
- package/dist/manifest.d.ts +12 -93
- package/dist/manifest.mjs +9 -118
- package/dist/manifest.mjs.map +1 -1
- package/dist/server.cjs +66 -14
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/server.mjs +61 -9
- package/dist/server.mjs.map +1 -1
- package/dist/styles.css +367 -0
- package/dist/testing/index.cjs +13 -72
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +10 -29
- package/dist/testing/index.d.ts +10 -29
- package/dist/testing/index.mjs +13 -72
- package/dist/testing/index.mjs.map +1 -1
- package/dist/testing/jest.cjs +5 -5
- package/dist/testing/jest.mjs +2 -2
- package/dist/testing/vitest.cjs +5 -5
- package/dist/testing/vitest.cjs.map +1 -1
- package/dist/testing/vitest.d.cts +0 -10
- package/dist/testing/vitest.d.ts +0 -10
- package/dist/testing/vitest.mjs +2 -2
- package/dist/testing/vitest.mjs.map +1 -1
- package/dist/{types-BYGcp5pZ.d.ts → types-DDAGLpov.d.ts} +3 -4
- package/dist/{types-I1JOZyI_.d.cts → types-DrpQSv_2.d.cts} +3 -4
- package/dist/vite-preview.cjs +125 -294
- package/dist/vite-preview.cjs.map +1 -1
- package/dist/vite-preview.d.cts +24 -6
- package/dist/vite-preview.d.ts +24 -6
- package/dist/vite-preview.mjs +118 -287
- package/dist/vite-preview.mjs.map +1 -1
- package/dist/vite.cjs +23 -133
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.cts +7 -40
- package/dist/vite.d.ts +7 -40
- package/dist/vite.mjs +17 -127
- package/dist/vite.mjs.map +1 -1
- package/package.json +2 -12
- package/schema/extension-v2.json +121 -432
- package/dist/chunk-2CY5HVY7.mjs +0 -59
- package/dist/chunk-2CY5HVY7.mjs.map +0 -1
- package/dist/chunk-7YKH4LZN.cjs.map +0 -1
- package/dist/chunk-A74HCO6T.cjs.map +0 -1
- package/dist/chunk-BPCGXXMD.cjs.map +0 -1
- package/dist/chunk-EB5XWQAU.cjs +0 -132
- package/dist/chunk-EB5XWQAU.cjs.map +0 -1
- package/dist/chunk-GAUZYBXE.cjs.map +0 -1
- package/dist/chunk-KZ5NGFUP.mjs.map +0 -1
- package/dist/chunk-O357OJXL.cjs.map +0 -1
- package/dist/chunk-ONJMPO3P.cjs +0 -59
- package/dist/chunk-ONJMPO3P.cjs.map +0 -1
- package/dist/chunk-QJMZRV7A.mjs +0 -132
- package/dist/chunk-QJMZRV7A.mjs.map +0 -1
- package/dist/chunk-QXD7WVKK.mjs.map +0 -1
- package/dist/chunk-SGCYEEXD.mjs.map +0 -1
- package/dist/chunk-SGEYDV3K.mjs.map +0 -1
- package/dist/chunk-SLGOHIBL.mjs.map +0 -1
- package/dist/chunk-SWG7CNTZ.mjs.map +0 -1
- package/dist/client-CV1qzQgx.d.cts +0 -25
- package/dist/client-CnlSHDWE.d.ts +0 -25
- package/dist/ui/styles.css +0 -740
- package/dist/ui.cjs +0 -1018
- package/dist/ui.cjs.map +0 -1
- package/dist/ui.d.cts +0 -231
- package/dist/ui.d.ts +0 -231
- package/dist/ui.mjs +0 -1018
- package/dist/ui.mjs.map +0 -1
- package/dist/vite-preview-bootstrap.cjs +0 -66
- package/dist/vite-preview-bootstrap.cjs.map +0 -1
- package/dist/vite-preview-bootstrap.d.cts +0 -15
- package/dist/vite-preview-bootstrap.d.ts +0 -15
- package/dist/vite-preview-bootstrap.mjs +0 -66
- package/dist/vite-preview-bootstrap.mjs.map +0 -1
- package/dist/work-events-DB3WR468.d.ts +0 -547
- package/dist/work-events-Dxe7Djdy.d.cts +0 -547
- /package/dist/{chunk-RBIQT75L.mjs.map → chunk-GG3IX52W.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview.cjs","../src/vite-preview.tsx","../src/vite/preview/client.tsx","../package.json","../src/vite/preview/error-boundary.tsx","../src/vite/preview/model.ts","../src/vite/preview/styles.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview.cjs","sourcesContent":[null,"import { createRoot } from 'react-dom/client';\nimport { LocalPreview, type LocalPreviewOptions } from './vite/preview/client';\n\nexport {\n componentFromModule,\n loadContribution,\n LocalPreview,\n} from './vite/preview/client';\nexport type {\n LocalPreviewOptions,\n LocalPreviewProps,\n PreviewLoadRequest,\n PreviewModuleLoader,\n} from './vite/preview/client';\n\nexport function mountLocalPreview({\n manifest,\n remote,\n mount,\n}: LocalPreviewOptions): () => void {\n const root = createRoot(mount);\n root.render(<LocalPreview manifest={manifest} remote={remote} />);\n return () => root.unmount();\n}\n","import type { ModuleFederation } from '@module-federation/runtime';\nimport * as TanstackQuery from '@tanstack/react-query';\nimport * as React from 'react';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n} from 'react';\nimport * as ReactDom from 'react-dom';\nimport * as JsxRuntime from 'react/jsx-runtime';\nimport packageJson from '../../../package.json';\nimport type { TapSettingsValues, TapSize } from '../../client/types';\nimport { TapHostProvider, createHostQueryClient } from '../../host/provider';\nimport * as TappifySdk from '../../index';\nimport { remoteName } from '../../manifest/define';\nimport type { ExtensionManifest } from '../../manifest/types';\nimport { fixtures } from '../../testing/fixtures';\nimport { createTapMock } from '../../testing/mock';\nimport { PreviewErrorBoundary } from './error-boundary';\nimport { previewProps, previewSelections } from './model';\nimport { previewStyles } from './styles';\n\nexport interface PreviewLoadRequest {\n extensionId: string;\n remote: string;\n expose: string;\n}\n\nexport type PreviewModuleLoader = (\n request: PreviewLoadRequest,\n) => Promise<unknown>;\n\nexport interface LocalPreviewOptions {\n manifest: ExtensionManifest;\n remote: string;\n mount: HTMLElement;\n}\n\nexport interface LocalPreviewProps {\n manifest: ExtensionManifest;\n remote: string;\n loader?: PreviewModuleLoader;\n}\n\ntype Theme = 'light' | 'dark';\ntype Viewport = 'desktop' | 'tablet' | 'mobile';\n\ntype LoadState =\n | { key: string; status: 'loading' }\n | {\n key: string;\n status: 'ready';\n Component: ComponentType<Record<string, unknown>>;\n styles: string[];\n }\n | { key: string; status: 'failed'; message: string };\n\nconst SINGLETON = { singleton: true, requiredVersion: false } as const;\nconst federationInstances = new Map<string, Promise<ModuleFederation>>();\nlet federationSequence = 0;\n\nasync function federationFor(\n extensionId: string,\n remote: string,\n): Promise<ModuleFederation> {\n const key = `${extensionId}|${remote}`;\n const existing = federationInstances.get(key);\n if (existing !== undefined) return existing;\n\n federationSequence += 1;\n const name = remoteName(extensionId);\n const created = import('@module-federation/runtime').then(\n ({ createInstance }) =>\n createInstance({\n name: `tappify_local_preview_${String(federationSequence)}`,\n remotes: [{ name, alias: name, entry: remote, type: 'module' }],\n shared: {\n react: {\n version: React.version,\n lib: () => React,\n shareConfig: SINGLETON,\n },\n 'react-dom': {\n version: ReactDom.version,\n lib: () => ReactDom,\n shareConfig: SINGLETON,\n },\n 'react/jsx-runtime': {\n version: React.version,\n lib: () => JsxRuntime,\n shareConfig: SINGLETON,\n },\n '@tanstack/react-query': {\n version: packageJson.peerDependencies[\n '@tanstack/react-query'\n ].replace(/^[^\\d]*/, ''),\n lib: () => TanstackQuery,\n shareConfig: SINGLETON,\n },\n '@tappify/extension-sdk': {\n version: packageJson.version,\n lib: () => TappifySdk,\n shareConfig: SINGLETON,\n },\n },\n }),\n );\n federationInstances.set(key, created);\n return created;\n}\n\nexport function componentFromModule(\n module: unknown,\n expose: string,\n): ComponentType<Record<string, unknown>> {\n const candidate =\n typeof module === 'object' && module !== null && 'default' in module\n ? (module as { default: unknown }).default\n : module;\n if (typeof candidate !== 'function') {\n throw new Error(\n `${expose} did not default-export a React component. Export the contribution component as default.`,\n );\n }\n return candidate as ComponentType<Record<string, unknown>>;\n}\n\nfunction stylesFromModule(module: unknown): string[] {\n if (\n typeof module !== 'object' ||\n module === null ||\n !('styles' in module) ||\n !Array.isArray(module.styles)\n ) {\n return [];\n }\n return module.styles.filter(\n (style): style is string => typeof style === 'string',\n );\n}\n\nexport async function loadContribution({\n extensionId,\n remote,\n expose,\n}: PreviewLoadRequest): Promise<unknown> {\n const federation = await federationFor(extensionId, remote);\n return federation.loadRemote(\n `${remoteName(extensionId)}/${expose.replace(/^\\.\\//, '')}`,\n );\n}\n\nfunction isExternalRemote(remote: string): boolean {\n try {\n const host = new URL(remote).hostname;\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '[::1]';\n } catch {\n return true;\n }\n}\n\nfunction localProcedureStubs(\n manifest: ExtensionManifest,\n): Record<string, () => never> {\n return Object.fromEntries(\n Object.keys(manifest.server?.procedures ?? {}).map(name => [\n name,\n () => {\n throw new Error(\n 'This view needs live server data. Run tappify extension dev --live to connect it.',\n );\n },\n ]),\n );\n}\n\nfunction Message({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"tap-preview-message\" role=\"status\">\n <h2>{title}</h2>\n <span>{children}</span>\n </div>\n );\n}\n\ninterface PreviewShadowNodes {\n root: ShadowRoot;\n content: HTMLElement;\n}\n\nfunction PreviewSurface({\n portal,\n styles,\n children,\n}: {\n portal: HTMLElement;\n styles: string[];\n children: React.ReactNode;\n}) {\n const [nodes, setNodes] = useState<PreviewShadowNodes | null>(null);\n const attachHost = useCallback((host: HTMLDivElement | null): void => {\n if (host === null) return;\n const root = host.shadowRoot ?? host.attachShadow({ mode: 'open' });\n let content = root.querySelector<HTMLElement>('[data-tap-content]');\n if (content === null) {\n content = document.createElement('div');\n content.className = 'tap-root';\n content.setAttribute('data-tap-content', '');\n root.appendChild(content);\n }\n setNodes({ root, content });\n }, []);\n\n useEffect(() => {\n if (nodes === null) return;\n nodes.root.appendChild(portal);\n return () => portal.remove();\n }, [nodes, portal]);\n\n useEffect(() => {\n if (nodes === null) return;\n const injected: HTMLStyleElement[] = [];\n const inject = (kind: string, css: string): void => {\n const element = document.createElement('style');\n element.setAttribute('data-tap-style', kind);\n element.textContent = css;\n nodes.root.insertBefore(element, nodes.content);\n injected.push(element);\n };\n\n inject(\n 'preview',\n ':host { display: block; height: 100%; min-height: 0; overflow: auto; } .tap-root { box-sizing: border-box; height: 100%; min-height: 100%; padding: 24px; }',\n );\n for (const css of styles) inject('remote', css);\n return () => {\n for (const element of injected) element.remove();\n };\n }, [nodes, styles]);\n\n return (\n <div\n ref={attachHost}\n className=\"tap-preview-surface\"\n data-tap-preview-surface\n >\n {nodes === null ? null : ReactDom.createPortal(children, nodes.content)}\n </div>\n );\n}\n\nexport function LocalPreview({\n manifest,\n remote,\n loader = loadContribution,\n}: LocalPreviewProps) {\n const selections = useMemo(() => previewSelections(manifest), [manifest]);\n const [expose, setExpose] = useState(\n selections[0]?.contribution.expose ?? '',\n );\n const [theme, setTheme] = useState<Theme>('light');\n const [viewport, setViewport] = useState<Viewport>('desktop');\n const [size, setSize] = useState<TapSize>('slot');\n const [generation, setGeneration] = useState(0);\n const [settings, setSettings] = useState<TapSettingsValues>({});\n const [loaded, setLoaded] = useState<LoadState>({\n key: '',\n status: 'loading',\n });\n\n const selection =\n selections.find(item => item.contribution.expose === expose) ??\n selections[0];\n const contribution = selection?.contribution;\n const loadKey = `${remote}|${contribution?.expose ?? ''}`;\n\n useEffect(() => {\n if (contribution === undefined) return;\n let cancelled = false;\n setLoaded({ key: loadKey, status: 'loading' });\n void loader({\n extensionId: manifest.id,\n remote,\n expose: contribution.expose,\n })\n .then(module => {\n if (cancelled) return;\n setLoaded({\n key: loadKey,\n status: 'ready',\n Component: componentFromModule(module, contribution.expose),\n styles: stylesFromModule(module),\n });\n })\n .catch((error: unknown) => {\n if (cancelled) return;\n setLoaded({\n key: loadKey,\n status: 'failed',\n message:\n error instanceof Error\n ? error.message\n : 'The remote entry could not be loaded.',\n });\n });\n return () => {\n cancelled = true;\n };\n }, [contribution, loadKey, loader, manifest.id, remote]);\n\n const host = useMemo(() => {\n void generation;\n return createTapMock({\n extensionId: manifest.id,\n extensionName: manifest.name,\n project: fixtures.project.project,\n theme,\n size,\n server: localProcedureStubs(manifest),\n });\n }, [generation, manifest, size, theme]);\n const queryClient = useMemo(() => {\n void generation;\n return createHostQueryClient();\n }, [generation]);\n\n const current: LoadState =\n loaded.key === loadKey ? loaded : { key: loadKey, status: 'loading' };\n\n let content: React.ReactNode;\n if (contribution === undefined) {\n content = (\n <Message title=\"No UI contributions\">\n Run `tappify extension add` and choose a page, tab, widget, row action,\n or settings panel.\n </Message>\n );\n } else if (current.status === 'failed') {\n content = (\n <div className=\"tap-preview-message\" role=\"alert\">\n <strong>The remote entry could not load.</strong>\n <span>{current.message}</span>\n </div>\n );\n } else if (current.status === 'ready') {\n const Component = current.Component;\n const props = previewProps(contribution, {\n settings,\n onSettingsChange: setSettings,\n });\n content = (\n <TapHostProvider tap={host.tap} queryClient={queryClient}>\n <PreviewSurface portal={host.portal} styles={current.styles}>\n <PreviewErrorBoundary key={`${loadKey}|${String(generation)}`}>\n <Component {...props} />\n </PreviewErrorBoundary>\n </PreviewSurface>\n </TapHostProvider>\n );\n } else {\n content = (\n <Message title=\"Loading contribution\">Loading {selection.label}.</Message>\n );\n }\n\n return (\n <main className=\"tap-preview\" data-theme={theme}>\n <style>{previewStyles}</style>\n <header className=\"tap-preview-bar\">\n <div className=\"tap-preview-brand\">\n <img src={`/${manifest.icon.replace(/^\\.\\//, '')}`} alt=\"\" />\n <div>\n <strong>{manifest.name}</strong>\n <span>\n <i aria-hidden=\"true\" />\n {isExternalRemote(remote) ? 'External remote' : 'Local preview'}\n {' · Fixture data'}\n </span>\n </div>\n </div>\n <div className=\"tap-preview-controls\">\n {selections.length > 0 ? (\n <label className=\"tap-preview-field tap-preview-field--contribution\">\n <span>Contribution</span>\n <select\n value={contribution?.expose ?? ''}\n onChange={event => setExpose(event.target.value)}\n >\n {selections.map(item => (\n <option\n key={item.contribution.expose}\n value={item.contribution.expose}\n >\n {item.label}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n <label className=\"tap-preview-field\">\n <span>Theme</span>\n <select\n value={theme}\n onChange={event => setTheme(event.target.value as Theme)}\n >\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </label>\n <label className=\"tap-preview-field\">\n <span>Viewport</span>\n <select\n value={viewport}\n onChange={event => setViewport(event.target.value as Viewport)}\n >\n <option value=\"desktop\">Desktop</option>\n <option value=\"tablet\">Tablet</option>\n <option value=\"mobile\">Mobile</option>\n </select>\n </label>\n <label className=\"tap-preview-field\">\n <span>Surface</span>\n <select\n value={size}\n aria-label=\"Surface size\"\n onChange={event => setSize(event.target.value as TapSize)}\n >\n <option value=\"slot\">Slot</option>\n <option value=\"panel\">Panel</option>\n <option value=\"page\">Page</option>\n </select>\n </label>\n <button\n className=\"tap-preview-reset\"\n type=\"button\"\n aria-label=\"Reset fixtures\"\n onClick={() => {\n setSettings({});\n setGeneration(value => value + 1);\n }}\n >\n Reset\n </button>\n </div>\n </header>\n <section className=\"tap-preview-stage\">\n <div\n className=\"tap-preview-canvas\"\n data-viewport={viewport}\n data-size={size}\n aria-label=\"Preview canvas\"\n >\n {content}\n </div>\n </section>\n </main>\n );\n}\n","{\n \"name\": \"@tappify/extension-sdk\",\n \"version\": \"2.1.0-beta.1\",\n \"description\": \"Build extensions that run inside Tappify\",\n \"author\": \"Tappify Team\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./manifest\": {\n \"types\": \"./dist/manifest.d.ts\",\n \"import\": \"./dist/manifest.mjs\",\n \"require\": \"./dist/manifest.cjs\"\n },\n \"./server\": {\n \"types\": \"./dist/server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.cjs\"\n },\n \"./host\": {\n \"types\": \"./dist/host.d.ts\",\n \"import\": \"./dist/host.mjs\",\n \"require\": \"./dist/host.cjs\"\n },\n \"./ui\": {\n \"types\": \"./dist/ui.d.ts\",\n \"import\": \"./dist/ui.mjs\",\n \"require\": \"./dist/ui.cjs\"\n },\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.mjs\",\n \"require\": \"./dist/vite.cjs\"\n },\n \"./vite/preview\": {\n \"types\": \"./dist/vite-preview.d.ts\",\n \"import\": \"./dist/vite-preview.mjs\",\n \"require\": \"./dist/vite-preview.cjs\"\n },\n \"./vite/preview/bootstrap\": {\n \"types\": \"./dist/vite-preview-bootstrap.d.ts\",\n \"import\": \"./dist/vite-preview-bootstrap.mjs\",\n \"require\": \"./dist/vite-preview-bootstrap.cjs\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing/index.d.ts\",\n \"import\": \"./dist/testing/index.mjs\",\n \"require\": \"./dist/testing/index.cjs\"\n },\n \"./testing/vitest\": {\n \"types\": \"./dist/testing/vitest.d.ts\",\n \"import\": \"./dist/testing/vitest.mjs\",\n \"require\": \"./dist/testing/vitest.cjs\"\n },\n \"./testing/jest\": {\n \"types\": \"./dist/testing/jest.d.ts\",\n \"import\": \"./dist/testing/jest.mjs\",\n \"require\": \"./dist/testing/jest.cjs\"\n },\n \"./codegen\": {\n \"types\": \"./dist/codegen.d.ts\",\n \"import\": \"./dist/codegen.mjs\",\n \"require\": \"./dist/codegen.cjs\"\n },\n \"./ui/styles.css\": \"./dist/ui/styles.css\",\n \"./schema/extension-v2.json\": \"./schema/extension-v2.json\",\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": [\n \"*.css\",\n \"./dist/testing/vitest.*\",\n \"./dist/testing/jest.*\"\n ],\n \"files\": [\n \"dist\",\n \"schema\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/tappify-dev/extension-sdk.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/tappify-dev/extension-sdk/issues\"\n },\n \"homepage\": \"https://docs.tappify.ai/extensions\",\n \"keywords\": [\n \"tappify\",\n \"extension\",\n \"extension-sdk\",\n \"react\",\n \"module-federation\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist && tsup && node scripts/copy-styles.mjs\",\n \"build:schema\": \"tsx scripts/build-json-schema.ts\",\n \"build:manifest-reference\": \"tsx scripts/build-manifest-reference.ts\",\n \"build:api-reference\": \"tsx scripts/build-api-reference.ts\",\n \"check:hosted-schema\": \"node scripts/check-hosted-schema.mjs\",\n \"docs:examples\": \"tsx scripts/check-tsdoc-examples.ts && tsc -p tsconfig.examples.json\",\n \"docs:validate\": \"typedoc --options typedoc.frontend.json --emit none && typedoc --options typedoc.server.json --emit none && typedoc --options typedoc.testing.json --emit none\",\n \"docs:reference\": \"pnpm docs:examples && pnpm docs:validate && pnpm build:schema && pnpm build:manifest-reference && pnpm build:api-reference\",\n \"dev\": \"tsup --watch\",\n \"type-check\": \"tsc --noEmit\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,mjs,cjs}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,mjs,cjs}\\\"\",\n \"lint\": \"eslint \\\"{src,test}/**/*.{ts,tsx}\\\" --fix\",\n \"test\": \"vitest run --passWithNoTests --coverage\",\n \"test:watch\": \"vitest --watch\",\n \"prepare\": \"husky\",\n \"commit\": \"cz\",\n \"prepublishOnly\": \"npm run build && npm test\",\n \"spellcheck\": \"cspell \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,yml,mjs,cjs}\\\" \\\".github/**/*.yml\\\"\",\n \"semantic-release\": \"semantic-release\"\n },\n \"peerDependencies\": {\n \"@module-federation/vite\": \">=1.16.0\",\n \"@tanstack/react-query\": \"^5.100.0\",\n \"@testing-library/react\": \">=16.0.0\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"vite\": \">=8.0.0\",\n \"vitest\": \">=3.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@module-federation/vite\": {\n \"optional\": true\n },\n \"@tanstack/react-query\": {\n \"optional\": true\n },\n \"@testing-library/react\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n },\n \"react-dom\": {\n \"optional\": true\n },\n \"vite\": {\n \"optional\": true\n },\n \"vitest\": {\n \"optional\": true\n }\n },\n \"dependencies\": {\n \"@module-federation/runtime\": \"~2.5.1\",\n \"clsx\": \"^2.1.1\",\n \"jose\": \"^6.2.12\",\n \"json-schema-to-typescript\": \"^16.0.0\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^20.4.3\",\n \"@commitlint/config-conventional\": \"^20.4.3\",\n \"@eslint/js\": \"^10.0.1\",\n \"@module-federation/vite\": \"~1.16.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/github\": \"^12.0.6\",\n \"@semantic-release/npm\": \"^13.1.5\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@tanstack/react-query\": \"^5.100.14\",\n \"@testing-library/jest-dom\": \"^6.6.3\",\n \"@testing-library/react\": \"^16.1.0\",\n \"@testing-library/user-event\": \"^14.5.2\",\n \"@types/json-schema\": \"^7.0.15\",\n \"@types/node\": \"^22.13.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.2.7\",\n \"@vitest/coverage-v8\": \"^3.0.0\",\n \"commitizen\": \"^4.3.1\",\n \"conventional-changelog-conventionalcommits\": \"^9.3.0\",\n \"cspell\": \"^9.7.0\",\n \"cz-conventional-changelog\": \"^3.3.0\",\n \"eslint\": \"^10.0.2\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-prettier\": \"^5.5.5\",\n \"eslint-plugin-react\": \"^7.37.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0\",\n \"globals\": \"^17.4.0\",\n \"happy-dom\": \"^17.0.0\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^16.3.2\",\n \"prettier\": \"^3.8.1\",\n \"prettier-plugin-organize-imports\": \"^4.3.0\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.3.0\",\n \"tsx\": \"^4.20.0\",\n \"typedoc\": \"^0.28.20\",\n \"typedoc-plugin-markdown\": \"^4.13.0\",\n \"typescript\": \"^5.7.0\",\n \"typescript-eslint\": \"^8.56.1\",\n \"vite\": \"^8.0.14\",\n \"vitest\": \"^3.0.0\"\n },\n \"config\": {\n \"commitizen\": {\n \"path\": \"cz-conventional-changelog\",\n \"types\": {\n \"feat\": {\n \"description\": \"New feature\",\n \"title\": \"Features\"\n },\n \"fix\": {\n \"description\": \"Bug fix\",\n \"title\": \"Fixes\"\n },\n \"docs\": {\n \"description\": \"Documentation changes\",\n \"title\": \"Documentation\"\n },\n \"style\": {\n \"description\": \"Code style changes (formatting, etc.)\",\n \"title\": \"Styles\"\n },\n \"refactor\": {\n \"description\": \"Code refactoring\",\n \"title\": \"Refactoring\"\n },\n \"perf\": {\n \"description\": \"Performance improvements\",\n \"title\": \"Performance\"\n },\n \"test\": {\n \"description\": \"Adding or updating tests\",\n \"title\": \"Tests\"\n },\n \"build\": {\n \"description\": \"Build system or dependencies\",\n \"title\": \"Build\"\n },\n \"ci\": {\n \"description\": \"CI/CD changes\",\n \"title\": \"CI/CD\"\n },\n \"chore\": {\n \"description\": \"Chore\",\n \"title\": \"Chores\"\n },\n \"revert\": {\n \"description\": \"Revert previous commit\",\n \"title\": \"Reverts\"\n },\n \"wip\": {\n \"description\": \"Work in progress / continuing a feature\",\n \"title\": \"Work in Progress\"\n },\n \"cont\": {\n \"description\": \"Continue/complete a feature\",\n \"title\": \"Continue Feature\"\n },\n \"improve\": {\n \"description\": \"Small improvements or enhancements\",\n \"title\": \"Improvements\"\n }\n }\n }\n },\n \"lint-staged\": {\n \"*.{ts,tsx}\": [\n \"eslint --fix\",\n \"prettier --write\",\n \"cspell --no-must-find-files\"\n ],\n \"*.{json,md}\": [\n \"prettier --write\",\n \"cspell --no-must-find-files\"\n ]\n }\n}\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface PreviewErrorBoundaryProps {\n children: ReactNode;\n}\n\ninterface PreviewErrorBoundaryState {\n error: Error | null;\n}\n\nexport class PreviewErrorBoundary extends Component<\n PreviewErrorBoundaryProps,\n PreviewErrorBoundaryState\n> {\n state: PreviewErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): PreviewErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(_error: Error, _info: ErrorInfo): void {\n // The visible diagnostic is the local preview's reporting boundary.\n }\n\n render(): ReactNode {\n if (this.state.error !== null) {\n return (\n <div className=\"tap-preview-message\" role=\"alert\">\n <strong>The contribution could not render.</strong>\n <span>{this.state.error.message}</span>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import type {\n TapPageProps,\n TapRowActionProps,\n TapSettingsProps,\n TapSettingsValues,\n TapTabProps,\n TapWidgetProps,\n} from '../../client/types';\nimport { uiContributions } from '../../manifest/define';\nimport type {\n ExposableKind,\n ExtensionManifest,\n UiContributionRef,\n} from '../../manifest/types';\nimport { fixtureKeywords } from '../../testing/fixtures';\n\nexport interface PreviewSelection {\n contribution: UiContributionRef;\n label: string;\n}\n\nexport interface PreviewState {\n settings: TapSettingsValues;\n onSettingsChange(values: TapSettingsValues): void;\n}\n\nexport type PreviewProps =\n | TapWidgetProps\n | TapTabProps\n | TapPageProps\n | TapRowActionProps\n | TapSettingsProps;\n\nconst kindLabel: Record<ExposableKind, string> = {\n page: 'page',\n tab: 'tab',\n widget: 'widget',\n rowAction: 'row action',\n settings: 'settings',\n};\n\nfunction titleByExpose(manifest: ExtensionManifest): Map<string, string> {\n const titles = new Map<string, string>();\n const contributes = manifest.contributes;\n\n for (const page of contributes.pages ?? []) {\n titles.set(`./pages/${page.id}`, page.title);\n }\n for (const tab of contributes.tabs ?? []) {\n titles.set(`./tabs/${tab.id}`, tab.title);\n }\n for (const widget of contributes.widgets ?? []) {\n titles.set(`./widgets/${widget.id}`, widget.title);\n }\n for (const action of contributes.rowActions ?? []) {\n titles.set(`./rowActions/${action.id}`, action.title);\n }\n if (contributes.settings) titles.set('./settings', 'Settings');\n\n return titles;\n}\n\nexport function previewSelections(\n manifest: ExtensionManifest,\n): PreviewSelection[] {\n const titles = titleByExpose(manifest);\n return uiContributions(manifest).map(contribution => {\n const title = titles.get(contribution.expose) ?? contribution.id;\n return {\n contribution,\n label:\n contribution.kind === 'settings'\n ? title\n : `${title} (${kindLabel[contribution.kind]})`,\n };\n });\n}\n\nexport function previewProps(\n contribution: UiContributionRef,\n state: PreviewState,\n): PreviewProps {\n switch (contribution.kind) {\n case 'page':\n return { params: { pageId: contribution.id, path: '/' } };\n case 'tab':\n return {};\n case 'widget':\n return { config: {} };\n case 'rowAction':\n return { row: { ...fixtureKeywords[0] } };\n case 'settings':\n return {\n values: state.settings,\n onChange: values => state.onSettingsChange(values),\n };\n }\n}\n\nexport function previewTopology(manifest: ExtensionManifest): string {\n return uiContributions(manifest)\n .map(({ kind, id, expose, entry }) =>\n JSON.stringify({ kind, id, expose, entry }),\n )\n .sort()\n .join('\\n');\n}\n","export const previewStyles = `\n:root {\n color-scheme: light;\n font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n background: #f2f3ee;\n color: #121212;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n}\n* { box-sizing: border-box; }\nbody { margin: 0; min-width: 320px; background: #f2f3ee; }\nbutton, select { font: inherit; }\n.tap-preview {\n --preview-canvas: #f2f3ee;\n --preview-paper: #fdfdfd;\n --preview-ink: #121212;\n --preview-muted: #686b66;\n --preview-border: #d5d7d1;\n --preview-control: #f7f8f4;\n --preview-green: #235027;\n min-height: 100vh;\n display: grid;\n grid-template-rows: auto 1fr;\n background: var(--preview-canvas);\n color: var(--preview-ink);\n}\n.tap-preview[data-theme=\"dark\"] {\n color-scheme: dark;\n --preview-canvas: #111216;\n --preview-paper: #181920;\n --preview-ink: #f4f5f1;\n --preview-muted: #a7aaa4;\n --preview-border: #303239;\n --preview-control: #202229;\n --preview-green: #b4d773;\n}\n.tap-preview-bar {\n min-height: 68px;\n display: flex;\n gap: 24px;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid var(--preview-border);\n background: var(--preview-paper);\n}\n.tap-preview-brand { min-width: 210px; margin-right: auto; display: flex; align-items: center; gap: 10px; }\n.tap-preview-brand img { width: 36px; height: 36px; flex: 0 0 auto; object-fit: cover; border: 1px solid var(--preview-border); border-radius: 8px; background: #fff; }\n.tap-preview-brand strong, .tap-preview-brand span { display: block; }\n.tap-preview-brand strong { font-size: 14px; font-weight: 650; letter-spacing: -0.01em; }\n.tap-preview-brand span { margin-top: 2px; color: var(--preview-muted); font-size: 11px; }\n.tap-preview-brand i { width: 6px; height: 6px; display: inline-block; margin-right: 6px; border-radius: 50%; background: #64a75f; box-shadow: 0 0 0 2px rgb(100 167 95 / 14%); }\n.tap-preview-controls { display: flex; align-items: end; gap: 8px; }\n.tap-preview-field { min-width: 104px; display: grid; gap: 4px; color: var(--preview-muted); font-size: 10px; font-weight: 600; letter-spacing: 0.045em; text-transform: uppercase; }\n.tap-preview-field--contribution { min-width: 190px; }\n.tap-preview-field select, .tap-preview-reset {\n height: 32px;\n border: 1px solid var(--preview-border);\n border-radius: 6px;\n outline: none;\n background: var(--preview-control);\n color: var(--preview-ink);\n font-size: 12px;\n font-weight: 500;\n letter-spacing: normal;\n text-transform: none;\n}\n.tap-preview-field select { width: 100%; padding: 0 28px 0 9px; cursor: pointer; }\n.tap-preview-field select:focus, .tap-preview-reset:focus-visible { border-color: var(--preview-green); box-shadow: 0 0 0 2px color-mix(in srgb, var(--preview-green) 18%, transparent); }\n.tap-preview-reset { padding: 0 12px; cursor: pointer; }\n.tap-preview-reset:hover { border-color: color-mix(in srgb, var(--preview-ink) 34%, var(--preview-border)); background: var(--preview-paper); }\n.tap-preview-stage { min-width: 0; padding: 22px 24px 14px; overflow: auto; }\n.tap-preview-canvas {\n width: 100%;\n max-width: 1440px;\n height: max(380px, calc(100vh - 118px));\n margin: 0 auto;\n border: 1px solid var(--preview-border);\n border-radius: 8px;\n overflow: hidden;\n background: var(--preview-paper);\n color: var(--preview-ink);\n box-shadow: 0 2px 8px rgb(20 24 18 / 5%);\n transition: max-width 160ms ease;\n}\n.tap-preview-canvas[data-viewport=\"tablet\"] { max-width: 768px; }\n.tap-preview-canvas[data-viewport=\"mobile\"] { max-width: 390px; }\n.tap-preview-canvas[data-size=\"slot\"] { width: min(100%, 680px); height: 380px; }\n.tap-preview-canvas[data-size=\"panel\"] { width: min(100%, 960px); height: clamp(420px, calc(100vh - 118px), 620px); }\n.tap-preview-canvas[data-size=\"page\"] { height: max(380px, calc(100vh - 118px)); }\n.tap-preview-surface { display: block; height: 100%; min-height: 0; }\n.tap-preview-message { min-height: 360px; display: grid; place-content: center; gap: 8px; padding: 32px; text-align: center; }\n.tap-preview-message span { max-width: 62ch; color: var(--preview-muted); }\n@media (max-width: 640px) {\n .tap-preview-stage { padding: 12px; }\n .tap-preview-bar { align-items: flex-start; padding: 12px; }\n .tap-preview-brand { min-width: 0; }\n .tap-preview-controls { width: 100%; overflow-x: auto; padding-bottom: 2px; }\n .tap-preview-field { min-width: 100px; }\n .tap-preview-field--contribution { min-width: 180px; }\n}\n@media (max-width: 900px) {\n .tap-preview-bar { flex-wrap: wrap; gap: 12px; }\n .tap-preview-controls { flex: 1 1 100%; }\n}\n`;\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview.cjs","../src/vite-preview.tsx","../src/vite/preview/client.tsx","../package.json","../src/vite/preview/error-boundary.tsx","../src/vite/preview/model.ts","../src/vite/preview/styles.ts"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview.cjs","sourcesContent":[null,"import { createRoot } from 'react-dom/client';\nimport { LocalPreview, type LocalPreviewOptions } from './vite/preview/client';\n\nexport {\n componentFromModule,\n loadContribution,\n LocalPreview,\n} from './vite/preview/client';\nexport type {\n LocalPreviewOptions,\n LocalPreviewProps,\n PreviewLoadRequest,\n PreviewModuleLoader,\n} from './vite/preview/client';\n\nexport function mountLocalPreview({\n manifest,\n remote,\n mount,\n}: LocalPreviewOptions): () => void {\n const root = createRoot(mount);\n root.render(<LocalPreview manifest={manifest} remote={remote} />);\n return () => root.unmount();\n}\n","import type { ModuleFederation } from '@module-federation/runtime';\nimport * as TanstackQuery from '@tanstack/react-query';\nimport * as React from 'react';\nimport { useEffect, useMemo, useState, type ComponentType } from 'react';\nimport * as ReactDom from 'react-dom';\nimport * as JsxRuntime from 'react/jsx-runtime';\nimport packageJson from '../../../package.json';\nimport type { TapSettingsValues, TapSize } from '../../client/types';\nimport { TapHostProvider, createHostQueryClient } from '../../host/provider';\nimport * as TappifySdk from '../../index';\nimport { remoteName } from '../../manifest/define';\nimport type { ExtensionManifest } from '../../manifest/types';\nimport { fixtures } from '../../testing/fixtures';\nimport { createTapMock } from '../../testing/mock';\nimport { PreviewErrorBoundary } from './error-boundary';\nimport { previewProps, previewSelections } from './model';\nimport { previewStyles } from './styles';\n\nexport interface PreviewLoadRequest {\n extensionId: string;\n remote: string;\n expose: string;\n}\n\nexport type PreviewModuleLoader = (\n request: PreviewLoadRequest,\n) => Promise<unknown>;\n\nexport interface LocalPreviewOptions {\n manifest: ExtensionManifest;\n remote: string;\n mount: HTMLElement;\n}\n\nexport interface LocalPreviewProps {\n manifest: ExtensionManifest;\n remote: string;\n loader?: PreviewModuleLoader;\n}\n\ntype Theme = 'light' | 'dark';\ntype Viewport = 'desktop' | 'tablet' | 'mobile';\n\ntype LoadState =\n | { key: string; status: 'loading' }\n | {\n key: string;\n status: 'ready';\n Component: ComponentType<Record<string, unknown>>;\n }\n | { key: string; status: 'failed'; message: string };\n\nconst SINGLETON = { singleton: true, requiredVersion: false } as const;\nconst federationInstances = new Map<string, Promise<ModuleFederation>>();\nlet federationSequence = 0;\n\nasync function federationFor(\n extensionId: string,\n remote: string,\n): Promise<ModuleFederation> {\n const key = `${extensionId}|${remote}`;\n const existing = federationInstances.get(key);\n if (existing !== undefined) return existing;\n\n federationSequence += 1;\n const name = remoteName(extensionId);\n const created = import('@module-federation/runtime').then(\n ({ createInstance }) =>\n createInstance({\n name: `tappify_local_preview_${String(federationSequence)}`,\n remotes: [{ name, alias: name, entry: remote, type: 'module' }],\n shared: {\n react: {\n version: React.version,\n lib: () => React,\n shareConfig: SINGLETON,\n },\n 'react-dom': {\n version: ReactDom.version,\n lib: () => ReactDom,\n shareConfig: SINGLETON,\n },\n 'react/jsx-runtime': {\n version: React.version,\n lib: () => JsxRuntime,\n shareConfig: SINGLETON,\n },\n '@tanstack/react-query': {\n version: packageJson.peerDependencies[\n '@tanstack/react-query'\n ].replace(/^[^\\d]*/, ''),\n lib: () => TanstackQuery,\n shareConfig: SINGLETON,\n },\n '@tappify/extension-sdk': {\n version: packageJson.version,\n lib: () => TappifySdk,\n shareConfig: SINGLETON,\n },\n },\n }),\n );\n federationInstances.set(key, created);\n return created;\n}\n\nexport function componentFromModule(\n module: unknown,\n expose: string,\n): ComponentType<Record<string, unknown>> {\n const candidate =\n typeof module === 'object' && module !== null && 'default' in module\n ? (module as { default: unknown }).default\n : module;\n if (typeof candidate !== 'function') {\n throw new Error(\n `${expose} did not default-export a React component. Export the contribution component as default.`,\n );\n }\n return candidate as ComponentType<Record<string, unknown>>;\n}\n\nexport async function loadContribution({\n extensionId,\n remote,\n expose,\n}: PreviewLoadRequest): Promise<unknown> {\n const federation = await federationFor(extensionId, remote);\n return federation.loadRemote(\n `${remoteName(extensionId)}/${expose.replace(/^\\.\\//, '')}`,\n );\n}\n\nfunction isExternalRemote(remote: string): boolean {\n try {\n const host = new URL(remote).hostname;\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '[::1]';\n } catch {\n return true;\n }\n}\n\nfunction Message({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"tap-preview-message\" role=\"status\">\n <h2>{title}</h2>\n <span>{children}</span>\n </div>\n );\n}\n\nexport function LocalPreview({\n manifest,\n remote,\n loader = loadContribution,\n}: LocalPreviewProps) {\n const selections = useMemo(() => previewSelections(manifest), [manifest]);\n const [expose, setExpose] = useState(\n selections[0]?.contribution.expose ?? '',\n );\n const [theme, setTheme] = useState<Theme>('light');\n const [viewport, setViewport] = useState<Viewport>('desktop');\n const [size, setSize] = useState<TapSize>('slot');\n const [generation, setGeneration] = useState(0);\n const [settings, setSettings] = useState<TapSettingsValues>({});\n const [loaded, setLoaded] = useState<LoadState>({\n key: '',\n status: 'loading',\n });\n\n const selection =\n selections.find(item => item.contribution.expose === expose) ??\n selections[0];\n const contribution = selection?.contribution;\n const loadKey = `${remote}|${contribution?.expose ?? ''}`;\n\n useEffect(() => {\n if (contribution === undefined) return;\n let cancelled = false;\n setLoaded({ key: loadKey, status: 'loading' });\n void loader({\n extensionId: manifest.id,\n remote,\n expose: contribution.expose,\n })\n .then(module => {\n if (cancelled) return;\n setLoaded({\n key: loadKey,\n status: 'ready',\n Component: componentFromModule(module, contribution.expose),\n });\n })\n .catch((error: unknown) => {\n if (cancelled) return;\n setLoaded({\n key: loadKey,\n status: 'failed',\n message:\n error instanceof Error\n ? error.message\n : 'The remote entry could not be loaded.',\n });\n });\n return () => {\n cancelled = true;\n };\n }, [contribution, loadKey, loader, manifest.id, remote]);\n\n const host = useMemo(() => {\n void generation;\n return createTapMock({\n extensionId: manifest.id,\n extensionName: manifest.name,\n project: fixtures.project.project,\n theme,\n size,\n });\n }, [generation, manifest.id, manifest.name, size, theme]);\n const queryClient = useMemo(() => {\n void generation;\n return createHostQueryClient();\n }, [generation]);\n\n const current: LoadState =\n loaded.key === loadKey ? loaded : { key: loadKey, status: 'loading' };\n\n let content: React.ReactNode;\n if (contribution === undefined) {\n content = (\n <Message title=\"No UI contributions\">\n Run `tappify extension add` and choose a page, tab, widget, row action,\n or settings panel.\n </Message>\n );\n } else if (current.status === 'failed') {\n content = (\n <div className=\"tap-preview-message\" role=\"alert\">\n <strong>The remote entry could not load.</strong>\n <span>{current.message}</span>\n </div>\n );\n } else if (current.status === 'ready') {\n const Component = current.Component;\n const props = previewProps(contribution, {\n settings,\n onSettingsChange: setSettings,\n });\n content = (\n <TapHostProvider tap={host.tap} queryClient={queryClient}>\n <PreviewErrorBoundary key={`${loadKey}|${String(generation)}`}>\n <div className=\"tap-preview-surface\">\n <Component {...props} />\n </div>\n </PreviewErrorBoundary>\n </TapHostProvider>\n );\n } else {\n content = (\n <Message title=\"Loading contribution\">Loading {selection.label}.</Message>\n );\n }\n\n return (\n <main className=\"tap-preview\" data-theme={theme}>\n <style>{previewStyles}</style>\n <header className=\"tap-preview-bar\">\n <div className=\"tap-preview-brand\">\n <strong>{manifest.name}</strong>\n <span>\n {isExternalRemote(remote) ? 'External remote' : 'Local preview'} ·\n Fixture data\n </span>\n </div>\n {selections.length > 0 ? (\n <label className=\"tap-preview-field\">\n Contribution\n <select\n value={contribution?.expose ?? ''}\n onChange={event => setExpose(event.target.value)}\n >\n {selections.map(item => (\n <option\n key={item.contribution.expose}\n value={item.contribution.expose}\n >\n {item.label}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n <label className=\"tap-preview-field\">\n Theme\n <select\n value={theme}\n onChange={event => setTheme(event.target.value as Theme)}\n >\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </label>\n <label className=\"tap-preview-field\">\n Viewport\n <select\n value={viewport}\n onChange={event => setViewport(event.target.value as Viewport)}\n >\n <option value=\"desktop\">Desktop</option>\n <option value=\"tablet\">Tablet</option>\n <option value=\"mobile\">Mobile</option>\n </select>\n </label>\n <label className=\"tap-preview-field\">\n Surface size\n <select\n value={size}\n onChange={event => setSize(event.target.value as TapSize)}\n >\n <option value=\"slot\">Slot</option>\n <option value=\"panel\">Panel</option>\n <option value=\"page\">Page</option>\n </select>\n </label>\n <button\n className=\"tap-preview-reset\"\n type=\"button\"\n onClick={() => {\n setSettings({});\n setGeneration(value => value + 1);\n }}\n >\n Reset fixtures\n </button>\n </header>\n <section className=\"tap-preview-stage\">\n <div\n className=\"tap-preview-canvas\"\n data-viewport={viewport}\n aria-label=\"Preview canvas\"\n >\n {content}\n </div>\n <p className=\"tap-preview-note\">\n Server procedures are unavailable locally. Use `tappify extension dev\n --live` for real host and server behavior.\n </p>\n </section>\n </main>\n );\n}\n","{\n \"name\": \"@tappify/extension-sdk\",\n \"version\": \"2.1.0\",\n \"description\": \"Build extensions that run inside Tappify\",\n \"author\": \"Tappify Team\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./manifest\": {\n \"types\": \"./dist/manifest.d.ts\",\n \"import\": \"./dist/manifest.mjs\",\n \"require\": \"./dist/manifest.cjs\"\n },\n \"./server\": {\n \"types\": \"./dist/server.d.ts\",\n \"import\": \"./dist/server.mjs\",\n \"require\": \"./dist/server.cjs\"\n },\n \"./host\": {\n \"types\": \"./dist/host.d.ts\",\n \"import\": \"./dist/host.mjs\",\n \"require\": \"./dist/host.cjs\"\n },\n \"./vite\": {\n \"types\": \"./dist/vite.d.ts\",\n \"import\": \"./dist/vite.mjs\",\n \"require\": \"./dist/vite.cjs\"\n },\n \"./vite/preview\": {\n \"types\": \"./dist/vite-preview.d.ts\",\n \"import\": \"./dist/vite-preview.mjs\",\n \"require\": \"./dist/vite-preview.cjs\"\n },\n \"./testing\": {\n \"types\": \"./dist/testing/index.d.ts\",\n \"import\": \"./dist/testing/index.mjs\",\n \"require\": \"./dist/testing/index.cjs\"\n },\n \"./testing/vitest\": {\n \"types\": \"./dist/testing/vitest.d.ts\",\n \"import\": \"./dist/testing/vitest.mjs\",\n \"require\": \"./dist/testing/vitest.cjs\"\n },\n \"./testing/jest\": {\n \"types\": \"./dist/testing/jest.d.ts\",\n \"import\": \"./dist/testing/jest.mjs\",\n \"require\": \"./dist/testing/jest.cjs\"\n },\n \"./codegen\": {\n \"types\": \"./dist/codegen.d.ts\",\n \"import\": \"./dist/codegen.mjs\",\n \"require\": \"./dist/codegen.cjs\"\n },\n \"./styles.css\": \"./dist/styles.css\",\n \"./schema/extension-v2.json\": \"./schema/extension-v2.json\",\n \"./package.json\": \"./package.json\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": [\n \"*.css\",\n \"./dist/testing/vitest.*\",\n \"./dist/testing/jest.*\"\n ],\n \"files\": [\n \"dist\",\n \"schema\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/tappify-dev/extension-sdk.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/tappify-dev/extension-sdk/issues\"\n },\n \"homepage\": \"https://docs.tappify.ai/extensions\",\n \"keywords\": [\n \"tappify\",\n \"extension\",\n \"extension-sdk\",\n \"react\",\n \"module-federation\"\n ],\n \"scripts\": {\n \"build\": \"rm -rf dist && tsup && node scripts/copy-styles.mjs\",\n \"build:schema\": \"tsx scripts/build-json-schema.ts\",\n \"build:manifest-reference\": \"tsx scripts/build-manifest-reference.ts\",\n \"build:api-reference\": \"tsx scripts/build-api-reference.ts\",\n \"check:hosted-schema\": \"node scripts/check-hosted-schema.mjs\",\n \"docs:examples\": \"tsx scripts/check-tsdoc-examples.ts && tsc -p tsconfig.examples.json\",\n \"docs:validate\": \"typedoc --options typedoc.frontend.json --emit none && typedoc --options typedoc.server.json --emit none && typedoc --options typedoc.testing.json --emit none\",\n \"docs:reference\": \"pnpm docs:examples && pnpm docs:validate && pnpm build:schema && pnpm build:manifest-reference && pnpm build:api-reference\",\n \"dev\": \"tsup --watch\",\n \"type-check\": \"tsc --noEmit\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,mjs,cjs}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,mjs,cjs}\\\"\",\n \"lint\": \"eslint \\\"{src,test}/**/*.{ts,tsx}\\\" --fix\",\n \"test\": \"vitest run --passWithNoTests --coverage\",\n \"test:watch\": \"vitest --watch\",\n \"prepare\": \"husky\",\n \"commit\": \"cz\",\n \"prepublishOnly\": \"npm run build && npm test\",\n \"spellcheck\": \"cspell \\\"src/**/*.{ts,tsx}\\\" \\\"test/**/*.{ts,tsx}\\\" \\\"*.{json,md,yml,mjs,cjs}\\\" \\\".github/**/*.yml\\\"\",\n \"semantic-release\": \"semantic-release\"\n },\n \"peerDependencies\": {\n \"@module-federation/vite\": \">=1.16.0\",\n \"@tanstack/react-query\": \"^5.100.0\",\n \"@testing-library/react\": \">=16.0.0\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"vite\": \">=8.0.0\",\n \"vitest\": \">=3.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@module-federation/vite\": {\n \"optional\": true\n },\n \"@tanstack/react-query\": {\n \"optional\": true\n },\n \"@testing-library/react\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n },\n \"react-dom\": {\n \"optional\": true\n },\n \"vite\": {\n \"optional\": true\n },\n \"vitest\": {\n \"optional\": true\n }\n },\n \"dependencies\": {\n \"@module-federation/runtime\": \"~2.5.1\",\n \"clsx\": \"^2.1.1\",\n \"jose\": \"^6.2.12\",\n \"json-schema-to-typescript\": \"^16.0.0\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^20.4.3\",\n \"@commitlint/config-conventional\": \"^20.4.3\",\n \"@eslint/js\": \"^10.0.1\",\n \"@module-federation/vite\": \"~1.16.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/commit-analyzer\": \"^13.0.1\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@semantic-release/github\": \"^12.0.6\",\n \"@semantic-release/npm\": \"^13.1.5\",\n \"@semantic-release/release-notes-generator\": \"^14.1.0\",\n \"@tanstack/react-query\": \"^5.100.14\",\n \"@testing-library/jest-dom\": \"^6.6.3\",\n \"@testing-library/react\": \"^16.1.0\",\n \"@testing-library/user-event\": \"^14.5.2\",\n \"@types/json-schema\": \"^7.0.15\",\n \"@types/node\": \"^22.13.0\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.2.7\",\n \"@vitest/coverage-v8\": \"^3.0.0\",\n \"commitizen\": \"^4.3.1\",\n \"conventional-changelog-conventionalcommits\": \"^9.3.0\",\n \"cspell\": \"^9.7.0\",\n \"cz-conventional-changelog\": \"^3.3.0\",\n \"eslint\": \"^10.0.2\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-prettier\": \"^5.5.5\",\n \"eslint-plugin-react\": \"^7.37.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0\",\n \"globals\": \"^17.4.0\",\n \"happy-dom\": \"^17.0.0\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^16.3.2\",\n \"prettier\": \"^3.8.1\",\n \"prettier-plugin-organize-imports\": \"^4.3.0\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.3.0\",\n \"tsx\": \"^4.20.0\",\n \"typedoc\": \"^0.28.20\",\n \"typedoc-plugin-markdown\": \"^4.13.0\",\n \"typescript\": \"^5.7.0\",\n \"typescript-eslint\": \"^8.56.1\",\n \"vite\": \"^8.0.14\",\n \"vitest\": \"^3.0.0\"\n },\n \"config\": {\n \"commitizen\": {\n \"path\": \"cz-conventional-changelog\",\n \"types\": {\n \"feat\": {\n \"description\": \"New feature\",\n \"title\": \"Features\"\n },\n \"fix\": {\n \"description\": \"Bug fix\",\n \"title\": \"Fixes\"\n },\n \"docs\": {\n \"description\": \"Documentation changes\",\n \"title\": \"Documentation\"\n },\n \"style\": {\n \"description\": \"Code style changes (formatting, etc.)\",\n \"title\": \"Styles\"\n },\n \"refactor\": {\n \"description\": \"Code refactoring\",\n \"title\": \"Refactoring\"\n },\n \"perf\": {\n \"description\": \"Performance improvements\",\n \"title\": \"Performance\"\n },\n \"test\": {\n \"description\": \"Adding or updating tests\",\n \"title\": \"Tests\"\n },\n \"build\": {\n \"description\": \"Build system or dependencies\",\n \"title\": \"Build\"\n },\n \"ci\": {\n \"description\": \"CI/CD changes\",\n \"title\": \"CI/CD\"\n },\n \"chore\": {\n \"description\": \"Chore\",\n \"title\": \"Chores\"\n },\n \"revert\": {\n \"description\": \"Revert previous commit\",\n \"title\": \"Reverts\"\n },\n \"wip\": {\n \"description\": \"Work in progress / continuing a feature\",\n \"title\": \"Work in Progress\"\n },\n \"cont\": {\n \"description\": \"Continue/complete a feature\",\n \"title\": \"Continue Feature\"\n },\n \"improve\": {\n \"description\": \"Small improvements or enhancements\",\n \"title\": \"Improvements\"\n }\n }\n }\n },\n \"lint-staged\": {\n \"*.{ts,tsx}\": [\n \"eslint --fix\",\n \"prettier --write\",\n \"cspell --no-must-find-files\"\n ],\n \"*.{json,md}\": [\n \"prettier --write\",\n \"cspell --no-must-find-files\"\n ]\n }\n}\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface PreviewErrorBoundaryProps {\n children: ReactNode;\n}\n\ninterface PreviewErrorBoundaryState {\n error: Error | null;\n}\n\nexport class PreviewErrorBoundary extends Component<\n PreviewErrorBoundaryProps,\n PreviewErrorBoundaryState\n> {\n state: PreviewErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): PreviewErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(_error: Error, _info: ErrorInfo): void {\n // The visible diagnostic is the local preview's reporting boundary.\n }\n\n render(): ReactNode {\n if (this.state.error !== null) {\n return (\n <div className=\"tap-preview-message\" role=\"alert\">\n <strong>The contribution could not render.</strong>\n <span>{this.state.error.message}</span>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import type {\n TapPageProps,\n TapRowActionProps,\n TapSettingsProps,\n TapSettingsValues,\n TapTabProps,\n TapWidgetProps,\n} from '../../client/types';\nimport { uiContributions } from '../../manifest/define';\nimport type {\n ExposableKind,\n ExtensionManifest,\n UiContributionRef,\n} from '../../manifest/types';\nimport { fixtureKeywords } from '../../testing/fixtures';\n\nexport interface PreviewSelection {\n contribution: UiContributionRef;\n label: string;\n}\n\nexport interface PreviewState {\n settings: TapSettingsValues;\n onSettingsChange(values: TapSettingsValues): void;\n}\n\nexport type PreviewProps =\n | TapWidgetProps\n | TapTabProps\n | TapPageProps\n | TapRowActionProps\n | TapSettingsProps;\n\nconst kindLabel: Record<ExposableKind, string> = {\n page: 'page',\n tab: 'tab',\n widget: 'widget',\n rowAction: 'row action',\n settings: 'settings',\n};\n\nfunction titleByExpose(manifest: ExtensionManifest): Map<string, string> {\n const titles = new Map<string, string>();\n const contributes = manifest.contributes;\n\n for (const page of contributes.pages ?? []) {\n titles.set(`./pages/${page.id}`, page.title);\n }\n for (const tab of contributes.tabs ?? []) {\n titles.set(`./tabs/${tab.id}`, tab.title);\n }\n for (const widget of contributes.widgets ?? []) {\n titles.set(`./widgets/${widget.id}`, widget.title);\n }\n for (const action of contributes.rowActions ?? []) {\n titles.set(`./rowActions/${action.id}`, action.title);\n }\n if (contributes.settings) titles.set('./settings', 'Settings');\n\n return titles;\n}\n\nexport function previewSelections(\n manifest: ExtensionManifest,\n): PreviewSelection[] {\n const titles = titleByExpose(manifest);\n return uiContributions(manifest).map(contribution => {\n const title = titles.get(contribution.expose) ?? contribution.id;\n return {\n contribution,\n label:\n contribution.kind === 'settings'\n ? title\n : `${title} (${kindLabel[contribution.kind]})`,\n };\n });\n}\n\nexport function previewProps(\n contribution: UiContributionRef,\n state: PreviewState,\n): PreviewProps {\n switch (contribution.kind) {\n case 'page':\n return { params: { pageId: contribution.id, path: '/' } };\n case 'tab':\n return {};\n case 'widget':\n return { config: {} };\n case 'rowAction':\n return { row: { ...fixtureKeywords[0] } };\n case 'settings':\n return {\n values: state.settings,\n onChange: values => state.onSettingsChange(values),\n };\n }\n}\n\nexport function previewTopology(manifest: ExtensionManifest): string {\n return uiContributions(manifest)\n .map(({ kind, id, expose, entry }) =>\n JSON.stringify({ kind, id, expose, entry }),\n )\n .sort()\n .join('\\n');\n}\n","export const previewStyles = `\n:root {\n color-scheme: light;\n font-family: Inter, ui-sans-serif, system-ui, sans-serif;\n background: #f4f5ef;\n color: #142012;\n}\n* { box-sizing: border-box; }\nbody { margin: 0; min-width: 320px; }\nbutton, select { font: inherit; }\n.tap-preview { min-height: 100vh; display: grid; grid-template-rows: auto 1fr; }\n.tap-preview[data-theme=\"dark\"] { color-scheme: dark; background: #111710; color: #f2f5ec; }\n.tap-preview-bar { display: flex; flex-wrap: wrap; gap: 12px; align-items: end; padding: 16px 20px; border-bottom: 1px solid color-mix(in srgb, currentColor 14%, transparent); background: color-mix(in srgb, Canvas 94%, transparent); }\n.tap-preview-brand { margin-right: auto; min-width: 190px; }\n.tap-preview-brand strong, .tap-preview-brand span { display: block; }\n.tap-preview-brand span, .tap-preview-note { color: color-mix(in srgb, currentColor 62%, transparent); font-size: 12px; }\n.tap-preview-field { display: grid; gap: 5px; font-size: 12px; }\n.tap-preview-field select, .tap-preview-reset { min-height: 34px; border: 1px solid color-mix(in srgb, currentColor 18%, transparent); border-radius: 7px; background: Canvas; color: CanvasText; padding: 6px 9px; }\n.tap-preview-reset { cursor: pointer; }\n.tap-preview-stage { padding: 24px; overflow: auto; }\n.tap-preview-canvas { width: 100%; min-height: 520px; margin: 0 auto; border: 1px solid color-mix(in srgb, currentColor 14%, transparent); border-radius: 12px; background: Canvas; color: CanvasText; box-shadow: 0 12px 36px rgb(20 32 18 / 9%); transition: max-width 160ms ease; }\n.tap-preview-canvas[data-viewport=\"tablet\"] { max-width: 768px; }\n.tap-preview-canvas[data-viewport=\"mobile\"] { max-width: 390px; }\n.tap-preview-surface { min-height: 100%; padding: 24px; }\n.tap-preview-message { min-height: 360px; display: grid; place-content: center; gap: 8px; padding: 32px; text-align: center; }\n.tap-preview-message span { max-width: 62ch; color: color-mix(in srgb, currentColor 68%, transparent); }\n@media (max-width: 640px) {\n .tap-preview-stage { padding: 12px; }\n .tap-preview-bar { padding: 12px; }\n}\n`;\n"]}
|
package/dist/vite-preview.d.cts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import '
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import * as JsxRuntime from 'react/jsx-runtime';
|
|
3
|
+
import { E as ExtensionManifest } from './constants-DJ_KgZpN.cjs';
|
|
4
|
+
|
|
5
|
+
interface PreviewLoadRequest {
|
|
6
|
+
extensionId: string;
|
|
7
|
+
remote: string;
|
|
8
|
+
expose: string;
|
|
9
|
+
}
|
|
10
|
+
type PreviewModuleLoader = (request: PreviewLoadRequest) => Promise<unknown>;
|
|
11
|
+
interface LocalPreviewOptions {
|
|
12
|
+
manifest: ExtensionManifest;
|
|
13
|
+
remote: string;
|
|
14
|
+
mount: HTMLElement;
|
|
15
|
+
}
|
|
16
|
+
interface LocalPreviewProps {
|
|
17
|
+
manifest: ExtensionManifest;
|
|
18
|
+
remote: string;
|
|
19
|
+
loader?: PreviewModuleLoader;
|
|
20
|
+
}
|
|
21
|
+
declare function componentFromModule(module: unknown, expose: string): ComponentType<Record<string, unknown>>;
|
|
22
|
+
declare function loadContribution({ extensionId, remote, expose, }: PreviewLoadRequest): Promise<unknown>;
|
|
23
|
+
declare function LocalPreview({ manifest, remote, loader, }: LocalPreviewProps): JsxRuntime.JSX.Element;
|
|
6
24
|
|
|
7
25
|
declare function mountLocalPreview({ manifest, remote, mount, }: LocalPreviewOptions): () => void;
|
|
8
26
|
|
|
9
|
-
export { LocalPreviewOptions, mountLocalPreview };
|
|
27
|
+
export { LocalPreview, type LocalPreviewOptions, type LocalPreviewProps, type PreviewLoadRequest, type PreviewModuleLoader, componentFromModule, loadContribution, mountLocalPreview };
|
package/dist/vite-preview.d.ts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import '
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import * as JsxRuntime from 'react/jsx-runtime';
|
|
3
|
+
import { E as ExtensionManifest } from './constants-DJ_KgZpN.js';
|
|
4
|
+
|
|
5
|
+
interface PreviewLoadRequest {
|
|
6
|
+
extensionId: string;
|
|
7
|
+
remote: string;
|
|
8
|
+
expose: string;
|
|
9
|
+
}
|
|
10
|
+
type PreviewModuleLoader = (request: PreviewLoadRequest) => Promise<unknown>;
|
|
11
|
+
interface LocalPreviewOptions {
|
|
12
|
+
manifest: ExtensionManifest;
|
|
13
|
+
remote: string;
|
|
14
|
+
mount: HTMLElement;
|
|
15
|
+
}
|
|
16
|
+
interface LocalPreviewProps {
|
|
17
|
+
manifest: ExtensionManifest;
|
|
18
|
+
remote: string;
|
|
19
|
+
loader?: PreviewModuleLoader;
|
|
20
|
+
}
|
|
21
|
+
declare function componentFromModule(module: unknown, expose: string): ComponentType<Record<string, unknown>>;
|
|
22
|
+
declare function loadContribution({ extensionId, remote, expose, }: PreviewLoadRequest): Promise<unknown>;
|
|
23
|
+
declare function LocalPreview({ manifest, remote, loader, }: LocalPreviewProps): JsxRuntime.JSX.Element;
|
|
6
24
|
|
|
7
25
|
declare function mountLocalPreview({ manifest, remote, mount, }: LocalPreviewOptions): () => void;
|
|
8
26
|
|
|
9
|
-
export { LocalPreviewOptions, mountLocalPreview };
|
|
27
|
+
export { LocalPreview, type LocalPreviewOptions, type LocalPreviewProps, type PreviewLoadRequest, type PreviewModuleLoader, componentFromModule, loadContribution, mountLocalPreview };
|