@razorpay/blade 12.95.4 → 12.96.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.
Files changed (22) hide show
  1. package/build/lib/web/development/_virtual/cloneDeep.js +1 -1
  2. package/build/lib/web/development/_virtual/cloneDeep3.js +1 -1
  3. package/build/lib/web/development/_virtual/flatten.js +1 -1
  4. package/build/lib/web/development/_virtual/flatten3.js +1 -1
  5. package/build/lib/web/development/components/GenUI/GenUIComponents.web.js +40 -71
  6. package/build/lib/web/development/components/GenUI/GenUIComponents.web.js.map +1 -1
  7. package/build/lib/web/development/components/GenUI/GenUISchemaRenderer.web.js +26 -6
  8. package/build/lib/web/development/components/GenUI/GenUISchemaRenderer.web.js.map +1 -1
  9. package/build/lib/web/development/node_modules/es-toolkit/dist/array/flatten.js +1 -1
  10. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
  11. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
  12. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +1 -1
  13. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
  14. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matches.js +2 -2
  15. package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +2 -2
  16. package/build/lib/web/development/node_modules/es-toolkit/dist/object/cloneDeep.js +1 -1
  17. package/build/lib/web/production/components/GenUI/GenUIComponents.web.js +40 -71
  18. package/build/lib/web/production/components/GenUI/GenUIComponents.web.js.map +1 -1
  19. package/build/lib/web/production/components/GenUI/GenUISchemaRenderer.web.js +26 -6
  20. package/build/lib/web/production/components/GenUI/GenUISchemaRenderer.web.js.map +1 -1
  21. package/build/types/components/index.d.ts +5 -4
  22. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GenUISchemaRenderer.web.js","sources":["../../../../../../src/components/GenUI/GenUISchemaRenderer.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { memo, useState, useEffect, useRef, useCallback } from 'react';\nimport styled, { createGlobalStyle, keyframes } from 'styled-components';\nimport type { GenUIComponent } from './GenUIComponents';\nimport { useGenUI, GenUIContext } from './GenUIContext';\nimport type { AnimateOptions } from './rehypeAnimate';\nimport { useResize } from '~utils/useResize';\n\n/**\n * Block-level component types that should have the animated gradient border effect\n */\nconst BLOCK_LEVEL_COMPONENTS = new Set(['CARD', 'TABLE']);\n\n/**\n * Global styles for @property rules needed for CSS animation of custom properties\n * Note: @property is required to animate CSS custom properties (interpolation)\n */\nconst GlobalAnimationStyles = createGlobalStyle`\n @property --travel-x {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n @property --travel-r {\n syntax: '<angle>';\n inherits: false;\n initial-value: 0deg;\n }\n @property --travel-x2 {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n @property --travel-r2 {\n syntax: '<angle>';\n inherits: false;\n initial-value: 0deg;\n }\n`;\n\n/**\n * Static keyframes using CSS variables for positions.\n * Values are passed via inline style: --x-start, --x-end\n * Using ~70% for edge traversal, ~30% for corner sweep (good for typical card aspect ratios)\n */\nconst travelX = keyframes`\n 0% { --travel-x: var(--x-start); }\n 70% { --travel-x: var(--x-end); }\n 100% { --travel-x: var(--x-end); }\n`;\n\nconst travelR = keyframes`\n 0% { --travel-r: 0deg; }\n 70% { --travel-r: 0deg; }\n 100% { --travel-r: 180deg; }\n`;\n\nconst travelX2 = keyframes`\n 0% { --travel-x2: var(--x-start); }\n 30% { --travel-x2: var(--x-start); }\n 100% { --travel-x2: var(--x-end); }\n`;\n\nconst travelR2 = keyframes`\n 0% { --travel-r2: 0deg; }\n 30% { --travel-r2: -180deg; }\n 100% { --travel-r2: -180deg; }\n`;\n\n/** Mask reveal animation - diagonal swipe from top-left to bottom-right */\nconst maskReveal = keyframes`\n 0% {\n mask-position: 100% 100%;\n opacity: 0;\n }\n 100% {\n mask-position: 0% 0%;\n opacity: 1;\n }\n`;\n\n/** Gradient shade movement - left to right, fades out at end */\nconst shadeMove = keyframes`\n 0% {\n background-position: 0% 50%;\n opacity: 1;\n }\n 70% {\n opacity: 1;\n }\n 100% {\n background-position: 100% 50%;\n opacity: 0;\n }\n`;\n\n/** Container for the animated border effect — owns the vertical margin to keep the ring flush */\nconst AnimatedBorderContainer = styled.div<{ $showContent?: boolean }>`\n position: relative;\n width: 100%;\n border-radius: 12px;\n margin: 12px 0;\n`;\n\n/**\n * The animated gradient border layer - light travels along the border edges.\n * Uses conic-gradient positioned at (--travel-x, 50%) with rotation --travel-r.\n * The animation moves the gradient center along the horizontal axis while\n * rotating it at the corners to create the illusion of perimeter traversal.\n */\nconst GradientBorder = styled.div<{ $fadeOut?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 12px;\n background: conic-gradient(\n from calc(var(--travel-r) - 50deg) at var(--travel-x) 50%,\n transparent 0%,\n hsl(180 85% 65%) 3%,\n hsl(145 75% 45%) 5%,\n hsl(145 85% 70%) 7%,\n transparent 30%,\n transparent 100%\n ),\n conic-gradient(\n from calc(var(--travel-r2) - 50deg) at var(--travel-x2) 50%,\n transparent 0%,\n hsl(180 85% 65%) 3%,\n hsl(145 75% 45%) 5%,\n hsl(145 85% 70%) 7%,\n transparent 30%,\n transparent 100%\n );\n animation: ${travelX} 1s linear infinite, ${travelR} 1s linear infinite,\n ${travelX2} 1s linear infinite, ${travelR2} 1s linear infinite;\n pointer-events: none;\n mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n mask-composite: exclude;\n padding: 1.5px;\n opacity: ${({ $fadeOut }) => ($fadeOut ? 0 : 1)};\n transition: opacity 3s ease-out;\n`;\n\n/** Content container with mask reveal animation */\nconst ContentContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n /* Diagonal gradient mask for reveal effect - starts hidden, animates to revealed */\n mask-image: linear-gradient(135deg, black 0%, black 45%, transparent 55%);\n mask-size: 300% 300%;\n /* Start position: fully masked (hidden) */\n mask-position: 100% 100%;\n /* Animate to 0% 0% (fully revealed) with ease-out for smooth finish */\n animation: ${maskReveal} 2s ease-out forwards;\n animation-delay: 0.6s;\n`;\n\n/** Green linear gradient shade overlay */\nconst GradientShade = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 12px;\n pointer-events: none;\n z-index: 5;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n hsl(145 85% 50% / 0.15) 30%,\n hsl(155 85% 45% / 0.25) 50%,\n hsl(145 85% 50% / 0.15) 70%,\n transparent 100%\n );\n background-size: 50% 100%;\n background-repeat: no-repeat;\n background-position: 0% 50%;\n animation: ${shadeMove} 1.5s ease-out forwards;\n animation-delay: 0.3s;\n`;\n\n/**\n * Animated gradient border wrapper for block-level components.\n * Uses CSS variables for dynamic position values with static keyframes (best perf).\n * No dynamic style injection - just pass --x-start and --x-end via inline style.\n */\nconst AnimatedGradientBorder: React.FC<{\n children: React.ReactNode;\n onAnimationComplete?: () => void;\n}> = ({ children, onAnimationComplete }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [showContent, setShowContent] = useState(false);\n // Initial default values to prevent animation from breaking before ResizeObserver fires\n const [cssVars, setCssVars] = useState<React.CSSProperties>({\n '--x-start': '50px',\n '--x-end': '500px',\n } as React.CSSProperties);\n\n useEffect(() => {\n // Trigger border fade-out after mask reveal completes (0.6s delay + 1s animation)\n const timer = setTimeout(() => {\n setShowContent(true);\n onAnimationComplete?.();\n }, 1000);\n return () => clearTimeout(timer);\n }, [onAnimationComplete]);\n\n // Measure container and compute CSS variable values for animation positions.\n // Ring now spans the full container (top: 0, bottom: 0), so rect.height is the ring height.\n const computePositions = useCallback((entry: ResizeObserverEntry) => {\n const { width: w, height } = entry.contentRect;\n const h = height;\n if (w <= 0 || h <= 0) return;\n\n const xMargin = Math.min(h * 0.5, w * 0.1);\n const xMax = w - xMargin;\n\n setCssVars({\n '--x-start': `${xMargin.toFixed(1)}px`,\n '--x-end': `${xMax.toFixed(1)}px`,\n } as React.CSSProperties);\n }, []);\n\n useResize(containerRef, computePositions);\n\n return (\n <>\n <GlobalAnimationStyles />\n <AnimatedBorderContainer ref={containerRef} $showContent={showContent}>\n <GradientBorder $fadeOut={showContent} style={cssVars} />\n <ContentContainer>\n {children}\n <GradientShade />\n </ContentContainer>\n </AnimatedBorderContainer>\n </>\n );\n};\n\n/**\n * Helper to generate a stable key for a component based on its index and type\n */\nconst getComponentKey = (component: GenUIComponent, index: number): string => {\n if (!component?.component) {\n return `empty-${index}`;\n }\n return `${component.component}-${index}`;\n};\n\ntype ComponentRendererProps = {\n /** The component schema to render */\n component?: GenUIComponent;\n /** Index of the component in the list */\n index: number;\n};\n\n/**\n * Internal component that renders a single GenUI component based on its schema\n * Must be used within a GenUIProvider\n */\nconst ComponentRenderer = memo(({ component, index }: ComponentRendererProps) => {\n const { registry, validComponentTypes } = useGenUI();\n\n // Handle incomplete components during streaming\n if (!component?.component) {\n return null;\n }\n\n const componentType = component.component;\n const key = getComponentKey(component, index);\n\n // Look up the renderer in the registry\n const definition = registry[componentType];\n\n if (definition) {\n const Renderer = definition.renderer;\n const isBuiltInBlockLevel = BLOCK_LEVEL_COMPONENTS.has(componentType);\n const isGradientAnimation = definition?.animation?.name === 'gradient-ring-entry';\n const isBlockLevel = isBuiltInBlockLevel || isGradientAnimation;\n\n // Block-level components get the animated gradient border effect.\n // Built-in components (CARD, TABLE) carry marginY=\"spacing.4\" so need a\n // 13px inset; custom components have no external margin so use 0.\n if (isBlockLevel) {\n return (\n <AnimatedGradientBorder key={key}>\n <Renderer {...component} index={index} />\n </AnimatedGradientBorder>\n );\n }\n\n return <Renderer key={key} {...component} index={index} />;\n }\n\n // During streaming, we might get partial component names, ie DIV for DIVIDER or ST for STACK\n // Check if the current component name is a prefix of any valid component name\n const isPotentiallyValidComponentName = validComponentTypes.some((validName) =>\n validName.startsWith(componentType),\n );\n\n if (isPotentiallyValidComponentName) {\n return null;\n }\n\n console.warn(`[GenUI]: Unsupported component: ${componentType}`);\n return null;\n});\n\ntype GenUISchemaRendererProps = {\n /** The components array to render */\n components?: GenUIComponent[];\n /** Whether text animation is active (for streaming) */\n isAnimating?: boolean;\n /** Animation options for text streaming */\n animateOptions?: AnimateOptions;\n};\n\n/**\n * Renders an array of GenUI components\n * Must be used within a GenUIProvider\n *\n * @example\n * ```tsx\n * <GenUIProvider>\n * <GenUISchemaRenderer components={[...]} isAnimating={isStreaming} />\n * </GenUIProvider>\n * ```\n */\nconst GenUISchemaRenderer = memo(\n ({ components, isAnimating, animateOptions }: GenUISchemaRendererProps) => {\n const parentContext = useGenUI();\n\n if (!components || components.length === 0) {\n return null;\n }\n\n // Create a new context value with animation state overrides\n const contextValue = {\n ...parentContext,\n isAnimating: isAnimating ?? parentContext.isAnimating,\n animateOptions: animateOptions ?? parentContext.animateOptions,\n };\n\n return (\n <GenUIContext.Provider value={contextValue}>\n <>\n {components.map((component, index) => (\n <ComponentRenderer\n key={getComponentKey(component, index)}\n component={component}\n index={index}\n />\n ))}\n </>\n </GenUIContext.Provider>\n );\n },\n);\n\nexport { GenUISchemaRenderer, ComponentRenderer };\nexport type { GenUISchemaRendererProps };\n"],"names":["BLOCK_LEVEL_COMPONENTS","Set","GlobalAnimationStyles","createGlobalStyle","_templateObject","_taggedTemplateLiteral","travelX","keyframes","travelR","travelX2","travelR2","maskReveal","shadeMove","AnimatedBorderContainer","styled","div","withConfig","displayName","componentId","GradientBorder","_ref","$fadeOut","ContentContainer","GradientShade","AnimatedGradientBorder","_ref2","children","onAnimationComplete","containerRef","useRef","_useState","useState","_useState2","_slicedToArray","showContent","setShowContent","_useState3","_useState4","cssVars","setCssVars","useEffect","timer","setTimeout","clearTimeout","computePositions","useCallback","entry","_entry$contentRect","contentRect","w","width","height","h","xMargin","Math","min","xMax","concat","toFixed","useResize","_jsxs","_Fragment","_jsx","ref","$showContent","style","getComponentKey","component","index","ComponentRenderer","memo","_ref3","_useGenUI","useGenUI","registry","validComponentTypes","componentType","key","definition","_definition$animation","Renderer","renderer","isBuiltInBlockLevel","has","isGradientAnimation","animation","name","isBlockLevel","_objectSpread","isPotentiallyValidComponentName","some","validName","startsWith","console","warn","GenUISchemaRenderer","_ref4","components","isAnimating","animateOptions","parentContext","length","contextValue","GenUIContext","Provider","value","map"],"mappings":"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"}
1
+ {"version":3,"file":"GenUISchemaRenderer.web.js","sources":["../../../../../../src/components/GenUI/GenUISchemaRenderer.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React, { memo, useState, useEffect, useRef, useCallback } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport styled, { createGlobalStyle, keyframes } from 'styled-components';\nimport type { GenUIComponent } from './GenUIComponents';\nimport { useGenUI, GenUIContext } from './GenUIContext';\nimport type { AnimateOptions } from './rehypeAnimate';\nimport { useResize } from '~utils/useResize';\n\n/**\n * Fallback component shown when a GenUI component fails to render\n */\nconst ComponentErrorFallback = () => {\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <></>;\n};\n\n/**\n * Block-level component types that should have the animated gradient border effect\n */\nconst BLOCK_LEVEL_COMPONENTS = new Set(['CARD', 'TABLE']);\n\n/**\n * Global styles for @property rules needed for CSS animation of custom properties\n * Note: @property is required to animate CSS custom properties (interpolation)\n */\nconst GlobalAnimationStyles = createGlobalStyle`\n @property --travel-x {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n @property --travel-r {\n syntax: '<angle>';\n inherits: false;\n initial-value: 0deg;\n }\n @property --travel-x2 {\n syntax: '<length>';\n inherits: false;\n initial-value: 0px;\n }\n @property --travel-r2 {\n syntax: '<angle>';\n inherits: false;\n initial-value: 0deg;\n }\n`;\n\n/**\n * Static keyframes using CSS variables for positions.\n * Values are passed via inline style: --x-start, --x-end\n * Using ~70% for edge traversal, ~30% for corner sweep (good for typical card aspect ratios)\n */\nconst travelX = keyframes`\n 0% { --travel-x: var(--x-start); }\n 70% { --travel-x: var(--x-end); }\n 100% { --travel-x: var(--x-end); }\n`;\n\nconst travelR = keyframes`\n 0% { --travel-r: 0deg; }\n 70% { --travel-r: 0deg; }\n 100% { --travel-r: 180deg; }\n`;\n\nconst travelX2 = keyframes`\n 0% { --travel-x2: var(--x-start); }\n 30% { --travel-x2: var(--x-start); }\n 100% { --travel-x2: var(--x-end); }\n`;\n\nconst travelR2 = keyframes`\n 0% { --travel-r2: 0deg; }\n 30% { --travel-r2: -180deg; }\n 100% { --travel-r2: -180deg; }\n`;\n\n/** Mask reveal animation - diagonal swipe from top-left to bottom-right */\nconst maskReveal = keyframes`\n 0% {\n mask-position: 100% 100%;\n opacity: 0;\n }\n 100% {\n mask-position: 0% 0%;\n opacity: 1;\n }\n`;\n\n/** Gradient shade movement - left to right, fades out at end */\nconst shadeMove = keyframes`\n 0% {\n background-position: 0% 50%;\n opacity: 1;\n }\n 70% {\n opacity: 1;\n }\n 100% {\n background-position: 100% 50%;\n opacity: 0;\n }\n`;\n\n/** Container for the animated border effect — owns the vertical margin to keep the ring flush */\nconst AnimatedBorderContainer = styled.div<{ $showContent?: boolean }>`\n position: relative;\n width: 100%;\n border-radius: 12px;\n margin: 12px 0;\n`;\n\n/**\n * The animated gradient border layer - light travels along the border edges.\n * Uses conic-gradient positioned at (--travel-x, 50%) with rotation --travel-r.\n * The animation moves the gradient center along the horizontal axis while\n * rotating it at the corners to create the illusion of perimeter traversal.\n */\nconst GradientBorder = styled.div<{ $fadeOut?: boolean }>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 12px;\n background: conic-gradient(\n from calc(var(--travel-r) - 50deg) at var(--travel-x) 50%,\n transparent 0%,\n hsl(180 85% 65%) 3%,\n hsl(145 75% 45%) 5%,\n hsl(145 85% 70%) 7%,\n transparent 30%,\n transparent 100%\n ),\n conic-gradient(\n from calc(var(--travel-r2) - 50deg) at var(--travel-x2) 50%,\n transparent 0%,\n hsl(180 85% 65%) 3%,\n hsl(145 75% 45%) 5%,\n hsl(145 85% 70%) 7%,\n transparent 30%,\n transparent 100%\n );\n animation: ${travelX} 1s linear infinite, ${travelR} 1s linear infinite,\n ${travelX2} 1s linear infinite, ${travelR2} 1s linear infinite;\n pointer-events: none;\n mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n mask-composite: exclude;\n padding: 1.5px;\n opacity: ${({ $fadeOut }) => ($fadeOut ? 0 : 1)};\n transition: opacity 3s ease-out;\n`;\n\n/** Content container with mask reveal animation */\nconst ContentContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n /* Diagonal gradient mask for reveal effect - starts hidden, animates to revealed */\n mask-image: linear-gradient(135deg, black 0%, black 45%, transparent 55%);\n mask-size: 300% 300%;\n /* Start position: fully masked (hidden) */\n mask-position: 100% 100%;\n /* Animate to 0% 0% (fully revealed) with ease-out for smooth finish */\n animation: ${maskReveal} 2s ease-out forwards;\n animation-delay: 0.6s;\n`;\n\n/** Green linear gradient shade overlay */\nconst GradientShade = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: 12px;\n pointer-events: none;\n z-index: 5;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n hsl(145 85% 50% / 0.15) 30%,\n hsl(155 85% 45% / 0.25) 50%,\n hsl(145 85% 50% / 0.15) 70%,\n transparent 100%\n );\n background-size: 50% 100%;\n background-repeat: no-repeat;\n background-position: 0% 50%;\n animation: ${shadeMove} 1.5s ease-out forwards;\n animation-delay: 0.3s;\n`;\n\n/**\n * Animated gradient border wrapper for block-level components.\n * Uses CSS variables for dynamic position values with static keyframes (best perf).\n * No dynamic style injection - just pass --x-start and --x-end via inline style.\n */\nconst AnimatedGradientBorder: React.FC<{\n children: React.ReactNode;\n onAnimationComplete?: () => void;\n}> = ({ children, onAnimationComplete }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [showContent, setShowContent] = useState(false);\n // Initial default values to prevent animation from breaking before ResizeObserver fires\n const [cssVars, setCssVars] = useState<React.CSSProperties>({\n '--x-start': '50px',\n '--x-end': '500px',\n } as React.CSSProperties);\n\n useEffect(() => {\n // Trigger border fade-out after mask reveal completes (0.6s delay + 1s animation)\n const timer = setTimeout(() => {\n setShowContent(true);\n onAnimationComplete?.();\n }, 1000);\n return () => clearTimeout(timer);\n }, [onAnimationComplete]);\n\n // Measure container and compute CSS variable values for animation positions.\n // Ring now spans the full container (top: 0, bottom: 0), so rect.height is the ring height.\n const computePositions = useCallback((entry: ResizeObserverEntry) => {\n const { width: w, height } = entry.contentRect;\n const h = height;\n if (w <= 0 || h <= 0) return;\n\n const xMargin = Math.min(h * 0.5, w * 0.1);\n const xMax = w - xMargin;\n\n setCssVars({\n '--x-start': `${xMargin.toFixed(1)}px`,\n '--x-end': `${xMax.toFixed(1)}px`,\n } as React.CSSProperties);\n }, []);\n\n useResize(containerRef, computePositions);\n\n return (\n <>\n <GlobalAnimationStyles />\n <AnimatedBorderContainer ref={containerRef} $showContent={showContent}>\n <GradientBorder $fadeOut={showContent} style={cssVars} />\n <ContentContainer>\n {children}\n <GradientShade />\n </ContentContainer>\n </AnimatedBorderContainer>\n </>\n );\n};\n\n/**\n * Helper to generate a stable key for a component based on its index and type\n */\nconst getComponentKey = (component: GenUIComponent, index: number): string => {\n if (!component?.component) {\n return `empty-${index}`;\n }\n return `${component.component}-${index}`;\n};\n\ntype ComponentRendererProps = {\n /** The component schema to render */\n component?: GenUIComponent;\n /** Index of the component in the list */\n index: number;\n};\n\n/**\n * Internal component that renders a single GenUI component based on its schema\n * Must be used within a GenUIProvider\n */\nconst ComponentRendererInner = memo(({ component, index }: ComponentRendererProps) => {\n const { registry, validComponentTypes } = useGenUI();\n\n // Handle incomplete components during streaming\n if (!component?.component) {\n return null;\n }\n\n const componentType = component.component;\n const key = getComponentKey(component, index);\n\n // Look up the renderer in the registry\n const definition = registry[componentType];\n\n if (definition) {\n const Renderer = definition.renderer;\n const isBuiltInBlockLevel = BLOCK_LEVEL_COMPONENTS.has(componentType);\n const isGradientAnimation = definition?.animation?.name === 'gradient-ring-entry';\n const isBlockLevel = isBuiltInBlockLevel || isGradientAnimation;\n\n // Block-level components get the animated gradient border effect.\n // Built-in components (CARD, TABLE) carry marginY=\"spacing.4\" so need a\n // 13px inset; custom components have no external margin so use 0.\n if (isBlockLevel) {\n return (\n <AnimatedGradientBorder key={key}>\n <Renderer {...component} index={index} />\n </AnimatedGradientBorder>\n );\n }\n\n return <Renderer key={key} {...component} index={index} />;\n }\n\n // During streaming, we might get partial component names, ie DIV for DIVIDER or ST for STACK\n // Check if the current component name is a prefix of any valid component name\n const isPotentiallyValidComponentName = validComponentTypes.some((validName) =>\n validName.startsWith(componentType),\n );\n\n if (isPotentiallyValidComponentName) {\n return null;\n }\n\n console.warn(`[GenUI]: Unsupported component: ${componentType}`);\n return null;\n});\n\nconst ComponentRenderer = memo(({ component, index }: ComponentRendererProps) => {\n return (\n <ErrorBoundary FallbackComponent={ComponentErrorFallback}>\n <ComponentRendererInner component={component} index={index} />\n </ErrorBoundary>\n );\n});\n\ntype GenUISchemaRendererProps = {\n /** The components array to render */\n components?: GenUIComponent[];\n /** Whether text animation is active (for streaming) */\n isAnimating?: boolean;\n /** Animation options for text streaming */\n animateOptions?: AnimateOptions;\n};\n\n/**\n * Renders an array of GenUI components\n * Must be used within a GenUIProvider\n *\n * @example\n * ```tsx\n * <GenUIProvider>\n * <GenUISchemaRenderer components={[...]} isAnimating={isStreaming} />\n * </GenUIProvider>\n * ```\n */\nconst GenUISchemaRenderer = memo(\n ({ components, isAnimating, animateOptions }: GenUISchemaRendererProps) => {\n const parentContext = useGenUI();\n\n if (!components || components.length === 0) {\n return null;\n }\n\n // Create a new context value with animation state overrides\n const contextValue = {\n ...parentContext,\n isAnimating: isAnimating ?? parentContext.isAnimating,\n animateOptions: animateOptions ?? parentContext.animateOptions,\n };\n\n return (\n <GenUIContext.Provider value={contextValue}>\n <>\n {components.map((component, index) => (\n <ComponentRenderer\n key={getComponentKey(component, index)}\n component={component}\n index={index}\n />\n ))}\n </>\n </GenUIContext.Provider>\n );\n },\n);\n\nexport { GenUISchemaRenderer, ComponentRenderer };\nexport type { GenUISchemaRendererProps };\n"],"names":["ComponentErrorFallback","_jsx","_Fragment","BLOCK_LEVEL_COMPONENTS","Set","GlobalAnimationStyles","createGlobalStyle","_templateObject","_taggedTemplateLiteral","travelX","keyframes","travelR","travelX2","travelR2","maskReveal","shadeMove","AnimatedBorderContainer","styled","div","withConfig","displayName","componentId","GradientBorder","_ref","$fadeOut","ContentContainer","GradientShade","AnimatedGradientBorder","_ref2","children","onAnimationComplete","containerRef","useRef","_useState","useState","_useState2","_slicedToArray","showContent","setShowContent","_useState3","_useState4","cssVars","setCssVars","useEffect","timer","setTimeout","clearTimeout","computePositions","useCallback","entry","_entry$contentRect","contentRect","w","width","height","h","xMargin","Math","min","xMax","concat","toFixed","useResize","_jsxs","ref","$showContent","style","getComponentKey","component","index","ComponentRendererInner","memo","_ref3","_useGenUI","useGenUI","registry","validComponentTypes","componentType","key","definition","_definition$animation","Renderer","renderer","isBuiltInBlockLevel","has","isGradientAnimation","animation","name","isBlockLevel","_objectSpread","isPotentiallyValidComponentName","some","validName","startsWith","console","warn","ComponentRenderer","_ref4","ErrorBoundary","FallbackComponent","GenUISchemaRenderer","_ref5","components","isAnimating","animateOptions","parentContext","length","contextValue","GenUIContext","Provider","value","map"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../_virtual/_commonjsHelpers.js';
2
- import { __exports as flatten$1 } from '../../../../_virtual/flatten4.js';
2
+ import { __exports as flatten$1 } from '../../../../_virtual/flatten2.js';
3
3
 
4
4
  (function (exports) {
5
5
  'use strict';
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../../_virtual/_commonjsHelpers.js';
2
- import { __exports as flatten$1 } from '../../../../../_virtual/flatten2.js';
2
+ import { __exports as flatten$1 } from '../../../../../_virtual/flatten4.js';
3
3
  import '../../../../../_virtual/isArrayLike.js';
4
4
  import { __exports as isArrayLike } from '../../../../../_virtual/isArrayLike2.js';
5
5
 
@@ -1,10 +1,10 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../../_virtual/_commonjsHelpers.js';
2
2
  import { __exports as sortBy$1 } from '../../../../../_virtual/sortBy2.js';
3
3
  import '../../../../../_virtual/orderBy.js';
4
- import '../../../../../_virtual/flatten3.js';
4
+ import '../../../../../_virtual/flatten.js';
5
5
  import '../../../../../_virtual/isIterateeCall.js';
6
6
  import { __exports as orderBy } from '../../../../../_virtual/orderBy2.js';
7
- import { __exports as flatten } from '../../../../../_virtual/flatten4.js';
7
+ import { __exports as flatten } from '../../../../../_virtual/flatten2.js';
8
8
  import { __exports as isIterateeCall } from '../../../../../_virtual/isIterateeCall2.js';
9
9
 
10
10
  (function (exports) {
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../../_virtual/_commonjsHelpers.js';
2
- import { __exports as cloneDeep$1 } from '../../../../../_virtual/cloneDeep2.js';
2
+ import { __exports as cloneDeep$1 } from '../../../../../_virtual/cloneDeep4.js';
3
3
  import '../../../../../_virtual/cloneDeepWith.js';
4
4
  import { __exports as cloneDeepWith } from '../../../../../_virtual/cloneDeepWith2.js';
5
5
 
@@ -5,14 +5,14 @@ import '../../../../../_virtual/keysIn.js';
5
5
  import '../../../../../_virtual/unset.js';
6
6
  import '../../../../../_virtual/getSymbolsIn.js';
7
7
  import '../../../../../_virtual/isDeepKey.js';
8
- import '../../../../../_virtual/flatten.js';
8
+ import '../../../../../_virtual/flatten3.js';
9
9
  import '../../../../../_virtual/isPlainObject.js';
10
10
  import { __exports as cloneDeepWith } from '../../../../../_virtual/cloneDeepWith2.js';
11
11
  import { __exports as keysIn } from '../../../../../_virtual/keysIn2.js';
12
12
  import { __exports as unset } from '../../../../../_virtual/unset2.js';
13
13
  import { __exports as getSymbolsIn } from '../../../../../_virtual/getSymbolsIn2.js';
14
14
  import { __exports as isDeepKey } from '../../../../../_virtual/isDeepKey2.js';
15
- import { __exports as flatten } from '../../../../../_virtual/flatten2.js';
15
+ import { __exports as flatten } from '../../../../../_virtual/flatten4.js';
16
16
  import { __exports as isPlainObject } from '../../../../../_virtual/isPlainObject2.js';
17
17
 
18
18
  (function (exports) {
@@ -1,9 +1,9 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../../_virtual/_commonjsHelpers.js';
2
2
  import { __exports as matches$1 } from '../../../../../_virtual/matches2.js';
3
3
  import '../../../../../_virtual/isMatch.js';
4
- import '../../../../../_virtual/cloneDeep3.js';
4
+ import '../../../../../_virtual/cloneDeep.js';
5
5
  import { __exports as isMatch } from '../../../../../_virtual/isMatch2.js';
6
- import { __exports as cloneDeep } from '../../../../../_virtual/cloneDeep4.js';
6
+ import { __exports as cloneDeep } from '../../../../../_virtual/cloneDeep2.js';
7
7
 
8
8
  (function (exports) {
9
9
  'use strict';
@@ -2,12 +2,12 @@ import { getDefaultExportFromCjs } from '../../../../../_virtual/_commonjsHelper
2
2
  import { __exports as matchesProperty$1 } from '../../../../../_virtual/matchesProperty2.js';
3
3
  import '../../../../../_virtual/isMatch.js';
4
4
  import '../../../../../_virtual/toKey.js';
5
- import '../../../../../_virtual/cloneDeep.js';
5
+ import '../../../../../_virtual/cloneDeep3.js';
6
6
  import '../../../../../_virtual/get.js';
7
7
  import '../../../../../_virtual/has.js';
8
8
  import { __exports as isMatch } from '../../../../../_virtual/isMatch2.js';
9
9
  import { __exports as toKey } from '../../../../../_virtual/toKey2.js';
10
- import { __exports as cloneDeep } from '../../../../../_virtual/cloneDeep2.js';
10
+ import { __exports as cloneDeep } from '../../../../../_virtual/cloneDeep4.js';
11
11
  import { __exports as get } from '../../../../../_virtual/get2.js';
12
12
  import { __exports as has } from '../../../../../_virtual/has2.js';
13
13
 
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../../../../_virtual/_commonjsHelpers.js';
2
- import { __exports as cloneDeep$1 } from '../../../../_virtual/cloneDeep4.js';
2
+ import { __exports as cloneDeep$1 } from '../../../../_virtual/cloneDeep2.js';
3
3
  import '../../../../_virtual/cloneDeepWith3.js';
4
4
  import { __exports as cloneDeepWith } from '../../../../_virtual/cloneDeepWith4.js';
5
5
 
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
3
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
3
  import _taggedTemplateLiteral from '@babel/runtime/helpers/taggedTemplateLiteral';
5
4
  import { memo, useMemo, useState } from 'react';
@@ -805,62 +804,12 @@ var TableRowHoverActions = function TableRowHoverActions(_ref17) {
805
804
  });
806
805
  };
807
806
 
808
- // px per average character at ~14px font size
809
- var CHAR_WIDTH = 7.5;
810
- // horizontal cell padding (left + right)
811
- var CELL_H_PADDING = 8;
812
-
813
- // Returns the minimum pixel width hint for a cell based on its content type.
814
- // Used as the `min` track in `minmax(min, max-content)` so columns never
815
- // collapse below a sensible floor while still growing to fit real content.
816
- var getCellMinWidth = function getCellMinWidth(cell) {
817
- var _cell$value$length, _cell$value2, _cell$value$toString, _cell$value3, _cell$value$length2, _cell$value4, _cell$value$length3, _cell$value5, _cell$text$length, _cell$text2;
818
- if (!(cell !== null && cell !== void 0 && cell.component)) return 80;
819
- switch (cell.component) {
820
- case 'TEXT':
821
- return Math.max(80, Math.min(300, ((_cell$value$length = (_cell$value2 = cell.value) === null || _cell$value2 === void 0 ? void 0 : _cell$value2.length) !== null && _cell$value$length !== void 0 ? _cell$value$length : 1) * CHAR_WIDTH + CELL_H_PADDING));
822
- case 'AMOUNT':
823
- // currency symbol + digits + separators
824
- return Math.max(100, (String((_cell$value$toString = (_cell$value3 = cell.value) === null || _cell$value3 === void 0 ? void 0 : _cell$value3.toString()) !== null && _cell$value$toString !== void 0 ? _cell$value$toString : 0).length + 2) * CHAR_WIDTH + CELL_H_PADDING);
825
- case 'INDICATOR':
826
- return Math.max(100, ((_cell$value$length2 = (_cell$value4 = cell.value) === null || _cell$value4 === void 0 ? void 0 : _cell$value4.length) !== null && _cell$value$length2 !== void 0 ? _cell$value$length2 : 1) * CHAR_WIDTH);
827
- case 'BADGE':
828
- return Math.max(80, ((_cell$value$length3 = (_cell$value5 = cell.value) === null || _cell$value5 === void 0 ? void 0 : _cell$value5.length) !== null && _cell$value$length3 !== void 0 ? _cell$value$length3 : 1) * CHAR_WIDTH);
829
- case 'DATE':
830
- {
831
- var dateValue = dayjs(cell.value);
832
- if (!dateValue.isValid()) {
833
- var _cell$value$length4, _cell$value6;
834
- return ((_cell$value$length4 = (_cell$value6 = cell.value) === null || _cell$value6 === void 0 ? void 0 : _cell$value6.length) !== null && _cell$value$length4 !== void 0 ? _cell$value$length4 : 0) * CHAR_WIDTH;
835
- }
836
- var defaultFormat = 'DD MMM YYYY, HH:mm';
837
- var formatted = dateValue.format(cell.dateFormat || defaultFormat);
838
- return formatted.length * CHAR_WIDTH;
839
- }
840
- case 'LINK':
841
- return Math.max(80, Math.min(250, ((_cell$text$length = (_cell$text2 = cell.text) === null || _cell$text2 === void 0 ? void 0 : _cell$text2.length) !== null && _cell$text$length !== void 0 ? _cell$text$length : 1) * CHAR_WIDTH + CELL_H_PADDING));
842
- default:
843
- return 80;
844
- }
845
- };
846
-
847
- // Produces one CSS grid track per column as a `fr` value proportional to
848
- // the estimated content width so columns fill the full table width while
849
- // still reflecting relative content size (wider content → more space).
850
- var calculateColumnWidths = function calculateColumnWidths(headers, rows) {
851
- var weights = headers.map(function (header, colIndex) {
852
- var headerWeight = header.length * CHAR_WIDTH + CELL_H_PADDING;
853
- var cellWeight = rows.reduce(function (max, row) {
854
- var cell = row[colIndex];
855
- return Math.max(max, getCellMinWidth(cell));
856
- }, 80);
857
- return Math.max(headerWeight, cellWeight);
858
- });
859
-
860
- // Normalise to smallest weight so fr numbers stay small and readable
861
- var minWeight = Math.min.apply(Math, _toConsumableArray(weights));
862
- return weights.map(function (w) {
863
- return "".concat(Math.round(w / minWeight * 10) / 10, "fr");
807
+ // Produces column widths using minmax(max-content, 1fr) so columns:
808
+ // 1. Never shrink below their content width (no text wrapping)
809
+ // 2. Expand proportionally to fill available width when space permits
810
+ var calculateColumnWidths = function calculateColumnWidths(headers, _rows) {
811
+ return headers.map(function () {
812
+ return 'minmax(max-content, 1fr)';
864
813
  });
865
814
  };
866
815
  var RenderTableComponent = /*#__PURE__*/memo(function (_ref18) {
@@ -905,7 +854,10 @@ var RenderTableComponent = /*#__PURE__*/memo(function (_ref18) {
905
854
  }), /*#__PURE__*/jsx(TableBody, {
906
855
  children: data.map(function (item, rowIndex) {
907
856
  return /*#__PURE__*/jsx(TableRow, {
908
- item: item,
857
+ item: item
858
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
859
+ ,
860
+ onHover: rowActions && rowActions.length > 0 ? function () {} : undefined,
909
861
  hoverActions: rowActions && rowActions.length > 0 ? /*#__PURE__*/jsx(TableRowHoverActions, {
910
862
  rowActions: rowActions,
911
863
  rowIndex: rowIndex,
@@ -931,9 +883,7 @@ var RenderCardComponent = /*#__PURE__*/memo(function (_ref19) {
931
883
  description = _ref19.description,
932
884
  footer = _ref19.footer,
933
885
  children = _ref19.children;
934
- if (!title && !description) {
935
- return null;
936
- }
886
+ var hasHeader = title || description;
937
887
  return /*#__PURE__*/jsx(Box, {
938
888
  height: "100%",
939
889
  display: "flex",
@@ -943,13 +893,12 @@ var RenderCardComponent = /*#__PURE__*/memo(function (_ref19) {
943
893
  width: "100%",
944
894
  height: "100%",
945
895
  padding: "spacing.7",
946
- children: [/*#__PURE__*/jsx(CardHeader, {
947
- showDivider: false,
896
+ children: [hasHeader ? /*#__PURE__*/jsx(CardHeader, {
948
897
  children: /*#__PURE__*/jsx(CardHeaderLeading, {
949
898
  title: title || '',
950
899
  subtitle: description || ''
951
900
  })
952
- }), children && children.length > 0 ? /*#__PURE__*/jsx(CardBody, {
901
+ }) : null, children && children.length > 0 ? /*#__PURE__*/jsx(CardBody, {
953
902
  height: "100%",
954
903
  children: /*#__PURE__*/jsx(Box, {
955
904
  display: "flex",
@@ -1067,9 +1016,12 @@ var RenderInfoGroupComponent = /*#__PURE__*/memo(function (_ref25) {
1067
1016
  }
1068
1017
 
1069
1018
  // Filter out invalid items during streaming
1019
+ // Filters out: null, undefined, and empty string children
1070
1020
  var validItems = items.filter(function (item) {
1071
- var _item$key, _item$value;
1072
- return ((_item$key = item.key) === null || _item$key === void 0 ? void 0 : _item$key.children) && ((_item$value = item.value) === null || _item$value === void 0 ? void 0 : _item$value.children);
1021
+ var _item$value, _item$key;
1022
+ var children = (_item$value = item.value) === null || _item$value === void 0 ? void 0 : _item$value.children;
1023
+ if (!((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.children) || children == null) return false;
1024
+ return typeof children !== 'string' || children !== '';
1073
1025
  });
1074
1026
  if (validItems.length === 0) {
1075
1027
  return null;
@@ -1080,14 +1032,31 @@ var RenderInfoGroupComponent = /*#__PURE__*/memo(function (_ref25) {
1080
1032
  size: "medium",
1081
1033
  valueAlign: "left",
1082
1034
  children: validItems.map(function (item, index) {
1083
- var _item$key2, _item$key3, _item$value2, _item$value3;
1035
+ var _item$key4, _item$key5;
1036
+ var value = item.value;
1037
+ var isString = typeof value.children === 'string';
1038
+ if (isString) {
1039
+ var _item$key2, _item$key3;
1040
+ return /*#__PURE__*/jsxs(InfoItem, {
1041
+ children: [/*#__PURE__*/jsx(InfoItemKey, {
1042
+ helpText: item === null || item === void 0 || (_item$key2 = item.key) === null || _item$key2 === void 0 ? void 0 : _item$key2.helpText,
1043
+ children: item === null || item === void 0 || (_item$key3 = item.key) === null || _item$key3 === void 0 ? void 0 : _item$key3.children
1044
+ }), /*#__PURE__*/jsx(InfoItemValue, {
1045
+ helpText: value.helpText,
1046
+ children: value.children
1047
+ })]
1048
+ }, index);
1049
+ }
1084
1050
  return /*#__PURE__*/jsxs(InfoItem, {
1085
1051
  children: [/*#__PURE__*/jsx(InfoItemKey, {
1086
- helpText: item === null || item === void 0 || (_item$key2 = item.key) === null || _item$key2 === void 0 ? void 0 : _item$key2.helpText,
1087
- children: item === null || item === void 0 || (_item$key3 = item.key) === null || _item$key3 === void 0 ? void 0 : _item$key3.children
1052
+ helpText: item === null || item === void 0 || (_item$key4 = item.key) === null || _item$key4 === void 0 ? void 0 : _item$key4.helpText,
1053
+ children: item === null || item === void 0 || (_item$key5 = item.key) === null || _item$key5 === void 0 ? void 0 : _item$key5.children
1088
1054
  }), /*#__PURE__*/jsx(InfoItemValue, {
1089
- helpText: item === null || item === void 0 || (_item$value2 = item.value) === null || _item$value2 === void 0 ? void 0 : _item$value2.helpText,
1090
- children: item === null || item === void 0 || (_item$value3 = item.value) === null || _item$value3 === void 0 ? void 0 : _item$value3.children
1055
+ helpText: value.helpText,
1056
+ children: /*#__PURE__*/jsx(GenUIComponentRenderer, {
1057
+ component: value.children,
1058
+ index: index
1059
+ })
1091
1060
  })]
1092
1061
  }, index);
1093
1062
  })