@fluid-app/portal-sdk 0.1.370 → 0.1.371

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.
Files changed (104) hide show
  1. package/dist/{CardWidget-CqdJHxX0.cjs → CardWidget-BWwI1G0Z.cjs} +2 -2
  2. package/dist/{CardWidget-CqdJHxX0.cjs.map → CardWidget-BWwI1G0Z.cjs.map} +1 -1
  3. package/dist/{CardWidget-DCrXorb0.cjs → CardWidget-aJYbzWG9.cjs} +2 -2
  4. package/dist/{CardWidget-DdV1HDy0.mjs → CardWidget-cIc9cOG9.mjs} +2 -2
  5. package/dist/{CardWidget-DdV1HDy0.mjs.map → CardWidget-cIc9cOG9.mjs.map} +1 -1
  6. package/dist/{ContainerWidget-CYIOGpgy.cjs → ContainerWidget-C2LMzXVj.cjs} +3 -3
  7. package/dist/{ContainerWidget-CZTRim0A.cjs → ContainerWidget-bMMdFhLg.cjs} +2 -2
  8. package/dist/{ContainerWidget-CZTRim0A.cjs.map → ContainerWidget-bMMdFhLg.cjs.map} +1 -1
  9. package/dist/{ContainerWidget-BKaiiPlW.mjs → ContainerWidget-mSWihekF.mjs} +2 -2
  10. package/dist/{ContainerWidget-BKaiiPlW.mjs.map → ContainerWidget-mSWihekF.mjs.map} +1 -1
  11. package/dist/{FluidProvider-DG7duKf4.cjs → FluidProvider-C6d1TUVm.cjs} +8 -10
  12. package/dist/{FluidProvider-DG7duKf4.cjs.map → FluidProvider-C6d1TUVm.cjs.map} +1 -1
  13. package/dist/{FluidProvider-Bmmdax4d.mjs → FluidProvider-C80gc4Yi.mjs} +8 -10
  14. package/dist/{FluidProvider-Bmmdax4d.mjs.map → FluidProvider-C80gc4Yi.mjs.map} +1 -1
  15. package/dist/{LayoutWidget-xw1zY6cc.cjs → LayoutWidget-BqUbneWw.cjs} +2 -2
  16. package/dist/{LayoutWidget-xw1zY6cc.cjs.map → LayoutWidget-BqUbneWw.cjs.map} +1 -1
  17. package/dist/{LayoutWidget-VU6uFW3-.cjs → LayoutWidget-C1BzDeQI.cjs} +2 -2
  18. package/dist/{LayoutWidget-C0TbnxQW.mjs → LayoutWidget-D3qYKt9F.mjs} +2 -2
  19. package/dist/{LayoutWidget-C0TbnxQW.mjs.map → LayoutWidget-D3qYKt9F.mjs.map} +1 -1
  20. package/dist/{MessagingScreen-BY8IowR0.mjs → MessagingScreen-D3si8TPx.mjs} +6 -6
  21. package/dist/{MessagingScreen-CyxUDdcb.mjs → MessagingScreen-DKzYThAY.mjs} +2 -2
  22. package/dist/{MessagingScreen-CyxUDdcb.mjs.map → MessagingScreen-DKzYThAY.mjs.map} +1 -1
  23. package/dist/{MessagingScreen-ylXd2Um7.cjs → MessagingScreen-DqxRu2x3.cjs} +2 -2
  24. package/dist/{MessagingScreen-ylXd2Um7.cjs.map → MessagingScreen-DqxRu2x3.cjs.map} +1 -1
  25. package/dist/{MessagingScreen-BIJU7dWT.cjs → MessagingScreen-PZyO11S1.cjs} +6 -6
  26. package/dist/{OrdersScreen-DsTMrxlo.mjs → OrdersScreen-B2htbQ2Q.mjs} +2 -2
  27. package/dist/{OrdersScreen-DsTMrxlo.mjs.map → OrdersScreen-B2htbQ2Q.mjs.map} +1 -1
  28. package/dist/{OrdersScreen-1b2ZzMEg.cjs → OrdersScreen-BuX5aWgx.cjs} +6 -6
  29. package/dist/{OrdersScreen-BVRpsxMF.mjs → OrdersScreen-Cgjfo2Fs.mjs} +6 -6
  30. package/dist/{OrdersScreen-B-biRUNQ.cjs → OrdersScreen-CpNvxRDC.cjs} +2 -2
  31. package/dist/{OrdersScreen-B-biRUNQ.cjs.map → OrdersScreen-CpNvxRDC.cjs.map} +1 -1
  32. package/dist/{ProfileScreen-DvnWtXlF.mjs → ProfileScreen-BCwdwO_p.mjs} +3 -3
  33. package/dist/{ProfileScreen-DvnWtXlF.mjs.map → ProfileScreen-BCwdwO_p.mjs.map} +1 -1
  34. package/dist/{ProfileScreen-DzgGP3lr.mjs → ProfileScreen-D7UA604p.mjs} +7 -7
  35. package/dist/{ProfileScreen-DYe6Msda.cjs → ProfileScreen-DlIXDIeu.cjs} +3 -3
  36. package/dist/{ProfileScreen-DYe6Msda.cjs.map → ProfileScreen-DlIXDIeu.cjs.map} +1 -1
  37. package/dist/{ProfileScreen-Dsbr8wip.cjs → ProfileScreen-MypXufrO.cjs} +7 -7
  38. package/dist/{ScreenRenderer-CKu-Jc1I.mjs → ScreenRenderer-CcT_j-WQ.mjs} +1 -4
  39. package/dist/{ScreenRenderer-CKu-Jc1I.mjs.map → ScreenRenderer-CcT_j-WQ.mjs.map} +1 -1
  40. package/dist/{ScreenRenderer-CZTdJd2G.cjs → ScreenRenderer-Ce8MJPnR.cjs} +1 -4
  41. package/dist/{ScreenRenderer-CZTdJd2G.cjs.map → ScreenRenderer-Ce8MJPnR.cjs.map} +1 -1
  42. package/dist/{ShopScreen-DcgyX3Wk.cjs → ShopScreen-29SZwMWF.cjs} +2 -2
  43. package/dist/{ShopScreen-DcgyX3Wk.cjs.map → ShopScreen-29SZwMWF.cjs.map} +1 -1
  44. package/dist/{ShopScreen-nUFdeac6.cjs → ShopScreen-BC9NDysQ.cjs} +6 -6
  45. package/dist/{ShopScreen-Cy5cf6tn.mjs → ShopScreen-BKVNW6ya.mjs} +6 -6
  46. package/dist/{ShopScreen-DVYzIHJA.mjs → ShopScreen-CgN-6gic.mjs} +2 -2
  47. package/dist/{ShopScreen-DVYzIHJA.mjs.map → ShopScreen-CgN-6gic.mjs.map} +1 -1
  48. package/dist/{SubscriptionsScreen-BnRWR4Df.mjs → SubscriptionsScreen-CPiLzWhm.mjs} +7 -7
  49. package/dist/{SubscriptionsScreen-Dw68LWDh.cjs → SubscriptionsScreen-Dz6Y_1oD.cjs} +3 -3
  50. package/dist/{SubscriptionsScreen-Dw68LWDh.cjs.map → SubscriptionsScreen-Dz6Y_1oD.cjs.map} +1 -1
  51. package/dist/{SubscriptionsScreen-DqG_qHS_.mjs → SubscriptionsScreen-M2WaVHH7.mjs} +3 -3
  52. package/dist/{SubscriptionsScreen-DqG_qHS_.mjs.map → SubscriptionsScreen-M2WaVHH7.mjs.map} +1 -1
  53. package/dist/{SubscriptionsScreen-Day2TSrY.cjs → SubscriptionsScreen-dN42J-MR.cjs} +7 -7
  54. package/dist/{authoring-BlXhd4Sj.d.cts → authoring--rXPyZca.d.cts} +2 -2
  55. package/dist/{authoring-BlXhd4Sj.d.cts.map → authoring--rXPyZca.d.cts.map} +1 -1
  56. package/dist/{authoring-BMuHXNFy.d.mts → authoring-V0sXg_j4.d.mts} +2 -2
  57. package/dist/{authoring-BMuHXNFy.d.mts.map → authoring-V0sXg_j4.d.mts.map} +1 -1
  58. package/dist/index.cjs +22 -24
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.d.cts +3 -8
  61. package/dist/index.d.cts.map +1 -1
  62. package/dist/index.d.mts +3 -9
  63. package/dist/index.d.mts.map +1 -1
  64. package/dist/index.mjs +22 -24
  65. package/dist/index.mjs.map +1 -1
  66. package/dist/preview/preview-entry.cjs +6 -6
  67. package/dist/preview/preview-entry.d.cts +1 -1
  68. package/dist/preview/preview-entry.d.mts +1 -1
  69. package/dist/preview/preview-entry.mjs +6 -6
  70. package/dist/{use-portal-card-add-3ds-flow-hGLvDBZT.cjs → use-portal-card-add-3ds-flow-C0YUg213.cjs} +2 -2
  71. package/dist/{use-portal-card-add-3ds-flow-hGLvDBZT.cjs.map → use-portal-card-add-3ds-flow-C0YUg213.cjs.map} +1 -1
  72. package/dist/{use-portal-card-add-3ds-flow-FSWDlXtP.mjs → use-portal-card-add-3ds-flow-DKXraYw-.mjs} +2 -2
  73. package/dist/{use-portal-card-add-3ds-flow-FSWDlXtP.mjs.map → use-portal-card-add-3ds-flow-DKXraYw-.mjs.map} +1 -1
  74. package/dist/vite/builder-preview-entry.cjs +573 -0
  75. package/dist/vite/builder-preview-entry.cjs.map +1 -0
  76. package/dist/vite/builder-preview-entry.d.cts +11 -0
  77. package/dist/vite/builder-preview-entry.d.cts.map +1 -0
  78. package/dist/vite/builder-preview-entry.d.mts +11 -0
  79. package/dist/vite/builder-preview-entry.d.mts.map +1 -0
  80. package/dist/vite/builder-preview-entry.mjs +571 -0
  81. package/dist/vite/builder-preview-entry.mjs.map +1 -0
  82. package/dist/vite/index.cjs +16 -28
  83. package/dist/vite/index.cjs.map +1 -1
  84. package/dist/vite/index.d.cts.map +1 -1
  85. package/dist/vite/index.d.mts.map +1 -1
  86. package/dist/vite/index.mjs +16 -28
  87. package/dist/vite/index.mjs.map +1 -1
  88. package/dist/{widget-package-descriptor-BnVCE5Fz.d.cts → widget-package-descriptor-ByCz_FNh.d.cts} +177 -9
  89. package/dist/widget-package-descriptor-ByCz_FNh.d.cts.map +1 -0
  90. package/dist/{widget-package-descriptor-Dt8BkF85.d.mts → widget-package-descriptor-CPIPAdUO.d.mts} +177 -9
  91. package/dist/widget-package-descriptor-CPIPAdUO.d.mts.map +1 -0
  92. package/dist/widget-package-utils-BWn56ZFw.cjs +1553 -0
  93. package/dist/widget-package-utils-BWn56ZFw.cjs.map +1 -0
  94. package/dist/widget-package-utils-BdS0B0pI.mjs +1486 -0
  95. package/dist/widget-package-utils-BdS0B0pI.mjs.map +1 -0
  96. package/dist/widgets/authoring.d.cts +1 -1
  97. package/dist/widgets/authoring.d.mts +1 -1
  98. package/package.json +17 -21
  99. package/dist/widget-package-descriptor-BnVCE5Fz.d.cts.map +0 -1
  100. package/dist/widget-package-descriptor-Dt8BkF85.d.mts.map +0 -1
  101. package/dist/widget-package-utils-BGu5fWAU.cjs +0 -650
  102. package/dist/widget-package-utils-BGu5fWAU.cjs.map +0 -1
  103. package/dist/widget-package-utils-DzdFCK04.mjs +0 -582
  104. package/dist/widget-package-utils-DzdFCK04.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-preview-entry.cjs","names":["Sun","Moon","ScrollArea","ReactComponent","AlertCircle","Button","RotateCcw","ScrollArea","Check","Copy","RotateCcw","Puzzle","isSourceWidgetPackage","sourceWidgetPackagesToManifests"],"sources":["../../../preview/src/components/WidgetSidebar.tsx","../../../preview/src/components/PreviewCanvas.tsx","../../../preview/src/components/ScrubNumberField.tsx","../../../preview/src/components/FieldRow.tsx","../../../preview/src/components/CopyJsonButton.tsx","../../../preview/src/components/PropertyPanel.tsx","../../../preview/src/BuilderPreviewApp.tsx","../../src/vite/builder-preview-entry.tsx"],"sourcesContent":["import { useState, useCallback, type ReactElement } from \"react\";\nimport { Moon, Sun } from \"lucide-react\";\nimport { ScrollArea } from \"@fluid-app/ui-primitives\";\nimport type { PreviewWidgetManifest } from \"../types\";\n\ninterface WidgetSidebarProps {\n widgets: PreviewWidgetManifest[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n}\n\nexport function WidgetSidebar({\n widgets,\n selectedIndex,\n onSelect,\n}: WidgetSidebarProps): ReactElement {\n const [isDark, setIsDark] = useState(\n () => document.documentElement.getAttribute(\"data-theme-mode\") === \"dark\",\n );\n\n const toggleTheme = useCallback(() => {\n const next = !isDark;\n setIsDark(next);\n document.documentElement.setAttribute(\n \"data-theme-mode\",\n next ? \"dark\" : \"light\",\n );\n }, [isDark]);\n\n return (\n <aside className=\"flex flex-col overflow-y-auto border-r border-zinc-200 bg-zinc-50 p-4 dark:border-zinc-700 dark:bg-zinc-900\">\n <div className=\"mb-4 flex items-center justify-between border-b border-zinc-200 pb-3 dark:border-zinc-700\">\n <h1 className=\"text-foreground text-[15px] font-bold\">\n Custom Widget Preview\n </h1>\n <button\n onClick={toggleTheme}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center rounded-md border-none bg-zinc-200 p-1.5 transition-colors dark:bg-zinc-700\"\n title={isDark ? \"Switch to light mode\" : \"Switch to dark mode\"}\n >\n {isDark ? (\n <Sun className=\"size-3.5\" />\n ) : (\n <Moon className=\"size-3.5\" />\n )}\n </button>\n </div>\n <div className=\"text-muted-foreground mb-2 text-[11px] font-semibold tracking-wider uppercase\">\n Widgets\n </div>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-0.5\">\n {widgets.map((w, i) => (\n <button\n key={w.type}\n onClick={() => onSelect(i)}\n className={`w-full cursor-pointer rounded-lg border px-3 py-2.5 text-left transition-colors ${\n i === selectedIndex\n ? \"border-zinc-200 bg-white shadow-sm dark:border-zinc-600 dark:bg-zinc-800\"\n : \"border-transparent bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800\"\n }`}\n >\n <span className=\"text-foreground block text-[13px] font-medium\">\n {w.displayName}\n </span>\n <span className=\"text-muted-foreground mt-0.5 block text-[11px]\">\n {w.type}\n </span>\n </button>\n ))}\n </div>\n </ScrollArea>\n </aside>\n );\n}\n","import {\n Component as ReactComponent,\n type ReactElement,\n type ComponentType,\n type ReactNode,\n type ErrorInfo,\n} from \"react\";\nimport { AlertCircle, RotateCcw } from \"lucide-react\";\nimport { Button, ScrollArea } from \"@fluid-app/ui-primitives\";\n\ninterface PreviewCanvasProps {\n widgetType: string;\n displayName: string;\n description: string;\n component: ComponentType<Record<string, unknown>>;\n props: Record<string, unknown>;\n onRetry?: () => void;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\n/** Catches render errors in widget code so the rest of the preview stays usable. */\nclass WidgetErrorBoundary extends ReactComponent<\n { children: ReactNode; onRetry: () => void },\n ErrorBoundaryState\n> {\n override state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n console.error(\"[builder-preview] Widget render error:\", error, info);\n }\n\n override render(): ReactNode {\n if (this.state.error) {\n return (\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-6 dark:border-red-900 dark:bg-red-950\">\n <div className=\"mb-3 flex items-center gap-2\">\n <AlertCircle className=\"size-4 shrink-0 text-red-600 dark:text-red-400\" />\n <p className=\"text-sm font-semibold text-red-800 dark:text-red-300\">\n Widget render error\n </p>\n </div>\n <pre className=\"mb-4 font-mono text-[13px] break-words whitespace-pre-wrap text-red-700 dark:text-red-400\">\n {this.state.error.message}\n </pre>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"border-red-200 text-red-800 hover:bg-red-100 dark:border-red-800 dark:text-red-300 dark:hover:bg-red-900\"\n onClick={() => {\n this.setState({ error: null });\n this.props.onRetry();\n }}\n >\n <RotateCcw className=\"mr-1.5 size-3\" />\n Retry\n </Button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n\nexport function PreviewCanvas({\n widgetType,\n displayName,\n description,\n component: Component,\n props,\n onRetry,\n}: PreviewCanvasProps): ReactElement {\n return (\n <main className=\"flex flex-col overflow-hidden bg-zinc-100 dark:bg-zinc-800\">\n <div className=\"border-b border-zinc-200 px-6 py-3.5 dark:border-zinc-700\">\n <h2 className=\"text-foreground text-base font-semibold\">\n {displayName}\n </h2>\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{description}</p>\n </div>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"min-h-full p-6\">\n <WidgetErrorBoundary key={widgetType} onRetry={onRetry ?? (() => {})}>\n <Component {...props} />\n </WidgetErrorBoundary>\n </div>\n </ScrollArea>\n </main>\n );\n}\n","import { useState, useCallback, useRef, type ReactElement } from \"react\";\n\ninterface ScrubNumberFieldProps {\n label: string;\n value: number;\n min: number;\n max: number;\n step: number;\n onChange: (v: number) => void;\n shaded?: boolean;\n}\n\nexport function ScrubNumberField({\n label,\n value,\n min,\n max,\n step,\n onChange,\n shaded,\n}: ScrubNumberFieldProps): ReactElement {\n const [isDragging, setIsDragging] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const dragRef = useRef({ x: 0, startValue: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n\n const range = max - min;\n const pct =\n range > 0 ? Math.min(100, Math.max(0, ((value - min) / range) * 100)) : 0;\n const isOutOfRange = value < min || value > max;\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (isEditing) return;\n e.preventDefault();\n containerRef.current?.setPointerCapture(e.pointerId);\n dragRef.current = { x: e.clientX, startValue: value };\n setIsDragging(true);\n },\n [value, isEditing],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!isDragging) return;\n const dx = e.clientX - dragRef.current.x;\n const pxPerUnit = 300 / (range || 1);\n const rawVal = dragRef.current.startValue + dx / pxPerUnit;\n const rounded = Math.round(rawVal / step) * step;\n const clean = Number(rounded.toFixed(step < 1 ? 2 : 0));\n onChange(clean);\n },\n [isDragging, step, range, onChange],\n );\n\n const handlePointerUp = useCallback(\n (e: React.PointerEvent) => {\n if (isDragging) {\n containerRef.current?.releasePointerCapture(e.pointerId);\n setIsDragging(false);\n }\n },\n [isDragging],\n );\n\n const handleValueClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n setIsEditing(true);\n }, []);\n\n const commitInput = useCallback(\n (raw: string) => {\n const parsed = Number(raw) || 0;\n onChange(Math.min(max, Math.max(min, parsed)));\n },\n [onChange, min, max],\n );\n\n const handleInputBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsEditing(false);\n commitInput(e.target.value);\n },\n [commitInput],\n );\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n setIsEditing(false);\n commitInput((e.target as HTMLInputElement).value);\n }\n if (e.key === \"Escape\") {\n setIsEditing(false);\n }\n },\n [commitInput],\n );\n\n const rowBg = shaded\n ? \"bg-zinc-200/80 dark:bg-zinc-700/80\"\n : \"bg-zinc-100 dark:bg-zinc-800\";\n const fillBg = shaded\n ? \"bg-zinc-300 dark:bg-zinc-500\"\n : \"bg-zinc-300/80 dark:bg-zinc-600\";\n\n return (\n <div\n ref={containerRef}\n className={`bp-scrub-row relative min-h-10 overflow-hidden rounded-lg ${rowBg}`}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n style={{ cursor: isEditing ? \"text\" : \"ew-resize\", touchAction: \"none\" }}\n >\n {/* Fill bar (absolute, behind content) */}\n <div\n className={`pointer-events-none absolute top-0 left-0 h-full transition-[width] duration-[50ms] ease-out ${fillBg}`}\n style={{ width: `${pct}%` }}\n />\n\n {/* Track: label + value in a single flex row */}\n <div className=\"relative flex min-h-10 w-full items-center justify-between px-3.5\">\n <span className=\"text-foreground relative z-[1] text-[13px] font-medium whitespace-nowrap\">\n {label}\n </span>\n\n {isEditing ? (\n <input\n type=\"number\"\n defaultValue={value}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n className=\"bp-number-input text-foreground focus:border-primary relative z-[1] w-[72px] shrink-0 rounded-md border border-zinc-300 bg-zinc-100 px-2 py-1 text-right font-mono text-[13px] outline-none dark:border-zinc-600 dark:bg-zinc-800\"\n autoFocus\n step={step}\n onPointerDown={(e) => e.stopPropagation()}\n style={{ cursor: \"text\" }}\n />\n ) : (\n <span\n className={`relative z-[1] min-w-12 shrink-0 cursor-text rounded px-2 py-0.5 pr-3.5 text-right font-mono text-[13px] whitespace-nowrap transition-colors hover:bg-black/5 dark:hover:bg-white/10 ${isOutOfRange ? \"text-amber-500\" : \"text-muted-foreground\"}`}\n role=\"button\"\n tabIndex={0}\n onClick={handleValueClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n setIsEditing(true);\n }\n }}\n onPointerDown={(e) => e.stopPropagation()}\n >\n {step < 1 ? value.toFixed(2) : Math.round(value)}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { useRef, useCallback, useState, type ReactElement } from \"react\";\nimport type { PreviewField } from \"../types\";\nimport { ScrubNumberField } from \"./ScrubNumberField\";\n\ninterface FieldRowProps {\n field: PreviewField;\n value: unknown;\n onChange: (value: unknown) => void;\n shaded?: boolean;\n}\n\nexport function FieldRow({\n field,\n value,\n onChange,\n shaded,\n}: FieldRowProps): ReactElement {\n const rowClass = `flex items-center justify-between px-3.5 min-h-10 rounded-lg relative transition-colors ${\n shaded\n ? \"bg-zinc-200/80 hover:bg-zinc-200 dark:bg-zinc-700/80 dark:hover:bg-zinc-700\"\n : \"bg-zinc-100 hover:bg-zinc-200/60 dark:bg-zinc-800 dark:hover:bg-zinc-700/60\"\n }`;\n\n // Boolean toggle\n if (field.type === \"boolean\") {\n return (\n <div\n className={`${rowClass} cursor-pointer`}\n role=\"button\"\n tabIndex={0}\n onClick={() => onChange(!value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onChange(!value);\n }\n }}\n >\n <span className=\"text-muted-foreground mr-3 shrink-0 text-[13px] font-medium whitespace-nowrap\">\n {field.label}\n </span>\n <div\n className={`flex h-5 w-9 shrink-0 items-center rounded-full p-0.5 transition-colors ${\n value\n ? \"justify-end bg-zinc-900 dark:bg-indigo-500\"\n : \"justify-start bg-zinc-300 dark:bg-zinc-500\"\n }`}\n >\n <div className=\"size-4 rounded-full bg-white shadow-sm\" />\n </div>\n </div>\n );\n }\n\n // Select dropdown\n if (field.type === \"select\" && field.options) {\n return (\n <div className={rowClass}>\n <span className=\"text-muted-foreground mr-3 shrink-0 text-[13px] font-medium whitespace-nowrap\">\n {field.label}\n </span>\n <div className=\"flex items-center gap-1.5\">\n <select\n value={String(value ?? \"\")}\n onChange={(e) => {\n const raw = e.target.value;\n // Coerce to number if the original value was numeric\n onChange(typeof value === \"number\" ? Number(raw) : raw);\n }}\n className=\"bp-select text-foreground cursor-pointer rounded-md bg-transparent px-2 py-1 pr-5 text-[13px] font-normal transition-colors outline-none focus:bg-zinc-200 dark:focus:bg-zinc-700\"\n >\n {field.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <svg\n className=\"text-muted-foreground pointer-events-none -ml-4 shrink-0\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n </div>\n </div>\n );\n }\n\n // Number — scrub slider if min+max provided, plain input otherwise\n if (field.type === \"number\") {\n const num = Number(value ?? 0);\n const step = field.step ?? 1;\n\n if (field.min != null && field.max != null) {\n return (\n <ScrubNumberField\n label={field.label}\n value={num}\n min={field.min}\n max={field.max}\n step={step}\n onChange={(v) => onChange(v)}\n shaded={shaded}\n />\n );\n }\n\n return (\n <div className={rowClass}>\n <span className=\"text-muted-foreground mr-3 shrink-0 text-[13px] font-medium whitespace-nowrap\">\n {field.label}\n </span>\n <input\n type=\"number\"\n value={num}\n onChange={(e) =>\n onChange(e.target.value ? Number(e.target.value) : 0)\n }\n step={step}\n className=\"bp-number-input text-foreground focus:border-primary w-[72px] shrink-0 rounded-md border border-zinc-300 bg-transparent px-2 py-1 text-right font-mono text-[13px] outline-none dark:border-zinc-600\"\n />\n </div>\n );\n }\n\n // Color — detect by field type or key/label heuristic\n if (\n field.type === \"color\" ||\n field.type === \"colorPicker\" ||\n (field.type === \"text\" &&\n /color|tint|background|fill/i.test(field.label + field.key))\n ) {\n return (\n <ColorField\n field={field}\n value={value}\n onChange={onChange}\n rowClass={rowClass}\n />\n );\n }\n\n // Text / textarea / fallback\n return (\n <div className={rowClass}>\n <span className=\"text-muted-foreground mr-3 shrink-0 text-[13px] font-medium whitespace-nowrap\">\n {field.label}\n </span>\n {field.type === \"textarea\" ? (\n <textarea\n value={String(value ?? \"\")}\n onChange={(e) => onChange(e.target.value)}\n className=\"text-foreground min-h-14 w-[55%] min-w-20 resize-y rounded-md bg-transparent px-2 py-1 text-right text-[13px] transition-colors outline-none focus:bg-zinc-200 dark:focus:bg-zinc-700\"\n />\n ) : (\n <input\n type=\"text\"\n value={String(value ?? \"\")}\n onChange={(e) => onChange(e.target.value)}\n className=\"text-foreground w-[55%] min-w-20 rounded-md bg-transparent px-2 py-1 text-right text-[13px] transition-colors outline-none focus:bg-zinc-200 dark:focus:bg-zinc-700\"\n />\n )}\n </div>\n );\n}\n\n/**\n * Color field with local state for the picker.\n * The native <input type=\"color\"> fires onChange on every pixel drag.\n * We use local state for the live swatch preview and only commit to\n * the parent on text input change or when the picker closes (change event\n * on the hidden input fires on mouseup/close).\n */\nfunction ColorField({\n field,\n value,\n onChange,\n rowClass,\n}: {\n field: PreviewField;\n value: unknown;\n onChange: (value: unknown) => void;\n rowClass: string;\n}) {\n const pickerRef = useRef<HTMLInputElement>(null);\n const colorVal = String(value ?? \"#000000\");\n const isHexLike = /^#?[0-9a-fA-F]{3,8}$/.test(colorVal);\n const normalized = isHexLike\n ? colorVal.startsWith(\"#\")\n ? colorVal\n : `#${colorVal}`\n : \"#000000\";\n\n // Local state tracks the picker drag without pushing to parent on every pixel\n const [localColor, setLocalColor] = useState(normalized);\n const isDragging = useRef(false);\n\n // Sync local state when parent value changes (e.g. reset, text input)\n if (!isDragging.current && localColor !== normalized) {\n setLocalColor(normalized);\n }\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n },\n [onChange],\n );\n\n // Live preview while dragging — only updates local swatch, not the widget\n const handlePickerInput = useCallback(\n (e: React.FormEvent<HTMLInputElement>) => {\n isDragging.current = true;\n setLocalColor((e.target as HTMLInputElement).value);\n },\n [],\n );\n\n // Commit final color when picker closes\n const handlePickerChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n isDragging.current = false;\n onChange(e.target.value);\n },\n [onChange],\n );\n\n return (\n <div className={rowClass}>\n <span className=\"text-muted-foreground mr-3 shrink-0 text-[13px] font-medium whitespace-nowrap\">\n {field.label}\n </span>\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n value={colorVal}\n onChange={handleTextChange}\n className=\"text-foreground w-20 rounded-md bg-transparent px-2 py-1 text-right text-[13px] transition-colors outline-none focus:bg-zinc-200 dark:focus:bg-zinc-700\"\n />\n <div\n className=\"h-[22px] w-[22px] shrink-0 cursor-pointer rounded border-2 border-zinc-300 transition-colors hover:border-zinc-400 focus:border-zinc-400 focus:outline-none dark:border-zinc-600 dark:hover:border-zinc-500 dark:focus:border-zinc-500\"\n style={{ background: localColor }}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Pick color\"\n onClick={() => pickerRef.current?.click()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n pickerRef.current?.click();\n }\n }}\n />\n <input\n ref={pickerRef}\n type=\"color\"\n value={localColor}\n onInput={handlePickerInput}\n onChange={handlePickerChange}\n className=\"pointer-events-none absolute size-0 opacity-0\"\n />\n </div>\n </div>\n );\n}\n","import { useState, useCallback, type ReactElement } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\ninterface CopyJsonButtonProps {\n widgetType: string;\n props: Record<string, unknown>;\n}\n\nexport function CopyJsonButton({\n widgetType,\n props,\n}: CopyJsonButtonProps): ReactElement {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const json = JSON.stringify({ type: widgetType, props }, null, 2);\n navigator.clipboard.writeText(json).then(\n () => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n },\n () => {\n // Clipboard API unavailable — ignore silently\n },\n );\n }, [widgetType, props]);\n\n return (\n <button\n onClick={handleCopy}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center rounded border-none bg-transparent p-1 transition-colors\"\n title=\"Copy Current Widget JSON\"\n >\n {copied ? (\n <Check className=\"size-3.5 text-green-500\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </button>\n );\n}\n","import type { ReactElement } from \"react\";\nimport { RotateCcw } from \"lucide-react\";\nimport type { PreviewField } from \"../types\";\nimport { FieldRow } from \"./FieldRow\";\nimport { CopyJsonButton } from \"./CopyJsonButton\";\n\ninterface PropertyPanelProps {\n displayName: string;\n widgetType: string;\n fields: PreviewField[];\n props: Record<string, unknown>;\n onFieldChange: (key: string, value: unknown) => void;\n onReset: () => void;\n}\n\nexport function PropertyPanel({\n displayName,\n widgetType,\n fields,\n props,\n onFieldChange,\n onReset,\n}: PropertyPanelProps): ReactElement {\n return (\n <div className=\"flex flex-col overflow-y-auto bg-zinc-100 p-3 dark:bg-zinc-800\">\n <aside className=\"flex min-h-0 flex-1 flex-col overflow-y-auto rounded-[14px] border border-zinc-200 bg-white shadow-[0_4px_24px_rgba(0,0,0,0.06),0_1px_4px_rgba(0,0,0,0.03)] dark:border-zinc-700 dark:bg-zinc-900\">\n <div className=\"flex items-center justify-between border-b border-zinc-200 px-[18px] py-4 dark:border-zinc-700\">\n <span className=\"text-foreground text-[15px] font-bold\">\n {displayName}\n </span>\n <div className=\"flex items-center gap-1\">\n <CopyJsonButton widgetType={widgetType} props={props} />\n <button\n onClick={onReset}\n className=\"text-muted-foreground hover:text-foreground flex cursor-pointer items-center rounded border-none bg-transparent p-1 transition-colors\"\n title=\"Reset\"\n >\n <RotateCcw className=\"size-3.5\" />\n </button>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2.5 p-3.5\">\n {fields.map((field, i) => (\n <FieldRow\n key={field.key}\n field={field}\n value={props[field.key]}\n onChange={(val) => onFieldChange(field.key, val)}\n shaded={i % 2 === 1}\n />\n ))}\n </div>\n </aside>\n </div>\n );\n}\n","import {\n useState,\n useCallback,\n useEffect,\n useMemo,\n memo,\n type ReactElement,\n} from \"react\";\nimport { Puzzle } from \"lucide-react\";\nimport type { PreviewWidgetManifest, PreviewField } from \"./types\";\nimport { WidgetSidebar } from \"./components/WidgetSidebar\";\nimport { PreviewCanvas } from \"./components/PreviewCanvas\";\nimport { PropertyPanel } from \"./components/PropertyPanel\";\n\nconst MemoizedSidebar = memo(WidgetSidebar);\nconst MemoizedCanvas = memo(PreviewCanvas);\nconst MemoizedPropertyPanel = memo(PropertyPanel);\n\nexport type { PreviewWidgetManifest } from \"./types\";\n\nexport interface BuilderPreviewAppProps {\n widgets: PreviewWidgetManifest[];\n}\n\n/**\n * Standalone widget preview page.\n *\n * Three-panel layout: widget list, live preview, property editor.\n * No auth, no fluid-admin, no iframe — just `pnpm dev` and open /builder-preview.\n */\nexport function BuilderPreviewApp({\n widgets,\n}: BuilderPreviewAppProps): ReactElement {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const selected = widgets[selectedIndex];\n const [props, setProps] = useState<Record<string, unknown>>(\n selected?.defaultProps ?? {},\n );\n\n // Reset props when the selected widget's schema changes (e.g. via HMR replacing the module).\n // Serialize defaultProps to avoid resetting on every render due to new object references.\n const defaultPropsKey = selected ? JSON.stringify(selected.defaultProps) : \"\";\n useEffect(() => {\n if (selected) {\n setProps(selected.defaultProps ?? {});\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selected?.type, defaultPropsKey]);\n\n const handleSelectWidget = useCallback(\n (index: number) => {\n setSelectedIndex(index);\n setProps(widgets[index]?.defaultProps ?? {});\n },\n [widgets],\n );\n\n const handleFieldChange = useCallback((key: string, value: unknown) => {\n setProps((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const handleReset = useCallback(() => {\n setProps(selected?.defaultProps ?? {});\n }, [selected]);\n\n // Must be called before any conditional returns to satisfy Rules of Hooks\n const fields = useMemo(\n () => (selected?.propertySchema?.fields ?? []) as PreviewField[],\n [selected?.propertySchema?.fields],\n );\n\n if (widgets.length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-screen flex-col items-center justify-center gap-3\">\n <Puzzle className=\"size-10 text-zinc-300 dark:text-zinc-600\" />\n <h1 className=\"text-foreground text-xl font-bold\">\n Custom Widget Preview\n </h1>\n <p className=\"text-sm\">\n No widgets found. Add widgets to{\" \"}\n <code className=\"rounded bg-zinc-100 px-1.5 py-0.5 font-mono text-xs dark:bg-zinc-800\">\n customWidgets\n </code>{\" \"}\n in{\" \"}\n <code className=\"rounded bg-zinc-100 px-1.5 py-0.5 font-mono text-xs dark:bg-zinc-800\">\n src/portal.config.ts\n </code>\n , or run:\n </p>\n <code className=\"text-foreground rounded-lg bg-zinc-100 px-4 py-2 font-mono text-sm dark:bg-zinc-800\">\n fluid widget create my-widget\n </code>\n </div>\n );\n }\n\n if (!selected) return <div>No widget selected</div>;\n\n return (\n <div className=\"grid h-screen grid-cols-[220px_1fr_320px] overflow-hidden max-[900px]:grid-cols-1 max-[900px]:grid-rows-[auto_1fr_auto] min-[901px]:max-[1200px]:grid-cols-[180px_1fr_280px]\">\n <MemoizedSidebar\n widgets={widgets}\n selectedIndex={selectedIndex}\n onSelect={handleSelectWidget}\n />\n\n <MemoizedCanvas\n widgetType={selected.type}\n displayName={selected.displayName}\n description={selected.description}\n component={selected.component}\n props={props}\n onRetry={handleReset}\n />\n\n <MemoizedPropertyPanel\n displayName={selected.displayName}\n widgetType={selected.type}\n fields={fields}\n props={props}\n onFieldChange={handleFieldChange}\n onReset={handleReset}\n />\n </div>\n );\n}\n","import { createElement } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { BuilderPreviewApp } from \"@fluid-app/portal-preview\";\nimport {\n isSourceWidgetPackage,\n sourceWidgetPackagesToManifests,\n} from \"../widgets/authoring\";\n\ninterface BuilderPreviewPortalConfig {\n customWidgets?: unknown;\n widgetPackage?: unknown;\n widgetPackages?: unknown;\n default?: unknown;\n}\n\nexport function renderBuilderPreview(\n portalConfig: BuilderPreviewPortalConfig,\n): void {\n const sourcePackageExports = [];\n const seenSourcePackageIds = new Set<string>();\n\n for (const candidate of [\n portalConfig.widgetPackage,\n ...(Array.isArray(portalConfig.widgetPackages)\n ? portalConfig.widgetPackages\n : []),\n portalConfig.default,\n ]) {\n if (\n !isSourceWidgetPackage(candidate) ||\n seenSourcePackageIds.has(candidate.packageId)\n ) {\n continue;\n }\n\n seenSourcePackageIds.add(candidate.packageId);\n sourcePackageExports.push(candidate);\n }\n\n const widgets = [\n ...(Array.isArray(portalConfig.customWidgets)\n ? portalConfig.customWidgets\n : []),\n ...sourceWidgetPackagesToManifests(sourcePackageExports),\n ];\n const root = document.getElementById(\"builder-preview-root\");\n\n if (root) {\n createRoot(root).render(createElement(BuilderPreviewApp, { widgets }));\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ //#region src/vite/builder-preview-entry.d.ts
