@humain/ui 2.2.3 → 2.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/templates/AppShell/AppShell.d.ts +1 -1
- package/dist/components/templates/AppSidebar/AppSidebar.constants.d.ts +1 -1
- package/dist/index11.js +4 -4
- package/dist/index11.js.map +1 -1
- package/dist/index110.js +4 -4
- package/dist/index110.js.map +1 -1
- package/dist/index134.js +4 -4
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +2 -2
- package/dist/index135.js.map +1 -1
- package/dist/index151.js +3 -3
- package/dist/index151.js.map +1 -1
- package/dist/index152.js +2 -2
- package/dist/index152.js.map +1 -1
- package/dist/index155.js +1 -1
- package/dist/index155.js.map +1 -1
- package/dist/index173.js +1 -1
- package/dist/index173.js.map +1 -1
- package/dist/index184.js +1 -1
- package/dist/index184.js.map +1 -1
- package/dist/index188.js +4 -4
- package/dist/index188.js.map +1 -1
- package/dist/index201.js +1 -1
- package/dist/index201.js.map +1 -1
- package/dist/index217.js +1 -1
- package/dist/index217.js.map +1 -1
- package/dist/index223.js.map +1 -1
- package/dist/index225.js +3 -3
- package/dist/index225.js.map +1 -1
- package/dist/index228.js +1 -1
- package/dist/index228.js.map +1 -1
- package/dist/index24.js +1 -1
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +4 -4
- package/dist/index25.js.map +1 -1
- package/dist/index39.js +2 -2
- package/dist/index39.js.map +1 -1
- package/dist/index5.js +8 -8
- package/dist/index5.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/wc/AIScrollButton.js +8 -8
- package/dist/wc/AIScrollButton.js.map +1 -1
- package/dist/wc/AISource.js +46 -46
- package/dist/wc/AISource.js.map +1 -1
- package/dist/wc/AIToolCall.js +9 -9
- package/dist/wc/AIToolCall.js.map +1 -1
- package/dist/wc/AppSidebar.constants.js +1 -1
- package/dist/wc/AppSidebar.constants.js.map +1 -1
- package/dist/wc/Badge.js +9 -9
- package/dist/wc/Badge.js.map +1 -1
- package/dist/wc/Checkbox.js +22 -22
- package/dist/wc/Checkbox.js.map +1 -1
- package/dist/wc/Pagination.js +4 -4
- package/dist/wc/Pagination.js.map +1 -1
- package/dist/wc/Switch.js +23 -23
- package/dist/wc/Switch.js.map +1 -1
- package/dist/wc/Tabs.js +110 -110
- package/dist/wc/Tabs.js.map +1 -1
- package/dist/wc/Tooltip.js +28 -28
- package/dist/wc/Tooltip.js.map +1 -1
- package/dist/wc/button.js +33 -33
- package/dist/wc/button.js.map +1 -1
- package/dist/wc/hf-alert.js +10 -10
- package/dist/wc/hf-alert.js.map +1 -1
- package/dist/wc/hf-app-shell.js.map +1 -1
- package/dist/wc/hf-app-sidebar.js +3 -3
- package/dist/wc/hf-app-sidebar.js.map +1 -1
- package/dist/wc/hf-nav-account-menu.js +8 -8
- package/dist/wc/hf-nav-account-menu.js.map +1 -1
- package/dist/wc/hf-steps.js +8 -8
- package/dist/wc/hf-steps.js.map +1 -1
- package/dist/wc/markdown-renderer.js +5 -5
- package/dist/wc/markdown-renderer.js.map +1 -1
- package/dist/wc/selection-group.js +6 -6
- package/dist/wc/selection-group.js.map +1 -1
- package/dist/wc-react/AIScrollButton.js +18 -18
- package/dist/wc-react/AIScrollButton.js.map +1 -1
- package/dist/wc-react/AISource.js +8 -8
- package/dist/wc-react/AISource.js.map +1 -1
- package/dist/wc-react/AIToolCall.js +42 -42
- package/dist/wc-react/AIToolCall.js.map +1 -1
- package/dist/wc-react/AppSidebar.constants.js +1 -1
- package/dist/wc-react/AppSidebar.constants.js.map +1 -1
- package/dist/wc-react/Badge.js +16 -16
- package/dist/wc-react/Badge.js.map +1 -1
- package/dist/wc-react/Checkbox.js +14 -14
- package/dist/wc-react/Checkbox.js.map +1 -1
- package/dist/wc-react/Pagination.js +130 -130
- package/dist/wc-react/Pagination.js.map +1 -1
- package/dist/wc-react/Switch.js +2 -2
- package/dist/wc-react/Switch.js.map +1 -1
- package/dist/wc-react/Tabs.js +38 -38
- package/dist/wc-react/Tabs.js.map +1 -1
- package/dist/wc-react/Tooltip.js +22 -22
- package/dist/wc-react/Tooltip.js.map +1 -1
- package/dist/wc-react/button.js +8 -8
- package/dist/wc-react/button.js.map +1 -1
- package/dist/wc-react/hf-alert.js +28 -28
- package/dist/wc-react/hf-alert.js.map +1 -1
- package/dist/wc-react/hf-app-shell.js.map +1 -1
- package/dist/wc-react/hf-app-sidebar.js +3 -3
- package/dist/wc-react/hf-app-sidebar.js.map +1 -1
- package/dist/wc-react/hf-nav-account-menu.js +7 -7
- package/dist/wc-react/hf-nav-account-menu.js.map +1 -1
- package/dist/wc-react/hf-steps.js +16 -16
- package/dist/wc-react/hf-steps.js.map +1 -1
- package/dist/wc-react/markdown-renderer.js +5 -5
- package/dist/wc-react/markdown-renderer.js.map +1 -1
- package/dist/wc-react/selection-group.js +1 -1
- package/dist/wc-react/selection-group.js.map +1 -1
- package/package.json +1 -1
- package/skills/humain-ui/SKILL.md +1 -1
- package/skills/humain-ui-wc/SKILL.md +1 -1
- package/skills/humain-ui-wc.skill +0 -0
- package/skills/humain-ui.skill +0 -0
- package/src/tokens.css +10 -2
package/dist/wc/hf-alert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hf-alert.js","names":[],"sources":["../../src/components/molecules/feedback/Alert/Alert.tsx","../../src/wc/hf-alert.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { AlertCircle, AlertTriangle, CheckCircle, Info, X } from 'lucide-react';\nimport * as React from 'react';\nimport { Button, type ButtonProps } from '@/components/atoms/buttons/Button';\nimport { cn } from '@/lib/utils';\n\nconst alertVariants = cva(\n 'relative flex gap-3 rounded-lg px-4 py-3 text-sm motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-top-1 [&>svg]:shrink-0 [&>svg]:size-4 [&>svg]:mt-0.5 [&>svg]:motion-safe:animate-in [&>svg]:motion-safe:fade-in-0 [&>svg]:motion-safe:zoom-in-75 [&>svg]:motion-safe:duration-300 [&>svg]:motion-safe:delay-75',\n {\n variants: {\n appearance: {\n outline: 'bg-card border',\n solid: '',\n soft: '',\n },\n variant: {\n default: '',\n info: '',\n success: '',\n warning: '',\n destructive: '',\n },\n },\n compoundVariants: [\n // ===== OUTLINE =====\n {\n appearance: 'outline',\n variant: 'default',\n className:\n 'border-border text-card-foreground [&>svg]:text-muted-foreground',\n },\n {\n appearance: 'outline',\n variant: 'info',\n className: 'border-info text-info [&>svg]:text-info',\n },\n {\n appearance: 'outline',\n variant: 'success',\n className: 'border-success text-success [&>svg]:text-success',\n },\n {\n appearance: 'outline',\n variant: 'warning',\n className: 'border-warning text-warning [&>svg]:text-warning',\n },\n {\n appearance: 'outline',\n variant: 'destructive',\n className:\n 'border-destructive text-destructive [&>svg]:text-destructive',\n },\n\n // ===== SOLID =====\n {\n appearance: 'solid',\n variant: 'default',\n className:\n 'bg-primary text-primary-foreground [&>svg]:text-primary-foreground',\n },\n {\n appearance: 'solid',\n variant: 'info',\n className:\n 'bg-info text-primary-foreground [&>svg]:text-primary-foreground',\n },\n {\n appearance: 'solid',\n variant: 'success',\n className:\n 'bg-success text-primary-foreground [&>svg]:text-primary-foreground',\n },\n {\n appearance: 'solid',\n variant: 'warning',\n className:\n 'bg-warning text-primary-foreground [&>svg]:text-primary-foreground',\n },\n {\n appearance: 'solid',\n variant: 'destructive',\n className:\n 'bg-destructive text-primary-foreground [&>svg]:text-primary-foreground',\n },\n\n // ===== SOFT =====\n {\n appearance: 'soft',\n variant: 'default',\n className:\n 'bg-primary/10 text-card-foreground [&>svg]:text-primary dark:bg-primary/20',\n },\n {\n appearance: 'soft',\n variant: 'info',\n className: 'bg-info/10 text-info [&>svg]:text-info dark:bg-info/20',\n },\n {\n appearance: 'soft',\n variant: 'success',\n className:\n 'bg-success/10 text-success [&>svg]:text-success dark:bg-success/20',\n },\n {\n appearance: 'soft',\n variant: 'warning',\n className:\n 'bg-warning/10 text-warning [&>svg]:text-warning dark:bg-warning/20',\n },\n {\n appearance: 'soft',\n variant: 'destructive',\n className:\n 'bg-destructive/10 text-destructive [&>svg]:text-destructive dark:bg-destructive/20',\n },\n ],\n defaultVariants: {\n appearance: 'outline',\n variant: 'default',\n },\n },\n);\n\ntype AlertVariant = NonNullable<VariantProps<typeof alertVariants>['variant']>;\ntype AlertAppearance = NonNullable<\n VariantProps<typeof alertVariants>['appearance']\n>;\n\n/** Default icon mapping for each variant */\nconst defaultIcons: Record<AlertVariant, React.ReactNode> = {\n default: <AlertCircle />,\n info: <Info />,\n success: <CheckCircle />,\n warning: <AlertTriangle />,\n destructive: <AlertTriangle />,\n};\n\n/** Maps alert variant to button variant for soft/outline appearances */\nconst alertToButtonVariant = {\n default: 'secondary',\n info: 'info',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n} as const;\n\n/** Maps alert variant to button variant for soft appearance (uses primary for default) */\nconst alertToSolidButtonVariant = {\n default: 'primary',\n info: 'info',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n} as const;\n\n/** Maps alert variant to text color class */\nconst variantTextClass = {\n default: 'text-primary',\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n} as const;\n\nexport interface AlertProps\n extends Omit<React.ComponentProps<'div'>, 'title'>,\n VariantProps<typeof alertVariants> {\n /** Alert title - displayed prominently */\n title?: React.ReactNode;\n /** Alert description - secondary text */\n description?: React.ReactNode;\n /** Custom icon to display. Set to `false` to hide the icon entirely */\n icon?: React.ReactNode | false;\n /** Show close button */\n closable?: boolean;\n /** Callback when close button is clicked */\n onClose?: () => void;\n /** Action button configuration */\n action?: {\n label: string;\n onClick?: () => void;\n props?: Omit<ButtonProps, 'children' | 'onClick'>;\n };\n /** Duration of dismiss animation in ms (0 to disable) */\n dismissDuration?: number;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n appearance = 'outline',\n variant = 'default',\n title,\n description,\n icon,\n closable = false,\n onClose,\n action,\n children,\n dismissDuration = 200,\n ...props\n },\n ref,\n ) => {\n const [dismissing, setDismissing] = React.useState(false);\n const internalRef = React.useRef<HTMLDivElement>(null);\n const resolvedVariant = variant ?? 'default';\n\n // Merge refs\n React.useImperativeHandle(ref, () => internalRef.current as HTMLDivElement);\n\n const showIcon = icon !== false;\n const iconElement = showIcon ? icon || defaultIcons[resolvedVariant] : null;\n\n const handleClose = React.useCallback(() => {\n if (dismissDuration <= 0) {\n onClose?.();\n return;\n }\n // Use ref-based window access per ADR-010\n const win = internalRef.current?.ownerDocument.defaultView;\n const prefersReducedMotion =\n win?.matchMedia('(prefers-reduced-motion: reduce)').matches ?? false;\n if (prefersReducedMotion) {\n onClose?.();\n return;\n }\n setDismissing(true);\n }, [dismissDuration, onClose]);\n\n // Determine button styling based on appearance and variant\n const getActionButtonProps = (): Partial<ButtonProps> => {\n if (appearance === 'solid') {\n return {\n appearance: 'outline',\n variant: 'secondary',\n className: cn(\n 'bg-background/90 border-background/20 hover:bg-background',\n variantTextClass[resolvedVariant],\n ),\n };\n }\n if (appearance === 'soft') {\n return {\n appearance: 'solid',\n variant: alertToSolidButtonVariant[resolvedVariant],\n };\n }\n // outline appearance\n return {\n appearance: 'outline',\n variant: alertToButtonVariant[resolvedVariant],\n };\n };\n\n const alertRole =\n resolvedVariant === 'destructive' || resolvedVariant === 'warning'\n ? 'alert'\n : 'status';\n\n const getCloseButtonClass = () => {\n if (appearance === 'solid') {\n return 'text-current/80 hover:text-current hover:bg-current/10';\n }\n if (appearance === 'outline' || resolvedVariant === 'default') {\n return 'text-muted-foreground hover:text-foreground hover:bg-muted';\n }\n // soft appearance with colored variant\n return cn('hover:bg-current/10', variantTextClass[resolvedVariant]);\n };\n\n return (\n <div\n ref={internalRef}\n role={alertRole}\n data-slot=\"alert\"\n data-dismissing={dismissing || undefined}\n className={cn(\n alertVariants({ appearance, variant }),\n dismissing &&\n 'motion-safe:animate-out motion-safe:fade-out-0 motion-safe:slide-out-to-right-2',\n className,\n )}\n style={\n dismissing ? { animationDuration: `${dismissDuration}ms` } : undefined\n }\n onAnimationEnd={(e) => {\n if (dismissing && e.target === e.currentTarget) {\n onClose?.();\n }\n }}\n {...props}\n >\n {iconElement}\n\n <div className=\"flex flex-1 flex-col gap-0.5 min-w-0\">\n {title && <AlertTitle>{title}</AlertTitle>}\n {description && <AlertDescription>{description}</AlertDescription>}\n {children}\n </div>\n\n {action && (\n <Button\n size=\"xs\"\n shape=\"rounded\"\n onClick={action.onClick}\n {...getActionButtonProps()}\n {...action.props}\n >\n {action.label}\n </Button>\n )}\n\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n className={cn(\n 'relative shrink-0 size-6 inline-flex items-center justify-center rounded transition-all duration-200 ease-smooth motion-reduce:transition-none',\n 'after:absolute after:inset-[-10px] after:content-[\"\"]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none',\n 'active:scale-90 motion-reduce:active:scale-100',\n getCloseButtonClass(),\n )}\n aria-label=\"Dismiss alert\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n\n/** Alert title component */\nconst AlertTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentProps<'h5'>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('font-medium leading-5', className)}\n {...props}\n >\n {children}\n </h5>\n));\n\nAlertTitle.displayName = 'AlertTitle';\n\n/** Alert description component */\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentProps<'p'>\n>(({ className, children, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-sm leading-5 opacity-80', className)}\n {...props}\n >\n {children}\n </p>\n));\n\nAlertDescription.displayName = 'AlertDescription';\n\nexport type { AlertAppearance, AlertVariant };\nexport { Alert, AlertDescription, AlertTitle, alertVariants };\n","/**\n * Web Component wrapper for Alert\n * Custom element: <hf-alert>\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT MANUALLY\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Alert } from '../components/molecules/feedback/Alert';\nimport { parseAttr, parseValue, type PropDefs } from './_shared';\n\n/**\n * Event wrapper that dispatches custom DOM events\n */\nfunction createEventDispatcher(element: HTMLElement) {\n return {\n onClose: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('close', {\n detail: value,\n bubbles: true,\n composed: true\n }));\n }\n };\n}\n\n/**\n * Wrapper component that connects React events to DOM custom events\n */\nfunction AlertWrapper(props: React.ComponentProps<typeof Alert> & { _hostElement?: HTMLElement }) {\n const { _hostElement, ...restProps } = props;\n\n const eventHandlers = React.useMemo(() => {\n if (!_hostElement) return {};\n return createEventDispatcher(_hostElement);\n }, [_hostElement]);\n\n return React.createElement(Alert, { ...restProps, ...eventHandlers });\n}\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n appearance: 'string',\n variant: 'string',\n title: 'string',\n description: 'string',\n icon: 'json',\n closable: 'boolean',\n action: 'json',\n dismissDuration: 'number'\n};\n\nclass AlertWC extends HTMLElement {\n private _root: ReturnType<typeof createRoot> | null = null;\n private _childrenContainer: HTMLDivElement | null = null;\n private _props: Record<string, unknown> = {};\n private _initialized = false;\n\n connectedCallback() {\n setTimeout(() => this._initialize(), 0);\n }\n\n private _initialize() {\n if (this._initialized) return;\n this._initialized = true;\n\n const originalChildren: Node[] = [];\n for (const child of Array.from(this.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE && !child.textContent?.trim()) {\n continue;\n }\n originalChildren.push(child);\n }\n\n const reactContainer = this.ownerDocument.createElement('div');\n reactContainer.style.display = 'contents';\n\n this._childrenContainer = this.ownerDocument.createElement('div');\n this._childrenContainer.style.display = 'contents';\n\n originalChildren.forEach((child) => this._childrenContainer!.appendChild(child));\n\n while (this.firstChild) this.removeChild(this.firstChild);\n this.appendChild(reactContainer);\n\n this._root = createRoot(reactContainer);\n this._render();\n }\n\n disconnectedCallback() {\n this._root?.unmount();\n this._root = null;\n }\n\n attributeChangedCallback(_name: string, _oldValue: string | null, _newValue: string | null) {\n this._render();\n }\n\n static get observedAttributes() {\n return Object.keys(propTypes).map((prop) =>\n prop.replace(/([A-Z])/g, '-$1').toLowerCase(),\n );\n }\n\n _setProp(name: string, value: unknown) {\n const propType = propTypes[name] || 'string';\n this._props[name] = parseValue(value, propType);\n this._render();\n }\n\n _getProp(name: string): unknown {\n if (name in this._props) {\n return this._props[name];\n }\n const attrName = name.replace(/([A-Z])/g, '-$1').toLowerCase();\n const propType = propTypes[name] || 'string';\n return parseAttr(this.getAttribute(attrName), propType);\n }\n\n private _render() {\n if (!this._root || !this._childrenContainer) return;\n\n const props: Record<string, unknown> = {};\n for (const [propName, propType] of Object.entries(propTypes)) {\n if (propName in this._props) {\n props[propName] = this._props[propName];\n } else {\n const attrName = propName.replace(/([A-Z])/g, '-$1').toLowerCase();\n props[propName] = parseAttr(this.getAttribute(attrName), propType);\n }\n }\n\n const element = React.createElement(\n AlertWrapper,\n { ...props, _hostElement: this },\n React.createElement('span', {\n ref: (el: HTMLSpanElement | null) => {\n if (el && this._childrenContainer) {\n el.replaceWith(this._childrenContainer);\n }\n },\n style: { display: 'contents' },\n }),\n );\n\n this._root.render(element);\n }\n}\n\nfor (const propName of Object.keys(propTypes)) {\n Object.defineProperty(AlertWC.prototype, propName, {\n get() {\n return this._getProp(propName);\n },\n set(value: unknown) {\n this._setProp(propName, value);\n },\n enumerable: true,\n configurable: true,\n });\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('hf-alert')) {\n customElements.define('hf-alert', AlertWC);\n}\n\nexport { AlertWC };\nexport default AlertWC;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hf-alert.js","names":[],"sources":["../../src/components/molecules/feedback/Alert/Alert.tsx","../../src/wc/hf-alert.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { AlertCircle, AlertTriangle, CheckCircle, Info, X } from 'lucide-react';\nimport * as React from 'react';\nimport { Button, type ButtonProps } from '@/components/atoms/buttons/Button';\nimport { cn } from '@/lib/utils';\n\nconst alertVariants = cva(\n 'relative flex gap-3 rounded-lg px-4 py-3 text-sm motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-top-1 [&>svg]:shrink-0 [&>svg]:size-4 [&>svg]:mt-0.5 [&>svg]:motion-safe:animate-in [&>svg]:motion-safe:fade-in-0 [&>svg]:motion-safe:zoom-in-75 [&>svg]:motion-safe:duration-300 [&>svg]:motion-safe:delay-75',\n {\n variants: {\n appearance: {\n outline: 'bg-card border',\n solid: '',\n soft: '',\n },\n variant: {\n default: '',\n info: '',\n success: '',\n warning: '',\n destructive: '',\n },\n },\n compoundVariants: [\n // ===== OUTLINE =====\n {\n appearance: 'outline',\n variant: 'default',\n className:\n 'border-border text-card-foreground [&>svg]:text-muted-foreground',\n },\n {\n appearance: 'outline',\n variant: 'info',\n className: 'border-info text-info [&>svg]:text-info',\n },\n {\n appearance: 'outline',\n variant: 'success',\n className: 'border-success text-success [&>svg]:text-success',\n },\n {\n appearance: 'outline',\n variant: 'warning',\n className: 'border-warning text-warning [&>svg]:text-warning',\n },\n {\n appearance: 'outline',\n variant: 'destructive',\n className:\n 'border-destructive text-destructive [&>svg]:text-destructive',\n },\n\n // ===== SOLID =====\n {\n appearance: 'solid',\n variant: 'default',\n className:\n 'bg-primary text-primary-foreground [&>svg]:text-primary-foreground',\n },\n {\n appearance: 'solid',\n variant: 'info',\n className: 'bg-info text-info-foreground [&>svg]:text-info-foreground',\n },\n {\n appearance: 'solid',\n variant: 'success',\n className:\n 'bg-success text-success-foreground [&>svg]:text-success-foreground',\n },\n {\n appearance: 'solid',\n variant: 'warning',\n className:\n 'bg-warning text-warning-foreground [&>svg]:text-warning-foreground',\n },\n {\n appearance: 'solid',\n variant: 'destructive',\n className:\n 'bg-destructive text-destructive-foreground [&>svg]:text-destructive-foreground',\n },\n\n // ===== SOFT =====\n {\n appearance: 'soft',\n variant: 'default',\n className:\n 'bg-primary/10 text-card-foreground [&>svg]:text-primary dark:bg-primary/20',\n },\n {\n appearance: 'soft',\n variant: 'info',\n className: 'bg-info/10 text-info [&>svg]:text-info dark:bg-info/20',\n },\n {\n appearance: 'soft',\n variant: 'success',\n className:\n 'bg-success/10 text-success [&>svg]:text-success dark:bg-success/20',\n },\n {\n appearance: 'soft',\n variant: 'warning',\n className:\n 'bg-warning/10 text-warning [&>svg]:text-warning dark:bg-warning/20',\n },\n {\n appearance: 'soft',\n variant: 'destructive',\n className:\n 'bg-destructive/10 text-destructive [&>svg]:text-destructive dark:bg-destructive/20',\n },\n ],\n defaultVariants: {\n appearance: 'outline',\n variant: 'default',\n },\n },\n);\n\ntype AlertVariant = NonNullable<VariantProps<typeof alertVariants>['variant']>;\ntype AlertAppearance = NonNullable<\n VariantProps<typeof alertVariants>['appearance']\n>;\n\n/** Default icon mapping for each variant */\nconst defaultIcons: Record<AlertVariant, React.ReactNode> = {\n default: <AlertCircle />,\n info: <Info />,\n success: <CheckCircle />,\n warning: <AlertTriangle />,\n destructive: <AlertTriangle />,\n};\n\n/** Maps alert variant to button variant for soft/outline appearances */\nconst alertToButtonVariant = {\n default: 'secondary',\n info: 'info',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n} as const;\n\n/** Maps alert variant to button variant for soft appearance (uses primary for default) */\nconst alertToSolidButtonVariant = {\n default: 'primary',\n info: 'info',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n} as const;\n\n/** Maps alert variant to text color class */\nconst variantTextClass = {\n default: 'text-primary',\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n} as const;\n\nexport interface AlertProps\n extends Omit<React.ComponentProps<'div'>, 'title'>,\n VariantProps<typeof alertVariants> {\n /** Alert title - displayed prominently */\n title?: React.ReactNode;\n /** Alert description - secondary text */\n description?: React.ReactNode;\n /** Custom icon to display. Set to `false` to hide the icon entirely */\n icon?: React.ReactNode | false;\n /** Show close button */\n closable?: boolean;\n /** Callback when close button is clicked */\n onClose?: () => void;\n /** Action button configuration */\n action?: {\n label: string;\n onClick?: () => void;\n props?: Omit<ButtonProps, 'children' | 'onClick'>;\n };\n /** Duration of dismiss animation in ms (0 to disable) */\n dismissDuration?: number;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n appearance = 'outline',\n variant = 'default',\n title,\n description,\n icon,\n closable = false,\n onClose,\n action,\n children,\n dismissDuration = 200,\n ...props\n },\n ref,\n ) => {\n const [dismissing, setDismissing] = React.useState(false);\n const internalRef = React.useRef<HTMLDivElement>(null);\n const resolvedVariant = variant ?? 'default';\n\n // Merge refs\n React.useImperativeHandle(ref, () => internalRef.current as HTMLDivElement);\n\n const showIcon = icon !== false;\n const iconElement = showIcon ? icon || defaultIcons[resolvedVariant] : null;\n\n const handleClose = React.useCallback(() => {\n if (dismissDuration <= 0) {\n onClose?.();\n return;\n }\n // Use ref-based window access per ADR-010\n const win = internalRef.current?.ownerDocument.defaultView;\n const prefersReducedMotion =\n win?.matchMedia('(prefers-reduced-motion: reduce)').matches ?? false;\n if (prefersReducedMotion) {\n onClose?.();\n return;\n }\n setDismissing(true);\n }, [dismissDuration, onClose]);\n\n // Determine button styling based on appearance and variant\n const getActionButtonProps = (): Partial<ButtonProps> => {\n if (appearance === 'solid') {\n return {\n appearance: 'outline',\n variant: 'secondary',\n className: cn(\n 'bg-background/90 border-background/20 hover:bg-background',\n variantTextClass[resolvedVariant],\n ),\n };\n }\n if (appearance === 'soft') {\n return {\n appearance: 'solid',\n variant: alertToSolidButtonVariant[resolvedVariant],\n };\n }\n // outline appearance\n return {\n appearance: 'outline',\n variant: alertToButtonVariant[resolvedVariant],\n };\n };\n\n const alertRole =\n resolvedVariant === 'destructive' || resolvedVariant === 'warning'\n ? 'alert'\n : 'status';\n\n const getCloseButtonClass = () => {\n if (appearance === 'solid') {\n return 'text-current/80 hover:text-current hover:bg-current/10';\n }\n if (appearance === 'outline' || resolvedVariant === 'default') {\n return 'text-muted-foreground hover:text-foreground hover:bg-muted';\n }\n // soft appearance with colored variant\n return cn('hover:bg-current/10', variantTextClass[resolvedVariant]);\n };\n\n return (\n <div\n ref={internalRef}\n role={alertRole}\n data-slot=\"alert\"\n data-dismissing={dismissing || undefined}\n className={cn(\n alertVariants({ appearance, variant }),\n dismissing &&\n 'motion-safe:animate-out motion-safe:fade-out-0 motion-safe:slide-out-to-right-2',\n className,\n )}\n style={\n dismissing ? { animationDuration: `${dismissDuration}ms` } : undefined\n }\n onAnimationEnd={(e) => {\n if (dismissing && e.target === e.currentTarget) {\n onClose?.();\n }\n }}\n {...props}\n >\n {iconElement}\n\n <div className=\"flex flex-1 flex-col gap-0.5 min-w-0\">\n {title && <AlertTitle>{title}</AlertTitle>}\n {description && <AlertDescription>{description}</AlertDescription>}\n {children}\n </div>\n\n {action && (\n <Button\n size=\"xs\"\n shape=\"rounded\"\n onClick={action.onClick}\n {...getActionButtonProps()}\n {...action.props}\n >\n {action.label}\n </Button>\n )}\n\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n className={cn(\n 'relative shrink-0 size-6 inline-flex items-center justify-center rounded transition-all duration-200 ease-smooth motion-reduce:transition-none',\n 'after:absolute after:inset-[-10px] after:content-[\"\"]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none',\n 'active:scale-90 motion-reduce:active:scale-100',\n getCloseButtonClass(),\n )}\n aria-label=\"Dismiss alert\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n\n/** Alert title component */\nconst AlertTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentProps<'h5'>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('font-medium leading-5', className)}\n {...props}\n >\n {children}\n </h5>\n));\n\nAlertTitle.displayName = 'AlertTitle';\n\n/** Alert description component */\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentProps<'p'>\n>(({ className, children, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-sm leading-5 opacity-80', className)}\n {...props}\n >\n {children}\n </p>\n));\n\nAlertDescription.displayName = 'AlertDescription';\n\nexport type { AlertAppearance, AlertVariant };\nexport { Alert, AlertDescription, AlertTitle, alertVariants };\n","/**\n * Web Component wrapper for Alert\n * Custom element: <hf-alert>\n *\n * @generated by scripts/generate-wc-components.ts\n * DO NOT EDIT MANUALLY\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Alert } from '../components/molecules/feedback/Alert';\nimport { parseAttr, parseValue, type PropDefs } from './_shared';\n\n/**\n * Event wrapper that dispatches custom DOM events\n */\nfunction createEventDispatcher(element: HTMLElement) {\n return {\n onClose: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('close', {\n detail: value,\n bubbles: true,\n composed: true\n }));\n }\n };\n}\n\n/**\n * Wrapper component that connects React events to DOM custom events\n */\nfunction AlertWrapper(props: React.ComponentProps<typeof Alert> & { _hostElement?: HTMLElement }) {\n const { _hostElement, ...restProps } = props;\n\n const eventHandlers = React.useMemo(() => {\n if (!_hostElement) return {};\n return createEventDispatcher(_hostElement);\n }, [_hostElement]);\n\n return React.createElement(Alert, { ...restProps, ...eventHandlers });\n}\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n appearance: 'string',\n variant: 'string',\n title: 'string',\n description: 'string',\n icon: 'json',\n closable: 'boolean',\n action: 'json',\n dismissDuration: 'number'\n};\n\nclass AlertWC extends HTMLElement {\n private _root: ReturnType<typeof createRoot> | null = null;\n private _childrenContainer: HTMLDivElement | null = null;\n private _props: Record<string, unknown> = {};\n private _initialized = false;\n\n connectedCallback() {\n setTimeout(() => this._initialize(), 0);\n }\n\n private _initialize() {\n if (this._initialized) return;\n this._initialized = true;\n\n const originalChildren: Node[] = [];\n for (const child of Array.from(this.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE && !child.textContent?.trim()) {\n continue;\n }\n originalChildren.push(child);\n }\n\n const reactContainer = this.ownerDocument.createElement('div');\n reactContainer.style.display = 'contents';\n\n this._childrenContainer = this.ownerDocument.createElement('div');\n this._childrenContainer.style.display = 'contents';\n\n originalChildren.forEach((child) => this._childrenContainer!.appendChild(child));\n\n while (this.firstChild) this.removeChild(this.firstChild);\n this.appendChild(reactContainer);\n\n this._root = createRoot(reactContainer);\n this._render();\n }\n\n disconnectedCallback() {\n this._root?.unmount();\n this._root = null;\n }\n\n attributeChangedCallback(_name: string, _oldValue: string | null, _newValue: string | null) {\n this._render();\n }\n\n static get observedAttributes() {\n return Object.keys(propTypes).map((prop) =>\n prop.replace(/([A-Z])/g, '-$1').toLowerCase(),\n );\n }\n\n _setProp(name: string, value: unknown) {\n const propType = propTypes[name] || 'string';\n this._props[name] = parseValue(value, propType);\n this._render();\n }\n\n _getProp(name: string): unknown {\n if (name in this._props) {\n return this._props[name];\n }\n const attrName = name.replace(/([A-Z])/g, '-$1').toLowerCase();\n const propType = propTypes[name] || 'string';\n return parseAttr(this.getAttribute(attrName), propType);\n }\n\n private _render() {\n if (!this._root || !this._childrenContainer) return;\n\n const props: Record<string, unknown> = {};\n for (const [propName, propType] of Object.entries(propTypes)) {\n if (propName in this._props) {\n props[propName] = this._props[propName];\n } else {\n const attrName = propName.replace(/([A-Z])/g, '-$1').toLowerCase();\n props[propName] = parseAttr(this.getAttribute(attrName), propType);\n }\n }\n\n const element = React.createElement(\n AlertWrapper,\n { ...props, _hostElement: this },\n React.createElement('span', {\n ref: (el: HTMLSpanElement | null) => {\n if (el && this._childrenContainer) {\n el.replaceWith(this._childrenContainer);\n }\n },\n style: { display: 'contents' },\n }),\n );\n\n this._root.render(element);\n }\n}\n\nfor (const propName of Object.keys(propTypes)) {\n Object.defineProperty(AlertWC.prototype, propName, {\n get() {\n return this._getProp(propName);\n },\n set(value: unknown) {\n this._setProp(propName, value);\n },\n enumerable: true,\n configurable: true,\n });\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('hf-alert')) {\n customElements.define('hf-alert', AlertWC);\n}\n\nexport { AlertWC };\nexport default AlertWC;\n"],"mappings":"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"}
|