@tappify/extension-sdk 2.1.0-beta.2 → 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 -43
- package/dist/codegen.d.ts +7 -43
- package/dist/codegen.mjs.map +1 -1
- package/dist/{constants-Bh759FUI.d.cts → constants-DJ_KgZpN.d.cts} +8 -44
- package/dist/{constants-Bh759FUI.d.ts → constants-DJ_KgZpN.d.ts} +8 -44
- package/dist/{context-mr8R5CNt.d.ts → context-Dt6xh_5t.d.cts} +4 -5
- package/dist/{context-DI0EJCRD.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 +24 -136
- package/dist/manifest.cjs.map +1 -1
- package/dist/manifest.d.cts +12 -97
- package/dist/manifest.d.ts +12 -97
- package/dist/manifest.mjs +10 -122
- 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-uGHrRaOj.d.ts → types-DDAGLpov.d.ts} +3 -4
- package/dist/{types-BdDaLnqs.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 +24 -137
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.cts +7 -43
- package/dist/vite.d.ts +7 -43
- package/dist/vite.mjs +18 -131
- package/dist/vite.mjs.map +1 -1
- package/package.json +2 -12
- package/schema/extension-v2.json +121 -440
- 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-BO3kavn0.d.ts +0 -25
- package/dist/client-DE-vMgdO.d.cts +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-BlOVpK0k.d.ts +0 -547
- package/dist/work-events-D97EoqvS.d.cts +0 -547
- /package/dist/{chunk-RBIQT75L.mjs.map → chunk-GG3IX52W.mjs.map} +0 -0
package/dist/ui.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/ui/cn.ts","../src/client/ui/button.tsx","../src/client/ui/card.tsx","../src/client/ui/dialog.tsx","../src/client/ui/layout.tsx","../src/client/ui/feedback.tsx","../src/client/ui/field.tsx","../src/client/ui/page-header.tsx","../src/client/ui/schema-form.tsx","../src/client/ui/table.tsx"],"sourcesContent":["import clsx, { type ClassValue as ClsxClassValue } from 'clsx';\n\n/**\n * Anything `cn` accepts: a class string, a number, an array of these, a map of\n * class name to condition, or a value to drop.\n */\nexport type ClassValue = ClsxClassValue;\n\n/**\n * Joins class names, dropping the ones that are `false`, `null` or `undefined`.\n *\n * @remarks\n * This is `clsx`, re-exported so a vendor surface needs no class-name dependency\n * of its own. It does not merge conflicting utility classes.\n *\n * @example\n * ```tsx\n * import { cn } from '@tappify/extension-sdk/ui';\n *\n * function Row({ compact }: { compact: boolean }) {\n * return <div className={cn('starter-row', compact && 'starter-row--compact')} />;\n * }\n * ```\n */\nexport function cn(...values: ClassValue[]): string {\n return clsx(values);\n}\n","import type { ButtonHTMLAttributes } from 'react';\nimport { cn } from './cn';\n\n/** Visual emphasis available for a {@link Button}. */\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'inverse'\n | 'destructive';\n\n/** Density and icon-only sizes available for a {@link Button}. */\nexport type ButtonSize =\n | 'default'\n | 'compact'\n | 'xs'\n | 'sm'\n | 'lg'\n | 'icon'\n | 'icon-xs'\n | 'icon-sm'\n | 'icon-lg';\n\n/** Props for the One UI button primitive. */\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n 'data-slot'?: string;\n loading?: boolean;\n size?: ButtonSize;\n variant?: ButtonVariant;\n}\n\n/** Renders an accessible One UI button with loading, size, and tone states. */\nexport function Button({\n 'aria-busy': ariaBusy,\n 'data-slot': slot = 'button',\n children,\n className,\n disabled,\n loading = false,\n size = 'default',\n type = 'button',\n variant = 'primary',\n ...props\n}: ButtonProps) {\n return (\n <button\n {...props}\n aria-busy={ariaBusy ?? (loading || undefined)}\n className={cn('tap-button', className)}\n data-loading={loading || undefined}\n data-size={size}\n data-slot={slot}\n data-variant={variant}\n disabled={loading ? true : disabled}\n type={type}\n >\n {loading ? (\n <span aria-hidden=\"true\" className=\"tap-button__spinner\" />\n ) : null}\n {children}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from './cn';\n\n/** Props for a One UI card surface. */\nexport interface CardProps extends ComponentPropsWithoutRef<'div'> {\n size?: 'default' | 'sm';\n}\n\n/** Provides the root surface for compound card parts. */\nexport function Card({ className, size = 'default', ...props }: CardProps) {\n return (\n <div\n {...props}\n className={cn('tap-ui-card', className)}\n data-size={size}\n data-slot=\"card\"\n />\n );\n}\n\n/** Lays out a card title, description, and optional action. */\nexport function CardHeader({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__header', className)}\n data-slot=\"card-header\"\n />\n );\n}\n\n/** Renders a card's primary heading. */\nexport function CardTitle({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__title', className)}\n data-slot=\"card-title\"\n />\n );\n}\n\n/** Renders supporting copy below a card title. */\nexport function CardDescription({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__description', className)}\n data-slot=\"card-description\"\n />\n );\n}\n\n/** Positions a control in the card header. */\nexport function CardAction({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__action', className)}\n data-slot=\"card-action\"\n />\n );\n}\n\n/** Wraps the main contents of a card. */\nexport function CardContent({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__content', className)}\n data-slot=\"card-content\"\n />\n );\n}\n\n/** Wraps actions or metadata at the bottom of a card. */\nexport function CardFooter({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-card__footer', className)}\n data-slot=\"card-footer\"\n />\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n type ButtonHTMLAttributes,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTap } from '../context';\nimport { TapError } from '../errors';\nimport { Button } from './button';\nimport { cn } from './cn';\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction activeElementNear(node: Node | null): Element | null {\n const root = node?.getRootNode();\n return root instanceof ShadowRoot\n ? root.activeElement\n : document.activeElement;\n}\n\ninterface DialogContextValue {\n close: () => void;\n contentRef: RefObject<HTMLDivElement | null>;\n descriptionId: string;\n titleId: string;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction useDialogPart(): DialogContextValue {\n const value = useContext(DialogContext);\n if (!value)\n throw new Error('Dialog compound parts must be rendered inside Dialog.');\n return value;\n}\n\n/** Props for the controlled dialog root. */\nexport interface DialogProps {\n children: ReactNode;\n /** Called when the dialog requests an open-state change. */\n onOpenChange: (open: boolean) => void;\n open: boolean;\n}\n\n/** Coordinates a controlled, host-portaled modal dialog. */\nexport function Dialog({\n children,\n onOpenChange,\n open,\n}: DialogProps): ReactElement | null {\n const tap = useTap();\n const contentRef = useRef<HTMLDivElement | null>(null);\n const titleId = useId();\n const descriptionId = useId();\n const close = useCallback(() => onOpenChange(false), [onOpenChange]);\n const focusables = useCallback(\n () =>\n Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? [],\n ),\n [],\n );\n\n useEffect(() => {\n if (!open) return;\n const previous = activeElementNear(contentRef.current);\n focusables()[0]?.focus();\n return () => {\n if (previous instanceof HTMLElement) previous.focus();\n };\n }, [focusables, open]);\n\n useEffect(() => {\n if (!open || !tap.__portal) return;\n tap.__portal.addEventListener('tap:dialog-close', close);\n return () => tap.__portal?.removeEventListener('tap:dialog-close', close);\n }, [close, open, tap]);\n\n if (!open) return null;\n if (!tap.__portal) {\n throw new TapError(\n 'TAP_NO_PORTAL',\n 'Dialog needs the host portal node inside the extension shadow root.',\n );\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n close();\n return;\n }\n if (event.key !== 'Tab') return;\n const items = focusables();\n if (items.length === 0) return;\n const first = items[0];\n const last = items.at(-1)!;\n const active = activeElementNear(contentRef.current);\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n return createPortal(\n <DialogContext.Provider\n value={{ close, contentRef, descriptionId, titleId }}\n >\n <div\n className=\"tap-root tap-ui-dialog-overlay\"\n data-slot=\"dialog-overlay\"\n onKeyDown={onKeyDown}\n onMouseDown={event => {\n if (event.target === event.currentTarget) close();\n }}\n >\n {children}\n </div>\n </DialogContext.Provider>,\n tap.__portal,\n );\n}\n\n/** Supported dialog widths and purpose-built layouts. */\nexport type DialogSize =\n | 'compact'\n | 'default'\n | 'medium'\n | 'confirmation'\n | 'large'\n | 'wide';\n\n/** Props for the modal surface rendered inside {@link Dialog}. */\nexport interface DialogContentProps extends ComponentPropsWithoutRef<'div'> {\n size?: DialogSize;\n surface?: 'paper' | 'canvas';\n}\n\n/** Renders the accessible dialog surface and focus-trap boundary. */\nexport function DialogContent({\n className,\n size = 'default',\n surface = 'paper',\n ...props\n}: DialogContentProps) {\n const dialog = useDialogPart();\n return (\n <div\n {...props}\n aria-describedby={props['aria-describedby'] ?? dialog.descriptionId}\n aria-labelledby={props['aria-labelledby'] ?? dialog.titleId}\n aria-modal=\"true\"\n className={cn('tap-ui-dialog', className)}\n data-size={size}\n data-slot=\"dialog-content\"\n data-surface={surface}\n ref={dialog.contentRef}\n role=\"dialog\"\n />\n );\n}\n\n/** Wraps a dialog title and description. */\nexport function DialogHeader({\n className,\n ...props\n}: ComponentPropsWithoutRef<'header'>) {\n return (\n <header\n {...props}\n className={cn('tap-dialog__header', className)}\n data-slot=\"dialog-header\"\n />\n );\n}\n\n/** Labels the containing dialog. */\nexport function DialogTitle({\n className,\n ...props\n}: ComponentPropsWithoutRef<'h2'>) {\n const dialog = useDialogPart();\n return (\n <h2\n {...props}\n className={cn('tap-dialog__title', className)}\n data-slot=\"dialog-title\"\n id={props.id ?? dialog.titleId}\n />\n );\n}\n\n/** Describes the containing dialog for assistive technology. */\nexport function DialogDescription({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n const dialog = useDialogPart();\n return (\n <div\n {...props}\n className={cn('tap-dialog__description', className)}\n data-slot=\"dialog-description\"\n id={props.id ?? dialog.descriptionId}\n />\n );\n}\n\n/** Wraps the main dialog content. */\nexport function DialogBody({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={cn('tap-dialog__body', className)}\n data-slot=\"dialog-body\"\n />\n );\n}\n\n/** Wraps dialog actions. */\nexport function DialogFooter({\n className,\n ...props\n}: ComponentPropsWithoutRef<'footer'>) {\n return (\n <footer\n {...props}\n className={cn('tap-dialog__footer', className)}\n data-slot=\"dialog-footer\"\n />\n );\n}\n\n/** Renders a button that requests closure of the containing dialog. */\nexport function DialogClose({\n children = '×',\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n const dialog = useDialogPart();\n return (\n <Button\n {...props}\n aria-label={props['aria-label'] ?? 'Close dialog'}\n data-slot=\"dialog-close\"\n onClick={event => {\n props.onClick?.(event);\n if (!event.defaultPrevented) dialog.close();\n }}\n size=\"icon-sm\"\n variant=\"tertiary\"\n >\n {children}\n </Button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from './cn';\n\n/** Spacing values supported by the layout primitives. */\nexport type Space = 4 | 8 | 12 | 16 | 24 | 32 | 40;\n\n/** Props for a vertical stack layout. */\nexport interface StackProps extends ComponentPropsWithoutRef<'div'> {\n 'data-slot'?: string;\n gap?: Space;\n}\n\n/** Arranges children vertically with a tokenized gap. */\nexport function Stack({\n gap = 16,\n className,\n 'data-slot': slot = 'stack',\n ...props\n}: StackProps) {\n return (\n <div\n {...props}\n className={cn('tap-stack', className)}\n data-gap={gap}\n data-slot={slot}\n />\n );\n}\n\n/** Cross-axis alignment values supported by {@link Inline}. */\nexport type InlineAlign = 'start' | 'center' | 'end' | 'stretch';\n/** Main-axis distribution values supported by {@link Inline}. */\nexport type InlineJustify = 'start' | 'center' | 'end' | 'between';\n\n/** Props for a horizontal inline layout. */\nexport interface InlineProps extends ComponentPropsWithoutRef<'div'> {\n 'data-slot'?: string;\n align?: InlineAlign;\n gap?: Space;\n justify?: InlineJustify;\n}\n\n/** Arranges children horizontally with tokenized alignment and spacing. */\nexport function Inline({\n align = 'center',\n gap = 8,\n justify = 'start',\n className,\n 'data-slot': slot = 'inline',\n ...props\n}: InlineProps) {\n return (\n <div\n {...props}\n className={cn('tap-inline', className)}\n data-align={align}\n data-gap={gap}\n data-justify={justify}\n data-slot={slot}\n />\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Button } from './button';\nimport { cn } from './cn';\nimport { Stack } from './layout';\n\n/** Props for a compact labeled metric. */\nexport interface MetricProps {\n delta?: number;\n description?: ReactNode;\n label: ReactNode;\n value: ReactNode;\n}\n\n/** Displays a value with its label and optional trend context. */\nexport function Metric({ delta, description, label, value }: MetricProps) {\n const percent = delta === undefined ? undefined : Math.round(delta * 100);\n const direction =\n percent === undefined || percent === 0\n ? 'flat'\n : percent > 0\n ? 'up'\n : 'down';\n return (\n <div className=\"tap-metric\" data-slot=\"metric\">\n <div className=\"tap-metric__label\" data-slot=\"metric-label\">\n {label}\n </div>\n <div className=\"tap-metric__value\" data-slot=\"metric-value\">\n {value}\n </div>\n {percent !== undefined ? (\n <div\n className=\"tap-metric__delta\"\n data-direction={direction}\n data-slot=\"metric-delta\"\n >\n {percent > 0 ? '+' : ''}\n {percent}%\n </div>\n ) : null}\n {description ? (\n <div className=\"tap-metric__description\" data-slot=\"metric-description\">\n {description}\n </div>\n ) : null}\n </div>\n );\n}\n\n/** Props for a reduced-motion-aware loading placeholder. */\nexport interface SkeletonProps {\n className?: string;\n lines?: number;\n width?: CSSProperties['width'];\n}\n\n/** Displays one or more loading placeholder lines. */\nexport function Skeleton({ className, lines = 1, width }: SkeletonProps) {\n return (\n <div className={cn('tap-ui-skeleton', className)} data-slot=\"skeleton\">\n {Array.from({ length: Math.max(0, lines) }, (_, index) => (\n <span\n className=\"tap-skeleton__line\"\n data-slot=\"skeleton-line\"\n key={index}\n style={{ width }}\n />\n ))}\n </div>\n );\n}\n\n/** Props for an empty collection or unconfigured surface. */\nexport interface EmptyStateProps {\n action?: ReactNode;\n description?: ReactNode;\n title: ReactNode;\n}\n\n/** Explains an empty state and optionally presents a recovery action. */\nexport function EmptyState({ action, description, title }: EmptyStateProps) {\n return (\n <Stack className=\"tap-ui-state\" data-slot=\"empty-state\" gap={12}>\n <div className=\"tap-state__title\">{title}</div>\n {description ? (\n <div className=\"tap-state__description\">{description}</div>\n ) : null}\n {action ? <div className=\"tap-state__action\">{action}</div> : null}\n </Stack>\n );\n}\n\n/** Props for an inline error surface. */\nexport interface ErrorStateProps {\n code?: ReactNode;\n description?: ReactNode;\n /** Called when the user chooses to retry the failed operation. */\n onRetry?: () => void;\n title: ReactNode;\n}\n\n/** Displays a recoverable inline error with an optional retry control. */\nexport function ErrorState({\n code,\n description,\n onRetry,\n title,\n}: ErrorStateProps) {\n return (\n <Stack\n className=\"tap-ui-state tap-ui-state--error\"\n data-slot=\"error-state\"\n gap={12}\n role=\"alert\"\n >\n <div className=\"tap-state__title\">{title}</div>\n {description ? (\n <div className=\"tap-state__description\">{description}</div>\n ) : null}\n {code ? <code className=\"tap-state__code\">{code}</code> : null}\n {onRetry ? (\n <div className=\"tap-state__action\">\n <Button variant=\"secondary\" onClick={onRetry}>\n Try again\n </Button>\n </div>\n ) : null}\n </Stack>\n );\n}\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useRef,\n type ComponentPropsWithoutRef,\n type InputHTMLAttributes,\n} from 'react';\nimport { cn } from './cn';\n\ninterface FieldContextValue {\n controlId: string;\n descriptionId?: string;\n errorId?: string;\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null);\n\n/** Connects a label, description, error, and control as one field. */\nexport function Field({\n children,\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n const generatedId = useId();\n const items = Children.toArray(children);\n const control = items.find(\n child =>\n isValidElement(child) &&\n (child.type === Input ||\n child.type === Textarea ||\n child.type === Checkbox ||\n child.type === Select),\n );\n const customId =\n isValidElement<{ id?: string }>(control) &&\n typeof control.props.id === 'string'\n ? control.props.id\n : undefined;\n const hasDescription = items.some(\n child => isValidElement(child) && child.type === FieldDescription,\n );\n const hasError = items.some(\n child => isValidElement(child) && child.type === FieldError,\n );\n const baseId = `tap-ui-field-${generatedId.replace(/:/g, '')}`;\n const value: FieldContextValue = {\n controlId: customId ?? `${baseId}-control`,\n descriptionId: hasDescription ? `${baseId}-description` : undefined,\n errorId: hasError ? `${baseId}-error` : undefined,\n };\n\n return (\n <FieldContext.Provider value={value}>\n <div\n {...props}\n className={cn('tap-ui-field', className)}\n data-invalid={hasError || undefined}\n data-slot=\"field\"\n >\n {children}\n </div>\n </FieldContext.Provider>\n );\n}\n\n/** Labels the control in the containing {@link Field}. */\nexport function FieldLabel({\n className,\n ...props\n}: ComponentPropsWithoutRef<'label'>) {\n const field = useContext(FieldContext);\n return (\n <label\n {...props}\n className={cn('tap-field__label', className)}\n data-slot=\"field-label\"\n htmlFor={props.htmlFor ?? field?.controlId}\n />\n );\n}\n\n/** Adds supporting text to the containing {@link Field}. */\nexport function FieldDescription({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n const field = useContext(FieldContext);\n return (\n <div\n {...props}\n className={cn('tap-field__description', className)}\n data-slot=\"field-description\"\n id={props.id ?? field?.descriptionId}\n />\n );\n}\n\n/** Adds an accessible validation error to the containing {@link Field}. */\nexport function FieldError({\n className,\n ...props\n}: ComponentPropsWithoutRef<'div'>) {\n const field = useContext(FieldContext);\n return (\n <div\n {...props}\n className={cn('tap-field__error', className)}\n data-slot=\"field-error\"\n id={props.id ?? field?.errorId}\n role={props.role ?? 'alert'}\n />\n );\n}\n\nfunction joinIds(...ids: Array<string | undefined>): string | undefined {\n const unique = [\n ...new Set(ids.flatMap(id => id?.split(/\\s+/) ?? []).filter(Boolean)),\n ];\n return unique.length > 0 ? unique.join(' ') : undefined;\n}\n\nfunction fieldControlProps(\n field: FieldContextValue | null,\n id: string | undefined,\n describedBy: string | undefined,\n invalid: boolean | 'true' | 'false' | 'grammar' | 'spelling' | undefined,\n) {\n return {\n 'aria-describedby': joinIds(\n describedBy,\n field?.descriptionId,\n field?.errorId,\n ),\n 'aria-invalid': field?.errorId ? true : invalid,\n id: id ?? field?.controlId,\n } as const;\n}\n\n/** Renders a One UI text input and consumes optional field context. */\nexport const Input = forwardRef<\n HTMLInputElement,\n ComponentPropsWithoutRef<'input'>\n>(function Input(\n {\n className,\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n },\n ref,\n) {\n const field = useContext(FieldContext);\n return (\n <input\n {...props}\n {...fieldControlProps(field, id, describedBy, invalid)}\n className={cn('tap-ui-control tap-input', className)}\n data-slot=\"input\"\n ref={ref}\n />\n );\n});\n\n/** Renders a One UI multiline input and consumes optional field context. */\nexport const Textarea = forwardRef<\n HTMLTextAreaElement,\n ComponentPropsWithoutRef<'textarea'>\n>(function Textarea(\n {\n className,\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n },\n ref,\n) {\n const field = useContext(FieldContext);\n return (\n <textarea\n {...props}\n {...fieldControlProps(field, id, describedBy, invalid)}\n className={cn('tap-ui-control tap-textarea', className)}\n data-slot=\"textarea\"\n ref={ref}\n />\n );\n});\n\n/** Renders a One UI native select and consumes optional field context. */\nexport const Select = forwardRef<\n HTMLSelectElement,\n ComponentPropsWithoutRef<'select'>\n>(function Select(\n {\n className,\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n },\n ref,\n) {\n const field = useContext(FieldContext);\n return (\n <select\n {...props}\n {...fieldControlProps(field, id, describedBy, invalid)}\n className={cn('tap-ui-control tap-select', className)}\n data-slot=\"select\"\n ref={ref}\n />\n );\n});\n\n/** Props for the One UI checkbox primitive. */\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n indeterminate?: boolean;\n}\n\n/** Renders a native checkbox with checked and indeterminate visual states. */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(\n {\n checked,\n className,\n id,\n indeterminate = false,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n },\n forwardedRef,\n ) {\n const field = useContext(FieldContext);\n const innerRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n const setRef = (element: HTMLInputElement | null) => {\n innerRef.current = element;\n if (typeof forwardedRef === 'function') forwardedRef(element);\n else if (forwardedRef) forwardedRef.current = element;\n };\n\n return (\n <input\n {...props}\n {...fieldControlProps(field, id, describedBy, invalid)}\n checked={checked}\n className={cn('tap-checkbox', className)}\n data-slot=\"checkbox\"\n data-state={\n indeterminate ? 'indeterminate' : checked ? 'checked' : 'unchecked'\n }\n ref={setRef}\n type=\"checkbox\"\n />\n );\n },\n);\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport { cn } from './cn';\n\n/** Props for an extension page heading with optional actions. */\nexport interface PageHeaderProps extends Omit<\n ComponentPropsWithoutRef<'header'>,\n 'title'\n> {\n actions?: ReactNode;\n description?: ReactNode;\n title: ReactNode;\n}\n\n/** Introduces a page with a title, supporting copy, and optional actions. */\nexport function PageHeader({\n actions,\n className,\n description,\n title,\n ...props\n}: PageHeaderProps) {\n return (\n <header\n {...props}\n className={cn('tap-ui-page-header', className)}\n data-slot=\"page-header\"\n >\n <div className=\"tap-page-header__copy\" data-slot=\"page-header-copy\">\n <h2 className=\"tap-page-header__title\" data-slot=\"page-header-title\">\n {title}\n </h2>\n {description ? (\n <div\n className=\"tap-page-header__description\"\n data-slot=\"page-header-description\"\n >\n {description}\n </div>\n ) : null}\n </div>\n {actions ? (\n <div\n className=\"tap-page-header__actions\"\n data-slot=\"page-header-actions\"\n >\n {actions}\n </div>\n ) : null}\n </header>\n );\n}\n","import {\n useMemo,\n useState,\n type ReactElement,\n type SubmitEventHandler,\n} from 'react';\nimport { z } from 'zod';\nimport type { JsonSchema } from '../../manifest/types';\nimport { Button } from './button';\nimport {\n Checkbox,\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n Input,\n Select,\n Textarea,\n} from './field';\nimport { Inline } from './layout';\n\n/** Controls rendered by {@link SchemaForm} for supported schema properties. */\nexport type SchemaFieldKind =\n | 'text'\n | 'textarea'\n | 'date'\n | 'number'\n | 'boolean'\n | 'enum';\n\n/** Normalized presentation metadata for one JSON Schema property. */\nexport interface SchemaField {\n name: string;\n label: string;\n kind: SchemaFieldKind;\n required: boolean;\n description?: string;\n options?: { value: string; label: string }[];\n}\n\nfunction text(\n source: Record<string, unknown>,\n key: string,\n): string | undefined {\n return typeof source[key] === 'string' ? source[key] : undefined;\n}\n\nfunction humanize(name: string): string {\n const spaced = name\n .replace(/[_-]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction fieldKind(property: Record<string, unknown>): SchemaFieldKind {\n if (Array.isArray(property.enum)) return 'enum';\n if (property.type === 'boolean') return 'boolean';\n if (property.type === 'number' || property.type === 'integer')\n return 'number';\n if (property.format === 'textarea') return 'textarea';\n if (property.format === 'date') return 'date';\n return 'text';\n}\n\n/** Converts supported JSON Schema properties into ordered form fields. */\nexport function schemaFields(schema: JsonSchema): SchemaField[] {\n if (typeof schema.properties !== 'object' || schema.properties === null)\n return [];\n const required = new Set(\n Array.isArray(schema.required)\n ? schema.required.filter(\n (name): name is string => typeof name === 'string',\n )\n : [],\n );\n\n return Object.entries(schema.properties).flatMap(([name, raw]) => {\n if (typeof raw !== 'object' || raw === null) return [];\n const property: Record<string, unknown> = { ...raw };\n const kind = fieldKind(property);\n const field: SchemaField = {\n name,\n label: text(property, 'title') ?? humanize(name),\n kind,\n required: required.has(name),\n };\n const description = text(property, 'description');\n if (description) field.description = description;\n if (kind === 'enum' && Array.isArray(property.enum)) {\n field.options = property.enum\n .filter((option): option is string => typeof option === 'string')\n .map(option => ({ value: option, label: option }));\n }\n return [field];\n });\n}\n\ntype Values = Record<string, unknown>;\n\nfunction compile(schema: JsonSchema): z.ZodType | null {\n try {\n return z.fromJSONSchema(schema);\n } catch {\n return null;\n }\n}\n\nfunction clean(fields: SchemaField[], values: Values): Values {\n return Object.fromEntries(\n fields.flatMap(field => {\n const value = values[field.name];\n return value === undefined || value === '' ? [] : [[field.name, value]];\n }),\n );\n}\n\nfunction validate(\n fields: SchemaField[],\n compiled: z.ZodType | null,\n values: Values,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fields) {\n if (\n field.required &&\n (values[field.name] === undefined || values[field.name] === '')\n ) {\n errors[field.name] = `${field.label} is required.`;\n }\n }\n if (!compiled) return errors;\n const result = compiled.safeParse(values);\n if (result.success) return errors;\n for (const issue of result.error.issues) {\n const key = issue.path[0];\n if (typeof key === 'string' && errors[key] === undefined)\n errors[key] = issue.message;\n }\n return errors;\n}\n\n/** Props for a JSON Schema-driven One UI form. */\nexport interface SchemaFormProps<T> {\n schema: JsonSchema;\n value?: Partial<T>;\n submitLabel?: string;\n cancelLabel?: string;\n busy?: boolean;\n /** Receives the cleaned, validated value when the form is submitted. */\n onSubmit: (value: T) => void | Promise<void>;\n /** Called when the optional cancel action is selected. */\n onCancel?: () => void;\n}\n\n/** Renders supported JSON Schema properties as accessible One UI fields. */\nexport function SchemaForm<T>({\n schema,\n value,\n submitLabel = 'Submit',\n cancelLabel = 'Cancel',\n busy = false,\n onSubmit,\n onCancel,\n}: SchemaFormProps<T>): ReactElement {\n const fields = useMemo(() => schemaFields(schema), [schema]);\n const compiled = useMemo(() => compile(schema), [schema]);\n const [values, setValues] = useState<Values>(() => ({ ...value }));\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const set = (name: string, next: unknown) => {\n setValues(current => ({ ...current, [name]: next }));\n setErrors(current => {\n if (current[name] === undefined) return current;\n const { [name]: _removed, ...rest } = current;\n return rest;\n });\n };\n\n const submit: SubmitEventHandler<HTMLFormElement> = event => {\n event.preventDefault();\n const candidate = clean(fields, values);\n const found = validate(fields, compiled, candidate);\n setErrors(found);\n if (Object.keys(found).length === 0) void onSubmit(candidate as T);\n };\n\n return (\n <form\n className=\"tap-schema-form\"\n data-slot=\"schema-form\"\n noValidate\n onSubmit={submit}\n >\n {fields.map(field => {\n const raw = values[field.name];\n const description = field.description ? (\n <FieldDescription>{field.description}</FieldDescription>\n ) : null;\n const error = errors[field.name] ? (\n <FieldError>{errors[field.name]}</FieldError>\n ) : null;\n\n if (field.kind === 'boolean') {\n return (\n <Field className=\"tap-ui-field--checkbox\" key={field.name}>\n <FieldLabel className=\"tap-checkbox-row\">\n <Checkbox\n checked={raw === true}\n onChange={event => set(field.name, event.target.checked)}\n />\n <span>{field.label}</span>\n </FieldLabel>\n {description}\n {error}\n </Field>\n );\n }\n\n return (\n <Field key={field.name}>\n <FieldLabel>{field.label}</FieldLabel>\n {field.kind === 'enum' ? (\n <Select\n required={field.required}\n value={typeof raw === 'string' ? raw : ''}\n onChange={event => set(field.name, event.target.value)}\n >\n <option value=\"\">Choose one</option>\n {field.options?.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </Select>\n ) : field.kind === 'textarea' ? (\n <Textarea\n required={field.required}\n value={typeof raw === 'string' ? raw : ''}\n onChange={event => set(field.name, event.target.value)}\n />\n ) : (\n <Input\n required={field.required}\n type={\n field.kind === 'number'\n ? 'number'\n : field.kind === 'date'\n ? 'date'\n : 'text'\n }\n value={\n typeof raw === 'string' || typeof raw === 'number'\n ? String(raw)\n : ''\n }\n onChange={event =>\n set(\n field.name,\n field.kind === 'number'\n ? event.target.value === ''\n ? ''\n : Number(event.target.value)\n : event.target.value,\n )\n }\n />\n )}\n {description}\n {error}\n </Field>\n );\n })}\n\n <Inline\n className=\"tap-schema-form__actions\"\n data-slot=\"form-actions\"\n justify=\"end\"\n >\n {onCancel ? (\n <Button variant=\"secondary\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n ) : null}\n <Button loading={busy} type=\"submit\">\n {submitLabel}\n </Button>\n </Inline>\n </form>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from './cn';\n\n/** Provides a horizontally scrollable semantic table surface. */\nexport function Table({\n className,\n ...props\n}: ComponentPropsWithoutRef<'table'>) {\n return (\n <div className=\"tap-ui-table-container\" data-slot=\"table-container\">\n <table\n {...props}\n className={cn('tap-ui-table', className)}\n data-slot=\"table\"\n />\n </div>\n );\n}\n\n/** Groups table header rows. */\nexport function TableHeader({\n className,\n ...props\n}: ComponentPropsWithoutRef<'thead'>) {\n return (\n <thead\n {...props}\n className={cn('tap-table__header', className)}\n data-slot=\"table-header\"\n />\n );\n}\n\n/** Groups table body rows. */\nexport function TableBody({\n className,\n ...props\n}: ComponentPropsWithoutRef<'tbody'>) {\n return (\n <tbody\n {...props}\n className={cn('tap-table__body', className)}\n data-slot=\"table-body\"\n />\n );\n}\n\n/** Props for a semantic table row. */\nexport interface TableRowProps extends ComponentPropsWithoutRef<'tr'> {\n variant?: 'header' | 'body';\n}\n\n/** Renders a table row with header or body styling. */\nexport function TableRow({\n className,\n variant = 'body',\n ...props\n}: TableRowProps) {\n return (\n <tr\n {...props}\n className={cn('tap-table__row', className)}\n data-slot=\"table-row\"\n data-variant={variant}\n />\n );\n}\n\n/** Renders a semantic table column heading. */\nexport function TableHead({\n className,\n ...props\n}: ComponentPropsWithoutRef<'th'>) {\n return (\n <th\n {...props}\n className={cn('tap-table__head', className)}\n data-slot=\"table-head\"\n />\n );\n}\n\n/** Renders a semantic table data cell. */\nexport function TableCell({\n className,\n ...props\n}: ComponentPropsWithoutRef<'td'>) {\n return (\n <td\n {...props}\n className={cn('tap-table__cell', className)}\n data-slot=\"table-cell\"\n />\n );\n}\n"],"mappings":"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","names":["jsx","jsx","jsx","jsx","jsxs","createContext","useContext","useEffect","useId","useRef","jsx","createContext","useId","useContext","Input","Textarea","Select","Checkbox","useRef","useEffect","jsx","jsxs","jsx","jsxs","jsx"]}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-Q7SFCCGT.cjs');
|
|
2
|
-
|
|
3
|
-
// src/vite/preview/bootstrap.ts
|
|
4
|
-
async function prepareHostShares(reactUrl) {
|
|
5
|
-
const imported = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
6
|
-
/* @vite-ignore */
|
|
7
|
-
reactUrl
|
|
8
|
-
)));
|
|
9
|
-
const candidate = imported.default;
|
|
10
|
-
const react = typeof candidate === "object" && candidate !== null && "createContext" in candidate ? candidate : imported;
|
|
11
|
-
const registry = globalThis;
|
|
12
|
-
const cache = _nullishCoalesce(registry.__mf_module_cache__, () => ( (registry.__mf_module_cache__ = { share: {}, remote: {} })));
|
|
13
|
-
cache.share.react = react;
|
|
14
|
-
cache.share["default:react"] = react;
|
|
15
|
-
}
|
|
16
|
-
var defaultDependencies = {
|
|
17
|
-
prepareHost: prepareHostShares,
|
|
18
|
-
importRemote: (remote) => {
|
|
19
|
-
return Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
20
|
-
/* @vite-ignore */
|
|
21
|
-
remote
|
|
22
|
-
)));
|
|
23
|
-
},
|
|
24
|
-
importPreview: () => Promise.resolve().then(() => _interopRequireWildcard(require("./vite-preview.cjs")))
|
|
25
|
-
};
|
|
26
|
-
function remoteContainer(value) {
|
|
27
|
-
if (typeof value !== "object" && typeof value !== "function" || value === null || !("init" in value) || typeof value.init !== "function") {
|
|
28
|
-
throw new Error("The extension remote does not provide an init function.");
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
31
|
-
}
|
|
32
|
-
function previewModule(value) {
|
|
33
|
-
if (typeof value !== "object" && typeof value !== "function" || value === null || !("mountLocalPreview" in value) || typeof value.mountLocalPreview !== "function") {
|
|
34
|
-
throw new Error("The SDK preview host could not be loaded.");
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
}
|
|
38
|
-
function showStartupError(mount, error) {
|
|
39
|
-
const alert = document.createElement("main");
|
|
40
|
-
alert.setAttribute("role", "alert");
|
|
41
|
-
alert.style.cssText = "min-height:100vh;display:grid;place-content:center;gap:10px;padding:32px;box-sizing:border-box;background:#f4f5ef;color:#142012;font-family:Inter,ui-sans-serif,system-ui,sans-serif;text-align:center";
|
|
42
|
-
const title = document.createElement("strong");
|
|
43
|
-
title.textContent = "Preview could not start";
|
|
44
|
-
const detail = document.createElement("span");
|
|
45
|
-
detail.textContent = error instanceof Error ? error.message : "The extension preview failed during startup.";
|
|
46
|
-
alert.append(title, detail);
|
|
47
|
-
mount.replaceChildren(alert);
|
|
48
|
-
}
|
|
49
|
-
async function startLocalPreview(options, dependencies = defaultDependencies) {
|
|
50
|
-
try {
|
|
51
|
-
await _optionalChain([dependencies, 'access', _ => _.prepareHost, 'optionalCall', _2 => _2(options.reactUrl)]);
|
|
52
|
-
const container = remoteContainer(
|
|
53
|
-
await dependencies.importRemote(options.remote)
|
|
54
|
-
);
|
|
55
|
-
await container.init({});
|
|
56
|
-
const preview = previewModule(await dependencies.importPreview());
|
|
57
|
-
return preview.mountLocalPreview(options);
|
|
58
|
-
} catch (error) {
|
|
59
|
-
showStartupError(options.mount, error);
|
|
60
|
-
return void 0;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
exports.startLocalPreview = startLocalPreview;
|
|
66
|
-
//# sourceMappingURL=vite-preview-bootstrap.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview-bootstrap.cjs","../src/vite/preview/bootstrap.ts"],"names":[],"mappings":"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","file":"/home/runner/work/extension-sdk/extension-sdk/dist/vite-preview-bootstrap.cjs","sourcesContent":[null,"import type { LocalPreviewOptions } from './client';\n\ninterface RemoteContainer {\n init(shared: Record<string, unknown>): void | Promise<void>;\n}\n\ninterface PreviewModule {\n mountLocalPreview(options: LocalPreviewOptions): () => void;\n}\n\nexport interface PreviewBootstrapDependencies {\n prepareHost?(reactUrl: string): Promise<void>;\n importRemote(remote: string): Promise<unknown>;\n importPreview(): Promise<unknown>;\n}\n\ntype SharedModuleCache = {\n share: Record<string, unknown>;\n remote: Record<string, unknown>;\n};\n\nasync function prepareHostShares(reactUrl: string): Promise<void> {\n // eslint-disable-next-line no-inline-comments -- Vite must leave this browser URL unresolved.\n const imported = (await import(/* @vite-ignore */ reactUrl)) as Record<\n string,\n unknown\n >;\n const candidate = imported.default;\n const react =\n typeof candidate === 'object' &&\n candidate !== null &&\n 'createContext' in candidate\n ? candidate\n : imported;\n\n const registry = globalThis as typeof globalThis & {\n __mf_module_cache__?: SharedModuleCache;\n };\n const cache = (registry.__mf_module_cache__ ??= { share: {}, remote: {} });\n cache.share.react = react;\n cache.share['default:react'] = react;\n}\n\nconst defaultDependencies: PreviewBootstrapDependencies = {\n prepareHost: prepareHostShares,\n importRemote: remote => {\n // eslint-disable-next-line no-inline-comments -- The remote URL is selected at preview runtime.\n return import(/* @vite-ignore */ remote);\n },\n importPreview: () => import('../../vite-preview'),\n};\n\nfunction remoteContainer(value: unknown): RemoteContainer {\n if (\n (typeof value !== 'object' && typeof value !== 'function') ||\n value === null ||\n !('init' in value) ||\n typeof value.init !== 'function'\n ) {\n throw new Error('The extension remote does not provide an init function.');\n }\n return value as RemoteContainer;\n}\n\nfunction previewModule(value: unknown): PreviewModule {\n if (\n (typeof value !== 'object' && typeof value !== 'function') ||\n value === null ||\n !('mountLocalPreview' in value) ||\n typeof value.mountLocalPreview !== 'function'\n ) {\n throw new Error('The SDK preview host could not be loaded.');\n }\n return value as PreviewModule;\n}\n\nfunction showStartupError(mount: HTMLElement, error: unknown): void {\n const alert = document.createElement('main');\n alert.setAttribute('role', 'alert');\n alert.style.cssText =\n 'min-height:100vh;display:grid;place-content:center;gap:10px;padding:32px;box-sizing:border-box;background:#f4f5ef;color:#142012;font-family:Inter,ui-sans-serif,system-ui,sans-serif;text-align:center';\n\n const title = document.createElement('strong');\n title.textContent = 'Preview could not start';\n const detail = document.createElement('span');\n detail.textContent =\n error instanceof Error\n ? error.message\n : 'The extension preview failed during startup.';\n alert.append(title, detail);\n mount.replaceChildren(alert);\n}\n\nexport async function startLocalPreview(\n options: LocalPreviewOptions & { reactUrl: string },\n dependencies: PreviewBootstrapDependencies = defaultDependencies,\n): Promise<(() => void) | undefined> {\n try {\n await dependencies.prepareHost?.(options.reactUrl);\n const container = remoteContainer(\n await dependencies.importRemote(options.remote),\n );\n await container.init({});\n const preview = previewModule(await dependencies.importPreview());\n return preview.mountLocalPreview(options);\n } catch (error) {\n showStartupError(options.mount, error);\n return undefined;\n }\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { L as LocalPreviewOptions } from './client-DE-vMgdO.cjs';
|
|
2
|
-
import 'react';
|
|
3
|
-
import 'react/jsx-runtime';
|
|
4
|
-
import './constants-Bh759FUI.cjs';
|
|
5
|
-
|
|
6
|
-
interface PreviewBootstrapDependencies {
|
|
7
|
-
prepareHost?(reactUrl: string): Promise<void>;
|
|
8
|
-
importRemote(remote: string): Promise<unknown>;
|
|
9
|
-
importPreview(): Promise<unknown>;
|
|
10
|
-
}
|
|
11
|
-
declare function startLocalPreview(options: LocalPreviewOptions & {
|
|
12
|
-
reactUrl: string;
|
|
13
|
-
}, dependencies?: PreviewBootstrapDependencies): Promise<(() => void) | undefined>;
|
|
14
|
-
|
|
15
|
-
export { type PreviewBootstrapDependencies, startLocalPreview };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { L as LocalPreviewOptions } from './client-BO3kavn0.js';
|
|
2
|
-
import 'react';
|
|
3
|
-
import 'react/jsx-runtime';
|
|
4
|
-
import './constants-Bh759FUI.js';
|
|
5
|
-
|
|
6
|
-
interface PreviewBootstrapDependencies {
|
|
7
|
-
prepareHost?(reactUrl: string): Promise<void>;
|
|
8
|
-
importRemote(remote: string): Promise<unknown>;
|
|
9
|
-
importPreview(): Promise<unknown>;
|
|
10
|
-
}
|
|
11
|
-
declare function startLocalPreview(options: LocalPreviewOptions & {
|
|
12
|
-
reactUrl: string;
|
|
13
|
-
}, dependencies?: PreviewBootstrapDependencies): Promise<(() => void) | undefined>;
|
|
14
|
-
|
|
15
|
-
export { type PreviewBootstrapDependencies, startLocalPreview };
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/vite/preview/bootstrap.ts
|
|
4
|
-
async function prepareHostShares(reactUrl) {
|
|
5
|
-
const imported = await import(
|
|
6
|
-
/* @vite-ignore */
|
|
7
|
-
reactUrl
|
|
8
|
-
);
|
|
9
|
-
const candidate = imported.default;
|
|
10
|
-
const react = typeof candidate === "object" && candidate !== null && "createContext" in candidate ? candidate : imported;
|
|
11
|
-
const registry = globalThis;
|
|
12
|
-
const cache = registry.__mf_module_cache__ ?? (registry.__mf_module_cache__ = { share: {}, remote: {} });
|
|
13
|
-
cache.share.react = react;
|
|
14
|
-
cache.share["default:react"] = react;
|
|
15
|
-
}
|
|
16
|
-
var defaultDependencies = {
|
|
17
|
-
prepareHost: prepareHostShares,
|
|
18
|
-
importRemote: (remote) => {
|
|
19
|
-
return import(
|
|
20
|
-
/* @vite-ignore */
|
|
21
|
-
remote
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
importPreview: () => import("./vite-preview.mjs")
|
|
25
|
-
};
|
|
26
|
-
function remoteContainer(value) {
|
|
27
|
-
if (typeof value !== "object" && typeof value !== "function" || value === null || !("init" in value) || typeof value.init !== "function") {
|
|
28
|
-
throw new Error("The extension remote does not provide an init function.");
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
31
|
-
}
|
|
32
|
-
function previewModule(value) {
|
|
33
|
-
if (typeof value !== "object" && typeof value !== "function" || value === null || !("mountLocalPreview" in value) || typeof value.mountLocalPreview !== "function") {
|
|
34
|
-
throw new Error("The SDK preview host could not be loaded.");
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
}
|
|
38
|
-
function showStartupError(mount, error) {
|
|
39
|
-
const alert = document.createElement("main");
|
|
40
|
-
alert.setAttribute("role", "alert");
|
|
41
|
-
alert.style.cssText = "min-height:100vh;display:grid;place-content:center;gap:10px;padding:32px;box-sizing:border-box;background:#f4f5ef;color:#142012;font-family:Inter,ui-sans-serif,system-ui,sans-serif;text-align:center";
|
|
42
|
-
const title = document.createElement("strong");
|
|
43
|
-
title.textContent = "Preview could not start";
|
|
44
|
-
const detail = document.createElement("span");
|
|
45
|
-
detail.textContent = error instanceof Error ? error.message : "The extension preview failed during startup.";
|
|
46
|
-
alert.append(title, detail);
|
|
47
|
-
mount.replaceChildren(alert);
|
|
48
|
-
}
|
|
49
|
-
async function startLocalPreview(options, dependencies = defaultDependencies) {
|
|
50
|
-
try {
|
|
51
|
-
await dependencies.prepareHost?.(options.reactUrl);
|
|
52
|
-
const container = remoteContainer(
|
|
53
|
-
await dependencies.importRemote(options.remote)
|
|
54
|
-
);
|
|
55
|
-
await container.init({});
|
|
56
|
-
const preview = previewModule(await dependencies.importPreview());
|
|
57
|
-
return preview.mountLocalPreview(options);
|
|
58
|
-
} catch (error) {
|
|
59
|
-
showStartupError(options.mount, error);
|
|
60
|
-
return void 0;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
export {
|
|
64
|
-
startLocalPreview
|
|
65
|
-
};
|
|
66
|
-
//# sourceMappingURL=vite-preview-bootstrap.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vite/preview/bootstrap.ts"],"sourcesContent":["import type { LocalPreviewOptions } from './client';\n\ninterface RemoteContainer {\n init(shared: Record<string, unknown>): void | Promise<void>;\n}\n\ninterface PreviewModule {\n mountLocalPreview(options: LocalPreviewOptions): () => void;\n}\n\nexport interface PreviewBootstrapDependencies {\n prepareHost?(reactUrl: string): Promise<void>;\n importRemote(remote: string): Promise<unknown>;\n importPreview(): Promise<unknown>;\n}\n\ntype SharedModuleCache = {\n share: Record<string, unknown>;\n remote: Record<string, unknown>;\n};\n\nasync function prepareHostShares(reactUrl: string): Promise<void> {\n // eslint-disable-next-line no-inline-comments -- Vite must leave this browser URL unresolved.\n const imported = (await import(/* @vite-ignore */ reactUrl)) as Record<\n string,\n unknown\n >;\n const candidate = imported.default;\n const react =\n typeof candidate === 'object' &&\n candidate !== null &&\n 'createContext' in candidate\n ? candidate\n : imported;\n\n const registry = globalThis as typeof globalThis & {\n __mf_module_cache__?: SharedModuleCache;\n };\n const cache = (registry.__mf_module_cache__ ??= { share: {}, remote: {} });\n cache.share.react = react;\n cache.share['default:react'] = react;\n}\n\nconst defaultDependencies: PreviewBootstrapDependencies = {\n prepareHost: prepareHostShares,\n importRemote: remote => {\n // eslint-disable-next-line no-inline-comments -- The remote URL is selected at preview runtime.\n return import(/* @vite-ignore */ remote);\n },\n importPreview: () => import('../../vite-preview'),\n};\n\nfunction remoteContainer(value: unknown): RemoteContainer {\n if (\n (typeof value !== 'object' && typeof value !== 'function') ||\n value === null ||\n !('init' in value) ||\n typeof value.init !== 'function'\n ) {\n throw new Error('The extension remote does not provide an init function.');\n }\n return value as RemoteContainer;\n}\n\nfunction previewModule(value: unknown): PreviewModule {\n if (\n (typeof value !== 'object' && typeof value !== 'function') ||\n value === null ||\n !('mountLocalPreview' in value) ||\n typeof value.mountLocalPreview !== 'function'\n ) {\n throw new Error('The SDK preview host could not be loaded.');\n }\n return value as PreviewModule;\n}\n\nfunction showStartupError(mount: HTMLElement, error: unknown): void {\n const alert = document.createElement('main');\n alert.setAttribute('role', 'alert');\n alert.style.cssText =\n 'min-height:100vh;display:grid;place-content:center;gap:10px;padding:32px;box-sizing:border-box;background:#f4f5ef;color:#142012;font-family:Inter,ui-sans-serif,system-ui,sans-serif;text-align:center';\n\n const title = document.createElement('strong');\n title.textContent = 'Preview could not start';\n const detail = document.createElement('span');\n detail.textContent =\n error instanceof Error\n ? error.message\n : 'The extension preview failed during startup.';\n alert.append(title, detail);\n mount.replaceChildren(alert);\n}\n\nexport async function startLocalPreview(\n options: LocalPreviewOptions & { reactUrl: string },\n dependencies: PreviewBootstrapDependencies = defaultDependencies,\n): Promise<(() => void) | undefined> {\n try {\n await dependencies.prepareHost?.(options.reactUrl);\n const container = remoteContainer(\n await dependencies.importRemote(options.remote),\n );\n await container.init({});\n const preview = previewModule(await dependencies.importPreview());\n return preview.mountLocalPreview(options);\n } catch (error) {\n showStartupError(options.mount, error);\n return undefined;\n }\n}\n"],"mappings":";;;AAqBA,eAAe,kBAAkB,UAAiC;AAEhE,QAAM,WAAY,MAAM;AAAA;AAAA,IAA0B;AAAA;AAIlD,QAAM,YAAY,SAAS;AAC3B,QAAM,QACJ,OAAO,cAAc,YACrB,cAAc,QACd,mBAAmB,YACf,YACA;AAEN,QAAM,WAAW;AAGjB,QAAM,QAAS,SAAS,wBAAT,SAAS,sBAAwB,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE;AACxE,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,eAAe,IAAI;AACjC;AAEA,IAAM,sBAAoD;AAAA,EACxD,aAAa;AAAA,EACb,cAAc,YAAU;AAEtB,WAAO;AAAA;AAAA,MAA0B;AAAA;AAAA,EACnC;AAAA,EACA,eAAe,MAAM,OAAO,oBAAoB;AAClD;AAEA,SAAS,gBAAgB,OAAiC;AACxD,MACG,OAAO,UAAU,YAAY,OAAO,UAAU,cAC/C,UAAU,QACV,EAAE,UAAU,UACZ,OAAO,MAAM,SAAS,YACtB;AACA,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAA+B;AACpD,MACG,OAAO,UAAU,YAAY,OAAO,UAAU,cAC/C,UAAU,QACV,EAAE,uBAAuB,UACzB,OAAO,MAAM,sBAAsB,YACnC;AACA,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAoB,OAAsB;AAClE,QAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,QAAM,aAAa,QAAQ,OAAO;AAClC,QAAM,MAAM,UACV;AAEF,QAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,QAAM,cAAc;AACpB,QAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,SAAO,cACL,iBAAiB,QACb,MAAM,UACN;AACN,QAAM,OAAO,OAAO,MAAM;AAC1B,QAAM,gBAAgB,KAAK;AAC7B;AAEA,eAAsB,kBACpB,SACA,eAA6C,qBACV;AACnC,MAAI;AACF,UAAM,aAAa,cAAc,QAAQ,QAAQ;AACjD,UAAM,YAAY;AAAA,MAChB,MAAM,aAAa,aAAa,QAAQ,MAAM;AAAA,IAChD;AACA,UAAM,UAAU,KAAK,CAAC,CAAC;AACvB,UAAM,UAAU,cAAc,MAAM,aAAa,cAAc,CAAC;AAChE,WAAO,QAAQ,kBAAkB,OAAO;AAAA,EAC1C,SAAS,OAAO;AACd,qBAAiB,QAAQ,OAAO,KAAK;AACrC,WAAO;AAAA,EACT;AACF;","names":[]}
|