@humain/ui 2.2.6 → 2.2.9

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 (159) hide show
  1. package/dist/index101.js +2 -2
  2. package/dist/index101.js.map +1 -1
  3. package/dist/index103.js +3 -3
  4. package/dist/index103.js.map +1 -1
  5. package/dist/index108.js +1 -1
  6. package/dist/index108.js.map +1 -1
  7. package/dist/index117.js +1 -1
  8. package/dist/index117.js.map +1 -1
  9. package/dist/index122.js +6 -6
  10. package/dist/index122.js.map +1 -1
  11. package/dist/index126.js +1 -1
  12. package/dist/index126.js.map +1 -1
  13. package/dist/index130.js +2 -2
  14. package/dist/index130.js.map +1 -1
  15. package/dist/index146.js +4 -4
  16. package/dist/index146.js.map +1 -1
  17. package/dist/index152.js +1 -1
  18. package/dist/index152.js.map +1 -1
  19. package/dist/index154.js +2 -2
  20. package/dist/index154.js.map +1 -1
  21. package/dist/index166.js +1 -1
  22. package/dist/index166.js.map +1 -1
  23. package/dist/index168.js +1 -1
  24. package/dist/index168.js.map +1 -1
  25. package/dist/index169.js +1 -1
  26. package/dist/index169.js.map +1 -1
  27. package/dist/index173.js +2 -2
  28. package/dist/index173.js.map +1 -1
  29. package/dist/index175.js +4 -4
  30. package/dist/index175.js.map +1 -1
  31. package/dist/index176.js +2 -2
  32. package/dist/index176.js.map +1 -1
  33. package/dist/index177.js +2 -2
  34. package/dist/index177.js.map +1 -1
  35. package/dist/index184.js +1 -1
  36. package/dist/index184.js.map +1 -1
  37. package/dist/index191.js +3 -3
  38. package/dist/index191.js.map +1 -1
  39. package/dist/index192.js +2 -2
  40. package/dist/index192.js.map +1 -1
  41. package/dist/index201.js +2 -2
  42. package/dist/index201.js.map +1 -1
  43. package/dist/index204.js +4 -4
  44. package/dist/index204.js.map +1 -1
  45. package/dist/index228.js +1 -1
  46. package/dist/index228.js.map +1 -1
  47. package/dist/index229.js +1 -1
  48. package/dist/index229.js.map +1 -1
  49. package/dist/index24.js +2 -2
  50. package/dist/index24.js.map +1 -1
  51. package/dist/index5.js +1 -1
  52. package/dist/index5.js.map +1 -1
  53. package/dist/styles.css +1 -1
  54. package/dist/wc/AICodeBlock.js +41 -41
  55. package/dist/wc/AICodeBlock.js.map +1 -1
  56. package/dist/wc/AIMermaidDiagram.js +7 -7
  57. package/dist/wc/AIMermaidDiagram.js.map +1 -1
  58. package/dist/wc/AIMessage.js +6 -6
  59. package/dist/wc/AIMessage.js.map +1 -1
  60. package/dist/wc/AISource.js +2 -2
  61. package/dist/wc/AISource.js.map +1 -1
  62. package/dist/wc/AIToolCall.js +1 -1
  63. package/dist/wc/AIToolCall.js.map +1 -1
  64. package/dist/wc/Breadcrumb.js +43 -43
  65. package/dist/wc/Breadcrumb.js.map +1 -1
  66. package/dist/wc/DropdownMenu.js +9 -9
  67. package/dist/wc/DropdownMenu.js.map +1 -1
  68. package/dist/wc/Kbd.js +22 -22
  69. package/dist/wc/Kbd.js.map +1 -1
  70. package/dist/wc/button.js +7 -7
  71. package/dist/wc/button.js.map +1 -1
  72. package/dist/wc/close-button.js +19 -19
  73. package/dist/wc/close-button.js.map +1 -1
  74. package/dist/wc/hf-ai-prompt-suggestion.js +14 -14
  75. package/dist/wc/hf-ai-prompt-suggestion.js.map +1 -1
  76. package/dist/wc/hf-ai-reasoning-block.js +13 -13
  77. package/dist/wc/hf-ai-reasoning-block.js.map +1 -1
  78. package/dist/wc/hf-ai-steps.js +53 -53
  79. package/dist/wc/hf-ai-steps.js.map +1 -1
  80. package/dist/wc/hf-ai-system-message.js +26 -26
  81. package/dist/wc/hf-ai-system-message.js.map +1 -1
  82. package/dist/wc/hf-code-snippet.js +35 -35
  83. package/dist/wc/hf-code-snippet.js.map +1 -1
  84. package/dist/wc/hf-command-menu.js +39 -39
  85. package/dist/wc/hf-command-menu.js.map +1 -1
  86. package/dist/wc/hf-data-table.js +3 -3
  87. package/dist/wc/hf-data-table.js.map +1 -1
  88. package/dist/wc/hf-display-value.js +50 -50
  89. package/dist/wc/hf-display-value.js.map +1 -1
  90. package/dist/wc/hf-nav-account-menu.js +5 -5
  91. package/dist/wc/hf-nav-account-menu.js.map +1 -1
  92. package/dist/wc/hf-rich-textarea.js +1 -1
  93. package/dist/wc/hf-rich-textarea.js.map +1 -1
  94. package/dist/wc/hf-steps.js +8 -8
  95. package/dist/wc/hf-steps.js.map +1 -1
  96. package/dist/wc/markdown-renderer.js +1 -1
  97. package/dist/wc/markdown-renderer.js.map +1 -1
  98. package/dist/wc/selection-group.js +26 -26
  99. package/dist/wc/selection-group.js.map +1 -1
  100. package/dist/wc/syntax-highlight.js +4 -4
  101. package/dist/wc/syntax-highlight.js.map +1 -1
  102. package/dist/wc/workflow-step-renderer.js +51 -51
  103. package/dist/wc/workflow-step-renderer.js.map +1 -1
  104. package/dist/wc-react/AICodeBlock.js +17 -17
  105. package/dist/wc-react/AICodeBlock.js.map +1 -1
  106. package/dist/wc-react/AIMermaidDiagram.js +16 -16
  107. package/dist/wc-react/AIMermaidDiagram.js.map +1 -1
  108. package/dist/wc-react/AIMessage.js +7 -7
  109. package/dist/wc-react/AIMessage.js.map +1 -1
  110. package/dist/wc-react/AISource.js +41 -41
  111. package/dist/wc-react/AISource.js.map +1 -1
  112. package/dist/wc-react/AIToolCall.js +6 -6
  113. package/dist/wc-react/AIToolCall.js.map +1 -1
  114. package/dist/wc-react/Breadcrumb.js +18 -18
  115. package/dist/wc-react/Breadcrumb.js.map +1 -1
  116. package/dist/wc-react/DropdownMenu.js +27 -27
  117. package/dist/wc-react/DropdownMenu.js.map +1 -1
  118. package/dist/wc-react/Kbd.js +17 -17
  119. package/dist/wc-react/Kbd.js.map +1 -1
  120. package/dist/wc-react/button.js +12 -12
  121. package/dist/wc-react/button.js.map +1 -1
  122. package/dist/wc-react/close-button.js +19 -19
  123. package/dist/wc-react/close-button.js.map +1 -1
  124. package/dist/wc-react/hf-ai-prompt-suggestion.js +1 -1
  125. package/dist/wc-react/hf-ai-prompt-suggestion.js.map +1 -1
  126. package/dist/wc-react/hf-ai-reasoning-block.js +1 -1
  127. package/dist/wc-react/hf-ai-reasoning-block.js.map +1 -1
  128. package/dist/wc-react/hf-ai-steps.js +33 -33
  129. package/dist/wc-react/hf-ai-steps.js.map +1 -1
  130. package/dist/wc-react/hf-ai-system-message.js +9 -9
  131. package/dist/wc-react/hf-ai-system-message.js.map +1 -1
  132. package/dist/wc-react/hf-code-snippet.js +3 -3
  133. package/dist/wc-react/hf-code-snippet.js.map +1 -1
  134. package/dist/wc-react/hf-command-menu.js +56 -56
  135. package/dist/wc-react/hf-command-menu.js.map +1 -1
  136. package/dist/wc-react/hf-data-table.js +3 -3
  137. package/dist/wc-react/hf-data-table.js.map +1 -1
  138. package/dist/wc-react/hf-display-value.js +58 -58
  139. package/dist/wc-react/hf-display-value.js.map +1 -1
  140. package/dist/wc-react/hf-nav-account-menu.js +7 -7
  141. package/dist/wc-react/hf-nav-account-menu.js.map +1 -1
  142. package/dist/wc-react/hf-rich-textarea.js +5 -5
  143. package/dist/wc-react/hf-rich-textarea.js.map +1 -1
  144. package/dist/wc-react/hf-steps.js +2 -2
  145. package/dist/wc-react/hf-steps.js.map +1 -1
  146. package/dist/wc-react/markdown-renderer.js +1 -1
  147. package/dist/wc-react/markdown-renderer.js.map +1 -1
  148. package/dist/wc-react/selection-group.js +7 -7
  149. package/dist/wc-react/selection-group.js.map +1 -1
  150. package/dist/wc-react/syntax-highlight.js +4 -4
  151. package/dist/wc-react/syntax-highlight.js.map +1 -1
  152. package/dist/wc-react/workflow-step-renderer.js +44 -44
  153. package/dist/wc-react/workflow-step-renderer.js.map +1 -1
  154. package/package.json +1 -1
  155. package/skills/humain-ui/SKILL.md +1 -1
  156. package/skills/humain-ui-wc/SKILL.md +1 -1
  157. package/skills/humain-ui-wc.skill +0 -0
  158. package/skills/humain-ui.skill +0 -0
  159. package/src/tokens.css +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"hf-code-snippet.js","names":[],"sources":["../../src/components/molecules/data/CodeSnippet/CodeSnippet.tsx","../../src/wc/hf-code-snippet.ts"],"sourcesContent":["'use client';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, Copy } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { SUGAR_HIGH_STYLE } from '@/lib/syntax-highlight';\nimport { renderHighlightedCode } from '@/lib/syntax-highlight-react';\nimport { cn } from '@/lib/utils';\n\nconst codeSnippetVariants = cva('overflow-hidden rounded-xl bg-background', {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nconst lineNumberVariants = cva(\n 'select-none font-mono font-bold leading-normal text-text-quaternary',\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nexport interface CodeSnippetProps\n extends VariantProps<typeof codeSnippetVariants> {\n /** Code content to display */\n code: string;\n /** Programming language label shown in the top-right corner */\n language?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Starting line number */\n startLineNumber?: number;\n /** Whether to show a copy-to-clipboard button */\n showCopyButton?: boolean;\n /** Additional class name */\n className?: string;\n /** Responsive breakpoint for compact mode */\n breakpoint?: 'desktop' | 'mobile';\n}\n\ninterface LineNumbersProps {\n count: number;\n startLine: number;\n size?: 'sm' | 'md' | 'lg' | null;\n}\n\ninterface CopyFeedbackState {\n copied: boolean;\n resetKey: number;\n}\n\nfunction copyFeedbackReducer(\n state: CopyFeedbackState,\n copied: boolean,\n): CopyFeedbackState {\n return copied\n ? { copied: true, resetKey: state.resetKey + 1 }\n : { ...state, copied: false };\n}\n\nfunction getStartLineNumber(startLineNumber: number): number {\n return Number.isFinite(startLineNumber) ? Math.floor(startLineNumber) : 1;\n}\n\nfunction LineNumbers({ count, startLine, size }: LineNumbersProps) {\n return (\n <div aria-hidden=\"true\" className={cn(lineNumberVariants({ size }))}>\n {Array.from({ length: count }, (_, i) => (\n <span key={i} className=\"block mb-px last:mb-0\">\n {startLine + i}\n </span>\n ))}\n </div>\n );\n}\n\nconst CodeSnippet = React.forwardRef<HTMLElement, CodeSnippetProps>(\n (\n {\n code,\n language,\n showLineNumbers = true,\n startLineNumber = 1,\n showCopyButton = false,\n size,\n className,\n breakpoint = 'desktop',\n },\n ref,\n ) => {\n const highlightedContent = React.useMemo(\n () => renderHighlightedCode(code),\n [code],\n );\n const lineCount = React.useMemo(() => code.split('\\n').length, [code]);\n const safeStartLineNumber = getStartLineNumber(startLineNumber);\n\n const [copyFeedback, setCopyFeedback] = React.useReducer(\n copyFeedbackReducer,\n { copied: false, resetKey: 0 },\n );\n const { copied } = copyFeedback;\n const rootRef = React.useRef<HTMLElement>(null);\n\n // Merge forwarded ref with local ref\n React.useImperativeHandle(ref, () => rootRef.current as HTMLElement);\n\n React.useEffect(() => {\n if (!copyFeedback.copied) return;\n\n const copyResetTimer = setTimeout(() => {\n setCopyFeedback(false);\n }, 2000);\n\n return () => {\n clearTimeout(copyResetTimer);\n };\n }, [copyFeedback]);\n\n const handleCopy = React.useCallback(async () => {\n try {\n const win = rootRef.current?.ownerDocument.defaultView;\n if (!win) return;\n await win.navigator.clipboard.writeText(code);\n setCopyFeedback(true);\n } catch (err) {\n console.error('Failed to copy code:', err);\n }\n }, [code]);\n\n const containerPadding = breakpoint === 'mobile' ? 'p-4' : 'p-6';\n const contentPadding =\n breakpoint === 'mobile' ? 'py-4 px-4 pb-6' : 'py-6 px-6 pb-8';\n\n return (\n <section\n ref={rootRef}\n data-slot=\"code-snippet\"\n aria-label=\"Code snippet\"\n className={cn(\n codeSnippetVariants({ size }),\n 'relative flex items-start justify-center',\n className,\n )}\n style={SUGAR_HIGH_STYLE}\n >\n {/* Language badge & copy button */}\n {(language || showCopyButton) && (\n <div className=\"absolute top-2 end-2 flex items-center gap-2 z-10\">\n {language && (\n <span className=\"text-xs font-medium text-text-quaternary uppercase select-none\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label={\n copied ? 'Copied to clipboard' : 'Copy code to clipboard'\n }\n className=\"h-7 px-2 text-text-quaternary hover:text-secondary-foreground transition-colors duration-150 ease-out\"\n >\n {copied ? (\n <Check className=\"size-3.5 text-success\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n )}\n\n {/* Line Numbers Sidebar */}\n {showLineNumbers && (\n <div\n className={cn(\n 'shrink-0 self-stretch bg-muted border-e border-border',\n containerPadding,\n )}\n >\n <LineNumbers\n count={lineCount}\n startLine={safeStartLineNumber}\n size={size}\n />\n </div>\n )}\n\n {/* Code Content */}\n <section\n className={cn(\n 'grow min-w-0 overflow-x-auto focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n contentPadding,\n )}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: Focusable scroll region satisfies axe scrollable-region-focusable.\n tabIndex={0}\n aria-label=\"Code content\"\n >\n <pre\n className={cn(\n 'font-mono font-medium leading-normal !bg-transparent !p-0 !m-0 !border-0 !rounded-none',\n '[&_.sh__line]:block [&_.sh__line]:leading-normal [&_.sh__line]:mb-px [&_.sh__line:last-child]:mb-0',\n )}\n >\n {highlightedContent}\n </pre>\n </section>\n </section>\n );\n },\n);\n\nCodeSnippet.displayName = 'CodeSnippet';\n\nexport { CodeSnippet, codeSnippetVariants, lineNumberVariants };\n","/**\n * Web Component wrapper for CodeSnippet\n * Custom element: <hf-code-snippet>\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 { CodeSnippet } from '../components/molecules/data/CodeSnippet';\nimport { parseAttr, parseValue, type PropDefs } from './_shared';\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n size: 'string',\n code: 'string',\n language: 'string',\n showLineNumbers: 'boolean',\n startLineNumber: 'number',\n showCopyButton: 'boolean',\n className: 'string',\n breakpoint: 'string'\n};\n\nclass CodeSnippetWC 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) 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 CodeSnippet,\n props,\n );\n\n this._root.render(element);\n }\n}\n\nfor (const propName of Object.keys(propTypes)) {\n Object.defineProperty(CodeSnippetWC.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-code-snippet')) {\n customElements.define('hf-code-snippet', CodeSnippetWC);\n}\n\nexport { CodeSnippetWC };\nexport default CodeSnippetWC;\n"],"mappings":"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"}