2
+ interface BuilderPreviewPortalConfig {
3
+ customWidgets?: unknown;
4
+ widgetPackage?: unknown;
5
+ widgetPackages?: unknown;
6
+ default?: unknown;
7
+ }
8
+ declare function renderBuilderPreview(portalConfig: BuilderPreviewPortalConfig): void;
9
+ //#endregion
10
+ export { renderBuilderPreview };
11
+ //# sourceMappingURL=builder-preview-entry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-preview-entry.d.cts","names":[],"sources":["../../src/vite/builder-preview-entry.tsx"],"mappings":";UAQU,0BAAA;EACR,aAAA;EACA,aAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,iBAGc,oBAAA,CACd,YAAA,EAAc,0BAAA"}
@@ -0,0 +1,11 @@
1
+ //#region src/vite/builder-preview-entry.d.ts
2
+ interface BuilderPreviewPortalConfig {
3
+ customWidgets?: unknown;
4
+ widgetPackage?: unknown;
5
+ widgetPackages?: unknown;
6
+ default?: unknown;
7
+ }
8
+ declare function renderBuilderPreview(portalConfig: BuilderPreviewPortalConfig): void;
9
+ //#endregion
10
+ export { renderBuilderPreview };
11
+ //# sourceMappingURL=builder-preview-entry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-preview-entry.d.mts","names":[],"sources":["../../src/vite/builder-preview-entry.tsx"],"mappings":";UAQU,0BAAA;EACR,aAAA;EACA,aAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,iBAGc,oBAAA,CACd,YAAA,EAAc,0BAAA"}