1
+ {"version":3,"file":"hf-code-snippet.js","names":[],"sources":["../../src/components/molecules/data/CodeSnippet/CodeSnippet.tsx","../../src/wc/hf-code-snippet.ts"],"sourcesContent":["'use client';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, Copy } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from '@/components/atoms/buttons/Button';\nimport { SUGAR_HIGH_STYLE } from '@/lib/syntax-highlight';\nimport { renderHighlightedCode } from '@/lib/syntax-highlight-react';\nimport { cn } from '@/lib/utils';\n\nconst codeSnippetVariants = cva('overflow-hidden rounded-xl bg-background', {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\nconst lineNumberVariants = cva(\n 'select-none font-mono font-bold leading-normal text-secondary-foreground',\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nexport interface CodeSnippetProps\n extends VariantProps<typeof codeSnippetVariants> {\n /** Code content to display */\n code: string;\n /** Programming language label shown in the top-right corner */\n language?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Starting line number */\n startLineNumber?: number;\n /** Whether to show a copy-to-clipboard button */\n showCopyButton?: boolean;\n /** Additional class name */\n className?: string;\n /** Responsive breakpoint for compact mode */\n breakpoint?: 'desktop' | 'mobile';\n}\n\ninterface LineNumbersProps {\n count: number;\n startLine: number;\n size?: 'sm' | 'md' | 'lg' | null;\n}\n\ninterface CopyFeedbackState {\n copied: boolean;\n resetKey: number;\n}\n\nfunction copyFeedbackReducer(\n state: CopyFeedbackState,\n copied: boolean,\n): CopyFeedbackState {\n return copied\n ? { copied: true, resetKey: state.resetKey + 1 }\n : { ...state, copied: false };\n}\n\nfunction getStartLineNumber(startLineNumber: number): number {\n return Number.isFinite(startLineNumber) ? Math.floor(startLineNumber) : 1;\n}\n\nfunction LineNumbers({ count, startLine, size }: LineNumbersProps) {\n return (\n <div aria-hidden=\"true\" className={cn(lineNumberVariants({ size }))}>\n {Array.from({ length: count }, (_, i) => (\n <span key={i} className=\"block mb-px last:mb-0\">\n {startLine + i}\n </span>\n ))}\n </div>\n );\n}\n\nconst CodeSnippet = React.forwardRef<HTMLElement, CodeSnippetProps>(\n (\n {\n code,\n language,\n showLineNumbers = true,\n startLineNumber = 1,\n showCopyButton = false,\n size,\n className,\n breakpoint = 'desktop',\n },\n ref,\n ) => {\n const highlightedContent = React.useMemo(\n () => renderHighlightedCode(code),\n [code],\n );\n const lineCount = React.useMemo(() => code.split('\\n').length, [code]);\n const safeStartLineNumber = getStartLineNumber(startLineNumber);\n\n const [copyFeedback, setCopyFeedback] = React.useReducer(\n copyFeedbackReducer,\n { copied: false, resetKey: 0 },\n );\n const { copied } = copyFeedback;\n const rootRef = React.useRef<HTMLElement>(null);\n\n // Merge forwarded ref with local ref\n React.useImperativeHandle(ref, () => rootRef.current as HTMLElement);\n\n React.useEffect(() => {\n if (!copyFeedback.copied) return;\n\n const copyResetTimer = setTimeout(() => {\n setCopyFeedback(false);\n }, 2000);\n\n return () => {\n clearTimeout(copyResetTimer);\n };\n }, [copyFeedback]);\n\n const handleCopy = React.useCallback(async () => {\n try {\n const win = rootRef.current?.ownerDocument.defaultView;\n if (!win) return;\n await win.navigator.clipboard.writeText(code);\n setCopyFeedback(true);\n } catch (err) {\n console.error('Failed to copy code:', err);\n }\n }, [code]);\n\n const containerPadding = breakpoint === 'mobile' ? 'p-4' : 'p-6';\n const contentPadding =\n breakpoint === 'mobile' ? 'py-4 px-4 pb-6' : 'py-6 px-6 pb-8';\n\n return (\n <section\n ref={rootRef}\n data-slot=\"code-snippet\"\n aria-label=\"Code snippet\"\n className={cn(\n codeSnippetVariants({ size }),\n 'relative flex items-start justify-center',\n className,\n )}\n style={SUGAR_HIGH_STYLE}\n >\n {/* Language badge & copy button */}\n {(language || showCopyButton) && (\n <div className=\"absolute top-2 end-2 flex items-center gap-2 z-10\">\n {language && (\n <span className=\"text-xs font-medium text-secondary-foreground uppercase select-none\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label={\n copied ? 'Copied to clipboard' : 'Copy code to clipboard'\n }\n className=\"h-7 px-2 text-secondary-foreground hover:text-foreground transition-colors duration-150 ease-out\"\n >\n {copied ? (\n <Check className=\"size-3.5 text-success\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n )}\n\n {/* Line Numbers Sidebar */}\n {showLineNumbers && (\n <div\n className={cn(\n 'shrink-0 self-stretch bg-muted border-e border-border',\n containerPadding,\n )}\n >\n <LineNumbers\n count={lineCount}\n startLine={safeStartLineNumber}\n size={size}\n />\n </div>\n )}\n\n {/* Code Content */}\n <section\n className={cn(\n 'grow min-w-0 overflow-x-auto focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n contentPadding,\n )}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: Focusable scroll region satisfies axe scrollable-region-focusable.\n tabIndex={0}\n aria-label=\"Code content\"\n >\n <pre\n className={cn(\n 'font-mono font-medium leading-normal !bg-transparent !p-0 !m-0 !border-0 !rounded-none',\n '[&_.sh__line]:block [&_.sh__line]:leading-normal [&_.sh__line]:mb-px [&_.sh__line:last-child]:mb-0',\n )}\n >\n {highlightedContent}\n </pre>\n </section>\n </section>\n );\n },\n);\n\nCodeSnippet.displayName = 'CodeSnippet';\n\nexport { CodeSnippet, codeSnippetVariants, lineNumberVariants };\n","/**\n * Web Component wrapper for CodeSnippet\n * Custom element: <hf-code-snippet>\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 { CodeSnippet } from '../components/molecules/data/CodeSnippet';\nimport { parseAttr, parseValue, type PropDefs } from './_shared';\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n size: 'string',\n code: 'string',\n language: 'string',\n showLineNumbers: 'boolean',\n startLineNumber: 'number',\n showCopyButton: 'boolean',\n className: 'string',\n breakpoint: 'string'\n};\n\nclass CodeSnippetWC 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) 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 CodeSnippet,\n props,\n );\n\n this._root.render(element);\n }\n}\n\nfor (const propName of Object.keys(propTypes)) {\n Object.defineProperty(CodeSnippetWC.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-code-snippet')) {\n customElements.define('hf-code-snippet', CodeSnippetWC);\n}\n\nexport { CodeSnippetWC };\nexport default CodeSnippetWC;\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { c as V, f as l, s as T } from "./_shared.js";
2
- import { t as R } from "./createLucideIcon.js";
3
- import { t as $ } from "./arrow-down.js";
4
- import { t as W } from "./arrow-up.js";
5
- import { t as Z } from "./search.js";
6
- import { t as X } from "./settings.js";
1
+ import { c as R, f as c, s as T } from "./_shared.js";
2
+ import { t as $ } from "./createLucideIcon.js";
3
+ import { t as W } from "./arrow-down.js";
4
+ import { t as Z } from "./arrow-up.js";
5
+ import { t as X } from "./search.js";
6
+ import { t as q } from "./settings.js";
7
7
  import { t as K } from "./Avatar.js";
8
8
  import { n as J, t as Q } from "./button.js";
9
9
  import { t as D } from "./Kbd.js";
@@ -12,14 +12,14 @@ import * as E from "react";
12
12
  import M from "react";
13
13
  import { createRoot as ie } from "react-dom/client";
14
14
  import { jsx as n, jsxs as s } from "react/jsx-runtime";
15
- var le = [["path", {
15
+ var ce = [["path", {
16
16
  d: "M20 4v7a4 4 0 0 1-4 4H4",
17
17
  key: "6o5b7l"
18
18
  }], ["path", {
19
19
  d: "m9 10-5 5 5 5",
20
20
  key: "1kshq7"
21
- }]], ce = R("corner-down-left", le), k = 336, L = "Type a command or search...", me = "w-full max-w-[508px] overflow-hidden rounded-xl border border-input bg-background shadow-lg";
22
- function de(e) {
21
+ }]], le = $("corner-down-left", ce), k = 336, L = "Type a command or search...", de = "w-full max-w-[508px] overflow-hidden rounded-xl border border-input bg-background shadow-lg";
22
+ function me(e) {
23
23
  return Number.isFinite(e) && e >= 0 ? e : k;
24
24
  }
25
25
  function H() {
@@ -32,7 +32,7 @@ function S({ children: e, className: t }) {
32
32
  return /* @__PURE__ */ n(D, {
33
33
  variant: "solid",
34
34
  size: "sm",
35
- className: l("shadow-xs", t),
35
+ className: c("shadow-xs", t),
36
36
  children: e
37
37
  });
38
38
  }
@@ -41,14 +41,14 @@ function v({ children: e, className: t }) {
41
41
  return /* @__PURE__ */ n(D, {
42
42
  variant: "footer",
43
43
  size: "sm",
44
- className: l("p-1.5", t),
44
+ className: c("p-1.5", t),
45
45
  children: e
46
46
  });
47
47
  }
48
48
  v.displayName = "CommandMenu.FooterNavIcon";
49
49
  function j({ children: e, className: t }) {
50
50
  return /* @__PURE__ */ n("span", {
51
- className: l("text-sm font-semibold text-text-quaternary", t),
51
+ className: c("text-sm font-semibold text-secondary-foreground", t),
52
52
  children: e
53
53
  });
54
54
  }
@@ -57,19 +57,19 @@ var ue = [
57
57
  {
58
58
  keys: /* @__PURE__ */ s("div", {
59
59
  className: "flex items-center gap-1",
60
- children: [/* @__PURE__ */ n(v, { children: /* @__PURE__ */ n(W, { className: "size-2.5 text-text-quaternary" }) }), /* @__PURE__ */ n(v, { children: /* @__PURE__ */ n($, { className: "size-2.5 text-text-quaternary" }) })]
60
+ children: [/* @__PURE__ */ n(v, { children: /* @__PURE__ */ n(Z, { className: "size-2.5 text-secondary-foreground" }) }), /* @__PURE__ */ n(v, { children: /* @__PURE__ */ n(W, { className: "size-2.5 text-secondary-foreground" }) })]
61
61
  }),
62
62
  label: "to navigate"
63
63
  },
64
64
  {
65
- keys: /* @__PURE__ */ n(v, { children: /* @__PURE__ */ n(ce, { className: "size-2.5 text-text-quaternary" }) }),
65
+ keys: /* @__PURE__ */ n(v, { children: /* @__PURE__ */ n(le, { className: "size-2.5 text-secondary-foreground" }) }),
66
66
  label: "to select"
67
67
  },
68
68
  {
69
69
  keys: /* @__PURE__ */ n(v, {
70
70
  className: "px-1.5 py-1",
71
71
  children: /* @__PURE__ */ n("span", {
72
- className: "text-xs font-semibold text-text-quaternary",
72
+ className: "text-xs font-semibold text-secondary-foreground",
73
73
  children: "esc"
74
74
  })
75
75
  }),
@@ -79,7 +79,7 @@ var ue = [
79
79
  function F({ hints: e = ue, showSettingsButton: t = !1, onSettingsClick: r, className: a }) {
80
80
  return /* @__PURE__ */ s("div", {
81
81
  "data-slot": "command-menu-footer",
82
- className: l("flex items-center gap-3 border-t border-border bg-card/80 py-2 pe-2 ps-[18px] supports-backdrop-filter:backdrop-blur", a),
82
+ className: c("flex items-center gap-3 border-t border-border bg-card/80 py-2 pe-2 ps-[18px] supports-backdrop-filter:backdrop-blur", a),
83
83
  children: [/* @__PURE__ */ n("div", {
84
84
  className: "hidden flex-1 items-start gap-4 [@media(hover:hover)]:flex",
85
85
  children: e.map((o) => /* @__PURE__ */ s("div", {
@@ -93,7 +93,7 @@ function F({ hints: e = ue, showSettingsButton: t = !1, onSettingsClick: r, clas
93
93
  className: "group ms-auto rounded-full bg-muted",
94
94
  onClick: r,
95
95
  "aria-label": "Settings",
96
- children: /* @__PURE__ */ n(X, { className: "size-5 text-muted-foreground transition-transform duration-300 ease-out group-hover:rotate-90 motion-reduce:transition-none" })
96
+ children: /* @__PURE__ */ n(q, { className: "size-5 text-muted-foreground transition-transform duration-300 ease-out group-hover:rotate-90 motion-reduce:transition-none" })
97
97
  })]
98
98
  });
99
99
  }
@@ -104,7 +104,7 @@ function O({ option: e, onSelect: t, className: r, ...a }) {
104
104
  disabled: e.disabled,
105
105
  showCheckIndicator: !1,
106
106
  onSelect: () => t?.(e.id, e),
107
- className: l("flex cursor-pointer items-center gap-2 transition-colors duration-150 motion-reduce:transition-none", r),
107
+ className: c("flex cursor-pointer items-center gap-2 transition-colors duration-150 motion-reduce:transition-none", r),
108
108
  ...a,
109
109
  children: [
110
110
  e.avatar && /* @__PURE__ */ n(K, {
@@ -138,7 +138,7 @@ O.displayName = "CommandMenu.Item";
138
138
  function P({ children: e, className: t, ...r }) {
139
139
  return /* @__PURE__ */ n("h3", {
140
140
  "data-slot": "command-menu-group-header",
141
- className: l("px-2 py-1.5 text-xs font-medium text-muted-foreground", t),
141
+ className: c("px-2 py-1.5 text-xs font-medium text-muted-foreground", t),
142
142
  ...r,
143
143
  children: e
144
144
  });
@@ -168,20 +168,20 @@ function pe({ children: e, groups: t, options: r, optionRenderer: a }) {
168
168
  children: r.map(a)
169
169
  }));
170
170
  }
171
- function A({ children: e, groups: t, options: r, onSelect: a, onClose: o, placeholder: i, emptyText: d, emptyState: u, showShortcut: p, shortcutText: h, showFooter: f, footerHints: C, showSettingsButton: b, onSettingsClick: x, maxHeight: g, filter: N }) {
172
- const y = de(g);
171
+ function A({ children: e, groups: t, options: r, onSelect: a, onClose: o, placeholder: i, emptyText: m, emptyState: u, showShortcut: p, shortcutText: h, showFooter: f, footerHints: C, showSettingsButton: b, onSettingsClick: g, maxHeight: N, filter: x }) {
172
+ const y = me(N);
173
173
  return /* @__PURE__ */ s(oe, {
174
- filter: N,
174
+ filter: x,
175
175
  className: "rounded-none border-0 shadow-none",
176
176
  "data-slot": "command-menu",
177
177
  children: [
178
178
  /* @__PURE__ */ n("search", {
179
179
  "aria-label": "Command menu search",
180
180
  className: "block border-b border-input bg-background",
181
- children: /* @__PURE__ */ n(te, { render: ({ clearSearch: c, value: m, ...G }) => {
182
- const z = typeof o == "function", U = () => {
183
- if (m) {
184
- c();
181
+ children: /* @__PURE__ */ n(te, { render: ({ clearSearch: l, value: d, ...U }) => {
182
+ const z = typeof o == "function", V = () => {
183
+ if (d) {
184
+ l();
185
185
  return;
186
186
  }
187
187
  o?.();
@@ -191,13 +191,13 @@ function A({ children: e, groups: t, options: r, onSelect: a, onClose: o, placeh
191
191
  "cmdk-input-wrapper": "",
192
192
  className: "flex h-11 items-center gap-2 px-3",
193
193
  children: [
194
- /* @__PURE__ */ n(Z, {
194
+ /* @__PURE__ */ n(X, {
195
195
  className: "size-4 shrink-0 text-muted-foreground opacity-50",
196
196
  "aria-hidden": "true"
197
197
  }),
198
198
  /* @__PURE__ */ n("input", {
199
- ...G,
200
- value: m,
199
+ ...U,
200
+ value: d,
201
201
  placeholder: i,
202
202
  "aria-label": i,
203
203
  className: "min-w-0 flex-1 bg-transparent text-sm leading-5 text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50"
@@ -206,9 +206,9 @@ function A({ children: e, groups: t, options: r, onSelect: a, onClose: o, placeh
206
206
  /* @__PURE__ */ n(J, {
207
207
  size: "icon-xs",
208
208
  className: "-me-1 rounded-sm p-0 opacity-50 hover:opacity-80 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4",
209
- disabled: !m && !z,
210
- "aria-label": m ? "Clear search" : z ? "Close command menu" : "Clear search",
211
- onClick: U
209
+ disabled: !d && !z,
210
+ "aria-label": d ? "Clear search" : z ? "Close command menu" : "Clear search",
211
+ onClick: V
212
212
  })
213
213
  ]
214
214
  });
@@ -219,58 +219,58 @@ function A({ children: e, groups: t, options: r, onSelect: a, onClose: o, placeh
219
219
  className: "overflow-y-auto p-0",
220
220
  children: [/* @__PURE__ */ n(re, {
221
221
  className: "py-6 text-center text-sm text-muted-foreground animate-in fade-in-0 duration-200 motion-reduce:animate-none",
222
- children: u || d
222
+ children: u || m
223
223
  }), /* @__PURE__ */ n(pe, {
224
224
  groups: t,
225
225
  options: r,
226
- optionRenderer: (c) => /* @__PURE__ */ n(O, {
227
- option: c,
226
+ optionRenderer: (l) => /* @__PURE__ */ n(O, {
227
+ option: l,
228
228
  onSelect: a
229
- }, c.id),
229
+ }, l.id),
230
230
  children: e
231
231
  })]
232
232
  }),
233
233
  f && /* @__PURE__ */ n(F, {
234
234
  hints: C,
235
235
  showSettingsButton: b,
236
- onSettingsClick: x
236
+ onSettingsClick: g
237
237
  })
238
238
  ]
239
239
  });
240
240
  }
241
241
  A.displayName = "CommandMenu.Body";
242
- function B({ open: e, onOpenChange: t, placeholder: r = L, emptyText: a = "No results found.", emptyState: o, options: i = [], groups: d = [], onSelect: u, showShortcut: p = !1, shortcutText: h, showFooter: f = !1, footerHints: C, showSettingsButton: b = !1, onSettingsClick: x, className: g, maxHeight: N = k, filter: y, children: w }) {
243
- const c = H(), m = h ?? c;
242
+ function B({ open: e, onOpenChange: t, placeholder: r = L, emptyText: a = "No results found.", emptyState: o, options: i = [], groups: m = [], onSelect: u, showShortcut: p = !1, shortcutText: h, showFooter: f = !1, footerHints: C, showSettingsButton: b = !1, onSettingsClick: g, className: N, maxHeight: x = k, filter: y, children: w }) {
243
+ const l = H(), d = h ?? l;
244
244
  return /* @__PURE__ */ n(se, {
245
245
  open: e,
246
246
  onOpenChange: t,
247
- className: l("max-w-[508px] sm:max-w-[508px]", g),
247
+ className: c("max-w-[508px] sm:max-w-[508px]", N),
248
248
  children: /* @__PURE__ */ n(A, {
249
249
  placeholder: r,
250
250
  emptyText: a,
251
251
  emptyState: o,
252
252
  options: i,
253
- groups: d,
253
+ groups: m,
254
254
  onSelect: u,
255
255
  onClose: () => t?.(!1),
256
256
  showShortcut: p,
257
- shortcutText: m,
257
+ shortcutText: d,
258
258
  showFooter: f,
259
259
  footerHints: C,
260
260
  showSettingsButton: b,
261
- onSettingsClick: x,
262
- maxHeight: N,
261
+ onSettingsClick: g,
262
+ maxHeight: x,
263
263
  filter: y,
264
264
  children: w
265
265
  })
266
266
  });
267
267
  }
268
268
  B.displayName = "CommandMenu";
269
- function he({ placeholder: e = L, emptyText: t = "No results found.", emptyState: r, options: a = [], groups: o = [], onSelect: i, showShortcut: d = !1, shortcutText: u, showFooter: p = !1, footerHints: h, showSettingsButton: f = !1, onSettingsClick: C, className: b, maxHeight: x = k, filter: g, children: N }) {
269
+ function he({ placeholder: e = L, emptyText: t = "No results found.", emptyState: r, options: a = [], groups: o = [], onSelect: i, showShortcut: m = !1, shortcutText: u, showFooter: p = !1, footerHints: h, showSettingsButton: f = !1, onSettingsClick: C, className: b, maxHeight: g = k, filter: N, children: x }) {
270
270
  const y = H(), w = u ?? y;
271
271
  return /* @__PURE__ */ n("div", {
272
272
  "data-slot": "command-menu-panel",
273
- className: l(me, b),
273
+ className: c(de, b),
274
274
  children: /* @__PURE__ */ n(A, {
275
275
  placeholder: e,
276
276
  emptyText: t,
@@ -278,15 +278,15 @@ function he({ placeholder: e = L, emptyText: t = "No results found.", emptyState
278
278
  options: a,
279
279
  groups: o,
280
280
  onSelect: i,
281
- showShortcut: d,
281
+ showShortcut: m,
282
282
  shortcutText: w,
283
283
  showFooter: p,
284
284
  footerHints: h,
285
285
  showSettingsButton: f,
286
286
  onSettingsClick: C,
287
- maxHeight: x,
288
- filter: g,
289
- children: N
287
+ maxHeight: g,
288
+ filter: N,
289
+ children: x
290
290
  })
291
291
  });
292
292
  }
@@ -341,7 +341,7 @@ var _ = {
341
341
  className: "string",
342
342
  maxHeight: "number",
343
343
  filter: "json"
344
- }, q = class extends HTMLElement {
344
+ }, G = class extends HTMLElement {
345
345
  _root = null;
346
346
  _childrenContainer = null;
347
347
  _props = {};
@@ -370,7 +370,7 @@ var _ = {
370
370
  }
371
371
  _setProp(e, t) {
372
372
  const r = _[e] || "string";
373
- this._props[e] = V(t, r), this._render();
373
+ this._props[e] = R(t, r), this._render();
374
374
  }
375
375
  _getProp(e) {
376
376
  if (e in this._props) return this._props[e];
@@ -397,7 +397,7 @@ var _ = {
397
397
  this._root.render(t);
398
398
  }
399
399
  };
400
- for (const e of Object.keys(_)) Object.defineProperty(q.prototype, e, {
400
+ for (const e of Object.keys(_)) Object.defineProperty(G.prototype, e, {
401
401
  get() {
402
402
  return this._getProp(e);
403
403
  },
@@ -407,10 +407,10 @@ for (const e of Object.keys(_)) Object.defineProperty(q.prototype, e, {
407
407
  enumerable: !0,
408
408
  configurable: !0
409
409
  });
410
- typeof customElements < "u" && !customElements.get("hf-command-menu") && customElements.define("hf-command-menu", q);
410
+ typeof customElements < "u" && !customElements.get("hf-command-menu") && customElements.define("hf-command-menu", G);
411
411
  export {
412
- q as CommandMenuWC,
413
- q as default
412
+ G as CommandMenuWC,
413
+ G as default
414
414
  };
415
415
 
416
416
  //# sourceMappingURL=hf-command-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hf-command-menu.js","names":[],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.27.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/corner-down-left.mjs","../../src/components/organisms/menus/CommandMenu/CommandMenu.tsx","../../src/wc/hf-command-menu.ts"],"sourcesContent":["/**\n * @license lucide-react v1.27.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M20 4v7a4 4 0 0 1-4 4H4\", key: \"6o5b7l\" }],\n [\"path\", { d: \"m9 10-5 5 5 5\", key: \"1kshq7\" }]\n];\nconst CornerDownLeft = createLucideIcon(\"corner-down-left\", __iconNode);\n\nexport { __iconNode, CornerDownLeft as default };\n//# sourceMappingURL=corner-down-left.mjs.map\n","'use client';\n\nimport {\n ArrowDown,\n ArrowUp,\n CornerDownLeft,\n Search,\n Settings,\n} from 'lucide-react';\nimport * as React from 'react';\nimport { Button, ClearButton } from '@/components/atoms/buttons/Button';\nimport { Avatar } from '@/components/molecules/data/Avatar';\nimport { Kbd } from '@/components/molecules/data/Kbd';\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '@/components/ui/command';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_COMMAND_MENU_MAX_HEIGHT = 336;\nconst DEFAULT_COMMAND_MENU_PLACEHOLDER = 'Type a command or search...';\nconst COMMAND_MENU_SHELL_CLASS_NAME =\n 'w-full max-w-[508px] overflow-hidden rounded-xl border border-input bg-background shadow-lg';\n\nfunction getCommandMenuMaxHeight(maxHeight: number): number {\n return Number.isFinite(maxHeight) && maxHeight >= 0\n ? maxHeight\n : DEFAULT_COMMAND_MENU_MAX_HEIGHT;\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CommandMenuOption {\n /** Unique identifier for the option */\n id: string;\n /** Display label for the option */\n label: string;\n /** Optional subtitle (e.g., @username, email) */\n subtitle?: string;\n /** Optional icon to display (mutually exclusive with avatar) */\n icon?: React.ReactNode;\n /** Optional avatar configuration */\n avatar?: {\n src?: string;\n fallback?: string;\n };\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Keyboard shortcut to display */\n shortcut?: string;\n}\n\nexport interface CommandMenuGroup {\n /** Unique identifier for the group */\n id: string;\n /** Group label/heading */\n label: string;\n /** Options in this group */\n options: CommandMenuOption[];\n}\n\nexport interface CommandMenuFooterHint {\n /** Icon or keyboard key indicator */\n keys: React.ReactNode;\n /** Text describing the action */\n label: string;\n}\n\nexport interface CommandMenuProps {\n /** Whether the command menu is open */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results found */\n emptyText?: string;\n /** Empty state content (replaces emptyText when provided) */\n emptyState?: React.ReactNode;\n /** Flat list of options */\n options?: CommandMenuOption[];\n /** Grouped options */\n groups?: CommandMenuGroup[];\n /** Callback when an option is selected */\n onSelect?: (id: string, option: CommandMenuOption) => void;\n /** Whether to show keyboard shortcut badge in input */\n showShortcut?: boolean;\n /** Keyboard shortcut text to display (auto-detects platform when omitted) */\n shortcutText?: string;\n /** Whether to show the footer with navigation hints */\n showFooter?: boolean;\n /** Custom footer hints */\n footerHints?: CommandMenuFooterHint[];\n /** Whether to show settings button in footer */\n showSettingsButton?: boolean;\n /** Callback when settings button is clicked */\n onSettingsClick?: () => void;\n /** Additional class name for the dialog */\n className?: string;\n /** Maximum height of the list */\n maxHeight?: number;\n /** Custom filter function */\n filter?: (value: string, search: string) => number;\n /** Children for custom content */\n children?: React.ReactNode;\n}\n\n// ============================================\n// Platform detection\n// ============================================\n\nfunction usePlatformShortcut() {\n const [shortcut, setShortcut] = React.useState('\\u2318/');\n React.useEffect(() => {\n if (!/Mac|iPhone|iPad/i.test(navigator.userAgent)) {\n setShortcut('Ctrl /');\n }\n }, []);\n return shortcut;\n}\n\n// ============================================\n// Keyboard Shortcut Badge (uses Kbd wrapper)\n// ============================================\n\nfunction CommandShortcutBadge({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <Kbd variant=\"solid\" size=\"sm\" className={cn('shadow-xs', className)}>\n {children}\n </Kbd>\n );\n}\nCommandShortcutBadge.displayName = 'CommandMenu.ShortcutBadge';\n\n// ============================================\n// Footer Navigation Icon (uses Kbd wrapper)\n// ============================================\n\nfunction FooterNavIcon({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <Kbd variant=\"footer\" size=\"sm\" className={cn('p-1.5', className)}>\n {children}\n </Kbd>\n );\n}\nFooterNavIcon.displayName = 'CommandMenu.FooterNavIcon';\n\nfunction FooterNavText({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={cn('text-sm font-semibold text-text-quaternary', className)}\n >\n {children}\n </span>\n );\n}\nFooterNavText.displayName = 'CommandMenu.FooterNavText';\n\n// ============================================\n// Default Footer Hints\n// ============================================\n\nconst defaultFooterHints: CommandMenuFooterHint[] = [\n {\n keys: (\n <div className=\"flex items-center gap-1\">\n <FooterNavIcon>\n <ArrowUp className=\"size-2.5 text-text-quaternary\" />\n </FooterNavIcon>\n <FooterNavIcon>\n <ArrowDown className=\"size-2.5 text-text-quaternary\" />\n </FooterNavIcon>\n </div>\n ),\n label: 'to navigate',\n },\n {\n keys: (\n <FooterNavIcon>\n <CornerDownLeft className=\"size-2.5 text-text-quaternary\" />\n </FooterNavIcon>\n ),\n label: 'to select',\n },\n {\n keys: (\n <FooterNavIcon className=\"px-1.5 py-1\">\n <span className=\"text-xs font-semibold text-text-quaternary\">esc</span>\n </FooterNavIcon>\n ),\n label: 'to close',\n },\n];\n\n// ============================================\n// Command Menu Footer\n// ============================================\n\nexport interface CommandMenuFooterProps {\n hints?: CommandMenuFooterHint[];\n showSettingsButton?: boolean;\n onSettingsClick?: () => void;\n className?: string;\n}\n\nfunction CommandMenuFooter({\n hints = defaultFooterHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n}: CommandMenuFooterProps) {\n return (\n <div\n data-slot=\"command-menu-footer\"\n className={cn(\n 'flex items-center gap-3 border-t border-border bg-card/80 py-2 pe-2 ps-[18px] supports-backdrop-filter:backdrop-blur',\n className,\n )}\n >\n <div className=\"hidden flex-1 items-start gap-4 [@media(hover:hover)]:flex\">\n {hints.map((hint) => (\n <div key={hint.label} className=\"flex items-center gap-2\">\n {hint.keys}\n <FooterNavText>{hint.label}</FooterNavText>\n </div>\n ))}\n </div>\n {showSettingsButton && (\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"icon\"\n className=\"group ms-auto rounded-full bg-muted\"\n onClick={onSettingsClick}\n aria-label=\"Settings\"\n >\n <Settings className=\"size-5 text-muted-foreground transition-transform duration-300 ease-out group-hover:rotate-90 motion-reduce:transition-none\" />\n </Button>\n )}\n </div>\n );\n}\nCommandMenuFooter.displayName = 'CommandMenu.Footer';\n\n// ============================================\n// Command Menu Item\n// ============================================\n\nexport interface CommandMenuItemProps\n extends Omit<\n React.ComponentProps<typeof CommandItem>,\n 'onSelect' | 'showCheckIndicator' | 'value'\n > {\n option: CommandMenuOption;\n onSelect?: (id: string, option: CommandMenuOption) => void;\n}\n\nfunction CommandMenuItem({\n option,\n onSelect,\n className,\n ...props\n}: CommandMenuItemProps) {\n return (\n <CommandItem\n value={option.id}\n disabled={option.disabled}\n showCheckIndicator={false}\n onSelect={() => onSelect?.(option.id, option)}\n className={cn(\n 'flex cursor-pointer items-center gap-2 transition-colors duration-150 motion-reduce:transition-none',\n className,\n )}\n {...props}\n >\n {option.avatar && (\n <Avatar\n src={option.avatar.src}\n fallback={option.avatar.fallback || option.label.charAt(0)}\n size=\"sm\"\n className=\"size-6 shrink-0\"\n />\n )}\n {option.icon && !option.avatar && (\n <span className=\"flex size-4 shrink-0 items-center justify-center text-muted-foreground [&_svg]:size-4\">\n {option.icon}\n </span>\n )}\n <div className=\"flex min-w-0 flex-1 items-center gap-2 text-sm leading-5\">\n <span className=\"min-w-0 truncate font-normal text-foreground\">\n {option.label}\n </span>\n {option.subtitle && (\n <span className=\"min-w-0 truncate font-normal text-muted-foreground\">\n {option.subtitle}\n </span>\n )}\n </div>\n {option.shortcut && (\n <CommandShortcutBadge className=\"transition-colors duration-150 group-data-[selected=true]/command-item:bg-primary/10 group-data-[selected=true]/command-item:text-primary\">\n {option.shortcut}\n </CommandShortcutBadge>\n )}\n </CommandItem>\n );\n}\nCommandMenuItem.displayName = 'CommandMenu.Item';\n\n// ============================================\n// Command Menu Group Header\n// ============================================\n\nfunction CommandMenuGroupHeader({\n children,\n className,\n ...props\n}: React.ComponentProps<'h3'>) {\n return (\n <h3\n data-slot=\"command-menu-group-header\"\n className={cn(\n 'px-2 py-1.5 text-xs font-medium text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </h3>\n );\n}\nCommandMenuGroupHeader.displayName = 'CommandMenu.GroupHeader';\n\n// ============================================\n// Shared Command Menu Body (internal)\n// ============================================\n\ninterface CommandMenuBodyProps {\n children?: React.ReactNode;\n groups: CommandMenuGroup[];\n options: CommandMenuOption[];\n onSelect?: (id: string, option: CommandMenuOption) => void;\n onClose?: () => void;\n placeholder: string;\n emptyText: string;\n emptyState?: React.ReactNode;\n showShortcut: boolean;\n shortcutText: string;\n showFooter: boolean;\n footerHints?: CommandMenuFooterHint[];\n showSettingsButton: boolean;\n onSettingsClick?: () => void;\n maxHeight: number;\n filter?: (value: string, search: string) => number;\n}\n\ninterface CommandMenuBodyContentProps {\n children?: React.ReactNode;\n groups: CommandMenuGroup[];\n options: CommandMenuOption[];\n optionRenderer: (option: CommandMenuOption) => React.ReactNode;\n}\n\ninterface CommandMenuGroupSectionProps {\n group: CommandMenuGroup;\n optionRenderer: (option: CommandMenuOption) => React.ReactNode;\n}\n\nfunction CommandMenuGroupSection({\n group,\n optionRenderer,\n}: CommandMenuGroupSectionProps) {\n const headingId = React.useId();\n\n return (\n <CommandGroup aria-labelledby={headingId} className=\"px-2 py-1\">\n <CommandMenuGroupHeader id={headingId}>\n {group.label}\n </CommandMenuGroupHeader>\n <div className=\"flex flex-col\">{group.options.map(optionRenderer)}</div>\n </CommandGroup>\n );\n}\nCommandMenuGroupSection.displayName = 'CommandMenu.GroupSection';\n\nfunction CommandMenuBodyContent({\n children,\n groups,\n options,\n optionRenderer,\n}: CommandMenuBodyContentProps) {\n if (children) return children;\n\n if (groups.length > 0) {\n return groups.map((group, index) => (\n <React.Fragment key={group.id}>\n {index > 0 && <CommandSeparator className=\"mx-0\" />}\n <CommandMenuGroupSection\n group={group}\n optionRenderer={optionRenderer}\n />\n </React.Fragment>\n ));\n }\n\n return <div className=\"flex flex-col p-2\">{options.map(optionRenderer)}</div>;\n}\n\nfunction CommandMenuBody({\n children,\n groups,\n options,\n onSelect,\n onClose,\n placeholder,\n emptyText,\n emptyState,\n showShortcut,\n shortcutText,\n showFooter,\n footerHints,\n showSettingsButton,\n onSettingsClick,\n maxHeight,\n filter,\n}: CommandMenuBodyProps) {\n const safeMaxHeight = getCommandMenuMaxHeight(maxHeight);\n const renderOption = (option: CommandMenuOption) => (\n <CommandMenuItem key={option.id} option={option} onSelect={onSelect} />\n );\n\n return (\n <Command\n filter={filter}\n className=\"rounded-none border-0 shadow-none\"\n data-slot=\"command-menu\"\n >\n <search\n aria-label=\"Command menu search\"\n className=\"block border-b border-input bg-background\"\n >\n <CommandInput\n render={({ clearSearch, value, ...inputProps }) => {\n const canClose = typeof onClose === 'function';\n const clearOrClose = () => {\n if (value) {\n clearSearch();\n return;\n }\n onClose?.();\n };\n\n return (\n <div\n data-slot=\"command-menu-input\"\n cmdk-input-wrapper=\"\"\n className=\"flex h-11 items-center gap-2 px-3\"\n >\n <Search\n className=\"size-4 shrink-0 text-muted-foreground opacity-50\"\n aria-hidden=\"true\"\n />\n <input\n {...inputProps}\n value={value}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-sm leading-5 text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n {showShortcut && (\n <CommandShortcutBadge>{shortcutText}</CommandShortcutBadge>\n )}\n <ClearButton\n size=\"icon-xs\"\n className=\"-me-1 rounded-sm p-0 opacity-50 hover:opacity-80 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4\"\n disabled={!value && !canClose}\n aria-label={\n value\n ? 'Clear search'\n : canClose\n ? 'Close command menu'\n : 'Clear search'\n }\n onClick={clearOrClose}\n />\n </div>\n );\n }}\n />\n </search>\n\n <CommandList\n style={{ maxHeight: safeMaxHeight }}\n className=\"overflow-y-auto p-0\"\n >\n <CommandEmpty className=\"py-6 text-center text-sm text-muted-foreground animate-in fade-in-0 duration-200 motion-reduce:animate-none\">\n {emptyState || emptyText}\n </CommandEmpty>\n <CommandMenuBodyContent\n groups={groups}\n options={options}\n optionRenderer={renderOption}\n >\n {children}\n </CommandMenuBodyContent>\n </CommandList>\n\n {showFooter && (\n <CommandMenuFooter\n hints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n />\n )}\n </Command>\n );\n}\nCommandMenuBody.displayName = 'CommandMenu.Body';\n\n// ============================================\n// Main Command Menu Component\n// ============================================\n\nfunction CommandMenu({\n open,\n onOpenChange,\n placeholder = DEFAULT_COMMAND_MENU_PLACEHOLDER,\n emptyText = 'No results found.',\n emptyState,\n options = [],\n groups = [],\n onSelect,\n showShortcut = false,\n shortcutText,\n showFooter = false,\n footerHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n maxHeight = DEFAULT_COMMAND_MENU_MAX_HEIGHT,\n filter,\n children,\n}: CommandMenuProps) {\n const platformShortcut = usePlatformShortcut();\n const resolvedShortcut = shortcutText ?? platformShortcut;\n\n return (\n <CommandDialog\n open={open}\n onOpenChange={onOpenChange}\n className={cn('max-w-[508px] sm:max-w-[508px]', className)}\n >\n <CommandMenuBody\n placeholder={placeholder}\n emptyText={emptyText}\n emptyState={emptyState}\n options={options}\n groups={groups}\n onSelect={onSelect}\n onClose={() => onOpenChange?.(false)}\n showShortcut={showShortcut}\n shortcutText={resolvedShortcut}\n showFooter={showFooter}\n footerHints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n maxHeight={maxHeight}\n filter={filter}\n >\n {children}\n </CommandMenuBody>\n </CommandDialog>\n );\n}\nCommandMenu.displayName = 'CommandMenu';\n\n// ============================================\n// Standalone Command Menu (non-dialog version)\n// ============================================\n\nexport interface CommandMenuPanelProps\n extends Omit<CommandMenuProps, 'open' | 'onOpenChange'> {\n /** Additional class name */\n className?: string;\n}\n\nfunction CommandMenuPanel({\n placeholder = DEFAULT_COMMAND_MENU_PLACEHOLDER,\n emptyText = 'No results found.',\n emptyState,\n options = [],\n groups = [],\n onSelect,\n showShortcut = false,\n shortcutText,\n showFooter = false,\n footerHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n maxHeight = DEFAULT_COMMAND_MENU_MAX_HEIGHT,\n filter,\n children,\n}: CommandMenuPanelProps) {\n const platformShortcut = usePlatformShortcut();\n const resolvedShortcut = shortcutText ?? platformShortcut;\n\n return (\n <div\n data-slot=\"command-menu-panel\"\n className={cn(COMMAND_MENU_SHELL_CLASS_NAME, className)}\n >\n <CommandMenuBody\n placeholder={placeholder}\n emptyText={emptyText}\n emptyState={emptyState}\n options={options}\n groups={groups}\n onSelect={onSelect}\n showShortcut={showShortcut}\n shortcutText={resolvedShortcut}\n showFooter={showFooter}\n footerHints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n maxHeight={maxHeight}\n filter={filter}\n >\n {children}\n </CommandMenuBody>\n </div>\n );\n}\nCommandMenuPanel.displayName = 'CommandMenu.Panel';\n\n// ============================================\n// Exports\n// ============================================\n\nexport {\n CommandMenu,\n CommandMenuFooter,\n CommandMenuGroupHeader,\n CommandMenuItem,\n CommandMenuPanel,\n CommandShortcutBadge,\n defaultFooterHints,\n FooterNavIcon,\n FooterNavText,\n};\n","/**\n * Web Component wrapper for CommandMenu\n * Custom element: <hf-command-menu>\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 { CommandMenu } from '../components/organisms/menus/CommandMenu';\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 onOpenChange: (open: boolean) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('open-change', {\n detail: open,\n bubbles: true,\n composed: true\n }));\n },\n onSelect: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('select', {\n detail: value,\n bubbles: true,\n composed: true\n }));\n },\n onSettingsClick: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('settings-click', {\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 CommandMenuWrapper(props: React.ComponentProps<typeof CommandMenu> & { _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(CommandMenu, { ...restProps, ...eventHandlers });\n}\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n open: 'boolean',\n placeholder: 'string',\n emptyText: 'string',\n emptyState: 'json',\n options: 'json',\n groups: 'json',\n showShortcut: 'boolean',\n shortcutText: 'string',\n showFooter: 'boolean',\n footerHints: 'json',\n showSettingsButton: 'boolean',\n className: 'string',\n maxHeight: 'number',\n filter: 'json'\n};\n\nclass CommandMenuWC 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 CommandMenuWrapper,\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(CommandMenuWC.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-command-menu')) {\n customElements.define('hf-command-menu', CommandMenuWC);\n}\n\nexport { CommandMenuWC };\nexport default CommandMenuWC;\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"hf-command-menu.js","names":[],"sources":["../../../../../../../../../../../Users/akarim/Documents/test/humain_foundation_ui/node_modules/.bun/lucide-react@1.27.0+0f58469d5b3bd39f/node_modules/lucide-react/dist/esm/icons/corner-down-left.mjs","../../src/components/organisms/menus/CommandMenu/CommandMenu.tsx","../../src/wc/hf-command-menu.ts"],"sourcesContent":["/**\n * @license lucide-react v1.27.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M20 4v7a4 4 0 0 1-4 4H4\", key: \"6o5b7l\" }],\n [\"path\", { d: \"m9 10-5 5 5 5\", key: \"1kshq7\" }]\n];\nconst CornerDownLeft = createLucideIcon(\"corner-down-left\", __iconNode);\n\nexport { __iconNode, CornerDownLeft as default };\n//# sourceMappingURL=corner-down-left.mjs.map\n","'use client';\n\nimport {\n ArrowDown,\n ArrowUp,\n CornerDownLeft,\n Search,\n Settings,\n} from 'lucide-react';\nimport * as React from 'react';\nimport { Button, ClearButton } from '@/components/atoms/buttons/Button';\nimport { Avatar } from '@/components/molecules/data/Avatar';\nimport { Kbd } from '@/components/molecules/data/Kbd';\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '@/components/ui/command';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_COMMAND_MENU_MAX_HEIGHT = 336;\nconst DEFAULT_COMMAND_MENU_PLACEHOLDER = 'Type a command or search...';\nconst COMMAND_MENU_SHELL_CLASS_NAME =\n 'w-full max-w-[508px] overflow-hidden rounded-xl border border-input bg-background shadow-lg';\n\nfunction getCommandMenuMaxHeight(maxHeight: number): number {\n return Number.isFinite(maxHeight) && maxHeight >= 0\n ? maxHeight\n : DEFAULT_COMMAND_MENU_MAX_HEIGHT;\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CommandMenuOption {\n /** Unique identifier for the option */\n id: string;\n /** Display label for the option */\n label: string;\n /** Optional subtitle (e.g., @username, email) */\n subtitle?: string;\n /** Optional icon to display (mutually exclusive with avatar) */\n icon?: React.ReactNode;\n /** Optional avatar configuration */\n avatar?: {\n src?: string;\n fallback?: string;\n };\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Keyboard shortcut to display */\n shortcut?: string;\n}\n\nexport interface CommandMenuGroup {\n /** Unique identifier for the group */\n id: string;\n /** Group label/heading */\n label: string;\n /** Options in this group */\n options: CommandMenuOption[];\n}\n\nexport interface CommandMenuFooterHint {\n /** Icon or keyboard key indicator */\n keys: React.ReactNode;\n /** Text describing the action */\n label: string;\n}\n\nexport interface CommandMenuProps {\n /** Whether the command menu is open */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placeholder text for the search input */\n placeholder?: string;\n /** Text to show when no results found */\n emptyText?: string;\n /** Empty state content (replaces emptyText when provided) */\n emptyState?: React.ReactNode;\n /** Flat list of options */\n options?: CommandMenuOption[];\n /** Grouped options */\n groups?: CommandMenuGroup[];\n /** Callback when an option is selected */\n onSelect?: (id: string, option: CommandMenuOption) => void;\n /** Whether to show keyboard shortcut badge in input */\n showShortcut?: boolean;\n /** Keyboard shortcut text to display (auto-detects platform when omitted) */\n shortcutText?: string;\n /** Whether to show the footer with navigation hints */\n showFooter?: boolean;\n /** Custom footer hints */\n footerHints?: CommandMenuFooterHint[];\n /** Whether to show settings button in footer */\n showSettingsButton?: boolean;\n /** Callback when settings button is clicked */\n onSettingsClick?: () => void;\n /** Additional class name for the dialog */\n className?: string;\n /** Maximum height of the list */\n maxHeight?: number;\n /** Custom filter function */\n filter?: (value: string, search: string) => number;\n /** Children for custom content */\n children?: React.ReactNode;\n}\n\n// ============================================\n// Platform detection\n// ============================================\n\nfunction usePlatformShortcut() {\n const [shortcut, setShortcut] = React.useState('\\u2318/');\n React.useEffect(() => {\n if (!/Mac|iPhone|iPad/i.test(navigator.userAgent)) {\n setShortcut('Ctrl /');\n }\n }, []);\n return shortcut;\n}\n\n// ============================================\n// Keyboard Shortcut Badge (uses Kbd wrapper)\n// ============================================\n\nfunction CommandShortcutBadge({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <Kbd variant=\"solid\" size=\"sm\" className={cn('shadow-xs', className)}>\n {children}\n </Kbd>\n );\n}\nCommandShortcutBadge.displayName = 'CommandMenu.ShortcutBadge';\n\n// ============================================\n// Footer Navigation Icon (uses Kbd wrapper)\n// ============================================\n\nfunction FooterNavIcon({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <Kbd variant=\"footer\" size=\"sm\" className={cn('p-1.5', className)}>\n {children}\n </Kbd>\n );\n}\nFooterNavIcon.displayName = 'CommandMenu.FooterNavIcon';\n\nfunction FooterNavText({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={cn(\n 'text-sm font-semibold text-secondary-foreground',\n className,\n )}\n >\n {children}\n </span>\n );\n}\nFooterNavText.displayName = 'CommandMenu.FooterNavText';\n\n// ============================================\n// Default Footer Hints\n// ============================================\n\nconst defaultFooterHints: CommandMenuFooterHint[] = [\n {\n keys: (\n <div className=\"flex items-center gap-1\">\n <FooterNavIcon>\n <ArrowUp className=\"size-2.5 text-secondary-foreground\" />\n </FooterNavIcon>\n <FooterNavIcon>\n <ArrowDown className=\"size-2.5 text-secondary-foreground\" />\n </FooterNavIcon>\n </div>\n ),\n label: 'to navigate',\n },\n {\n keys: (\n <FooterNavIcon>\n <CornerDownLeft className=\"size-2.5 text-secondary-foreground\" />\n </FooterNavIcon>\n ),\n label: 'to select',\n },\n {\n keys: (\n <FooterNavIcon className=\"px-1.5 py-1\">\n <span className=\"text-xs font-semibold text-secondary-foreground\">\n esc\n </span>\n </FooterNavIcon>\n ),\n label: 'to close',\n },\n];\n\n// ============================================\n// Command Menu Footer\n// ============================================\n\nexport interface CommandMenuFooterProps {\n hints?: CommandMenuFooterHint[];\n showSettingsButton?: boolean;\n onSettingsClick?: () => void;\n className?: string;\n}\n\nfunction CommandMenuFooter({\n hints = defaultFooterHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n}: CommandMenuFooterProps) {\n return (\n <div\n data-slot=\"command-menu-footer\"\n className={cn(\n 'flex items-center gap-3 border-t border-border bg-card/80 py-2 pe-2 ps-[18px] supports-backdrop-filter:backdrop-blur',\n className,\n )}\n >\n <div className=\"hidden flex-1 items-start gap-4 [@media(hover:hover)]:flex\">\n {hints.map((hint) => (\n <div key={hint.label} className=\"flex items-center gap-2\">\n {hint.keys}\n <FooterNavText>{hint.label}</FooterNavText>\n </div>\n ))}\n </div>\n {showSettingsButton && (\n <Button\n appearance=\"ghost\"\n variant=\"secondary\"\n size=\"icon\"\n className=\"group ms-auto rounded-full bg-muted\"\n onClick={onSettingsClick}\n aria-label=\"Settings\"\n >\n <Settings className=\"size-5 text-muted-foreground transition-transform duration-300 ease-out group-hover:rotate-90 motion-reduce:transition-none\" />\n </Button>\n )}\n </div>\n );\n}\nCommandMenuFooter.displayName = 'CommandMenu.Footer';\n\n// ============================================\n// Command Menu Item\n// ============================================\n\nexport interface CommandMenuItemProps\n extends Omit<\n React.ComponentProps<typeof CommandItem>,\n 'onSelect' | 'showCheckIndicator' | 'value'\n > {\n option: CommandMenuOption;\n onSelect?: (id: string, option: CommandMenuOption) => void;\n}\n\nfunction CommandMenuItem({\n option,\n onSelect,\n className,\n ...props\n}: CommandMenuItemProps) {\n return (\n <CommandItem\n value={option.id}\n disabled={option.disabled}\n showCheckIndicator={false}\n onSelect={() => onSelect?.(option.id, option)}\n className={cn(\n 'flex cursor-pointer items-center gap-2 transition-colors duration-150 motion-reduce:transition-none',\n className,\n )}\n {...props}\n >\n {option.avatar && (\n <Avatar\n src={option.avatar.src}\n fallback={option.avatar.fallback || option.label.charAt(0)}\n size=\"sm\"\n className=\"size-6 shrink-0\"\n />\n )}\n {option.icon && !option.avatar && (\n <span className=\"flex size-4 shrink-0 items-center justify-center text-muted-foreground [&_svg]:size-4\">\n {option.icon}\n </span>\n )}\n <div className=\"flex min-w-0 flex-1 items-center gap-2 text-sm leading-5\">\n <span className=\"min-w-0 truncate font-normal text-foreground\">\n {option.label}\n </span>\n {option.subtitle && (\n <span className=\"min-w-0 truncate font-normal text-muted-foreground\">\n {option.subtitle}\n </span>\n )}\n </div>\n {option.shortcut && (\n <CommandShortcutBadge className=\"transition-colors duration-150 group-data-[selected=true]/command-item:bg-primary/10 group-data-[selected=true]/command-item:text-primary\">\n {option.shortcut}\n </CommandShortcutBadge>\n )}\n </CommandItem>\n );\n}\nCommandMenuItem.displayName = 'CommandMenu.Item';\n\n// ============================================\n// Command Menu Group Header\n// ============================================\n\nfunction CommandMenuGroupHeader({\n children,\n className,\n ...props\n}: React.ComponentProps<'h3'>) {\n return (\n <h3\n data-slot=\"command-menu-group-header\"\n className={cn(\n 'px-2 py-1.5 text-xs font-medium text-muted-foreground',\n className,\n )}\n {...props}\n >\n {children}\n </h3>\n );\n}\nCommandMenuGroupHeader.displayName = 'CommandMenu.GroupHeader';\n\n// ============================================\n// Shared Command Menu Body (internal)\n// ============================================\n\ninterface CommandMenuBodyProps {\n children?: React.ReactNode;\n groups: CommandMenuGroup[];\n options: CommandMenuOption[];\n onSelect?: (id: string, option: CommandMenuOption) => void;\n onClose?: () => void;\n placeholder: string;\n emptyText: string;\n emptyState?: React.ReactNode;\n showShortcut: boolean;\n shortcutText: string;\n showFooter: boolean;\n footerHints?: CommandMenuFooterHint[];\n showSettingsButton: boolean;\n onSettingsClick?: () => void;\n maxHeight: number;\n filter?: (value: string, search: string) => number;\n}\n\ninterface CommandMenuBodyContentProps {\n children?: React.ReactNode;\n groups: CommandMenuGroup[];\n options: CommandMenuOption[];\n optionRenderer: (option: CommandMenuOption) => React.ReactNode;\n}\n\ninterface CommandMenuGroupSectionProps {\n group: CommandMenuGroup;\n optionRenderer: (option: CommandMenuOption) => React.ReactNode;\n}\n\nfunction CommandMenuGroupSection({\n group,\n optionRenderer,\n}: CommandMenuGroupSectionProps) {\n const headingId = React.useId();\n\n return (\n <CommandGroup aria-labelledby={headingId} className=\"px-2 py-1\">\n <CommandMenuGroupHeader id={headingId}>\n {group.label}\n </CommandMenuGroupHeader>\n <div className=\"flex flex-col\">{group.options.map(optionRenderer)}</div>\n </CommandGroup>\n );\n}\nCommandMenuGroupSection.displayName = 'CommandMenu.GroupSection';\n\nfunction CommandMenuBodyContent({\n children,\n groups,\n options,\n optionRenderer,\n}: CommandMenuBodyContentProps) {\n if (children) return children;\n\n if (groups.length > 0) {\n return groups.map((group, index) => (\n <React.Fragment key={group.id}>\n {index > 0 && <CommandSeparator className=\"mx-0\" />}\n <CommandMenuGroupSection\n group={group}\n optionRenderer={optionRenderer}\n />\n </React.Fragment>\n ));\n }\n\n return <div className=\"flex flex-col p-2\">{options.map(optionRenderer)}</div>;\n}\n\nfunction CommandMenuBody({\n children,\n groups,\n options,\n onSelect,\n onClose,\n placeholder,\n emptyText,\n emptyState,\n showShortcut,\n shortcutText,\n showFooter,\n footerHints,\n showSettingsButton,\n onSettingsClick,\n maxHeight,\n filter,\n}: CommandMenuBodyProps) {\n const safeMaxHeight = getCommandMenuMaxHeight(maxHeight);\n const renderOption = (option: CommandMenuOption) => (\n <CommandMenuItem key={option.id} option={option} onSelect={onSelect} />\n );\n\n return (\n <Command\n filter={filter}\n className=\"rounded-none border-0 shadow-none\"\n data-slot=\"command-menu\"\n >\n <search\n aria-label=\"Command menu search\"\n className=\"block border-b border-input bg-background\"\n >\n <CommandInput\n render={({ clearSearch, value, ...inputProps }) => {\n const canClose = typeof onClose === 'function';\n const clearOrClose = () => {\n if (value) {\n clearSearch();\n return;\n }\n onClose?.();\n };\n\n return (\n <div\n data-slot=\"command-menu-input\"\n cmdk-input-wrapper=\"\"\n className=\"flex h-11 items-center gap-2 px-3\"\n >\n <Search\n className=\"size-4 shrink-0 text-muted-foreground opacity-50\"\n aria-hidden=\"true\"\n />\n <input\n {...inputProps}\n value={value}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-sm leading-5 text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n {showShortcut && (\n <CommandShortcutBadge>{shortcutText}</CommandShortcutBadge>\n )}\n <ClearButton\n size=\"icon-xs\"\n className=\"-me-1 rounded-sm p-0 opacity-50 hover:opacity-80 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4\"\n disabled={!value && !canClose}\n aria-label={\n value\n ? 'Clear search'\n : canClose\n ? 'Close command menu'\n : 'Clear search'\n }\n onClick={clearOrClose}\n />\n </div>\n );\n }}\n />\n </search>\n\n <CommandList\n style={{ maxHeight: safeMaxHeight }}\n className=\"overflow-y-auto p-0\"\n >\n <CommandEmpty className=\"py-6 text-center text-sm text-muted-foreground animate-in fade-in-0 duration-200 motion-reduce:animate-none\">\n {emptyState || emptyText}\n </CommandEmpty>\n <CommandMenuBodyContent\n groups={groups}\n options={options}\n optionRenderer={renderOption}\n >\n {children}\n </CommandMenuBodyContent>\n </CommandList>\n\n {showFooter && (\n <CommandMenuFooter\n hints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n />\n )}\n </Command>\n );\n}\nCommandMenuBody.displayName = 'CommandMenu.Body';\n\n// ============================================\n// Main Command Menu Component\n// ============================================\n\nfunction CommandMenu({\n open,\n onOpenChange,\n placeholder = DEFAULT_COMMAND_MENU_PLACEHOLDER,\n emptyText = 'No results found.',\n emptyState,\n options = [],\n groups = [],\n onSelect,\n showShortcut = false,\n shortcutText,\n showFooter = false,\n footerHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n maxHeight = DEFAULT_COMMAND_MENU_MAX_HEIGHT,\n filter,\n children,\n}: CommandMenuProps) {\n const platformShortcut = usePlatformShortcut();\n const resolvedShortcut = shortcutText ?? platformShortcut;\n\n return (\n <CommandDialog\n open={open}\n onOpenChange={onOpenChange}\n className={cn('max-w-[508px] sm:max-w-[508px]', className)}\n >\n <CommandMenuBody\n placeholder={placeholder}\n emptyText={emptyText}\n emptyState={emptyState}\n options={options}\n groups={groups}\n onSelect={onSelect}\n onClose={() => onOpenChange?.(false)}\n showShortcut={showShortcut}\n shortcutText={resolvedShortcut}\n showFooter={showFooter}\n footerHints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n maxHeight={maxHeight}\n filter={filter}\n >\n {children}\n </CommandMenuBody>\n </CommandDialog>\n );\n}\nCommandMenu.displayName = 'CommandMenu';\n\n// ============================================\n// Standalone Command Menu (non-dialog version)\n// ============================================\n\nexport interface CommandMenuPanelProps\n extends Omit<CommandMenuProps, 'open' | 'onOpenChange'> {\n /** Additional class name */\n className?: string;\n}\n\nfunction CommandMenuPanel({\n placeholder = DEFAULT_COMMAND_MENU_PLACEHOLDER,\n emptyText = 'No results found.',\n emptyState,\n options = [],\n groups = [],\n onSelect,\n showShortcut = false,\n shortcutText,\n showFooter = false,\n footerHints,\n showSettingsButton = false,\n onSettingsClick,\n className,\n maxHeight = DEFAULT_COMMAND_MENU_MAX_HEIGHT,\n filter,\n children,\n}: CommandMenuPanelProps) {\n const platformShortcut = usePlatformShortcut();\n const resolvedShortcut = shortcutText ?? platformShortcut;\n\n return (\n <div\n data-slot=\"command-menu-panel\"\n className={cn(COMMAND_MENU_SHELL_CLASS_NAME, className)}\n >\n <CommandMenuBody\n placeholder={placeholder}\n emptyText={emptyText}\n emptyState={emptyState}\n options={options}\n groups={groups}\n onSelect={onSelect}\n showShortcut={showShortcut}\n shortcutText={resolvedShortcut}\n showFooter={showFooter}\n footerHints={footerHints}\n showSettingsButton={showSettingsButton}\n onSettingsClick={onSettingsClick}\n maxHeight={maxHeight}\n filter={filter}\n >\n {children}\n </CommandMenuBody>\n </div>\n );\n}\nCommandMenuPanel.displayName = 'CommandMenu.Panel';\n\n// ============================================\n// Exports\n// ============================================\n\nexport {\n CommandMenu,\n CommandMenuFooter,\n CommandMenuGroupHeader,\n CommandMenuItem,\n CommandMenuPanel,\n CommandShortcutBadge,\n defaultFooterHints,\n FooterNavIcon,\n FooterNavText,\n};\n","/**\n * Web Component wrapper for CommandMenu\n * Custom element: <hf-command-menu>\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 { CommandMenu } from '../components/organisms/menus/CommandMenu';\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 onOpenChange: (open: boolean) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('open-change', {\n detail: open,\n bubbles: true,\n composed: true\n }));\n },\n onSelect: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('select', {\n detail: value,\n bubbles: true,\n composed: true\n }));\n },\n onSettingsClick: (value: unknown) => {\n const CustomEventConstructor =\n element.ownerDocument.defaultView?.CustomEvent ?? CustomEvent;\n element.dispatchEvent(new CustomEventConstructor('settings-click', {\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 CommandMenuWrapper(props: React.ComponentProps<typeof CommandMenu> & { _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(CommandMenu, { ...restProps, ...eventHandlers });\n}\n\n/**\n * Prop type definitions for attribute parsing\n */\nconst propTypes: PropDefs = {\n open: 'boolean',\n placeholder: 'string',\n emptyText: 'string',\n emptyState: 'json',\n options: 'json',\n groups: 'json',\n showShortcut: 'boolean',\n shortcutText: 'string',\n showFooter: 'boolean',\n footerHints: 'json',\n showSettingsButton: 'boolean',\n className: 'string',\n maxHeight: 'number',\n filter: 'json'\n};\n\nclass CommandMenuWC 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 CommandMenuWrapper,\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(CommandMenuWC.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-command-menu')) {\n customElements.define('hf-command-menu', CommandMenuWC);\n}\n\nexport { CommandMenuWC };\nexport default CommandMenuWC;\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -2907,8 +2907,8 @@ function Ai({ children: e, column: n, className: t }) {
2907
2907
  children: [e, /* @__PURE__ */ ee("span", {
2908
2908
  className: "relative size-4",
2909
2909
  children: [
2910
- /* @__PURE__ */ F(Qn, { className: M("absolute inset-0 size-4 text-text-quaternary transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none", o === "asc" ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-1") }),
2911
- /* @__PURE__ */ F(Yn, { className: M("absolute inset-0 size-4 text-text-quaternary transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none", o === "desc" ? "opacity-100 translate-y-0" : "opacity-0 translate-y-1") }),
2910
+ /* @__PURE__ */ F(Qn, { className: M("absolute inset-0 size-4 text-muted-foreground transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none", o === "asc" ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-1") }),
2911
+ /* @__PURE__ */ F(Yn, { className: M("absolute inset-0 size-4 text-muted-foreground transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none", o === "desc" ? "opacity-100 translate-y-0" : "opacity-0 translate-y-1") }),
2912
2912
  /* @__PURE__ */ F(go, { className: M("absolute inset-0 size-4 transition-opacity duration-200 ease-out motion-reduce:transition-none", o ? "opacity-0" : "opacity-100 text-muted-foreground") })
2913
2913
  ]
2914
2914
  })]
@@ -3072,7 +3072,7 @@ function Tn({ columns: e, data: n, children: t, enableRowSelection: o = !1, enab
3072
3072
  /* @__PURE__ */ F(Zn, { className: M("h-4 w-4 flex-shrink-0 transition-transform duration-200 ease-out motion-reduce:transition-none", R.getIsExpanded() && "rotate-90") }),
3073
3073
  /* @__PURE__ */ F("span", { children: ve(I.column.columnDef.cell, I.getContext()) }),
3074
3074
  /* @__PURE__ */ ee("span", {
3075
- className: "text-text-quaternary tabular-nums",
3075
+ className: "text-secondary-foreground tabular-nums",
3076
3076
  children: [
3077
3077
  "(",
3078
3078
  R.subRows.length,