@jcy2387/dsh-conversation-ui 0.1.0-rc.12

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 (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +123 -0
  3. package/README.md +123 -0
  4. package/conversation-ui-off.yml +3 -0
  5. package/cordis.patch.yml +10 -0
  6. package/lib/client.js +3672 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/index.js +302 -0
  9. package/package.json +182 -0
  10. package/src/boot-config.ts +28 -0
  11. package/src/client/AnimatedDisclosure.tsx +89 -0
  12. package/src/client/ConversationCard.module.css +253 -0
  13. package/src/client/ConversationCard.tsx +122 -0
  14. package/src/client/DeliverablesCard.module.css +187 -0
  15. package/src/client/DeliverablesCard.tsx +142 -0
  16. package/src/client/FollowHost.tsx +25 -0
  17. package/src/client/ToolActivityGroup.tsx +341 -0
  18. package/src/client/TurnPreludeUserNodeView.tsx +258 -0
  19. package/src/client/TurnProcessMember.tsx +92 -0
  20. package/src/client/TypewriterAssistantNodeView.module.css +1260 -0
  21. package/src/client/TypewriterAssistantNodeView.tsx +390 -0
  22. package/src/client/TypewriterToolNodeView.tsx +916 -0
  23. package/src/client/conversation-ui-card-controller.ts +162 -0
  24. package/src/client/conversation-ui-settings-api.ts +65 -0
  25. package/src/client/deliverables.ts +263 -0
  26. package/src/client/index.ts +242 -0
  27. package/src/client/locales.ts +74 -0
  28. package/src/client/teleprompterGlide.ts +590 -0
  29. package/src/client/turnElapsed.ts +27 -0
  30. package/src/client/turnProcessFold.ts +224 -0
  31. package/src/client/useConversationContent.ts +471 -0
  32. package/src/client/useFpsGuard.ts +84 -0
  33. package/src/config.ts +44 -0
  34. package/src/css-modules.d.ts +9 -0
  35. package/src/index.ts +2 -0
  36. package/src/package-meta.ts +39 -0
  37. package/src/plugin.ts +155 -0
  38. package/src/profile-installation.ts +121 -0
  39. package/src/settings-api.ts +33 -0
  40. package/src/settings.ts +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":["clamp","useState","useRef","useCallback","useRef","useCallback","useRef","useRef","css","notify","hash","useCallback","useSyncExternalStore","useElapsedNow","useState","css","IconChevronRightOutline14","IconChevronDownOutline14","useState","useRef","css","MarkdownText","memo","useMemo","JsonBlock","React","useCallback","useSyncExternalStore","useRef","css","IconChevronRightOutline14","IconChevronDownOutline14","createPortal","IconSearchOutline16","IconBrowseOutline16","IconEditOutline16","IconApiOutline14","IconDataOutline16","IconGlobeOutline14","IconSkillOutline16","IconAgentPresetOutline16","IconCordisPluginOutline14","IconQuestionOutline14","IconSettingsOutline16","IconChecklistOutline14","css","StateDot","useState","createPortal","nodeKey","useRef","useCallback","createElement","useState","css","IconChevronRightOutline14","IconChevronDownOutline14","createElement","useState","css","IconChevronDownOutline14","IconRefreshOutline14","createSnapshotStore","useState","css","IconProjectAddOutline16","IconGlobeOutline14","IconChevronDownOutline14","IconChevronUpOutline14","record","isAppendSurfaceEvent","SETTINGS_NS","useSyncExternalStore","createElement"],"sources":["../src/client/useConversationContent.ts","../src/client/useFpsGuard.ts","../src/client/teleprompterGlide.ts","../src/client/FollowHost.tsx","../src/config.ts","../src/client/turnProcessFold.ts","../src/client/TurnProcessMember.tsx","../src/client/turnElapsed.ts","../src/client/TypewriterAssistantNodeView.tsx","../../../node_modules/.pnpm/react-icons@5.5.0_react@18.3.1/node_modules/react-icons/lib/iconContext.mjs","../../../node_modules/.pnpm/react-icons@5.5.0_react@18.3.1/node_modules/react-icons/lib/iconBase.mjs","../../../node_modules/.pnpm/react-icons@5.5.0_react@18.3.1/node_modules/react-icons/fi/index.mjs","../src/client/ToolActivityGroup.tsx","../src/client/TypewriterToolNodeView.tsx","../src/client/TurnPreludeUserNodeView.tsx","../src/client/ConversationCard.tsx","../src/settings.ts","../src/client/conversation-ui-card-controller.ts","../src/client/DeliverablesCard.tsx","../src/client/deliverables.ts","../src/settings-api.ts","../src/client/conversation-ui-settings-api.ts","../src/client/locales.ts","../src/client/index.ts"],"sourcesContent":["/**\n * Stream-smoothing reveal hook.\n *\n * Buffers the model's chunked text and reveals it at a cadence that tracks\n * the observed arrival rate, so a long reply never dumps whole paragraphs at\n * once and a fast stream never stutters. Port of lobe-ui's smoother: EMA\n * arrival cps + chunk size, backlog pressure, commit-interval widening with\n * tail length, and a flush-speed settle drain once the input idles. The\n * reveal decision is the pure {@link computeRevealStep} for unit tests.\n *\n * `shouldHoldBack` is the performance guard's veto: while it returns true the\n * loop keeps measuring but skips the DOM commit, so an offscreen reply never\n * competes with visible frames when the frame rate is degraded.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type ConversationSmoothingPreset = 'realtime' | 'balanced' | 'silky'\n\nexport interface ConversationSmoothingPresetConfig {\n readonly activeInputWindowMs: number\n readonly defaultCps: number\n readonly emaAlpha: number\n readonly flushCps: number\n readonly largeAppendChars: number\n readonly maxActiveCps: number\n readonly maxCps: number\n readonly maxFlushCps: number\n readonly minCommitIntervalMs: number\n readonly minCps: number\n readonly settleAfterMs: number\n readonly settleDrainMaxMs: number\n readonly settleDrainMinMs: number\n readonly targetBufferMs: number\n}\n\nexport const PRESET_CONFIG: Record<ConversationSmoothingPreset, ConversationSmoothingPresetConfig> = {\n balanced: {\n activeInputWindowMs: 220,\n defaultCps: 80,\n emaAlpha: 0.35,\n flushCps: 180,\n largeAppendChars: 120,\n maxActiveCps: 360,\n maxCps: 240,\n maxFlushCps: 480,\n minCommitIntervalMs: 16,\n minCps: 24,\n settleAfterMs: 280,\n settleDrainMaxMs: 420,\n settleDrainMinMs: 120,\n targetBufferMs: 40,\n },\n realtime: {\n activeInputWindowMs: 140,\n defaultCps: 120,\n emaAlpha: 0.45,\n flushCps: 240,\n largeAppendChars: 180,\n maxActiveCps: 480,\n maxCps: 320,\n maxFlushCps: 640,\n minCommitIntervalMs: 16,\n minCps: 32,\n settleAfterMs: 200,\n settleDrainMaxMs: 280,\n settleDrainMinMs: 100,\n targetBufferMs: 24,\n },\n silky: {\n activeInputWindowMs: 280,\n defaultCps: 64,\n emaAlpha: 0.28,\n flushCps: 140,\n largeAppendChars: 100,\n maxActiveCps: 280,\n maxCps: 180,\n maxFlushCps: 400,\n minCommitIntervalMs: 16,\n minCps: 20,\n settleAfterMs: 360,\n settleDrainMaxMs: 520,\n settleDrainMinMs: 160,\n targetBufferMs: 56,\n },\n}\n\nconst MAX_COMMIT_INTERVAL_MS = 16\n/** Demo queue divisor: each frame reveals about `backlog / 8` characters. */\nexport const QUEUE_REVEAL_DIVISOR = 8\nconst QUEUE_FRAME_MS = 16.67\n/** Hard cap on how far display may trail a live stream, in characters. */\nexport const LIVE_LAG_CHAR_CEILING = 32\nconst CATCHUP_SECONDS = 0.15\n\nexport const clamp = (value: number, min: number, max: number): number => {\n return Math.min(max, Math.max(min, value))\n}\n\n/**\n * Demo per-frame reveal: drain `backlog / 8` characters, at least 1, scaled\n * by frame time. A small queue types one glyph per frame; a burst raises the\n * step so the display does not fall behind.\n * @param backlog - Unrevealed characters.\n * @param dtMs - Frame delta in ms.\n * @returns Characters to reveal this frame.\n */\nexport function computeQueueReveal(backlog: number, dtMs: number): number {\n if (backlog <= 0 || dtMs <= 0) return 0\n return Math.min(backlog, Math.max(1, Math.ceil((backlog / QUEUE_REVEAL_DIVISOR) * (dtMs / QUEUE_FRAME_MS))))\n}\n\nconst graphemeSegmenter = typeof Intl.Segmenter === 'function'\n ? new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n : undefined\n\n/** Split text into user-perceived characters without tearing emoji or combining marks. */\nexport function splitGraphemes(text: string): string[] {\n if (graphemeSegmenter === undefined) return [...text]\n return [...graphemeSegmenter.segment(text)].map(item => item.segment)\n}\n\n/** Counts user-perceived characters, not UTF-16 units or Unicode code points. */\nexport const countChars = (text: string): number => splitGraphemes(text).length\n\n/**\n * Drain rate for backlog beyond the tail-lag ceiling: the displayed text may\n * trail the stream by at most `backlogCharCeiling` characters for at most\n * `backlogSecondCeiling` seconds. The constants are a smoothness invariant\n * (bounded lag is the reason the reveal never stalls mid-reply), so they are\n * not config fields; the preset multiplier is how a deployment tunes them.\n */\nexport const BACKLOG_CHAR_CEILING = 300\nexport const BACKLOG_SECOND_CEILING = 2\n\nexport interface SettleDrainInput {\n readonly backlog: number\n readonly inputActive: boolean\n readonly settling: boolean\n}\n\n/** Pure settle-drain decision shared by the frame loop and its tests. */\nexport function computeSettleDrain(config: ConversationSmoothingPresetConfig, input: SettleDrainInput): number {\n if (input.inputActive || !input.settling) return 0\n // A settled stream must drain fast enough to finish the reply promptly:\n // lag beyond the ceiling drains within the second ceiling.\n const overflow = Math.max(0, input.backlog - BACKLOG_CHAR_CEILING)\n const overflowCps = (overflow * 1000) / BACKLOG_SECOND_CEILING\n const drainTargetMs = clamp(input.backlog * 8, config.settleDrainMinMs, config.settleDrainMaxMs)\n const settleCps = (input.backlog * 1000) / drainTargetMs\n return clamp(Math.max(settleCps, overflowCps), config.flushCps, config.maxFlushCps)\n}\n\n/**\n * Drain rate multiplier once the input ends: leftover backlog reveals at\n * this multiple of the steady rate, so the end never drags.\n */\nexport const SETTLE_DRAIN_MULTIPLIER = 1.8\n\nexport interface RevealStepInput {\n readonly backlog: number\n readonly chunkSizeEma: number\n readonly arrivalCpsEma: number\n readonly emaCps: number\n readonly inputActive: boolean\n readonly settling: boolean\n /** Fixed reveal rate; overrides the arrival-tracking cadence entirely. */\n readonly steadyCps?: number | undefined\n}\n\nexport interface RevealStepResult {\n readonly revealChars: number\n readonly targetLagChars: number\n}\n\n/** Pure per-frame reveal decision shared by the loop and its tests. */\nexport function computeRevealStep(config: ConversationSmoothingPresetConfig, input: RevealStepInput, dtSeconds: number): RevealStepResult {\n // Track the faster of the two EMAs and do not clamp to the old low maxCps\n // ceiling — that cap is why a fast model left hundreds of chars unrevealed.\n const trackedCps = Math.max(input.emaCps, input.arrivalCpsEma)\n const baseCps = clamp(trackedCps, config.minCps, config.maxFlushCps)\n const targetLagChars = input.inputActive\n ? Math.max(2, Math.round((baseCps * config.targetBufferMs) / 1000))\n : 0\n\n let currentCps: number\n if (input.steadyCps !== undefined) {\n currentCps = input.inputActive || input.settling\n ? clamp(\n input.steadyCps * (input.inputActive ? 1 : SETTLE_DRAIN_MULTIPLIER),\n config.minCps,\n config.maxFlushCps,\n )\n : 0\n } else if (input.inputActive) {\n const overflow = Math.max(0, input.backlog - LIVE_LAG_CHAR_CEILING)\n const catchup = overflow > 0 ? overflow / CATCHUP_SECONDS : 0\n currentCps = clamp(baseCps * 1.08 + catchup, config.minCps, config.maxFlushCps)\n } else if (input.settling) {\n currentCps = computeSettleDrain(config, input)\n } else {\n const idleFlushCps = Math.max(config.flushCps, baseCps * 1.8, input.arrivalCpsEma * 0.8)\n currentCps = clamp(idleFlushCps, config.flushCps, config.maxFlushCps)\n }\n\n const minRevealChars = input.inputActive ? 1 : 2\n return { revealChars: Math.max(minRevealChars, Math.round(currentCps * dtSeconds)), targetLagChars }\n}\n\nexport interface UseConversationContentOptions {\n enabled?: boolean\n preset?: ConversationSmoothingPreset\n /** Performance guard veto: while true, reveal commits are held back. */\n shouldHoldBack?: (() => boolean) | undefined\n /**\n * Fixed reveal rate in chars/s. When set, the reveal runs at this steady\n * pace while the input streams (instead of tracking the arrival rate) and\n * drains the leftover backlog at {@link SETTLE_DRAIN_MULTIPLIER} once the\n * input ends.\n */\n steadyCps?: number | undefined\n /**\n * Seed for the arrival-rate EMA. When omitted, the preset's `defaultCps`\n * is used. The live rate then tracks observed arrival; this is not a cap.\n */\n defaultCps?: number | undefined\n /** Written each commit with the live arrival-rate EMA for the follow lerp. */\n speedCpsRef?: { current: number } | undefined\n}\n\n/**\n * Smooth a chunked content stream into a reveal-paced display string.\n *\n * @param content - The full accumulated input so far.\n * @param options - Preset, guard, and steady-rate wiring.\n * @returns The displayed content, revealed at the smoothed cadence.\n */\nexport function useConversationContent(\n content: string,\n { enabled = true, preset = 'balanced', shouldHoldBack, steadyCps, defaultCps, speedCpsRef }: UseConversationContentOptions = {},\n): string {\n const config = PRESET_CONFIG[preset]\n const seedCps = defaultCps ?? config.defaultCps\n const [displayedContent, setDisplayedContent] = useState(content)\n\n const displayedContentRef = useRef(content)\n const displayedCountRef = useRef(countChars(content))\n const targetContentRef = useRef(content)\n const targetCharsRef = useRef(splitGraphemes(content))\n const targetCountRef = useRef(countChars(content))\n\n const emaCpsRef = useRef(seedCps)\n const lastInputTsRef = useRef(0)\n const lastInputCountRef = useRef(countChars(content))\n const chunkSizeEmaRef = useRef(1)\n const arrivalCpsEmaRef = useRef(seedCps)\n\n const rafRef = useRef<number | null>(null)\n const lastFrameTsRef = useRef<number | null>(null)\n const wakeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const holdBackRef = useRef(shouldHoldBack)\n const speedOutRef = useRef(speedCpsRef)\n speedOutRef.current = speedCpsRef\n\n useEffect(() => {\n holdBackRef.current = shouldHoldBack\n }, [shouldHoldBack])\n\n const clearWakeTimer = useCallback(() => {\n if (wakeTimerRef.current !== null) {\n clearTimeout(wakeTimerRef.current)\n wakeTimerRef.current = null\n }\n }, [])\n\n const stopFrameLoop = useCallback(() => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n lastFrameTsRef.current = null\n }, [])\n\n const stopScheduling = useCallback(() => {\n stopFrameLoop()\n clearWakeTimer()\n }, [clearWakeTimer, stopFrameLoop])\n\n const startFrameLoopRef = useRef<() => void>(() => {})\n\n const scheduleFrameWake = useCallback(\n (delayMs: number) => {\n clearWakeTimer()\n wakeTimerRef.current = setTimeout(\n () => {\n wakeTimerRef.current = null\n startFrameLoopRef.current()\n },\n Math.max(1, Math.ceil(delayMs)),\n )\n },\n [clearWakeTimer],\n )\n\n const syncImmediate = useCallback(\n (nextContent: string) => {\n stopScheduling()\n const chars = splitGraphemes(nextContent)\n const now = performance.now()\n targetContentRef.current = nextContent\n targetCharsRef.current = chars\n targetCountRef.current = chars.length\n displayedContentRef.current = nextContent\n displayedCountRef.current = chars.length\n setDisplayedContent(nextContent)\n emaCpsRef.current = seedCps\n chunkSizeEmaRef.current = 1\n arrivalCpsEmaRef.current = seedCps\n lastInputTsRef.current = now\n lastInputCountRef.current = chars.length\n },\n [seedCps, stopScheduling],\n )\n\n const startFrameLoop = useCallback(() => {\n clearWakeTimer()\n if (rafRef.current !== null) return\n\n const tick = () => {\n const targetCount = targetCountRef.current\n const displayedCount = displayedCountRef.current\n const backlog = targetCount - displayedCount\n\n if (backlog <= 0) {\n stopFrameLoop()\n return\n }\n\n const now = performance.now()\n if (lastFrameTsRef.current === null) {\n lastFrameTsRef.current = now\n rafRef.current = requestAnimationFrame(tick)\n return\n }\n\n const commitIntervalMs = Math.min(MAX_COMMIT_INTERVAL_MS, config.minCommitIntervalMs)\n const frameIntervalMs = Math.max(0, now - lastFrameTsRef.current)\n if (frameIntervalMs < commitIntervalMs) {\n rafRef.current = requestAnimationFrame(tick)\n return\n }\n\n const dtSeconds = Math.max(0.001, Math.min(frameIntervalMs / 1000, 0.12))\n lastFrameTsRef.current = now\n\n const idleMs = now - lastInputTsRef.current\n const inputActive = idleMs <= config.activeInputWindowMs\n const settling = !inputActive && idleMs >= config.settleAfterMs\n\n let revealChars: number\n if (steadyCps !== undefined) {\n const step = computeRevealStep(\n config,\n {\n backlog,\n chunkSizeEma: chunkSizeEmaRef.current,\n arrivalCpsEma: arrivalCpsEmaRef.current,\n emaCps: emaCpsRef.current,\n inputActive,\n settling,\n steadyCps,\n },\n dtSeconds,\n )\n revealChars = Math.min(step.revealChars, backlog)\n } else {\n // Same rAF queue drain as the silky markdown demo.\n revealChars = computeQueueReveal(backlog, frameIntervalMs)\n }\n\n // Performance guard: while degraded and the reply is offscreen, skip\n // the DOM commit — the backlog keeps accumulating and flushes when the\n // guard clears or the reply scrolls into view.\n if (holdBackRef.current?.() === true) {\n rafRef.current = requestAnimationFrame(tick)\n return\n }\n\n const speedOut = speedOutRef.current\n if (speedOut !== undefined && frameIntervalMs > 0) {\n const instantCps = (revealChars * 1000) / frameIntervalMs\n speedOut.current = speedOut.current * 0.92 + instantCps * 0.08\n }\n\n const nextCount = displayedCount + revealChars\n const segment = targetCharsRef.current.slice(displayedCount, nextCount).join('')\n if (segment) {\n const nextDisplayed = displayedContentRef.current + segment\n displayedContentRef.current = nextDisplayed\n displayedCountRef.current = nextCount\n setDisplayedContent(nextDisplayed)\n } else {\n displayedContentRef.current = targetContentRef.current\n displayedCountRef.current = targetCount\n setDisplayedContent(targetContentRef.current)\n }\n\n rafRef.current = requestAnimationFrame(tick)\n }\n\n rafRef.current = requestAnimationFrame(tick)\n }, [config, scheduleFrameWake, stopFrameLoop, clearWakeTimer, steadyCps])\n\n useEffect(() => {\n startFrameLoopRef.current = startFrameLoop\n }, [startFrameLoop])\n\n useEffect(() => {\n if (!enabled) {\n syncImmediate(content)\n return\n }\n\n const prevTargetContent = targetContentRef.current\n if (content === prevTargetContent) return\n\n const now = performance.now()\n const appendOnly = content.startsWith(prevTargetContent)\n\n if (!appendOnly) {\n syncImmediate(content)\n return\n }\n\n const appended = content.slice(prevTargetContent.length)\n const appendedChars = splitGraphemes(appended)\n const appendedCount = appendedChars.length\n\n targetContentRef.current = content\n targetCharsRef.current.push(...appendedChars)\n targetCountRef.current += appendedCount\n\n const hadSample = lastInputTsRef.current > 0\n const deltaChars = targetCountRef.current - lastInputCountRef.current\n const deltaMs = Math.max(1, now - lastInputTsRef.current)\n\n // Skip the first sample: lastInputTs starts at 0, so the interval would\n // be \"time since page load\" (or 1ms under fake timers) and poison the EMA.\n if (hadSample && deltaChars > 0) {\n const instantCps = (deltaChars * 1000) / deltaMs\n const normalizedInstantCps = clamp(instantCps, config.minCps, config.maxFlushCps * 3)\n const chunkEmaAlpha = 0.45\n chunkSizeEmaRef.current = chunkSizeEmaRef.current * (1 - chunkEmaAlpha) + appendedCount * chunkEmaAlpha\n arrivalCpsEmaRef.current = arrivalCpsEmaRef.current * (1 - chunkEmaAlpha) + normalizedInstantCps * chunkEmaAlpha\n emaCpsRef.current = emaCpsRef.current * (1 - config.emaAlpha) + normalizedInstantCps * config.emaAlpha\n }\n\n lastInputTsRef.current = now\n lastInputCountRef.current = targetCountRef.current\n\n startFrameLoop()\n }, [content, enabled, config, startFrameLoop, syncImmediate])\n\n useEffect(() => {\n return () => {\n stopScheduling()\n }\n }, [stopScheduling])\n\n return displayedContent\n}\n","/**\n * Performance guard for the streaming reveal.\n *\n * Feeds an EMA-smoothed frame-rate monitor from a rAF loop while streaming\n * and tracks whether the reply is on-screen. The returned `shouldHoldBack`\n * predicate is true only while the frame rate is below the threshold AND the\n * reply is offscreen — exactly the spec's \"skip offscreen DOM updates when\n * FPS < 30\" rule. The smoother consumes the predicate as its commit veto.\n */\n\nimport { useCallback, useEffect, useRef } from 'react'\n\nconst FPS_THRESHOLD = 30\nconst FPS_ALPHA = 0.12\nconst RECOVER_FRAMES = 6\nconst MAX_FRAME_MS = 100\n\ninterface MutableFps {\n emaMs: number\n lastMs: number\n healthyRun: number\n degraded: boolean\n}\n\nexport function useFpsGuard(active: boolean): {\n ref: (element: HTMLElement | null) => void\n shouldHoldBack: () => boolean\n} {\n const fpsRef = useRef<MutableFps>({ emaMs: 0, lastMs: 0, healthyRun: 0, degraded: false })\n const visibleRef = useRef(true)\n const elementRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!active) return\n let rafId = 0\n const frame = (now: number) => {\n rafId = requestAnimationFrame(frame)\n const fps = fpsRef.current\n if (fps.lastMs === 0) {\n fps.lastMs = now\n return\n }\n const delta = Math.min(MAX_FRAME_MS, Math.max(1, now - fps.lastMs))\n fps.lastMs = now\n fps.emaMs = fps.emaMs === 0 ? delta : fps.emaMs + FPS_ALPHA * (delta - fps.emaMs)\n const currentFps = 1000 / fps.emaMs\n if (currentFps < FPS_THRESHOLD) {\n fps.healthyRun = 0\n fps.degraded = true\n } else if (fps.degraded) {\n fps.healthyRun += 1\n if (fps.healthyRun >= RECOVER_FRAMES) fps.degraded = false\n }\n }\n rafId = requestAnimationFrame(frame)\n return () => {\n cancelAnimationFrame(rafId)\n fpsRef.current = { emaMs: 0, lastMs: 0, healthyRun: 0, degraded: false }\n }\n }, [active])\n\n const ref = useCallback((element: HTMLElement | null) => {\n elementRef.current = element\n }, [])\n\n useEffect(() => {\n const element = elementRef.current\n if (element === null || typeof IntersectionObserver === 'undefined') return\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) visibleRef.current = entry.isIntersecting\n },\n { rootMargin: '120px 0px' },\n )\n observer.observe(element)\n return () => observer.disconnect()\n })\n\n const shouldHoldBack = useCallback(() => {\n return active && fpsRef.current.degraded && !visibleRef.current\n }, [active])\n\n return { ref, shouldHoldBack }\n}\n","/**\n * Conversation-port follow while an assistant reply streams.\n *\n * The demo's damped-spring lerp is driven from a float `animatedH` — the\n * smoothed content height — never from the rounded `scrollTop` the browser\n * reports back. A wrap raises the content height by a line; if the engine\n * were allowed to snap `scrollTop` to the new floor, the previous line would\n * hop up in one frame. This overlay:\n *\n * - exposes its current follow write through `data-follow-owned` for styling,\n * diagnostics, and same-port coordination;\n * - sets `overflow-anchor: none` so CSS scroll-anchoring does not snap;\n * - restores `animatedH` in a ResizeObserver (before paint) so a layout\n * pass cannot flash a snapped frame;\n * - while the port has scroll room, writes the interpolated lag as\n * `translate3d` on `[data-chat-transcript]` (message rows only), so the\n * turn-status chrome stays pinned at the floor;\n * - before the port has scroll room (content shorter than the viewport), the\n * same lag is a content-height lag written as a negative translate on\n * `[data-chat-turn-status]`, so the status label descends smoothly with\n * each wrap instead of hopping a line at a time.\n *\n * A reader gesture that unpins the port first writes the effective visual top\n * (`engine - lag`) into `scrollTop` before clearing the transform, so that\n * frame stays continuous. Lifecycle teardown may retain the last same-geometry\n * visual snapshot for a small-lag close, but never derives a new handback from\n * stale `animatedH`: a changed geometry or near-top snapshot in a long Session\n * settles at the physical floor. Port migration does not rewrite the old port.\n * These guards prevent a newer `scrollHeight` from turning old lag into\n * `scrollTop = 0` and manufacturing reader intent in ChatView's ledger.\n *\n * Unpin is a real gesture (wheel / touch / pointer / key) that leaves the\n * floor; a `scrollTop` delta from our own write must not release the pin.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react'\n\n/**\n * Plugin-local marker containing the last programmatic `scrollTop`. DSH rc.6\n * and rc.7 do not consume this attribute; the actual write ownership is\n * enforced by {@link followDrivers} and {@link followOwners} below.\n */\nconst FOLLOW_OWNED_ATTR = 'data-follow-owned'\n\n/** Demo `1 - exp(-dt / 18)` time constant, in ms. */\nexport const FOLLOW_LERP_DT_MS = 18\n\n/** Floor / ceiling of the per-frame lerp fraction before the dt term. */\nexport const FOLLOW_LERP_MIN = 0.05\nexport const FOLLOW_LERP_MAX = 0.25\n\n/** Lag (px) at which the lag term of the lerp saturates. */\nexport const FOLLOW_LERP_LAG_REF_PX = 160\n\n/** Reveal cps at which the speed factor is 1. */\nexport const FOLLOW_SPEED_REF_CPS = 35\n\nexport const FOLLOW_SPEED_FACTOR_MIN = 0.7\nexport const FOLLOW_SPEED_FACTOR_MAX = 2.2\n\n/** Reader-return / still-pinned boundary, matching ChatView + the demo. */\nexport const FOLLOW_SLACK_PX = 25\n\n/**\n * Upward wheel/touch distance that releases the pin. The engine `scrollTop`\n * is held on the floor while following, so a small trackpad tick never\n * appears as `reportedLag` and cannot be judged against {@link FOLLOW_SLACK_PX}.\n */\nexport const FOLLOW_UNPIN_GESTURE_PX = 8\n\n/** How long a gesture keeps `isUserInteracting` so the next scroll can unpin. */\nexport const FOLLOW_GESTURE_MS = 800\n\nconst GESTURE_EVENTS = ['wheel', 'touchmove', 'pointerdown', 'keydown'] as const\n\nexport interface FollowGlideInput {\n /** How far the interpolated top trails the floor, in px. */\n readonly lag: number\n /** Observed reveal rate in chars/s; 0 uses {@link FOLLOW_SPEED_REF_CPS}. */\n readonly speedEma: number\n /** Optional minimum visual follow speed from plugin configuration. */\n readonly minSpeedPxPerSec?: number | undefined\n /** Optional maximum visual follow speed from plugin configuration. */\n readonly maxSpeedPxPerSec?: number | undefined\n}\n\nexport interface FollowGlideStep {\n /** Pixels to advance `animatedH` this frame (fractional). */\n readonly advancePx: number\n /** Applied lerp fraction, for tests. */\n readonly lerpStep: number\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\n/**\n * One spring-lerp frame from the silky markdown demo.\n * @param dtMs - Frame delta in ms.\n * @param input - Current lag (from the float top, not the rounded engine top) and reveal-speed EMA.\n * @returns The fractional advance and the lerp fraction.\n */\nexport function computeFollowStep(dtMs: number, input: FollowGlideInput): FollowGlideStep {\n if (input.lag <= 0.1 || dtMs <= 0) return { advancePx: 0, lerpStep: 0 }\n const speed = input.speedEma > 0 ? input.speedEma : FOLLOW_SPEED_REF_CPS\n const speedFactor = clamp(speed / FOLLOW_SPEED_REF_CPS, FOLLOW_SPEED_FACTOR_MIN, FOLLOW_SPEED_FACTOR_MAX)\n const baseLerp = clamp((input.lag / FOLLOW_LERP_LAG_REF_PX) * speedFactor, FOLLOW_LERP_MIN, FOLLOW_LERP_MAX)\n const lerpStep = baseLerp * (1 - Math.exp(-dtMs / FOLLOW_LERP_DT_MS))\n const desired = input.lag * lerpStep\n const minAdvance = Math.max(0, input.minSpeedPxPerSec ?? 0) * dtMs / 1000\n const maxAdvance = Math.max(0, input.maxSpeedPxPerSec ?? Number.POSITIVE_INFINITY) * dtMs / 1000\n const upper = Math.min(input.lag, maxAdvance)\n const lower = Math.min(upper, minAdvance)\n return { advancePx: clamp(desired, lower, upper), lerpStep }\n}\n\n/** The message-rows box the lag transform rides on, when the host has one. */\nfunction shiftRootOf(port: HTMLElement): HTMLElement | null {\n return port.querySelector('[data-chat-transcript]')\n}\n\n/**\n * Row wrappers that carry only messages/tools. Hosts without a transcript\n * box keep the turn-status chrome as a sibling of the rows inside\n * `[data-chat-flow]`, so shifting that whole flow would drag the chrome\n * along; shifting the rows individually leaves every non-message sibling\n * (turn status, steering bubbles) pinned while the text glides.\n *\n * Only the outermost rows are shifted: a tool call nests its subcalls as\n * descendant `[data-chat-anchor-key]` rows, and writing the lag on each of\n * them would double (or further multiply) the shift, tearing the subcalls\n * away from their parent every frame. Descendants ride the parent's\n * transform instead.\n */\nfunction shiftRowsOf(port: HTMLElement): HTMLElement[] {\n return [...port.querySelectorAll<HTMLElement>('[data-chat-anchor-key]')]\n .filter(row => row.parentElement?.closest('[data-chat-anchor-key]') === null)\n}\n\n/** Element whose resize signals flow growth for the before-paint restore. */\nfunction resizeProxyOf(port: HTMLElement): HTMLElement | null {\n return port.querySelector('[data-chat-transcript]') ?? port.querySelector('[data-chat-flow]')\n}\n\n/** True when the glide expresses its lag as transforms instead of engine top. */\nfunction hasShiftSurface(port: HTMLElement): boolean {\n return shiftRootOf(port) !== null || shiftRowsOf(port).length > 0\n}\n\nfunction setShift(element: HTMLElement, px: number, negative = false): void {\n const value = negative ? -px : px\n if (Math.abs(value) > 0.01) {\n element.style.transform = `translate3d(0, ${value}px, 0)`\n element.style.willChange = 'transform'\n } else {\n element.style.transform = ''\n element.style.willChange = ''\n }\n}\n\n/**\n * The running-turn label. Before the port scrolls (content shorter than the\n * viewport) the content-height lag has no `scrollTop` room to ride, so it is\n * expressed as a negative translate on this sibling: the label descends\n * smoothly with each wrap instead of hopping down a line at a time.\n */\nfunction chromeShiftOf(port: HTMLElement): HTMLElement | null {\n return port.querySelector<HTMLElement>('[data-chat-turn-status]')\n}\n\n/**\n * Render the single smoothed extent `animatedH`. Before the port scrolls\n * (content shorter than the viewport) `animatedH` is clamped to the content\n * height and the content-height lag rides a negative translate on the\n * turn-status label; once the port has scroll room the engine is pinned at\n * the floor and the lag rides `[data-chat-transcript]` (or each message row\n * when the host has no transcript box) so the chrome stays put. Without any\n * shift surface the engine itself carries the interpolated top. Returns the\n * effective visual top produced by the same geometry write.\n */\nfunction applyVisual(port: HTMLElement, animatedH: number): number {\n const contentHeight = Math.max(0, port.scrollHeight)\n const floor = Math.max(0, contentHeight - port.clientHeight)\n const extent = Math.min(contentHeight, Math.max(0, animatedH))\n const lag = contentHeight - extent\n port.style.overflowAnchor = 'none'\n port.style.scrollBehavior = 'auto'\n const shiftRoot = shiftRootOf(port)\n if (shiftRoot !== null) {\n if (floor <= 0) {\n port.scrollTop = 0\n port.setAttribute(FOLLOW_OWNED_ATTR, String(port.scrollTop))\n const chrome = chromeShiftOf(port)\n if (chrome !== null) setShift(chrome, lag, true)\n setShift(shiftRoot, 0)\n return port.scrollTop\n }\n port.scrollTop = floor\n port.setAttribute(FOLLOW_OWNED_ATTR, String(port.scrollTop))\n setShift(shiftRoot, lag)\n return Math.min(floor, Math.max(0, port.scrollTop - lag))\n }\n const rows = shiftRowsOf(port)\n if (rows.length > 0) {\n if (floor <= 0) {\n port.scrollTop = 0\n port.setAttribute(FOLLOW_OWNED_ATTR, String(port.scrollTop))\n const chrome = chromeShiftOf(port)\n if (chrome !== null) setShift(chrome, lag, true)\n for (const row of rows) setShift(row, 0)\n return port.scrollTop\n }\n port.scrollTop = floor\n port.setAttribute(FOLLOW_OWNED_ATTR, String(port.scrollTop))\n for (const row of rows) setShift(row, lag)\n return Math.min(floor, Math.max(0, port.scrollTop - lag))\n }\n port.scrollTop = Math.min(floor, Math.max(0, extent))\n port.setAttribute(FOLLOW_OWNED_ATTR, String(port.scrollTop))\n return port.scrollTop\n}\n\nfunction clearVisual(port: HTMLElement): void {\n port.removeAttribute(FOLLOW_OWNED_ATTR)\n port.style.overflowAnchor = ''\n port.style.scrollBehavior = ''\n const shiftRoot = shiftRootOf(port)\n if (shiftRoot !== null) {\n shiftRoot.style.transform = ''\n shiftRoot.style.willChange = ''\n } else {\n for (const row of shiftRowsOf(port)) {\n row.style.transform = ''\n row.style.willChange = ''\n }\n }\n const chrome = chromeShiftOf(port)\n if (chrome !== null) {\n chrome.style.transform = ''\n chrome.style.willChange = ''\n }\n}\n\ninterface FollowVisualSnapshot {\n readonly scrollHeight: number\n readonly clientHeight: number\n readonly top: number\n}\n\n/** Active visual holders per port, normally zero or the elected driver. */\nconst followOwners = new WeakMap<HTMLElement, number>()\n\n/** Bound active FollowHosts, including loops that did not win the driver token. */\nconst followParticipants = new WeakMap<HTMLElement, number>()\n\n/** Safe final snapshot retained while a driver token is changing hands. */\nconst pendingHandoffs = new WeakMap<HTMLElement, FollowVisualSnapshot>()\n\n/**\n * Only one animation loop may write a conversation port at a time. Multiple\n * active FollowHosts can exist during a streamed turn (for example, the\n * assistant body and a tool row); independent loops would fight over\n * scrollTop and transforms and make the transcript jump.\n */\nconst followDrivers = new WeakMap<HTMLElement, symbol>()\n\nfunction acquireFollow(port: HTMLElement): void {\n followOwners.set(port, (followOwners.get(port) ?? 0) + 1)\n}\n\nfunction releaseFollow(port: HTMLElement): number {\n const next = (followOwners.get(port) ?? 1) - 1\n if (next <= 0) {\n followOwners.delete(port)\n return 0\n }\n followOwners.set(port, next)\n return next\n}\n\nfunction acquireParticipant(port: HTMLElement): void {\n followParticipants.set(port, (followParticipants.get(port) ?? 0) + 1)\n}\n\nfunction releaseParticipant(port: HTMLElement): number {\n const next = (followParticipants.get(port) ?? 1) - 1\n if (next <= 0) {\n followParticipants.delete(port)\n return 0\n }\n followParticipants.set(port, next)\n return next\n}\n\n/**\n * Own the conversation scrollport's bottom-follow while `active` is true.\n *\n * @param rootRef - An element inside the conversation scrollport.\n * @param active - True while the reply is still revealing.\n * @param speedCpsRef - Live reveal-rate EMA from the smoother.\n */\nexport function useConversationFollow(\n rootRef: RefObject<HTMLElement | null>,\n active: boolean,\n speedCpsRef: { current: number },\n minSpeedPxPerSec?: number,\n maxSpeedPxPerSec?: number,\n): void {\n const activeRef = useRef(active)\n useEffect(() => {\n activeRef.current = active\n }, [active])\n\n useEffect(() => {\n if (!active) return\n const driverToken = Symbol('conversation-follow')\n let rafId = 0\n let last = performance.now()\n let following = true\n let primed = false\n let animatedH = 0\n let interacting = false\n let interactTimer: ReturnType<typeof setTimeout> | null = null\n let port: HTMLElement | null = null\n let resize: ResizeObserver | null = null\n let holding: HTMLElement | null = null\n let awayPx = 0\n let readerIntent = false\n let lastVisual: FollowVisualSnapshot | null = null\n\n const hold = (next: HTMLElement): void => {\n if (holding === next) return\n if (holding !== null) {\n const previous = holding\n const remaining = releaseFollow(previous)\n if (remaining === 0) clearVisual(previous)\n }\n acquireFollow(next)\n holding = next\n }\n\n const drop = (next: HTMLElement): void => {\n if (holding !== next) return\n const remaining = releaseFollow(next)\n holding = null\n if (remaining === 0) clearVisual(next)\n }\n\n /**\n * Give the reader the visual position the glide was showing before the\n * transforms go away. While transforms carry the lag, the engine sits at\n * the floor and the effective visual top is `engine - lag`; writing that\n * keeps the handover frame-continuous, and the write shows up in\n * ChatView's ledger as reader movement, disarming its snap-follow.\n * Without a shift surface the engine already holds the interpolated top,\n * so there is nothing to compensate.\n */\n const handBackVisual = (next: HTMLElement): void => {\n if (!hasShiftSurface(next)) return\n const floor = Math.max(0, next.scrollHeight - next.clientHeight)\n if (floor <= 0) return\n const lag = Math.max(0, next.scrollHeight - animatedH)\n next.scrollTop = Math.min(floor, Math.max(0, next.scrollTop - lag))\n }\n\n const applyCurrentVisual = (next: HTMLElement): void => {\n const top = applyVisual(next, animatedH)\n lastVisual = {\n scrollHeight: next.scrollHeight,\n clientHeight: next.clientHeight,\n top,\n }\n }\n\n const markGesture = (event: Event): void => {\n interacting = true\n if (event instanceof WheelEvent && event.deltaY < 0) {\n readerIntent = true\n awayPx += -event.deltaY\n } else if (event.type === 'touchmove' || event.type === 'pointerdown' || event.type === 'keydown') {\n // Record intent synchronously: the stream may settle before the next\n // animation frame gets a chance to release follow.\n readerIntent = true\n awayPx += FOLLOW_UNPIN_GESTURE_PX\n }\n if (readerIntent && port !== null) pendingHandoffs.delete(port)\n if (interactTimer !== null) clearTimeout(interactTimer)\n interactTimer = setTimeout(() => {\n interacting = false\n interactTimer = null\n awayPx = 0\n }, FOLLOW_GESTURE_MS)\n }\n\n const restoreBeforePaint = (): void => {\n if (\n !primed\n || !following\n || port === null\n || holding !== port\n || followDrivers.get(port) !== driverToken\n ) return\n applyCurrentVisual(port)\n }\n\n const bindPort = (next: HTMLElement): void => {\n if (port === next) return\n if (port !== null) {\n const previous = port\n const drovePrevious = followDrivers.get(previous) === driverToken\n for (const name of GESTURE_EVENTS) previous.removeEventListener(name, markGesture)\n resize?.disconnect()\n resize = null\n if (holding === previous) {\n const remaining = releaseFollow(previous)\n holding = null\n if (remaining === 0) clearVisual(previous)\n }\n releaseParticipant(previous)\n if (drovePrevious) followDrivers.delete(previous)\n primed = false\n following = true\n animatedH = 0\n awayPx = 0\n readerIntent = false\n lastVisual = null\n }\n port = next\n acquireParticipant(next)\n for (const name of GESTURE_EVENTS) {\n port.addEventListener(name, markGesture, { passive: true })\n }\n if (typeof ResizeObserver !== 'undefined') {\n resize = new ResizeObserver(restoreBeforePaint)\n resize.observe(port)\n const proxy = resizeProxyOf(port)\n if (proxy !== null) resize.observe(proxy)\n }\n }\n\n const frame = (now: number) => {\n rafId = requestAnimationFrame(frame)\n const dt = Math.min(50, now - last)\n last = now\n const root = rootRef.current\n if (root === null) return\n const nextPort = root.closest<HTMLElement>('[data-conversation-scroll]')\n if (nextPort === null) return\n bindPort(nextPort)\n const owner = followDrivers.get(nextPort)\n const inherited = owner === undefined ? pendingHandoffs.get(nextPort) ?? null : null\n if (owner === undefined) followDrivers.set(nextPort, driverToken)\n if (followDrivers.get(nextPort) !== driverToken) return\n\n if (!primed && inherited !== null && !readerIntent) {\n const geometryMatches = inherited.scrollHeight === nextPort.scrollHeight\n && inherited.clientHeight === nextPort.clientHeight\n if (geometryMatches) {\n animatedH = hasShiftSurface(nextPort)\n ? Math.min(nextPort.scrollHeight, nextPort.clientHeight + inherited.top)\n : inherited.top\n following = true\n hold(nextPort)\n applyCurrentVisual(nextPort)\n primed = true\n pendingHandoffs.delete(nextPort)\n return\n }\n }\n pendingHandoffs.delete(nextPort)\n if (owner === undefined && (followOwners.get(nextPort) ?? 0) === 0) clearVisual(nextPort)\n\n const floor = Math.max(0, nextPort.scrollHeight - nextPort.clientHeight)\n const reportedLag = floor - nextPort.scrollTop\n // Visual extent (content-height equivalent of the reader's scroll top):\n // content shorter than the viewport has no scrollTop to derive from, so\n // the extent is just the content height.\n const extent = Math.min(nextPort.scrollHeight, Math.max(0, nextPort.scrollHeight - reportedLag))\n\n if (!primed) {\n animatedH = extent\n following = reportedLag <= FOLLOW_SLACK_PX\n if (following) {\n hold(nextPort)\n applyCurrentVisual(nextPort)\n }\n primed = true\n return\n }\n\n if (!following && !interacting && reportedLag <= FOLLOW_SLACK_PX) {\n following = true\n readerIntent = false\n animatedH = extent\n hold(nextPort)\n } else if (following && interacting && awayPx >= FOLLOW_UNPIN_GESTURE_PX) {\n following = false\n awayPx = 0\n // Compensate before the transform clears, or the flow (turn-status\n // chrome included) jumps up by the whole lag in one frame.\n handBackVisual(nextPort)\n animatedH = nextPort.scrollHeight\n drop(nextPort)\n }\n\n if (!activeRef.current || !following) return\n hold(nextPort)\n\n const lag = nextPort.scrollHeight - animatedH\n const step = computeFollowStep(dt, {\n lag,\n speedEma: speedCpsRef.current,\n minSpeedPxPerSec,\n maxSpeedPxPerSec,\n })\n if (lag <= 0.1) {\n animatedH = nextPort.scrollHeight\n } else {\n animatedH = Math.min(nextPort.scrollHeight, animatedH + step.advancePx)\n }\n applyCurrentVisual(nextPort)\n }\n\n rafId = requestAnimationFrame(frame)\n return () => {\n cancelAnimationFrame(rafId)\n if (interactTimer !== null) clearTimeout(interactTimer)\n resize?.disconnect()\n const root = rootRef.current\n const rootHost = root?.closest<HTMLElement>('[data-conversation-scroll]') ?? null\n // Once a frame has bound a port, that exact port owns this effect's\n // driver/visual state. A root moved into another Session must not make\n // this cleanup release or rewrite the new Session's scrollport.\n const host = port ?? rootHost\n const droveHost = host !== null && followDrivers.get(host) === driverToken\n let remainingParticipants = host === null ? 0 : (followParticipants.get(host) ?? 0)\n if (port !== null) {\n for (const name of GESTURE_EVENTS) port.removeEventListener(name, markGesture)\n remainingParticipants = releaseParticipant(port)\n }\n const ownSnapshot = host !== null\n && rootHost === host\n && droveHost\n && primed\n && following\n && holding === host\n && !readerIntent\n ? lastVisual\n : null\n if (host !== null) {\n if (readerIntent) pendingHandoffs.delete(host)\n else if (ownSnapshot !== null && remainingParticipants > 0) pendingHandoffs.set(host, ownSnapshot)\n\n if (remainingParticipants === 0) {\n const snapshot = ownSnapshot ?? pendingHandoffs.get(host) ?? null\n pendingHandoffs.delete(host)\n if (rootHost === host && !readerIntent && snapshot !== null) {\n const floor = Math.max(0, host.scrollHeight - host.clientHeight)\n const snapshotValid = snapshot.scrollHeight === host.scrollHeight\n && snapshot.clientHeight === host.clientHeight\n const snapshotTop = snapshotValid\n ? Math.min(floor, Math.max(0, snapshot.top))\n : floor\n // Keep normal small-lag close continuity, but never turn a large\n // stale lag into a jump to the first viewport. Geometry changes\n // and near-top snapshots settle at the physical floor instead.\n const nearTopOfScrollablePort = floor > FOLLOW_SLACK_PX && snapshotTop <= FOLLOW_SLACK_PX\n host.scrollTop = snapshotValid && !nearTopOfScrollablePort ? snapshotTop : floor\n }\n }\n }\n if (droveHost) followDrivers.delete(host)\n if (holding !== null) {\n const held = holding\n const remaining = releaseFollow(held)\n holding = null\n const preserveForSuccessor = held === host\n && remainingParticipants > 0\n && pendingHandoffs.has(held)\n if (remaining === 0 && !preserveForSuccessor) clearVisual(held)\n }\n if (\n host !== null\n && remainingParticipants === 0\n && (followOwners.get(host) ?? 0) === 0\n ) clearVisual(host)\n }\n }, [active, rootRef, speedCpsRef, minSpeedPxPerSec, maxSpeedPxPerSec])\n}\n","import { useRef, type ReactNode } from 'react'\nimport { useConversationFollow } from './teleprompterGlide.ts'\nimport css from './TypewriterAssistantNodeView.module.css'\n\n/**\n * Document-flow host that owns conversation-port follow while `active`.\n * Shared by assistant blocks and every other growing Chat row.\n */\nexport function FollowHost({\n active,\n speedCpsRef,\n minSpeedPxPerSec,\n maxSpeedPxPerSec,\n children,\n}: {\n active: boolean\n speedCpsRef: { current: number }\n minSpeedPxPerSec?: number | undefined\n maxSpeedPxPerSec?: number | undefined\n children: ReactNode\n}) {\n const rootRef = useRef<HTMLDivElement>(null)\n useConversationFollow(rootRef, active, speedCpsRef, minSpeedPxPerSec, maxSpeedPxPerSec)\n return <div ref={rootRef} className={css.follow}>{children}</div>\n}\n","/**\n * Shared plugin configuration contract. The Host half defines the\n * Schemastery schema over this shape (defaults live here so both halves stay\n * symmetric); the client half falls back to the same defaults when the Host\n * boot-config bridge is absent (client-only composition).\n */\n\nimport type { ConversationSmoothingPreset } from './client/useConversationContent.ts'\n\n/** Streaming render direction of the assistant node view. */\nexport type ConversationMode = 'typewriter' | 'teleprompter'\n\n/** Plugin configuration validated by the Host schema and bridged to the browser half. */\nexport interface ConversationConfig {\n /** Render direction: horizontal per-character reveal or uniform upward glide. */\n readonly mode: ConversationMode\n /** Smoothing preset for the reveal cadence. */\n readonly preset: ConversationSmoothingPreset\n /** Fixed grapheme reveal rate used by `typewriter` mode. */\n readonly revealCharsPerSec: number\n /** Minimum visual follow speed while the transcript is pinned. */\n readonly scrollSpeedPxPerSec: number\n /**\n * Follow velocity ceiling in CSS pixels per second, so a huge first lag\n * does not teleport. Ordinary wraps stay well below this.\n */\n readonly maxScrollSpeedPxPerSec: number\n}\n\n/** Defaults shared by the Host schema and the client-side fallback. */\nexport const DEFAULT_CONVERSATION_CONFIG: ConversationConfig = {\n mode: 'teleprompter',\n preset: 'balanced',\n revealCharsPerSec: 80,\n scrollSpeedPxPerSec: 48,\n maxScrollSpeedPxPerSec: 1000,\n}\n\n/**\n * Window global the Host writes into the served index HTML. The browser boot\n * graph carries no per-entry config, so this inline script is the only\n * Host-to-client configuration channel for a composed web plugin.\n */\nexport const CONVERSATION_BOOT_GLOBAL = '__DSH_CONVERSATION_UI_CONFIG__'\n","import { useCallback, useLayoutEffect, useSyncExternalStore } from 'react'\n\nexport interface TurnFoldAddress {\n readonly sessionId: string\n readonly turn: number\n}\n\ninterface TurnFoldEntry {\n collapsed: boolean\n completed: boolean\n label: string | undefined\n readonly boundaries: Map<string, number>\n readonly members: Map<string, number>\n readonly listeners: Set<() => void>\n}\n\ninterface TurnProcessFoldState {\n readonly collapsed: boolean\n readonly completed: boolean\n readonly boundary: boolean\n readonly controls: string\n readonly hasMembers: boolean\n readonly label: string | undefined\n readonly toggle: () => void\n}\n\nconst entries = new Map<string, TurnFoldEntry>()\n\nfunction addressKey(address: TurnFoldAddress): string {\n return `${address.sessionId}\\u0000${address.turn}`\n}\n\nfunction entryFor(key: string): TurnFoldEntry {\n const current = entries.get(key)\n if (current !== undefined) return current\n const created: TurnFoldEntry = {\n collapsed: false,\n completed: false,\n label: undefined,\n boundaries: new Map(),\n members: new Map(),\n listeners: new Set(),\n }\n entries.set(key, created)\n return created\n}\n\nfunction notify(entry: TurnFoldEntry): void {\n for (const listener of entry.listeners) listener()\n}\n\nfunction discardUnused(key: string, entry: TurnFoldEntry): void {\n if (entry.listeners.size === 0 && entry.boundaries.size === 0 && entry.members.size === 0) entries.delete(key)\n}\n\nfunction subscribe(key: string, listener: () => void): () => void {\n const entry = entryFor(key)\n entry.listeners.add(listener)\n return () => {\n entry.listeners.delete(listener)\n discardUnused(key, entry)\n }\n}\n\nfunction orderedMembers(entry: TurnFoldEntry): readonly string[] {\n return [...entry.members]\n .sort(([leftId, leftOrder], [rightId, rightOrder]) => leftOrder - rightOrder || leftId.localeCompare(rightId))\n .map(([id]) => id)\n}\n\nfunction orderedBoundaries(entry: TurnFoldEntry): readonly string[] {\n return [...entry.boundaries]\n .sort(([leftId, leftOrder], [rightId, rightOrder]) => leftOrder - rightOrder || leftId.localeCompare(rightId))\n .map(([id]) => id)\n}\n\nfunction complete(key: string, label: string): void {\n const entry = entryFor(key)\n if (entry.completed) {\n if (entry.label === label) return\n entry.label = label\n notify(entry)\n return\n }\n entry.completed = true\n entry.label = label\n entry.collapsed = true\n notify(entry)\n}\n\nfunction registerMember(key: string, memberId: string, memberOrder: number): () => void {\n const entry = entryFor(key)\n entry.members.set(memberId, memberOrder)\n notify(entry)\n return () => {\n entry.members.delete(memberId)\n notify(entry)\n discardUnused(key, entry)\n }\n}\n\nfunction registerBoundary(key: string, boundaryId: string, boundaryOrder: number): () => void {\n const entry = entryFor(key)\n entry.boundaries.set(boundaryId, boundaryOrder)\n notify(entry)\n return () => {\n entry.boundaries.delete(boundaryId)\n notify(entry)\n discardUnused(key, entry)\n }\n}\n\nfunction hash(value: string): string {\n let result = 2_166_136_261\n for (let index = 0; index < value.length; index += 1) {\n result ^= value.charCodeAt(index)\n result = Math.imul(result, 16_777_619)\n }\n return (result >>> 0).toString(36)\n}\n\n/** Stable DOM id for one flat Chat node controlled by a Turn disclosure. */\nexport function turnProcessMemberId(address: TurnFoldAddress, nodeKey: string): string {\n return `dsh-turn-process-${address.turn}-${hash(`${address.sessionId}\\u0000${nodeKey}`)}`\n}\n\n/** Stable DOM/store identity for the user-anchored Turn disclosure. */\nexport function turnProcessBoundaryId(sessionId: string, nodeKey: string): string {\n return `dsh-turn-boundary-${hash(`${sessionId}\\u0000${nodeKey}`)}`\n}\n\n/**\n * Share one collapse state across flat Chat siblings belonging to the same\n * Session Turn. A successful final node marks the Turn complete; process\n * members contribute their DOM ids to the disclosure's `aria-controls` list.\n */\nexport function useTurnProcessFold(\n address: TurnFoldAddress | undefined,\n options: {\n readonly boundaryId?: string | undefined\n readonly boundaryOrder?: number | undefined\n readonly completedLabel?: string | undefined\n readonly memberId?: string | undefined\n readonly memberOrder?: number | undefined\n } = {},\n): TurnProcessFoldState {\n const key = address === undefined ? undefined : addressKey(address)\n const subscribeToKey = useCallback((listener: () => void) => (\n key === undefined ? () => {} : subscribe(key, listener)\n ), [key])\n const collapsed = useSyncExternalStore(\n subscribeToKey,\n () => key === undefined ? false : entries.get(key)?.collapsed ?? false,\n () => false,\n )\n const completed = useSyncExternalStore(\n subscribeToKey,\n () => key === undefined ? false : entries.get(key)?.completed ?? false,\n () => false,\n )\n const controls = useSyncExternalStore(\n subscribeToKey,\n () => {\n if (key === undefined) return ''\n const entry = entries.get(key)\n return entry === undefined ? '' : orderedMembers(entry).join(' ')\n },\n () => '',\n )\n const boundaryId = useSyncExternalStore(\n subscribeToKey,\n () => {\n if (key === undefined) return undefined\n const entry = entries.get(key)\n if (entry === undefined) return undefined\n return orderedBoundaries(entry)[0] ?? orderedMembers(entry)[0]\n },\n () => undefined,\n )\n const hasMembers = useSyncExternalStore(\n subscribeToKey,\n () => key !== undefined && (entries.get(key)?.members.size ?? 0) > 0,\n () => false,\n )\n const label = useSyncExternalStore(\n subscribeToKey,\n () => key === undefined ? undefined : entries.get(key)?.label,\n () => undefined,\n )\n\n useLayoutEffect(() => {\n if (key === undefined || options.boundaryId === undefined || options.boundaryOrder === undefined) return\n return registerBoundary(key, options.boundaryId, options.boundaryOrder)\n }, [key, options.boundaryId, options.boundaryOrder])\n\n useLayoutEffect(() => {\n if (key === undefined || options.memberId === undefined || options.memberOrder === undefined) return\n return registerMember(key, options.memberId, options.memberOrder)\n }, [key, options.memberId, options.memberOrder])\n\n useLayoutEffect(() => {\n if (key === undefined || options.completedLabel === undefined) return\n complete(key, options.completedLabel)\n }, [key, options.completedLabel])\n\n const toggle = useCallback(() => {\n if (key === undefined) return\n const entry = entryFor(key)\n if (!entry.completed || entry.members.size === 0) return\n entry.collapsed = !entry.collapsed\n notify(entry)\n }, [key])\n\n return {\n collapsed,\n completed,\n boundary: (options.boundaryId !== undefined && boundaryId === options.boundaryId)\n || (options.memberId !== undefined && boundaryId === options.memberId),\n controls,\n hasMembers,\n label,\n toggle,\n }\n}\n","import { useEffect, useState, type HTMLAttributes, type ReactNode, type Ref } from 'react'\nimport {\n IconChevronDownOutline14,\n IconChevronRightOutline14,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport {\n useTurnProcessFold,\n type TurnFoldAddress,\n} from './turnProcessFold.ts'\nimport css from './TypewriterAssistantNodeView.module.css'\n\ninterface TurnProcessMemberProps extends Omit<HTMLAttributes<HTMLDivElement>, 'hidden' | 'id'> {\n readonly address: TurnFoldAddress\n readonly memberId: string\n readonly memberOrder: number\n readonly memberRef?: Ref<HTMLDivElement> | undefined\n readonly turnStartTime?: number | undefined\n readonly formatRunningElapsed?: ((ms: number) => string) | undefined\n readonly children: ReactNode\n}\n\nfunction useElapsedNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n setNow(Date.now())\n const timer = window.setInterval(() => setNow(Date.now()), 1_000)\n return () => window.clearInterval(timer)\n }, [active])\n return now\n}\n\n/**\n * One process row in a flat Harness Turn. The earliest registered row owns the\n * Turn disclosure, while this row's own content participates in the shared\n * collapsed state.\n */\nexport function TurnProcessMember({\n address,\n memberId,\n memberOrder,\n memberRef,\n turnStartTime,\n formatRunningElapsed,\n children,\n ...attributes\n}: TurnProcessMemberProps) {\n const fold = useTurnProcessFold(address, { memberId, memberOrder })\n const running = fold.boundary\n && !fold.completed\n && turnStartTime !== undefined\n && formatRunningElapsed !== undefined\n const now = useElapsedNow(running)\n const label = fold.completed\n ? fold.label\n : running ? formatRunningElapsed(now - turnStartTime) : undefined\n return (\n <>\n {fold.boundary && label !== undefined && (\n <div\n className={css.turnFoldRow}\n data-turn-fold-row=\"\"\n data-turn-fold-state={fold.completed ? 'completed' : 'running'}\n >\n {fold.completed ? (\n <button\n type=\"button\"\n className={css.turnFoldButton}\n aria-expanded={!fold.collapsed}\n aria-controls={fold.controls}\n onClick={fold.toggle}\n >\n <span>{label}</span>\n {fold.collapsed ? <IconChevronRightOutline14 /> : <IconChevronDownOutline14 />}\n </button>\n ) : (\n <span className={css.turnFoldLabel} aria-live=\"off\">{label}</span>\n )}\n </div>\n )}\n <div\n {...attributes}\n ref={memberRef}\n id={memberId}\n data-turn-process=\"\"\n hidden={fold.collapsed}\n >\n {children}\n </div>\n </>\n )\n}\n","import type { ChatNodeViewProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\n\nexport type TurnElapsedTranslator = ChatNodeViewProps<'assistant-step'>['t']\n\nexport function formatRunDuration(ms: number, t: TurnElapsedTranslator): string {\n const total = Math.max(0, Math.floor(ms / 1_000))\n const minutes = Math.floor(total / 60)\n const seconds = total % 60\n return minutes > 0\n ? t('duration.minutes', { minutes, seconds: String(seconds).padStart(2, '0') })\n : t('duration.seconds', { seconds })\n}\n\nexport function formatTurnElapsed(ms: number, t: TurnElapsedTranslator): string {\n const duration = formatRunDuration(ms, t)\n const label = t('message.ranFor', { duration })\n // The requested Codex surface uses “耗时”; preserve every other locale's\n // native conversation translation unchanged.\n return label === `用时 ${duration}` ? `耗时 ${duration}` : label\n}\n\nexport function formatTurnProcessed(ms: number, t: TurnElapsedTranslator): string {\n const duration = formatRunDuration(ms, t)\n const label = t('message.ranFor', { duration })\n // Keep the native duration grammar and only replace the Chinese state word.\n return label === `用时 ${duration}` ? `已处理 ${duration}` : label\n}\n","import { memo, useEffect, useMemo, useRef, useState, type ComponentProps, type ReactNode } from 'react'\nimport {\n JsonBlock,\n MarkdownText,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { ChatNodeViewProps, TurnTailOwnerProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport { useConversationContent, type ConversationSmoothingPreset } from './useConversationContent.ts'\nimport { useFpsGuard } from './useFpsGuard.ts'\nimport { FollowHost } from './FollowHost.tsx'\nimport { DEFAULT_CONVERSATION_CONFIG, type ConversationMode } from '../config.ts'\nimport { turnProcessMemberId, useTurnProcessFold } from './turnProcessFold.ts'\nimport { TurnProcessMember } from './TurnProcessMember.tsx'\nimport { formatTurnElapsed, formatTurnProcessed } from './turnElapsed.ts'\nimport css from './TypewriterAssistantNodeView.module.css'\n\ntype AssistantProps = ChatNodeViewProps<'assistant-step'>\ntype MarkdownProps = Pick<ComponentProps<typeof MarkdownText>, 'codeLabels' | 'fileMentions' | 'text'>\n\nfunction usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(\n () => typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true,\n )\n useEffect(() => {\n if (typeof window === 'undefined' || window.matchMedia === undefined) return\n const query = window.matchMedia('(prefers-reduced-motion: reduce)')\n const onChange = () => setReduced(query.matches)\n query.addEventListener('change', onChange)\n return () => query.removeEventListener('change', onChange)\n }, [])\n return reduced\n}\n\ninterface AnimatedMarkdownTextProps extends MarkdownProps {\n streaming: boolean\n announce: boolean\n /** True on the last text block: that block owns conversation follow. */\n ownFollow: boolean\n mode: ConversationMode\n preset: ConversationSmoothingPreset\n revealCharsPerSec: number\n scrollSpeedPxPerSec: number\n maxScrollSpeedPxPerSec: number\n shouldHoldBack: () => boolean\n}\n\n/**\n * Smooth streaming text arm. While the reply runs, the accumulated source is\n * revealed through the smoother at a rate that tracks the model's arrival\n * and rendered by the Harness `MarkdownText`\n * streaming arm (incremental parse, frozen non-tail blocks), so there is no\n * raw-text tail and no text-to-markdown swap: the tree stays markdown\n * throughout. The last text block owns conversation-port follow so wraps\n * glide instead of snapping. Once the stream closes and the reveal queue\n * drains, the settled full parse (KaTeX math, fence highlighting, file\n * mentions) swaps in exactly once.\n */\nfunction AnimatedMarkdownText({\n text,\n codeLabels,\n fileMentions,\n streaming,\n announce,\n ownFollow,\n mode,\n preset,\n revealCharsPerSec,\n scrollSpeedPxPerSec,\n maxScrollSpeedPxPerSec,\n shouldHoldBack,\n}: AnimatedMarkdownTextProps) {\n const reduced = usePrefersReducedMotion()\n const [typing, setTyping] = useState(streaming)\n const speedCpsRef = useRef(35)\n const displayed = useConversationContent(text, {\n enabled: mode === 'typewriter' && typing && !reduced,\n preset,\n shouldHoldBack,\n steadyCps: mode === 'typewriter' ? revealCharsPerSec : undefined,\n speedCpsRef,\n })\n const shown = reduced || mode === 'teleprompter' ? text : displayed\n const live = typing && !reduced\n\n // The stream closed: keep revealing the remaining queue, then swap to the\n // settled parse exactly once. The markdown tree stays mounted until then.\n useEffect(() => {\n if (typing && !streaming && shown.length === text.length) setTyping(false)\n }, [shown, streaming, text, typing])\n\n if (live) {\n return (\n <>\n {announce && <span className={css.visuallyHidden} aria-live=\"polite\">{text}</span>}\n <FollowHost\n active={ownFollow}\n speedCpsRef={speedCpsRef}\n minSpeedPxPerSec={scrollSpeedPxPerSec}\n maxSpeedPxPerSec={maxScrollSpeedPxPerSec}\n >\n <div className={css.markdownFlow}>\n <MarkdownText text={shown} streaming codeLabels={codeLabels} />\n </div>\n </FollowHost>\n </>\n )\n }\n return (\n <div className={css.markdownFlow}>\n <MarkdownText text={text} codeLabels={codeLabels} fileMentions={fileMentions} />\n </div>\n )\n}\n\n/**\n * Think is part of the Turn document flow rather than a second disclosure\n * card. It uses the same streaming smoother as ordinary assistant prose, so\n * reasoning reads as a continuous body while the surrounding Turn still owns\n * process folding and viewport follow.\n */\nfunction AnimatedReasoning({\n text,\n running,\n mode,\n preset,\n revealCharsPerSec,\n shouldHoldBack,\n}: {\n text: string\n running: boolean\n mode: ConversationMode\n preset: ConversationSmoothingPreset\n revealCharsPerSec: number\n shouldHoldBack: () => boolean\n}) {\n const reduced = usePrefersReducedMotion()\n const [typing, setTyping] = useState(running)\n const speedCpsRef = useRef(35)\n const displayed = useConversationContent(text, {\n enabled: mode === 'typewriter' && typing && !reduced,\n preset,\n shouldHoldBack,\n steadyCps: mode === 'typewriter' ? revealCharsPerSec : undefined,\n speedCpsRef,\n })\n const shown = reduced || mode === 'teleprompter' ? text : displayed\n useEffect(() => {\n if (typing && !running && shown.length === text.length) setTyping(false)\n }, [shown, running, text, typing])\n const live = typing && !reduced\n return (\n <div\n className={css.reasoningText}\n data-stream-node=\"reasoning\"\n data-stream-state={running ? 'running' : 'settled'}\n data-stream-reasoning=\"\"\n >\n {live ? <MarkdownText text={shown} streaming /> : <MarkdownText text={text} />}\n </div>\n )\n}\n\n/**\n * Assistant renderer for the Codex-style event stream. Teleprompter mode\n * publishes each latest model snapshot immediately; typewriter mode reveals\n * complete grapheme clusters at the configured rate. Reasoning stays in the\n * same document flow as ordinary prose, and the final Assistant message is marked separately\n * from intermediate process updates. The FPS guard holds offscreen typewriter\n * commits when the frame rate is degraded. Settled text uses the full Markdown\n * pipeline.\n */\nexport const TypewriterAssistantNodeView = memo(function TypewriterAssistantNodeView({\n mode = DEFAULT_CONVERSATION_CONFIG.mode,\n preset = DEFAULT_CONVERSATION_CONFIG.preset,\n revealCharsPerSec = DEFAULT_CONVERSATION_CONFIG.revealCharsPerSec,\n scrollSpeedPxPerSec = DEFAULT_CONVERSATION_CONFIG.scrollSpeedPxPerSec,\n maxScrollSpeedPxPerSec = DEFAULT_CONVERSATION_CONFIG.maxScrollSpeedPxPerSec,\n node,\n sessionId,\n useTurnData,\n openFile,\n renderMessageImages,\n fileMentions,\n t,\n}: AssistantProps & {\n mode?: ConversationMode\n preset?: ConversationSmoothingPreset\n revealCharsPerSec?: number\n scrollSpeedPxPerSec?: number\n maxScrollSpeedPxPerSec?: number\n thinkAutoExpand?: boolean\n}) {\n const data = node.data\n const streaming = data.status === 'running'\n const reducedMotion = usePrefersReducedMotion()\n const { ref: guardRef, shouldHoldBack } = useFpsGuard(streaming)\n const rootSpeedRef = useRef(35)\n const turn = node.location.kind === 'turn' || node.location.kind === 'step'\n ? node.location.turn\n : undefined\n const tail = useTurnData('turn-tail')\n const finalAnswer = data.status === 'settled'\n && data.finalNode !== undefined\n && tail?.closing?.finalNode.seq === data.finalNode.seq\n const phase = streaming\n ? 'streaming'\n : data.status === 'interrupted' ? 'interrupted' : finalAnswer ? 'final' : 'process'\n const owner = useMemo<TurnTailOwnerProps | undefined>(() => {\n if (turn?.status !== 'closed' || data.finalNode === undefined) return undefined\n if (tail?.closing?.finalNode.seq !== data.finalNode.seq) return undefined\n return { turn, seq: data.finalNode.seq, openFile }\n }, [data.finalNode, openFile, tail, turn])\n const mentions = useMemo(\n () => owner === undefined ? undefined : fileMentions(owner),\n [fileMentions, owner],\n )\n const codeLabels = useMemo(() => ({ copyLabel: t('copy'), copiedLabel: t('copied') }), [t])\n const hasVisible = streaming\n || data.status === 'interrupted'\n || data.blocks.some(block => block.kind !== 'tool-call')\n const address = turn === undefined ? undefined : { sessionId, turn: turn.turn }\n const processMemberId = (phase === 'streaming' || phase === 'process') && address !== undefined && hasVisible\n ? turnProcessMemberId(address, node.key)\n : undefined\n const successfulFinal = finalAnswer\n && turn?.status === 'closed'\n && turn.start !== undefined\n && turn.end !== undefined\n && turn.end.data.reason.kind === 'completed'\n const completedLabel = successfulFinal && turn?.start !== undefined && turn.end !== undefined\n ? formatTurnElapsed(turn.end.time - turn.start.time, t)\n : undefined\n const fold = useTurnProcessFold(address, {\n completedLabel,\n })\n const memberOrder = typeof node.anchorSeq === 'number'\n ? node.anchorSeq\n : data.finalNode?.seq ?? 0\n const formatRunningElapsed = useMemo(\n () => (ms: number) => formatTurnProcessed(ms, t),\n [t],\n )\n if (!hasVisible) return null\n\n const rendered: ReactNode[] = []\n const last = data.blocks.length - 1\n let lastFollow = -1\n for (let index = 0; index < data.blocks.length; index += 1) {\n const kind = data.blocks[index]?.kind\n if (kind === 'text' || kind === 'reasoning') lastFollow = index\n }\n for (let index = 0; index < data.blocks.length; index += 1) {\n const block = data.blocks[index]\n if (block === undefined) continue\n switch (block.kind) {\n case 'text':\n rendered.push(\n <AnimatedMarkdownText\n key={index}\n text={block.text}\n codeLabels={codeLabels}\n fileMentions={mentions}\n streaming={streaming}\n announce={index === last}\n ownFollow={!streaming && index === lastFollow}\n mode={mode}\n preset={preset}\n revealCharsPerSec={revealCharsPerSec}\n scrollSpeedPxPerSec={scrollSpeedPxPerSec}\n maxScrollSpeedPxPerSec={maxScrollSpeedPxPerSec}\n shouldHoldBack={shouldHoldBack}\n />,\n )\n break\n case 'reasoning':\n {\n const reasoning = (\n <AnimatedReasoning\n key={index}\n text={block.text}\n running={streaming && index === last}\n mode={mode}\n preset={preset}\n revealCharsPerSec={revealCharsPerSec}\n shouldHoldBack={shouldHoldBack}\n />\n )\n // A closing assistant node is intentionally kept visible so its\n // final answer cannot disappear with the completed Turn fold. Its\n // private reasoning is still process content, however, and must be\n // registered as a fold member rather than left in the final prose.\n if (finalAnswer && address !== undefined) {\n rendered.push(\n <TurnProcessMember\n key={index}\n address={address}\n memberId={turnProcessMemberId(address, `${node.key}:reasoning:${index}`)}\n // Keep final-node reasoning after any earlier process member;\n // otherwise equal synthetic seqs could move the disclosure\n // button into the final-answer row.\n memberOrder={memberOrder + 0.5 + index}\n >\n {reasoning}\n </TurnProcessMember>,\n )\n } else {\n rendered.push(reasoning)\n }\n }\n break\n case 'image': {\n const start = index\n const group = [block]\n while (index + 1 < data.blocks.length) {\n const next = data.blocks[index + 1]\n if (next === undefined || next.kind !== 'image') break\n group.push(next)\n index += 1\n }\n rendered.push(\n <span key={start}>{renderMessageImages({ images: group, align: 'start' })}</span>,\n )\n break\n }\n case 'tool-call':\n break\n case 'other':\n rendered.push(\n <JsonBlock\n key={index}\n label={t('message.unknownBlock')}\n payload={block.block}\n truncatedLabel={total => t('json.truncated', { total })}\n />,\n )\n break\n }\n }\n\n const content = (\n <>\n {successfulFinal && fold.controls === '' && completedLabel !== undefined && (\n <div className={css.turnFoldRow} data-turn-fold-row=\"\">\n <span className={css.turnFoldLabel}>{completedLabel}</span>\n </div>\n )}\n <FollowHost\n active={streaming && !reducedMotion}\n speedCpsRef={rootSpeedRef}\n minSpeedPxPerSec={scrollSpeedPxPerSec}\n maxSpeedPxPerSec={maxScrollSpeedPxPerSec}\n >\n <div className={css.body}>\n {rendered}\n {data.status === 'interrupted' && <span className={css.stopped}>{t('message.stopped')}</span>}\n </div>\n </FollowHost>\n </>\n )\n\n if (processMemberId !== undefined && address !== undefined) {\n return (\n <TurnProcessMember\n address={address}\n memberId={processMemberId}\n memberOrder={memberOrder}\n turnStartTime={turn?.start?.time}\n formatRunningElapsed={formatRunningElapsed}\n memberRef={guardRef}\n className={css.root}\n data-stream-node=\"assistant-step\"\n data-stream-phase={phase}\n data-streaming={streaming || undefined}\n >\n {content}\n </TurnProcessMember>\n )\n }\n\n return (\n <div\n ref={guardRef}\n className={css.root}\n data-stream-node=\"assistant-step\"\n data-stream-phase={phase}\n data-streaming={streaming || undefined}\n >\n {content}\n </div>\n )\n})\n","import React from \"react\";\nexport var DefaultContext = {\n color: undefined,\n size: undefined,\n className: undefined,\n style: undefined,\n attr: undefined\n};\nexport var IconContext = React.createContext && /*#__PURE__*/React.createContext(DefaultContext);","var _excluded = [\"attr\", \"size\", \"title\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React from \"react\";\nimport { IconContext, DefaultContext } from \"./iconContext.mjs\";\nfunction Tree2Element(tree) {\n return tree && tree.map((node, i) => /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n key: i\n }, node.attr), Tree2Element(node.child)));\n}\nexport function GenIcon(data) {\n return props => /*#__PURE__*/React.createElement(IconBase, _extends({\n attr: _objectSpread({}, data.attr)\n }, props), Tree2Element(data.child));\n}\nexport function IconBase(props) {\n var elem = conf => {\n var {\n attr,\n size,\n title\n } = props,\n svgProps = _objectWithoutProperties(props, _excluded);\n var computedSize = size || conf.size || \"1em\";\n var className;\n if (conf.className) className = conf.className;\n if (props.className) className = (className ? className + \" \" : \"\") + props.className;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n stroke: \"currentColor\",\n fill: \"currentColor\",\n strokeWidth: \"0\"\n }, conf.attr, attr, svgProps, {\n className: className,\n style: _objectSpread(_objectSpread({\n color: props.color || conf.color\n }, conf.style), props.style),\n height: computedSize,\n width: computedSize,\n xmlns: \"http://www.w3.org/2000/svg\"\n }), title && /*#__PURE__*/React.createElement(\"title\", null, title), props.children);\n };\n return IconContext !== undefined ? /*#__PURE__*/React.createElement(IconContext.Consumer, null, conf => elem(conf)) : elem(DefaultContext);\n}","// THIS FILE IS AUTO GENERATED\nimport { GenIcon } from '../lib/index.mjs';\nexport function FiActivity (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 12 18 12 15 21 9 3 6 12 2 12\"},\"child\":[]}]})(props);\n};\nexport function FiAirplay (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 15 17 21 7 21 12 15\"},\"child\":[]}]})(props);\n};\nexport function FiAlertCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiAlertOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiAlertTriangle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12.01\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiAlignCenter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"10\",\"x2\":\"6\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"18\",\"x2\":\"6\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignJustify (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"10\",\"x2\":\"3\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"10\",\"x2\":\"3\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAlignRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"10\",\"x2\":\"7\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"6\",\"x2\":\"3\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"14\",\"x2\":\"3\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"7\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiAnchor (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12H2a10 10 0 0 0 20 0h-3\"},\"child\":[]}]})(props);\n};\nexport function FiAperture (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.31\",\"y1\":\"8\",\"x2\":\"20.05\",\"y2\":\"17.94\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9.69\",\"y1\":\"8\",\"x2\":\"21.17\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7.38\",\"y1\":\"12\",\"x2\":\"13.12\",\"y2\":\"2.06\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9.69\",\"y1\":\"16\",\"x2\":\"3.95\",\"y2\":\"6.06\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.31\",\"y1\":\"16\",\"x2\":\"2.83\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.62\",\"y1\":\"12\",\"x2\":\"10.88\",\"y2\":\"21.94\"},\"child\":[]}]})(props);\n};\nexport function FiArchive (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 8 21 21 3 21 3 8\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"3\",\"width\":\"22\",\"height\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"12\",\"x2\":\"14\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 12 12 16 16 12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"7\",\"x2\":\"7\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 17 7 17 7 7\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDownRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"7\",\"x2\":\"17\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 7 17 17 7 17\"},\"child\":[]}]})(props);\n};\nexport function FiArrowDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"5\",\"x2\":\"12\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 12 12 19 5 12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowLeftCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 8 8 12 12 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"12\",\"x2\":\"8\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"12\",\"x2\":\"5\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 19 5 12 12 5\"},\"child\":[]}]})(props);\n};\nexport function FiArrowRightCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 16 16 12 12 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiArrowRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 5 19 12 12 19\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 12 12 8 8 12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"17\",\"x2\":\"7\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 17 7 7 17 7\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUpRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"17\",\"x2\":\"17\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 7 17 7 17 17\"},\"child\":[]}]})(props);\n};\nexport function FiArrowUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"5 12 12 5 19 12\"},\"child\":[]}]})(props);\n};\nexport function FiAtSign (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\"},\"child\":[]}]})(props);\n};\nexport function FiAward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"8\",\"r\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\"},\"child\":[]}]})(props);\n};\nexport function FiBarChart2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"20\",\"x2\":\"18\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"20\",\"x2\":\"6\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiBarChart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"20\",\"x2\":\"18\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"20\",\"x2\":\"6\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiBatteryCharging (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"13\",\"x2\":\"23\",\"y2\":\"11\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"11 6 7 12 13 12 9 18\"},\"child\":[]}]})(props);\n};\nexport function FiBattery (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"6\",\"width\":\"18\",\"height\":\"12\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"13\",\"x2\":\"23\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiBellOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13.73 21a2 2 0 0 1-3.46 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.63 13A17.89 17.89 0 0 1 18 8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8a6 6 0 0 0-9.33-5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiBell (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13.73 21a2 2 0 0 1-3.46 0\"},\"child\":[]}]})(props);\n};\nexport function FiBluetooth (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\"},\"child\":[]}]})(props);\n};\nexport function FiBold (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\"},\"child\":[]}]})(props);\n};\nexport function FiBookOpen (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"},\"child\":[]}]})(props);\n};\nexport function FiBook (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"},\"child\":[]}]})(props);\n};\nexport function FiBookmark (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiBox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiBriefcase (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"},\"child\":[]}]})(props);\n};\nexport function FiCalendar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"4\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"2\",\"x2\":\"16\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"2\",\"x2\":\"8\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"10\",\"x2\":\"21\",\"y2\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiCameraOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\"},\"child\":[]}]})(props);\n};\nexport function FiCamera (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"13\",\"r\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiCast (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"20\",\"x2\":\"2.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiCheckCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 4 12 14.01 9 11.01\"},\"child\":[]}]})(props);\n};\nexport function FiCheckSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 11 12 14 22 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"},\"child\":[]}]})(props);\n};\nexport function FiCheck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 6 9 17 4 12\"},\"child\":[]}]})(props);\n};\nexport function FiChevronDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 9 12 15 18 9\"},\"child\":[]}]})(props);\n};\nexport function FiChevronLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 18 9 12 15 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 18 15 12 9 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"18 15 12 9 6 15\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 13 12 18 17 13\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 6 12 11 17 6\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"11 17 6 12 11 7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"18 17 13 12 18 7\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 17 18 12 13 7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 17 11 12 6 7\"},\"child\":[]}]})(props);\n};\nexport function FiChevronsUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 11 12 6 7 11\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 18 12 13 7 18\"},\"child\":[]}]})(props);\n};\nexport function FiChrome (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21.17\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3.95\",\"y1\":\"6.06\",\"x2\":\"8.54\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10.88\",\"y1\":\"21.94\",\"x2\":\"15.46\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiClipboard (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"8\",\"y\":\"2\",\"width\":\"8\",\"height\":\"4\",\"rx\":\"1\",\"ry\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiClock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 6 12 12 16 14\"},\"child\":[]}]})(props);\n};\nexport function FiCloudDrizzle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"19\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"19\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"16\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"},\"child\":[]}]})(props);\n};\nexport function FiCloudLightning (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 11 9 17 15 17 11 23\"},\"child\":[]}]})(props);\n};\nexport function FiCloudOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiCloudRain (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"},\"child\":[]}]})(props);\n};\nexport function FiCloudSnow (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"16\",\"x2\":\"8.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"20\",\"x2\":\"8.01\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12.01\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"16\",\"x2\":\"16.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"20\",\"x2\":\"16.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\"},\"child\":[]}]})(props);\n};\nexport function FiCode (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 18 22 12 16 6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 6 2 12 8 18\"},\"child\":[]}]})(props);\n};\nexport function FiCodepen (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"15.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 8.5 12 15.5 2 8.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 15.5 12 8.5 22 15.5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"8.5\"},\"child\":[]}]})(props);\n};\nexport function FiCodesandbox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7.5 4.21 12 6.81 16.5 4.21\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7.5 19.79 7.5 14.6 3 12\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 12 16.5 14.6 16.5 19.79\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiCoffee (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 8h1a4 4 0 0 1 0 8h-1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"1\",\"x2\":\"6\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"1\",\"x2\":\"10\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"1\",\"x2\":\"14\",\"y2\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiColumns (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\"},\"child\":[]}]})(props);\n};\nexport function FiCommand (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\"},\"child\":[]}]})(props);\n};\nexport function FiCompass (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\"},\"child\":[]}]})(props);\n};\nexport function FiCopy (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"13\",\"height\":\"13\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"},\"child\":[]}]})(props);\n};\nexport function FiCornerDownLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 10 4 15 9 20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 4v7a4 4 0 0 1-4 4H4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerDownRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 10 20 15 15 20\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4v7a4 4 0 0 0 4 4h12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerLeftDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 15 9 20 4 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 4h-7a4 4 0 0 0-4 4v12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerLeftUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 9 9 4 4 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 20h-7a4 4 0 0 1-4-4V4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerRightDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 15 15 20 20 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4h7a4 4 0 0 1 4 4v12\"},\"child\":[]}]})(props);\n};\nexport function FiCornerRightUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 9 15 4 20 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 20h7a4 4 0 0 0 4-4V4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerUpLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 14 4 9 9 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20 20v-7a4 4 0 0 0-4-4H4\"},\"child\":[]}]})(props);\n};\nexport function FiCornerUpRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 14 20 9 15 4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 20v-7a4 4 0 0 1 4-4h12\"},\"child\":[]}]})(props);\n};\nexport function FiCpu (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"4\",\"width\":\"16\",\"height\":\"16\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"1\",\"x2\":\"9\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"1\",\"x2\":\"15\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"20\",\"x2\":\"9\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"20\",\"x2\":\"15\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"9\",\"x2\":\"23\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"14\",\"x2\":\"23\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"9\",\"x2\":\"4\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"14\",\"x2\":\"4\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiCreditCard (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"4\",\"width\":\"22\",\"height\":\"16\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"10\",\"x2\":\"23\",\"y2\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiCrop (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6.13 1L6 16a2 2 0 0 0 2 2h15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1 6.13L16 6a2 2 0 0 1 2 2v15\"},\"child\":[]}]})(props);\n};\nexport function FiCrosshair (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"12\",\"x2\":\"18\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"12\",\"x2\":\"2\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"6\",\"x2\":\"12\",\"y2\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiDatabase (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"ellipse\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"rx\":\"9\",\"ry\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"},\"child\":[]}]})(props);\n};\nexport function FiDelete (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"18\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiDisc (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiDivideCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]}]})(props);\n};\nexport function FiDivideSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiDivide (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"6\",\"r\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"18\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiDollarSign (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"1\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"},\"child\":[]}]})(props);\n};\nexport function FiDownloadCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 17 12 21 16 17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"12\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\"},\"child\":[]}]})(props);\n};\nexport function FiDownload (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 10 12 15 17 10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"15\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiDribbble (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\"},\"child\":[]}]})(props);\n};\nexport function FiDroplet (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit3 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 20h9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"},\"child\":[]}]})(props);\n};\nexport function FiEdit (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"},\"child\":[]}]})(props);\n};\nexport function FiExternalLink (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 3 21 3 21 9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"14\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiEyeOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiEye (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiFacebook (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"},\"child\":[]}]})(props);\n};\nexport function FiFastForward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"13 19 22 12 13 5 13 19\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"2 19 11 12 2 5 2 19\"},\"child\":[]}]})(props);\n};\nexport function FiFeather (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"8\",\"x2\":\"2\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.5\",\"y1\":\"15\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFigma (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\"},\"child\":[]}]})(props);\n};\nexport function FiFileMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"15\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFilePlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"15\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFileText (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"14 2 14 8 20 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"13\",\"x2\":\"8\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"17\",\"x2\":\"8\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 9 9 9 8 9\"},\"child\":[]}]})(props);\n};\nexport function FiFile (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"13 2 13 9 20 9\"},\"child\":[]}]})(props);\n};\nexport function FiFilm (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"20\",\"rx\":\"2.18\",\"ry\":\"2.18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"2\",\"x2\":\"7\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"2\",\"x2\":\"17\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"7\",\"x2\":\"7\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"17\",\"x2\":\"7\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"17\",\"x2\":\"22\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"7\",\"x2\":\"22\",\"y2\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiFilter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"},\"child\":[]}]})(props);\n};\nexport function FiFlag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"22\",\"x2\":\"4\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiFolderMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"14\",\"x2\":\"15\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiFolderPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"11\",\"x2\":\"12\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"14\",\"x2\":\"15\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiFolder (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiFramer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\"},\"child\":[]}]})(props);\n};\nexport function FiFrown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 16s-1.5-2-4-2-4 2-4 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiGift (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 12 20 22 4 22 4 12\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22\",\"x2\":\"12\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\"},\"child\":[]}]})(props);\n};\nexport function FiGitBranch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"3\",\"x2\":\"6\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 9a9 9 0 0 1-9 9\"},\"child\":[]}]})(props);\n};\nexport function FiGitCommit (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1.05\",\"y1\":\"12\",\"x2\":\"7\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.01\",\"y1\":\"12\",\"x2\":\"22.96\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiGitMerge (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 21V9a9 9 0 0 0 9 9\"},\"child\":[]}]})(props);\n};\nexport function FiGitPullRequest (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13 6h3a2 2 0 0 1 2 2v7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"9\",\"x2\":\"6\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiGithub (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"},\"child\":[]}]})(props);\n};\nexport function FiGitlab (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\"},\"child\":[]}]})(props);\n};\nexport function FiGlobe (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"},\"child\":[]}]})(props);\n};\nexport function FiGrid (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"3\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"14\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"14\",\"width\":\"7\",\"height\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiHardDrive (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"12\",\"x2\":\"2\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"16\",\"x2\":\"6.01\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"16\",\"x2\":\"10.01\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiHash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"9\",\"x2\":\"20\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"15\",\"x2\":\"20\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"3\",\"x2\":\"8\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"3\",\"x2\":\"14\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiHeadphones (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 18v-6a9 9 0 0 1 18 0v6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\"},\"child\":[]}]})(props);\n};\nexport function FiHeart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"},\"child\":[]}]})(props);\n};\nexport function FiHelpCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12.01\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiHexagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]}]})(props);\n};\nexport function FiHome (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 22 9 12 15 12 15 22\"},\"child\":[]}]})(props);\n};\nexport function FiImage (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"8.5\",\"r\":\"1.5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 15 16 10 5 21\"},\"child\":[]}]})(props);\n};\nexport function FiInbox (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"22 12 16 12 14 15 10 15 8 12 2 12\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\"},\"child\":[]}]})(props);\n};\nexport function FiInfo (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"16\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12.01\",\"y2\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiInstagram (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"20\",\"rx\":\"5\",\"ry\":\"5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17.5\",\"y1\":\"6.5\",\"x2\":\"17.51\",\"y2\":\"6.5\"},\"child\":[]}]})(props);\n};\nexport function FiItalic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"4\",\"x2\":\"10\",\"y2\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"20\",\"x2\":\"5\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"4\",\"x2\":\"9\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiKey (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\"},\"child\":[]}]})(props);\n};\nexport function FiLayers (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 2 7 12 12 22 7 12 2\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 17 12 22 22 17\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"2 12 12 17 22 12\"},\"child\":[]}]})(props);\n};\nexport function FiLayout (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"9\",\"x2\":\"21\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"21\",\"x2\":\"9\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiLifeBuoy (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"9.17\",\"y2\":\"9.17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"14.83\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"9.17\",\"x2\":\"19.07\",\"y2\":\"4.93\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.83\",\"y1\":\"9.17\",\"x2\":\"18.36\",\"y2\":\"5.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"19.07\",\"x2\":\"9.17\",\"y2\":\"14.83\"},\"child\":[]}]})(props);\n};\nexport function FiLink2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiLink (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"},\"child\":[]}]})(props);\n};\nexport function FiLinkedin (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"9\",\"width\":\"4\",\"height\":\"12\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"4\",\"cy\":\"4\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiList (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"21\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"18\",\"x2\":\"21\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"3.01\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"12\",\"x2\":\"3.01\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"18\",\"x2\":\"3.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiLoader (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"7.76\",\"y2\":\"7.76\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.24\",\"y1\":\"16.24\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"6\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"19.07\",\"x2\":\"7.76\",\"y2\":\"16.24\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16.24\",\"y1\":\"7.76\",\"x2\":\"19.07\",\"y2\":\"4.93\"},\"child\":[]}]})(props);\n};\nexport function FiLock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"11\",\"width\":\"18\",\"height\":\"11\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7 11V7a5 5 0 0 1 10 0v4\"},\"child\":[]}]})(props);\n};\nexport function FiLogIn (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"10 17 15 12 10 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"12\",\"x2\":\"3\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiLogOut (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 17 21 12 16 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"12\",\"x2\":\"9\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMail (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"22,6 12,13 2,6\"},\"child\":[]}]})(props);\n};\nexport function FiMapPin (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"10\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiMap (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"2\",\"x2\":\"8\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"6\",\"x2\":\"16\",\"y2\":\"22\"},\"child\":[]}]})(props);\n};\nexport function FiMaximize2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 3 21 3 21 9\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 21 3 21 3 15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"3\",\"x2\":\"14\",\"y2\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"21\",\"x2\":\"10\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiMaximize (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"},\"child\":[]}]})(props);\n};\nexport function FiMeh (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"15\",\"x2\":\"16\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiMenu (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"12\",\"x2\":\"21\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"18\",\"x2\":\"21\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiMessageCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"},\"child\":[]}]})(props);\n};\nexport function FiMessageSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"},\"child\":[]}]})(props);\n};\nexport function FiMicOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"23\",\"x2\":\"16\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiMic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 10v2a7 7 0 0 1-14 0v-2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"23\",\"x2\":\"16\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiMinimize2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 14 10 14 10 20\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"20 10 14 10 14 4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"10\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"21\",\"x2\":\"10\",\"y2\":\"14\"},\"child\":[]}]})(props);\n};\nexport function FiMinimize (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"},\"child\":[]}]})(props);\n};\nexport function FiMinusCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMinusSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiMonitor (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"3\",\"width\":\"20\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"21\",\"x2\":\"16\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiMoon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"},\"child\":[]}]})(props);\n};\nexport function FiMoreHorizontal (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"19\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiMoreVertical (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"5\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"19\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiMousePointer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M13 13l6 6\"},\"child\":[]}]})(props);\n};\nexport function FiMove (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"5 9 2 12 5 15\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"9 5 12 2 15 5\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"15 19 12 22 9 19\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 9 22 12 19 15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"2\",\"y1\":\"12\",\"x2\":\"22\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"22\"},\"child\":[]}]})(props);\n};\nexport function FiMusic (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 18V5l12-2v13\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"16\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiNavigation2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 19 21 12 17 5 21 12 2\"},\"child\":[]}]})(props);\n};\nexport function FiNavigation (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"3 11 22 2 13 21 11 13 3 11\"},\"child\":[]}]})(props);\n};\nexport function FiOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]}]})(props);\n};\nexport function FiPackage (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"16.5\",\"y1\":\"9.4\",\"x2\":\"7.5\",\"y2\":\"4.21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"3.27 6.96 12 12.01 20.73 6.96\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"22.08\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPaperclip (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"},\"child\":[]}]})(props);\n};\nexport function FiPauseCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"15\",\"x2\":\"10\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"15\",\"x2\":\"14\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiPause (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"6\",\"y\":\"4\",\"width\":\"4\",\"height\":\"16\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"4\",\"width\":\"4\",\"height\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiPenTool (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 19l7-7 3 3-7 7-3-3z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M2 2l7.586 7.586\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiPercent (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"5\",\"x2\":\"5\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6.5\",\"cy\":\"6.5\",\"r\":\"2.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"17.5\",\"cy\":\"17.5\",\"r\":\"2.5\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneCall (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneForwarded (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"19 1 23 5 19 9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"5\",\"x2\":\"23\",\"y2\":\"5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneIncoming (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 2 16 8 22 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"16\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneMissed (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"17\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"7\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"1\",\"x2\":\"1\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiPhoneOutgoing (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 7 23 1 17 1\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"16\",\"y1\":\"8\",\"x2\":\"23\",\"y2\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPhone (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"},\"child\":[]}]})(props);\n};\nexport function FiPieChart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21.21 15.89A10 10 0 1 1 8 2.83\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M22 12A10 10 0 0 0 12 2v10z\"},\"child\":[]}]})(props);\n};\nexport function FiPlayCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"10 8 16 12 10 16 10 8\"},\"child\":[]}]})(props);\n};\nexport function FiPlay (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"5 3 19 12 5 21 5 3\"},\"child\":[]}]})(props);\n};\nexport function FiPlusCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPlusSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"12\",\"x2\":\"16\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"5\",\"x2\":\"12\",\"y2\":\"19\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"12\",\"x2\":\"19\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPocket (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 10 12 14 16 10\"},\"child\":[]}]})(props);\n};\nexport function FiPower (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M18.36 6.64a9 9 0 1 1-12.73 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiPrinter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"6 9 6 2 18 2 18 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"6\",\"y\":\"14\",\"width\":\"12\",\"height\":\"8\"},\"child\":[]}]})(props);\n};\nexport function FiRadio (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"},\"child\":[]}]})(props);\n};\nexport function FiRefreshCcw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 4 1 10 7 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 20 23 14 17 14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\"},\"child\":[]}]})(props);\n};\nexport function FiRefreshCw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 4 23 10 17 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 20 1 14 7 14\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"},\"child\":[]}]})(props);\n};\nexport function FiRepeat (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 1 21 5 17 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3 11V9a4 4 0 0 1 4-4h14\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 23 3 19 7 15\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M21 13v2a4 4 0 0 1-4 4H3\"},\"child\":[]}]})(props);\n};\nexport function FiRewind (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 19 2 12 11 5 11 19\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 19 13 12 22 5 22 19\"},\"child\":[]}]})(props);\n};\nexport function FiRotateCcw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"1 4 1 10 7 10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"},\"child\":[]}]})(props);\n};\nexport function FiRotateCw (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 4 23 10 17 10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"},\"child\":[]}]})(props);\n};\nexport function FiRss (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 11a9 9 0 0 1 9 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4 4a16 16 0 0 1 16 16\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5\",\"cy\":\"19\",\"r\":\"1\"},\"child\":[]}]})(props);\n};\nexport function FiSave (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 21 17 13 7 13 7 21\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"7 3 7 8 15 8\"},\"child\":[]}]})(props);\n};\nexport function FiScissors (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"6\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"18\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"4\",\"x2\":\"8.12\",\"y2\":\"15.88\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14.47\",\"y1\":\"14.48\",\"x2\":\"20\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8.12\",\"y1\":\"8.12\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]}]})(props);\n};\nexport function FiSearch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]}]})(props);\n};\nexport function FiSend (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"22\",\"y1\":\"2\",\"x2\":\"11\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"22 2 15 22 11 13 2 9 22 2\"},\"child\":[]}]})(props);\n};\nexport function FiServer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"2\",\"width\":\"20\",\"height\":\"8\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"14\",\"width\":\"20\",\"height\":\"8\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"6\",\"x2\":\"6.01\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"18\",\"x2\":\"6.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiSettings (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"},\"child\":[]}]})(props);\n};\nexport function FiShare2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"5\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"6\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18\",\"cy\":\"19\",\"r\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8.59\",\"y1\":\"13.51\",\"x2\":\"15.42\",\"y2\":\"17.49\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15.41\",\"y1\":\"6.51\",\"x2\":\"8.59\",\"y2\":\"10.49\"},\"child\":[]}]})(props);\n};\nexport function FiShare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 6 12 2 8 6\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiShieldOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiShield (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"},\"child\":[]}]})(props);\n};\nexport function FiShoppingBag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"3\",\"y1\":\"6\",\"x2\":\"21\",\"y2\":\"6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 10a4 4 0 0 1-8 0\"},\"child\":[]}]})(props);\n};\nexport function FiShoppingCart (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"21\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"20\",\"cy\":\"21\",\"r\":\"1\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"},\"child\":[]}]})(props);\n};\nexport function FiShuffle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 3 21 3 21 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"20\",\"x2\":\"21\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"21 16 21 21 16 21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"15\",\"x2\":\"21\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"4\",\"x2\":\"9\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiSidebar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"3\",\"x2\":\"9\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiSkipBack (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"19 20 9 12 19 4 19 20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5\",\"y1\":\"19\",\"x2\":\"5\",\"y2\":\"5\"},\"child\":[]}]})(props);\n};\nexport function FiSkipForward (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"5 4 15 12 5 20 5 4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"19\",\"y1\":\"5\",\"x2\":\"19\",\"y2\":\"19\"},\"child\":[]}]})(props);\n};\nexport function FiSlack (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\"},\"child\":[]}]})(props);\n};\nexport function FiSlash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.93\",\"y1\":\"4.93\",\"x2\":\"19.07\",\"y2\":\"19.07\"},\"child\":[]}]})(props);\n};\nexport function FiSliders (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"21\",\"x2\":\"4\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"10\",\"x2\":\"4\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"8\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"21\",\"x2\":\"20\",\"y2\":\"16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"12\",\"x2\":\"20\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"14\",\"x2\":\"7\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"8\",\"x2\":\"15\",\"y2\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"16\",\"x2\":\"23\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiSmartphone (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"5\",\"y\":\"2\",\"width\":\"14\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiSmile (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8 14s1.5 2 4 2 4-2 4-2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"9.01\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"15.01\",\"y2\":\"9\"},\"child\":[]}]})(props);\n};\nexport function FiSpeaker (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"2\",\"width\":\"16\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"14\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"6\",\"x2\":\"12.01\",\"y2\":\"6\"},\"child\":[]}]})(props);\n};\nexport function FiSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiStar (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"},\"child\":[]}]})(props);\n};\nexport function FiStopCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"9\",\"y\":\"9\",\"width\":\"6\",\"height\":\"6\"},\"child\":[]}]})(props);\n};\nexport function FiSun (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"1\",\"x2\":\"12\",\"y2\":\"3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"21\",\"x2\":\"12\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"4.22\",\"x2\":\"5.64\",\"y2\":\"5.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"18.36\",\"x2\":\"19.78\",\"y2\":\"19.78\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"12\",\"x2\":\"3\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"12\",\"x2\":\"23\",\"y2\":\"12\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"19.78\",\"x2\":\"5.64\",\"y2\":\"18.36\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"5.64\",\"x2\":\"19.78\",\"y2\":\"4.22\"},\"child\":[]}]})(props);\n};\nexport function FiSunrise (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 18a5 5 0 0 0-10 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"2\",\"x2\":\"12\",\"y2\":\"9\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"10.22\",\"x2\":\"5.64\",\"y2\":\"11.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"23\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"11.64\",\"x2\":\"19.78\",\"y2\":\"10.22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"22\",\"x2\":\"1\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 6 12 2 16 6\"},\"child\":[]}]})(props);\n};\nexport function FiSunset (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 18a5 5 0 0 0-10 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4.22\",\"y1\":\"10.22\",\"x2\":\"5.64\",\"y2\":\"11.64\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"18\",\"x2\":\"3\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"18\",\"x2\":\"23\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18.36\",\"y1\":\"11.64\",\"x2\":\"19.78\",\"y2\":\"10.22\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"22\",\"x2\":\"1\",\"y2\":\"22\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 5 12 9 8 5\"},\"child\":[]}]})(props);\n};\nexport function FiTable (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\"},\"child\":[]}]})(props);\n};\nexport function FiTablet (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"4\",\"y\":\"2\",\"width\":\"16\",\"height\":\"20\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"18\",\"x2\":\"12.01\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiTag (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"7\",\"y1\":\"7\",\"x2\":\"7.01\",\"y2\":\"7\"},\"child\":[]}]})(props);\n};\nexport function FiTarget (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"6\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiTerminal (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 17 10 11 4 5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"19\",\"x2\":\"20\",\"y2\":\"19\"},\"child\":[]}]})(props);\n};\nexport function FiThermometer (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"},\"child\":[]}]})(props);\n};\nexport function FiThumbsDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"},\"child\":[]}]})(props);\n};\nexport function FiThumbsUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"},\"child\":[]}]})(props);\n};\nexport function FiToggleLeft (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"22\",\"height\":\"14\",\"rx\":\"7\",\"ry\":\"7\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiToggleRight (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"22\",\"height\":\"14\",\"rx\":\"7\",\"ry\":\"7\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"16\",\"cy\":\"12\",\"r\":\"3\"},\"child\":[]}]})(props);\n};\nexport function FiTool (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"},\"child\":[]}]})(props);\n};\nexport function FiTrash2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"3 6 5 6 21 6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"10\",\"y1\":\"11\",\"x2\":\"10\",\"y2\":\"17\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"14\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"17\"},\"child\":[]}]})(props);\n};\nexport function FiTrash (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"3 6 5 6 21 6\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"},\"child\":[]}]})(props);\n};\nexport function FiTrello (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"7\",\"y\":\"7\",\"width\":\"3\",\"height\":\"9\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"14\",\"y\":\"7\",\"width\":\"3\",\"height\":\"5\"},\"child\":[]}]})(props);\n};\nexport function FiTrendingDown (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 18 13.5 8.5 8.5 13.5 1 6\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 18 23 18 23 12\"},\"child\":[]}]})(props);\n};\nexport function FiTrendingUp (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"23 6 13.5 15.5 8.5 10.5 1 18\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 6 23 6 23 12\"},\"child\":[]}]})(props);\n};\nexport function FiTriangle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"},\"child\":[]}]})(props);\n};\nexport function FiTruck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"3\",\"width\":\"15\",\"height\":\"13\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"16 8 20 8 23 11 23 16 16 16 16 8\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.5\",\"cy\":\"18.5\",\"r\":\"2.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.5\",\"cy\":\"18.5\",\"r\":\"2.5\"},\"child\":[]}]})(props);\n};\nexport function FiTv (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"2\",\"y\":\"7\",\"width\":\"20\",\"height\":\"15\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 2 12 7 7 2\"},\"child\":[]}]})(props);\n};\nexport function FiTwitch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7\"},\"child\":[]}]})(props);\n};\nexport function FiTwitter (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"},\"child\":[]}]})(props);\n};\nexport function FiType (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"4 7 4 4 20 4 20 7\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"20\",\"x2\":\"15\",\"y2\":\"20\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"4\",\"x2\":\"12\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiUmbrella (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\"},\"child\":[]}]})(props);\n};\nexport function FiUnderline (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"4\",\"y1\":\"21\",\"x2\":\"20\",\"y2\":\"21\"},\"child\":[]}]})(props);\n};\nexport function FiUnlock (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"11\",\"width\":\"18\",\"height\":\"11\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M7 11V7a5 5 0 0 1 9.9-1\"},\"child\":[]}]})(props);\n};\nexport function FiUploadCloud (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 16 12 12 8 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"12\",\"x2\":\"12\",\"y2\":\"21\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"16 16 12 12 8 16\"},\"child\":[]}]})(props);\n};\nexport function FiUpload (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 8 12 3 7 8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"3\",\"x2\":\"12\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiUserCheck (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"17 11 19 13 23 9\"},\"child\":[]}]})(props);\n};\nexport function FiUserMinus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"11\",\"x2\":\"17\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiUserPlus (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"20\",\"y1\":\"8\",\"x2\":\"20\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"11\",\"x2\":\"17\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiUserX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"8.5\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"8\",\"x2\":\"23\",\"y2\":\"13\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"8\",\"x2\":\"18\",\"y2\":\"13\"},\"child\":[]}]})(props);\n};\nexport function FiUser (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]}]})(props);\n};\nexport function FiUsers (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"9\",\"cy\":\"7\",\"r\":\"4\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M23 21v-2a4 4 0 0 0-3-3.87\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16 3.13a4 4 0 0 1 0 7.75\"},\"child\":[]}]})(props);\n};\nexport function FiVideoOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiVideo (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"23 7 16 12 23 17 23 7\"},\"child\":[]},{\"tag\":\"rect\",\"attr\":{\"x\":\"1\",\"y\":\"5\",\"width\":\"15\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]}]})(props);\n};\nexport function FiVoicemail (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"5.5\",\"cy\":\"11.5\",\"r\":\"4.5\"},\"child\":[]},{\"tag\":\"circle\",\"attr\":{\"cx\":\"18.5\",\"cy\":\"11.5\",\"r\":\"4.5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"5.5\",\"y1\":\"16\",\"x2\":\"18.5\",\"y2\":\"16\"},\"child\":[]}]})(props);\n};\nexport function FiVolume1 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M15.54 8.46a5 5 0 0 1 0 7.07\"},\"child\":[]}]})(props);\n};\nexport function FiVolume2 (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"},\"child\":[]}]})(props);\n};\nexport function FiVolumeX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"23\",\"y1\":\"9\",\"x2\":\"17\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"17\",\"y1\":\"9\",\"x2\":\"23\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiVolume (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"},\"child\":[]}]})(props);\n};\nexport function FiWatch (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"7\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"12 9 12 12 13.5 13.5\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\"},\"child\":[]}]})(props);\n};\nexport function FiWifiOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M10.71 5.05A16 16 0 0 1 22.58 9\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.53 16.11a6 6 0 0 1 6.95 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiWifi (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M5 12.55a11 11 0 0 1 14.08 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M1.42 9a16 16 0 0 1 21.16 0\"},\"child\":[]},{\"tag\":\"path\",\"attr\":{\"d\":\"M8.53 16.11a6 6 0 0 1 6.95 0\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"12\",\"y1\":\"20\",\"x2\":\"12.01\",\"y2\":\"20\"},\"child\":[]}]})(props);\n};\nexport function FiWind (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"},\"child\":[]}]})(props);\n};\nexport function FiXCircle (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiXOctagon (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiXSquare (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"rect\",\"attr\":{\"x\":\"3\",\"y\":\"3\",\"width\":\"18\",\"height\":\"18\",\"rx\":\"2\",\"ry\":\"2\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"},\"child\":[]}]})(props);\n};\nexport function FiX (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"line\",\"attr\":{\"x1\":\"18\",\"y1\":\"6\",\"x2\":\"6\",\"y2\":\"18\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"6\",\"y1\":\"6\",\"x2\":\"18\",\"y2\":\"18\"},\"child\":[]}]})(props);\n};\nexport function FiYoutube (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"path\",\"attr\":{\"d\":\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\"},\"child\":[]},{\"tag\":\"polygon\",\"attr\":{\"points\":\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\"},\"child\":[]}]})(props);\n};\nexport function FiZapOff (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polyline\",\"attr\":{\"points\":\"12.41 6.75 13 2 10.57 4.92\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"18.57 12.91 21 10 15.66 10\"},\"child\":[]},{\"tag\":\"polyline\",\"attr\":{\"points\":\"8 8 3 14 12 14 11 22 16 16\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"},\"child\":[]}]})(props);\n};\nexport function FiZap (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"polygon\",\"attr\":{\"points\":\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"},\"child\":[]}]})(props);\n};\nexport function FiZoomIn (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"11\",\"y1\":\"8\",\"x2\":\"11\",\"y2\":\"14\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\nexport function FiZoomOut (props) {\n return GenIcon({\"tag\":\"svg\",\"attr\":{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"},\"child\":[{\"tag\":\"circle\",\"attr\":{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"21\",\"y1\":\"21\",\"x2\":\"16.65\",\"y2\":\"16.65\"},\"child\":[]},{\"tag\":\"line\",\"attr\":{\"x1\":\"8\",\"y1\":\"11\",\"x2\":\"14\",\"y2\":\"11\"},\"child\":[]}]})(props);\n};\n","import { createPortal } from 'react-dom'\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from 'react'\nimport {\n IconChevronDownOutline14,\n IconChevronRightOutline14,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport {\n useTurnProcessFold,\n type TurnFoldAddress,\n} from './turnProcessFold.ts'\nimport { TurnProcessMember } from './TurnProcessMember.tsx'\nimport css from './TypewriterAssistantNodeView.module.css'\n\nexport type ToolActivityGroupPosition = 'start' | 'middle' | 'end'\n\nexport interface ToolActivityGroupInfo {\n readonly id: string\n readonly domId: string\n readonly semantic: string\n readonly label: string\n readonly count: number\n readonly position: ToolActivityGroupPosition\n readonly hasGrowing: boolean\n}\n\ninterface ToolActivityGroupState {\n collapsed: boolean\n readonly listeners: Set<() => void>\n}\n\ninterface ToolActivityMount {\n target: HTMLElement | null\n readonly listeners: Set<() => void>\n}\n\nconst groupStates = new Map<string, ToolActivityGroupState>()\nconst groupMounts = new Map<string, ToolActivityMount>()\n\nfunction groupState(id: string): ToolActivityGroupState {\n const current = groupStates.get(id)\n if (current !== undefined) return current\n const created: ToolActivityGroupState = { collapsed: false, listeners: new Set() }\n groupStates.set(id, created)\n return created\n}\n\nfunction groupMount(id: string): ToolActivityMount {\n const current = groupMounts.get(id)\n if (current !== undefined) return current\n const created: ToolActivityMount = { target: null, listeners: new Set() }\n groupMounts.set(id, created)\n return created\n}\n\nfunction notify(listeners: Set<() => void>): void {\n for (const listener of listeners) listener()\n}\n\nfunction subscribeGroup(id: string, listener: () => void): () => void {\n const state = groupState(id)\n state.listeners.add(listener)\n return () => {\n state.listeners.delete(listener)\n if (state.listeners.size === 0) groupStates.delete(id)\n }\n}\n\nfunction subscribeMount(id: string, listener: () => void): () => void {\n const mount = groupMount(id)\n mount.listeners.add(listener)\n return () => {\n mount.listeners.delete(listener)\n if (mount.listeners.size === 0 && mount.target === null) groupMounts.delete(id)\n }\n}\n\nfunction setMount(id: string, target: HTMLElement | null): void {\n const mount = groupMount(id)\n if (mount.target === target) return\n mount.target = target\n notify(mount.listeners)\n}\n\nfunction hash(value: string): string {\n let result = 2_166_136_261\n for (let index = 0; index < value.length; index += 1) {\n result ^= value.charCodeAt(index)\n result = Math.imul(result, 16_777_619)\n }\n return (result >>> 0).toString(36)\n}\n\n/** Stable identity for one contiguous semantic tool group in a Turn. */\nexport function toolActivityGroupId(\n sessionId: string,\n turn: number,\n semantic: string,\n firstNodeKey: string,\n): string {\n return `dsh-tool-group-${hash(`${sessionId}\\u0000${turn}\\u0000${semantic}\\u0000${firstNodeKey}`)}`\n}\n\nfunction useToolActivityFold(id: string): { collapsed: boolean; toggle: () => void; collapse: () => void } {\n const subscribe = useCallback((listener: () => void) => subscribeGroup(id, listener), [id])\n const collapsed = useSyncExternalStore(\n subscribe,\n () => groupState(id).collapsed,\n () => false,\n )\n const toggle = useCallback(() => {\n const state = groupState(id)\n state.collapsed = !state.collapsed\n notify(state.listeners)\n }, [id])\n const collapse = useCallback(() => {\n const state = groupState(id)\n if (state.collapsed) return\n state.collapsed = true\n notify(state.listeners)\n }, [id])\n return { collapsed, toggle, collapse }\n}\n\nfunction useToolActivityMount(id: string): HTMLElement | null {\n const subscribe = useCallback((listener: () => void) => subscribeMount(id, listener), [id])\n return useSyncExternalStore(\n subscribe,\n () => groupMount(id).target,\n () => null,\n )\n}\n\ninterface ScrollPositionSnapshot {\n readonly port: HTMLElement\n readonly top: number\n readonly bottomGap: number\n}\n\nfunction restoreScrollPosition(snapshot: ScrollPositionSnapshot): void {\n const floor = Math.max(0, snapshot.port.scrollHeight - snapshot.port.clientHeight)\n const target = snapshot.bottomGap <= 25\n ? floor\n : Math.min(snapshot.top, floor)\n snapshot.port.scrollTop = target\n}\n\nfunction ToolActivityGroupFrame({\n group,\n collapsed,\n toggle,\n header,\n children,\n}: {\n readonly group: ToolActivityGroupInfo\n readonly collapsed: boolean\n readonly toggle: () => void\n readonly header: ReactNode\n readonly children: ReactNode\n}) {\n const frameRef = useRef<HTMLDivElement | null>(null)\n const pendingScroll = useRef<ScrollPositionSnapshot | null>(null)\n const register = useCallback((element: HTMLDivElement | null) => {\n frameRef.current = element\n setMount(group.id, element)\n }, [group.id])\n const toggleWithScroll = useCallback(() => {\n const port = frameRef.current?.closest<HTMLElement>('[data-conversation-scroll]')\n if (port !== null && port !== undefined) {\n const floor = Math.max(0, port.scrollHeight - port.clientHeight)\n pendingScroll.current = {\n port,\n top: port.scrollTop,\n bottomGap: floor - port.scrollTop,\n }\n }\n toggle()\n }, [toggle])\n useLayoutEffect(() => {\n const snapshot = pendingScroll.current\n if (snapshot === null) return\n pendingScroll.current = null\n restoreScrollPosition(snapshot)\n if (typeof window === 'undefined') return\n const frame = window.requestAnimationFrame(() => restoreScrollPosition(snapshot))\n return () => window.cancelAnimationFrame(frame)\n }, [collapsed])\n return (\n <div\n ref={register}\n id={group.domId}\n className={css.toolGroupFrame}\n data-stream-tool-group={group.semantic}\n data-stream-tool-group-frame=\"\"\n data-stream-tool-group-position={group.position}\n data-stream-tool-group-count={group.count}\n data-stream-tool-group-collapsed={collapsed || undefined}\n >\n <button\n type=\"button\"\n className={css.toolGroupHeader}\n aria-expanded={!collapsed}\n aria-controls={group.domId}\n data-stream-tool-group-toggle=\"\"\n onClick={toggleWithScroll}\n >\n {header}\n <span className={css.toolGroupHeaderChevron} aria-hidden>\n {collapsed ? <IconChevronRightOutline14 size={14} /> : <IconChevronDownOutline14 size={14} />}\n </span>\n </button>\n {children}\n </div>\n )\n}\n\ninterface ToolActivityGroupMemberProps {\n readonly group: ToolActivityGroupInfo\n readonly address: TurnFoldAddress\n readonly memberId: string\n readonly memberOrder: number\n readonly turnStartTime?: number | undefined\n readonly formatRunningElapsed?: ((ms: number) => string) | undefined\n readonly memberRef?: Ref<HTMLDivElement> | undefined\n readonly eventAttributes?: Readonly<Record<string, string | undefined>>\n readonly header: ReactNode\n readonly children: ReactNode\n}\n\n/**\n * Mount the first member as a group host and portal subsequent tool members\n * into the same host. The Turn fold remains shared with ordinary process rows,\n * while a contiguous run of commands gets one Codex-style disclosure block.\n */\nexport function ToolActivityGroupMember({\n group,\n address,\n memberId,\n memberOrder,\n turnStartTime,\n formatRunningElapsed,\n memberRef,\n eventAttributes,\n header,\n children,\n}: ToolActivityGroupMemberProps) {\n const fold = useTurnProcessFold(address, { memberId, memberOrder })\n const activity = useToolActivityFold(group.id)\n const mount = useToolActivityMount(group.id)\n\n // Codex leaves a running tool group open while work is arriving, then folds\n // the completed batch automatically. A manual toggle after completion still\n // wins because this effect only reacts to the growing -> settled transition.\n useEffect(() => {\n if (group.position === 'start' && !group.hasGrowing) activity.collapse()\n }, [activity.collapse, group.hasGrowing, group.position])\n\n if (group.position === 'start') {\n return (\n <TurnProcessMember\n address={address}\n memberId={memberId}\n memberOrder={memberOrder}\n turnStartTime={turnStartTime}\n formatRunningElapsed={formatRunningElapsed}\n className={css.toolGroupAnchor}\n data-stream-tool-group-anchor=\"\"\n >\n <ToolActivityGroupFrame\n group={group}\n collapsed={activity.collapsed}\n toggle={activity.toggle}\n header={header}\n >\n <div\n {...eventAttributes}\n ref={memberRef}\n className={css.eventRow}\n data-stream-tool-group-member=\"\"\n data-stream-tool-group-position=\"start\"\n data-stream-tool-group-collapsed={activity.collapsed || undefined}\n >\n {children}\n </div>\n </ToolActivityGroupFrame>\n </TurnProcessMember>\n )\n }\n\n const hidden = fold.collapsed || activity.collapsed\n const member = (\n <div\n id={memberId}\n data-turn-process=\"\"\n data-tool-group-member=\"\"\n data-tool-group-hidden={hidden || undefined}\n hidden={hidden}\n >\n <div\n {...eventAttributes}\n ref={memberRef}\n className={css.eventRow}\n data-stream-tool-group-member=\"\"\n data-stream-tool-group-position={group.position}\n data-stream-tool-group-collapsed={activity.collapsed || undefined}\n >\n {children}\n </div>\n </div>\n )\n\n if (mount === null) return member\n return (\n <span data-tool-group-proxy=\"\" aria-hidden>\n {createPortal(member, mount)}\n </span>\n )\n}\n\n/** Render the group heading with the semantic icon supplied by the tool view. */\nexport function ToolActivityGroupHeader({\n label,\n icon,\n}: {\n readonly label: string\n readonly icon: ReactNode\n}) {\n return (\n <>\n <span className={css.toolGroupHeaderIcon} aria-hidden>{icon}</span>\n <span className={css.toolGroupHeaderLabel}>{label}</span>\n </>\n )\n}\n","import { createElement, useCallback, useLayoutEffect, useRef, useState, type ComponentType, type MouseEvent } from 'react'\nimport { createPortal } from 'react-dom'\nimport { FiTool } from 'react-icons/fi'\nimport {\n IconAgentPresetOutline16,\n IconApiOutline14,\n IconBrowseOutline16,\n IconChecklistOutline14,\n IconCordisPluginOutline14,\n IconDataOutline16,\n IconEditOutline16,\n IconGlobeOutline14,\n IconQuestionOutline14,\n IconSearchOutline16,\n IconSettingsOutline16,\n IconSkillOutline16,\n StateDot,\n type IconProps,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport { FollowHost } from './FollowHost.tsx'\nimport { ToolActivityGroupHeader, ToolActivityGroupMember, toolActivityGroupId, type ToolActivityGroupInfo } from './ToolActivityGroup.tsx'\nimport { TurnProcessMember } from './TurnProcessMember.tsx'\nimport { turnProcessMemberId, type TurnFoldAddress } from './turnProcessFold.ts'\nimport { formatTurnProcessed, type TurnElapsedTranslator } from './turnElapsed.ts'\nimport css from './TypewriterAssistantNodeView.module.css'\n\n/** Props forwarded through a follow wrap; extra kit seats pass through. */\nexport type FollowWrapProps = {\n node?: unknown\n renderSlot?: unknown\n} & Record<string, unknown>\n\ninterface FollowMotionConfig {\n readonly minSpeedPxPerSec?: number | undefined\n readonly maxSpeedPxPerSec?: number | undefined\n}\n\nexport type ToolSemanticKind =\n | 'search'\n | 'read'\n | 'edit'\n | 'terminal'\n | 'data'\n | 'web'\n | 'code'\n | 'skill'\n | 'agent'\n | 'plugin'\n | 'question'\n | 'settings'\n | 'checklist'\n | 'other'\n\nconst TOOL_ICONS: Record<ToolSemanticKind, ComponentType<IconProps>> = {\n search: IconSearchOutline16,\n read: IconBrowseOutline16,\n edit: IconEditOutline16,\n terminal: IconApiOutline14,\n data: IconDataOutline16,\n web: IconGlobeOutline14,\n code: FiTool as ComponentType<IconProps>,\n skill: IconSkillOutline16,\n agent: IconAgentPresetOutline16,\n plugin: IconCordisPluginOutline14,\n question: IconQuestionOutline14,\n settings: IconSettingsOutline16,\n checklist: IconChecklistOutline14,\n other: FiTool as ComponentType<IconProps>,\n}\n\nconst CONVERSATION_NODE_ICONS: Readonly<Partial<Record<string, ComponentType<IconProps>>>> = {\n context: IconBrowseOutline16,\n}\n\nfunction toolTokens(toolName: string): readonly string[] {\n return toolName\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .toLowerCase()\n .split(/[^a-z\\d]+/)\n .filter(Boolean)\n}\n\n/**\n * Map a wire Tool name onto the closest Harness icon family. Custom plugins\n * do not have to register UI code: descriptive names such as\n * `smops_knowledge_search` still receive a meaningful search glyph.\n */\nexport function semanticToolKind(toolName: string): ToolSemanticKind {\n const tokens = toolTokens(toolName)\n const has = (...terms: readonly string[]) => terms.some(term => tokens.includes(term))\n\n // Domain nouns outrank generic action verbs: `load_skill` is a Skill action,\n // and `create_subagent` is an Agent action—not a file read/edit operation.\n if (has('skill', 'skills')) return 'skill'\n if (has('agent', 'subagent', 'delegate')) return 'agent'\n if (has('cordis', 'plugin', 'plugins')) return 'plugin'\n if (has('question', 'ask', 'clarify', 'input')) return 'question'\n if (has('scope', 'config', 'settings', 'setting')) return 'settings'\n if (has('database', 'db', 'sql', 'schema', 'table', 'record', 'records', 'dataset', 'memory')) return 'data'\n if (has('plan', 'todo', 'task', 'checklist', 'goal')) return 'checklist'\n if (has('edit', 'write', 'patch', 'replace', 'create', 'delete', 'remove', 'move', 'copy')) return 'edit'\n if (has('bash', 'shell', 'terminal', 'exec', 'command', 'cmd', 'powershell', 'pwsh')) return 'terminal'\n if (has('web', 'browser', 'url', 'http', 'https', 'crawl', 'scrape')) return 'web'\n if (has('read', 'load', 'open', 'file', 'files')) return 'read'\n if (has('search', 'find', 'grep', 'glob', 'query', 'lookup', 'knowledge', 'retrieve', 'index', 'log', 'logs', 'trace')) return 'search'\n if (has('code', 'codegraph', 'graph', 'python', 'javascript', 'typescript', 'node', 'program')) return 'code'\n return 'other'\n}\n\ntype ToolPresentation = {\n readonly name: string\n readonly semantic: ToolSemanticKind\n readonly state: 'error' | 'stopped' | null\n}\n\nfunction toolPresentation(node: unknown): ToolPresentation | null {\n if (node === null || typeof node !== 'object' || !('data' in node)) return null\n const data = (node as { data: unknown }).data\n if (data === null || typeof data !== 'object' || !('root' in data)) return null\n const root = (data as { root: unknown }).root\n if (root === null || typeof root !== 'object') return null\n\n const name = 'name' in root && typeof (root as { name: unknown }).name === 'string'\n ? (root as { name: string }).name\n : 'call' in root\n && (root as { call: unknown }).call !== null\n && typeof (root as { call: unknown }).call === 'object'\n && 'name' in ((root as { call: object }).call)\n && typeof ((root as { call: { name: unknown } }).call.name) === 'string'\n ? (root as { call: { name: string } }).call.name\n : ''\n if (name === '') return null\n\n const isError = ('isError' in root && (root as { isError: unknown }).isError === true)\n || ('error' in root && (root as { error: unknown }).error !== null && (root as { error: unknown }).error !== undefined)\n const errorCode = 'error' in root\n && (root as { error: unknown }).error !== null\n && typeof (root as { error: unknown }).error === 'object'\n && 'code' in ((root as { error: object }).error)\n && typeof ((root as { error: { code: unknown } }).error.code) === 'string'\n ? (root as { error: { code: string } }).error.code.toLowerCase()\n : ''\n const stopped = /cancel|interrupt|abort|stop/.test(errorCode)\n return {\n name,\n semantic: semanticToolKind(name),\n state: stopped ? 'stopped' : isError ? 'error' : null,\n }\n}\n\nfunction diffLineCount(value: unknown): number {\n if (typeof value !== 'string' || value === '') return 0\n const body = value.endsWith('\\n')\n ? value.slice(0, -1)\n : value.endsWith('\\\\n') ? value.slice(0, -2) : value\n return body === '' ? 0 : body.split(/\\r?\\n|\\\\n/).length\n}\n\n/**\n * Derive the compact +/- suffix shown beside an edit file path. The native\n * edit card already owns the actual diff body; this only mirrors its counts\n * into the collapsed summary row.\n */\nexport function editDiffFilePath(node: unknown): string | undefined {\n const presentation = toolPresentation(node)\n if (presentation?.semantic !== 'edit' || presentation.state !== null || node === null || typeof node !== 'object') return undefined\n const data = (node as { data?: unknown }).data\n if (data === null || typeof data !== 'object' || !('root' in data)) return undefined\n const root = (data as { root: unknown }).root\n if (root === null || typeof root !== 'object') return undefined\n const view = 'resultView' in root\n ? (root as { resultView: unknown; callView?: unknown }).resultView ?? (root as { callView?: unknown }).callView\n : 'callView' in root ? (root as { callView: unknown }).callView : undefined\n if (view === null || typeof view !== 'object' || (view as { card?: unknown }).card !== 'diff') return undefined\n const diffs = (view as { diffs?: unknown }).diffs\n if (!Array.isArray(diffs)) return undefined\n const first = diffs.find(diff => diff !== null && typeof diff === 'object' && typeof (diff as { path?: unknown }).path === 'string')\n return first === undefined ? undefined : (first as { path: string }).path\n}\n\nexport function editDiffStats(node: unknown): string | undefined {\n const presentation = toolPresentation(node)\n if (presentation?.semantic !== 'edit' || presentation.state !== null || node === null || typeof node !== 'object') return undefined\n const data = (node as { data?: unknown }).data\n if (data === null || typeof data !== 'object' || !('root' in data)) return undefined\n const root = (data as { root: unknown }).root\n if (root === null || typeof root !== 'object') return undefined\n const view = 'resultView' in root\n ? (root as { resultView: unknown; callView?: unknown }).resultView ?? (root as { callView?: unknown }).callView\n : 'callView' in root ? (root as { callView: unknown }).callView : undefined\n if (view === null || typeof view !== 'object' || (view as { card?: unknown }).card !== 'diff') return undefined\n const diffs = (view as { diffs?: unknown }).diffs\n if (!Array.isArray(diffs)) return undefined\n let added = 0\n let removed = 0\n for (const diff of diffs) {\n if (diff === null || typeof diff !== 'object') continue\n added += diffLineCount((diff as { newText?: unknown }).newText)\n removed += diffLineCount((diff as { oldText?: unknown }).oldText)\n }\n return added === 0 && removed === 0 ? undefined : `+${added} -${removed}`\n}\n\nconst TOOL_GROUP_LABELS: Readonly<Record<ToolSemanticKind, string>> = {\n search: '搜索',\n read: '读取了文件',\n edit: '编辑了文件',\n terminal: '运行了命令',\n data: '查询了数据',\n web: '浏览了网页',\n code: '运行了代码',\n skill: '使用了技能',\n agent: '调用了智能体',\n plugin: '调用了插件',\n question: '发起了提问',\n settings: '更新了设置',\n checklist: '更新了清单',\n other: '执行了操作',\n}\n\nconst NATIVE_GROUP_LABELS: Readonly<Record<string, string>> = {\n context: '注入了 Prompt',\n}\n\nfunction visibleNode(node: unknown): boolean {\n if (node === null || typeof node !== 'object') return false\n return !('visibility' in node) || (node as { visibility: unknown }).visibility === 'visible'\n}\n\nfunction sameActivityGroupNode(\n node: unknown,\n nodeKind: string,\n turn: number,\n semantic: string,\n requiresTurn: boolean,\n): boolean {\n return visibleNode(node)\n && chatNodeKind(node) === nodeKind\n && (!requiresTurn || turnDetailsFromNode(node)?.turn === turn)\n && (nodeKind !== 'tool-call' || toolPresentation(node)?.semantic === semantic)\n}\n\nfunction activityGroup(\n snapshot: unknown,\n currentKey: string,\n sessionId: string,\n turn: number,\n nodeKind: string,\n semantic: string,\n label: string,\n requiresTurn: boolean,\n): ToolActivityGroupInfo | undefined {\n if (snapshot === null || typeof snapshot !== 'object' || !('chat' in snapshot)) return undefined\n const chat = (snapshot as { chat: unknown }).chat\n if (chat === null || typeof chat !== 'object' || !('order' in chat) || !('nodes' in chat)) return undefined\n const order = (chat as { order: unknown }).order\n const nodes = (chat as { nodes: unknown }).nodes\n if (!Array.isArray(order) || nodes === null || typeof nodes !== 'object' || !('get' in nodes)) return undefined\n const get = (nodes as { get: unknown }).get\n if (typeof get !== 'function') return undefined\n const currentIndex = order.indexOf(currentKey)\n if (currentIndex === -1) return undefined\n const read = (index: number): unknown => {\n const key = order[index]\n return typeof key === 'string' ? get.call(nodes, key) : undefined\n }\n const same = (node: unknown) => sameActivityGroupNode(node, nodeKind, turn, semantic, requiresTurn)\n if (!same(read(currentIndex))) return undefined\n let first = currentIndex\n let last = currentIndex\n while (first > 0 && same(read(first - 1))) first -= 1\n while (last + 1 < order.length && same(read(last + 1))) last += 1\n const count = last - first + 1\n if (count < 2) return undefined\n const firstKey = order[first]\n if (typeof firstKey !== 'string') return undefined\n let hasGrowing = false\n for (let index = first; index <= last; index += 1) {\n if (isGrowingChatNode(read(index))) {\n hasGrowing = true\n break\n }\n }\n const groupId = toolActivityGroupId(sessionId, turn, semantic, firstKey)\n return {\n id: groupId,\n domId: `${groupId}-frame`,\n semantic,\n label,\n count,\n position: currentIndex === first ? 'start' : currentIndex === last ? 'end' : 'middle',\n hasGrowing,\n }\n}\n\n/** Find one contiguous same-kind Tool run inside a Turn. */\nexport function toolActivityGroup(\n snapshot: unknown,\n currentKey: string,\n sessionId: string,\n turn: number,\n semantic: ToolSemanticKind,\n): ToolActivityGroupInfo | undefined {\n return activityGroup(\n snapshot,\n currentKey,\n sessionId,\n turn,\n 'tool-call',\n semantic,\n TOOL_GROUP_LABELS[semantic],\n true,\n )\n}\n\n/** Find one contiguous run of a native Stream activity such as Prompt context. */\nexport function nativeActivityGroup(\n snapshot: unknown,\n currentKey: string,\n sessionId: string,\n turn: number,\n kind: string,\n): ToolActivityGroupInfo | undefined {\n const label = NATIVE_GROUP_LABELS[kind]\n return label === undefined ? undefined : activityGroup(\n snapshot,\n currentKey,\n sessionId,\n turn,\n kind,\n kind,\n label,\n false,\n )\n}\n\nfunction ToolSemanticIcon({\n presentation,\n className = css.toolSemanticIcon,\n}: {\n readonly presentation: ToolPresentation\n readonly className?: string | undefined\n}) {\n const Icon = TOOL_ICONS[presentation.semantic]\n const glyph = presentation.semantic === 'code' || presentation.semantic === 'other'\n ? 'wrench'\n : presentation.semantic\n return (\n <span\n className={className}\n data-tool-semantic-icon={presentation.semantic}\n data-tool-glyph={glyph}\n aria-hidden\n >\n {presentation.state === 'error'\n ? <StateDot state=\"error\" />\n : presentation.state === 'stopped'\n ? <StateDot state=\"warning\" />\n : <Icon size={14} />}\n </span>\n )\n}\n\ninterface NestedToolIconTarget {\n readonly key: string\n readonly target: HTMLElement\n readonly presentation: ToolPresentation\n}\n\nfunction sameNestedToolIconTargets(\n current: readonly NestedToolIconTarget[],\n next: readonly NestedToolIconTarget[],\n): boolean {\n return current.length === next.length && current.every((item, index) => {\n const candidate = next[index]\n return candidate !== undefined\n && item.key === candidate.key\n && item.target === candidate.target\n && item.presentation.name === candidate.presentation.name\n && item.presentation.semantic === candidate.presentation.semantic\n && item.presentation.state === candidate.presentation.state\n })\n}\n\n/** Find expandable nested Tool headers rendered by the Harness Tool tree. */\nexport function nestedToolIconTargets(root: HTMLElement): NestedToolIconTarget[] {\n const targets: NestedToolIconTarget[] = []\n const callRows = root.querySelectorAll<HTMLElement>('[data-subcalls] [data-chat-call-id]')\n callRows.forEach((callRow, index) => {\n const slot = Array.from(callRow.children).find(child => (\n child instanceof HTMLElement && child.matches('[data-slot=\"tool.call.toolview\"]')\n )) as HTMLElement | undefined\n if (slot === undefined) return\n\n const toolRoot = slot.querySelector<HTMLElement>(':scope > [data-tool]')\n const bashRoot = slot.querySelector<HTMLElement>(':scope > * > [data-sample=\"bash\"]')\n const target = toolRoot?.querySelector<HTMLElement>(\n ':scope > * > [data-disclosure-row][aria-expanded]',\n ) ?? (bashRoot?.matches('[aria-expanded]') === true ? bashRoot : null)\n if (target === null) return\n\n const name = toolRoot?.getAttribute('data-tool') ?? 'bash'\n const stateName = toolRoot?.getAttribute('data-state') ?? bashRoot?.getAttribute('data-state')\n const state = stateName === 'error'\n ? 'error'\n : stateName === 'stopped' ? 'stopped' : null\n targets.push({\n key: callRow.getAttribute('data-chat-call-id') ?? `${name}-${index}`,\n target,\n presentation: { name, semantic: semanticToolKind(name), state },\n })\n })\n return targets\n}\n\n/**\n * Nested DisclosureRows replace their leading icon with a chevron when open.\n * A portal owned by this plugin keeps a semantic icon mounted in each header\n * across that internal state change while Harness continues to own the body.\n */\nfunction NestedToolSemanticIcons({\n owner,\n revision,\n}: {\n readonly owner: HTMLDivElement | null\n readonly revision: unknown\n}) {\n const [targets, setTargets] = useState<readonly NestedToolIconTarget[]>([])\n useLayoutEffect(() => {\n const next = owner === null ? [] : nestedToolIconTargets(owner)\n setTargets(current => sameNestedToolIconTargets(current, next) ? current : next)\n }, [owner, revision])\n\n return targets.map(({ key, target, presentation }) => {\n const Icon = TOOL_ICONS[presentation.semantic]\n return createPortal(\n <span\n className={css.nestedToolSemanticIcon}\n data-stream-nested-tool-icon={presentation.semantic}\n aria-hidden\n >\n {presentation.state === 'error'\n ? <StateDot state=\"error\" />\n : presentation.state === 'stopped'\n ? <StateDot state=\"warning\" />\n : <Icon size={14} />}\n </span>,\n target,\n key,\n )\n })\n}\n\nfunction ConversationNodeSemanticIcon({\n kind,\n className = css.streamSemanticIcon,\n}: {\n readonly kind: string\n readonly className?: string | undefined\n}) {\n const Icon = CONVERSATION_NODE_ICONS[kind]\n if (Icon === undefined) return null\n return (\n <span\n className={className}\n data-stream-semantic-icon={kind}\n aria-hidden\n >\n <Icon size={14} />\n </span>\n )\n}\n\nfunction chatNodeKind(node: unknown): string {\n if (node === null || typeof node !== 'object' || !('kind' in node)) return 'unknown'\n const kind = (node as { kind: unknown }).kind\n return typeof kind === 'string' ? kind : 'unknown'\n}\n\nconst KEEP_VISIBLE_KINDS = new Set(['turn-tail', 'turn-error', 'turn-max-tokens'])\n\ninterface TurnDetails {\n readonly turn: number\n readonly startTime: number | undefined\n}\n\nfunction turnDetailsFromNode(node: unknown): TurnDetails | undefined {\n if (node === null || typeof node !== 'object' || !('location' in node)) return undefined\n const location = (node as { location: unknown }).location\n if (location === null || typeof location !== 'object' || !('kind' in location)) return undefined\n const kind = (location as { kind: unknown }).kind\n if (kind !== 'turn' && kind !== 'step') return undefined\n const turn = (location as { turn?: unknown }).turn\n if (turn === null || typeof turn !== 'object' || !('turn' in turn)) return undefined\n const turnNumber = (turn as { turn: unknown }).turn\n if (typeof turnNumber !== 'number') return undefined\n const start = 'start' in turn ? (turn as { start: unknown }).start : undefined\n const startTime = start !== null\n && typeof start === 'object'\n && 'time' in start\n && typeof (start as { time: unknown }).time === 'number'\n ? (start as { time: number }).time\n : undefined\n return { turn: turnNumber, startTime }\n}\n\nfunction processAddress(node: unknown, sessionId: unknown): TurnFoldAddress | undefined {\n if (typeof sessionId !== 'string') return undefined\n const details = turnDetailsFromNode(node)\n return details === undefined ? undefined : { sessionId, turn: details.turn }\n}\n\nfunction nodeKey(node: unknown): string | undefined {\n if (node === null || typeof node !== 'object' || !('key' in node)) return undefined\n const key = (node as { key: unknown }).key\n return typeof key === 'string' ? key : undefined\n}\n\nfunction nodeOrder(node: unknown): number {\n if (node === null || typeof node !== 'object' || !('anchorSeq' in node)) return 0\n const anchorSeq = (node as { anchorSeq: unknown }).anchorSeq\n return typeof anchorSeq === 'number' ? anchorSeq : 0\n}\n\nfunction followingTurn(snapshot: unknown, currentKey: string): TurnDetails | undefined {\n if (snapshot === null || typeof snapshot !== 'object' || !('chat' in snapshot)) return undefined\n const chat = (snapshot as { chat: unknown }).chat\n if (chat === null || typeof chat !== 'object' || !('order' in chat) || !('nodes' in chat)) return undefined\n const order = (chat as { order: unknown }).order\n const nodes = (chat as { nodes: unknown }).nodes\n if (!Array.isArray(order) || nodes === null || typeof nodes !== 'object' || !('get' in nodes)) return undefined\n const get = (nodes as { get: unknown }).get\n if (typeof get !== 'function') return undefined\n const start = order.indexOf(currentKey)\n if (start === -1) return undefined\n for (let index = start + 1; index < order.length; index += 1) {\n const key = order[index]\n if (typeof key !== 'string') continue\n const turn = turnDetailsFromNode(get.call(nodes, key))\n if (turn !== undefined) return turn\n }\n return undefined\n}\n\n/**\n * Keep the latest settled Tool visibly active while the Agent is still\n * running but has not published its next Chat row yet. A later visible row\n * ends this handoff state; `turn-tail` is presentation metadata rather than\n * the next piece of model/process output.\n */\nfunction isAwaitingNextTurnNode(snapshot: unknown, currentKey: string, turnNumber: number): boolean {\n if (\n snapshot === null\n || typeof snapshot !== 'object'\n || !('running' in snapshot)\n || (snapshot as { running: unknown }).running !== true\n || !('chat' in snapshot)\n ) return false\n const chat = (snapshot as { chat: unknown }).chat\n if (chat === null || typeof chat !== 'object' || !('order' in chat) || !('nodes' in chat)) return false\n const order = (chat as { order: unknown }).order\n const nodes = (chat as { nodes: unknown }).nodes\n if (!Array.isArray(order) || nodes === null || typeof nodes !== 'object' || !('get' in nodes)) return false\n const get = (nodes as { get: unknown }).get\n if (typeof get !== 'function') return false\n\n if ('timeline' in chat) {\n const timeline = (chat as { timeline: unknown }).timeline\n if (timeline !== null && typeof timeline === 'object' && 'turns' in timeline) {\n const turns = (timeline as { turns: unknown }).turns\n if (turns instanceof Map) {\n const turn = turns.get(turnNumber)\n if (\n turn !== undefined\n && turn !== null\n && typeof turn === 'object'\n && 'status' in turn\n && (turn as { status: unknown }).status !== 'open'\n ) return false\n }\n }\n }\n\n const currentIndex = order.indexOf(currentKey)\n if (currentIndex === -1) return false\n for (let index = currentIndex + 1; index < order.length; index += 1) {\n const key = order[index]\n if (typeof key !== 'string') continue\n const candidate = get.call(nodes, key)\n if (candidate === null || typeof candidate !== 'object') continue\n if ('visibility' in candidate && (candidate as { visibility: unknown }).visibility !== 'visible') continue\n if ('kind' in candidate && (candidate as { kind: unknown }).kind === 'turn-tail') continue\n return false\n }\n return true\n}\n\n/**\n * True while a Chat node is still growing: an assistant/workflow `status:\n * 'running'` payload, a Tool root that has not settled (`kind` absent), or a\n * model-retry whose current attempt is still `scheduled`.\n * @param node - The Chat node's view `node` prop.\n * @returns whether this row should own conversation follow.\n */\nexport function isGrowingChatNode(node: unknown): boolean {\n if (node === null || typeof node !== 'object' || !('data' in node)) return false\n const data = (node as { data: unknown }).data\n if (data === null || typeof data !== 'object') return false\n if ('status' in data && (data as { status: unknown }).status === 'running') return true\n if ('root' in data) {\n const root = (data as { root: unknown }).root\n if (root !== null && typeof root === 'object' && !('kind' in root)) return true\n }\n if ('current' in data) {\n const current = (data as { current: unknown }).current\n if (\n current !== null\n && typeof current === 'object'\n && 'retryState' in current\n && (current as { retryState: unknown }).retryState === 'scheduled'\n ) return true\n }\n return false\n}\n\n/**\n * Wrap a prior Chat node renderer so a growing row shares conversation\n * follow. Presentation stays with the wrapped component; kit seats\n * (`renderSlot`, locale, inject) pass through unchanged.\n * @param Inner - The already-registered row component.\n * @returns A follow-hosted row.\n */\nexport function wrapFollowNodeView(Inner: ComponentType<FollowWrapProps>, motion: FollowMotionConfig = {}) {\n return function TypewriterFollowNodeView(props: FollowWrapProps) {\n const kind = chatNodeKind(props.node)\n const directAddress = KEEP_VISIBLE_KINDS.has(kind) ? undefined : processAddress(props.node, props.sessionId)\n const key = nodeKey(props.node)\n const useSession = props.useSession\n if (\n directAddress !== undefined\n && kind === 'tool-call'\n && key !== undefined\n && typeof useSession === 'function'\n ) {\n return (\n <TailAwareToolFollowNodeView\n Inner={Inner}\n motion={motion}\n props={props}\n address={directAddress}\n nodeKey={key}\n useSession={useSession as (selector: (snapshot: unknown) => unknown) => unknown}\n />\n )\n }\n if (\n directAddress === undefined\n && !KEEP_VISIBLE_KINDS.has(kind)\n && key !== undefined\n && typeof props.sessionId === 'string'\n && typeof useSession === 'function'\n ) {\n return (\n <InferredTurnFollowNodeView\n Inner={Inner}\n motion={motion}\n props={props}\n nodeKey={key}\n sessionId={props.sessionId}\n useSession={useSession as (selector: (snapshot: unknown) => unknown) => unknown}\n />\n )\n }\n return <FollowNodeView Inner={Inner} motion={motion} props={props} address={directAddress} />\n }\n}\n\nfunction TailAwareToolFollowNodeView({\n Inner,\n motion,\n props,\n address,\n nodeKey: currentKey,\n useSession,\n}: {\n readonly Inner: ComponentType<FollowWrapProps>\n readonly motion: FollowMotionConfig\n readonly props: FollowWrapProps\n readonly address: TurnFoldAddress\n readonly nodeKey: string\n readonly useSession: (selector: (snapshot: unknown) => unknown) => unknown\n}) {\n const awaitingNext = useSession(snapshot => isAwaitingNextTurnNode(snapshot, currentKey, address.turn)) as boolean\n const presentation = toolPresentation(props.node)\n const group = typeof props.sessionId === 'string' && presentation !== null\n ? useSession(snapshot => toolActivityGroup(\n snapshot,\n currentKey,\n props.sessionId as string,\n address.turn,\n presentation.semantic,\n )) as ToolActivityGroupInfo | undefined\n : undefined\n return (\n <FollowNodeView\n Inner={Inner}\n motion={motion}\n props={props}\n address={address}\n awaitingNext={awaitingNext}\n toolGroup={group}\n />\n )\n}\n\nfunction InferredTurnFollowNodeView({\n Inner,\n motion,\n props,\n nodeKey: currentKey,\n sessionId,\n useSession,\n}: {\n readonly Inner: ComponentType<FollowWrapProps>\n readonly motion: FollowMotionConfig\n readonly props: FollowWrapProps\n readonly nodeKey: string\n readonly sessionId: string\n readonly useSession: (selector: (snapshot: unknown) => unknown) => unknown\n}) {\n const turn = useSession(snapshot => followingTurn(snapshot, currentKey)) as TurnDetails | undefined\n const address = turn === undefined ? undefined : { sessionId, turn: turn.turn }\n const kind = chatNodeKind(props.node)\n const group = useSession(snapshot => kind === 'context' && turn !== undefined\n ? nativeActivityGroup(snapshot, currentKey, sessionId, turn.turn, kind)\n : undefined) as ToolActivityGroupInfo | undefined\n return (\n <FollowNodeView\n Inner={Inner}\n motion={motion}\n props={props}\n address={address}\n toolGroup={group}\n turnStartTime={turn?.startTime}\n />\n )\n}\n\nfunction FollowNodeView({\n Inner,\n motion,\n props,\n address,\n awaitingNext = false,\n toolGroup,\n turnStartTime = turnDetailsFromNode(props.node)?.startTime,\n}: {\n readonly Inner: ComponentType<FollowWrapProps>\n readonly motion: FollowMotionConfig\n readonly props: FollowWrapProps\n readonly address: TurnFoldAddress | undefined\n readonly awaitingNext?: boolean | undefined\n readonly toolGroup?: ToolActivityGroupInfo | undefined\n readonly turnStartTime?: number | undefined\n}) {\n const speedCpsRef = useRef(35)\n const [eventElement, setEventElement] = useState<HTMLDivElement | null>(null)\n const eventRef = useCallback((element: HTMLDivElement | null) => {\n setEventElement(element)\n }, [])\n const growing = isGrowingChatNode(props.node)\n const kind = chatNodeKind(props.node)\n const staticCompaction = kind === 'compaction' || kind === 'manual-compaction'\n useLayoutEffect(() => {\n if (!staticCompaction || eventElement === null) return\n const disclosure = eventElement.querySelector<HTMLElement>('[data-compaction-disclosure]')\n const button = disclosure?.closest<HTMLButtonElement>('button')\n if (button === null || button === undefined) return\n const previousDisabled = button.disabled\n const previousExpanded = button.getAttribute('aria-expanded')\n button.disabled = true\n button.removeAttribute('aria-expanded')\n return () => {\n button.disabled = previousDisabled\n if (previousExpanded === null) button.removeAttribute('aria-expanded')\n else button.setAttribute('aria-expanded', previousExpanded)\n }\n }, [eventElement, props.node, staticCompaction])\n const preventCompactionExpand = staticCompaction\n ? (event: MouseEvent<HTMLDivElement>) => {\n event.preventDefault()\n event.stopPropagation()\n }\n : undefined\n const tool = kind === 'tool-call' ? toolPresentation(props.node) : null\n const editStats = tool === null ? undefined : editDiffStats(props.node)\n const [editStatsRow, setEditStatsRow] = useState<HTMLElement | null>(null)\n useLayoutEffect(() => {\n const row = editStats === undefined || eventElement === null\n ? null\n : eventElement.querySelector<HTMLElement>('[data-disclosure-row]')\n setEditStatsRow(previous => previous === row ? previous : row)\n }, [editStats, eventElement, props.node])\n const ownsStreamSemanticIcon = tool === null && CONVERSATION_NODE_ICONS[kind] !== undefined\n const toolProgressActive = tool !== null && (growing || awaitingNext)\n const key = nodeKey(props.node)\n const memberId = address === undefined || key === undefined ? undefined : turnProcessMemberId(address, key)\n const translate = typeof props.t === 'function' ? props.t as TurnElapsedTranslator : undefined\n const formatRunningElapsed = translate === undefined\n ? undefined\n : (ms: number) => formatTurnProcessed(ms, translate)\n const inner = (\n <>\n {tool !== null && <ToolSemanticIcon presentation={tool} />}\n {ownsStreamSemanticIcon && <ConversationNodeSemanticIcon kind={kind} />}\n {createElement(Inner, props)}\n {tool !== null && <NestedToolSemanticIcons owner={eventElement} revision={props.node} />}\n {editStats !== undefined && editStatsRow !== null && createPortal(\n <span\n className={css.editStats}\n data-stream-edit-stats=\"\"\n data-stream-edit-file={editDiffFilePath(props.node)}\n onClick={event => {\n event.stopPropagation()\n event.currentTarget.closest<HTMLElement>('[data-disclosure-row][data-expandable]')?.click()\n }}\n >\n {editStats}\n </span>,\n editStatsRow,\n )}\n </>\n )\n const activityRunning = growing || toolGroup?.hasGrowing === true\n const headerIcon = tool !== null\n ? <ToolSemanticIcon presentation={tool} className={css.toolGroupHeaderGlyph} />\n : ownsStreamSemanticIcon\n ? <ConversationNodeSemanticIcon kind={kind} className={css.toolGroupHeaderGlyph} />\n : null\n const eventAttributes = {\n 'data-stream-node': kind,\n 'data-stream-turn': address === undefined ? undefined : String(address.turn),\n 'data-stream-state': activityRunning ? 'running' : 'settled',\n 'data-stream-progress': toolProgressActive ? 'active' : undefined,\n 'data-stream-tool-row': tool === null ? undefined : '',\n 'data-stream-native-disclosure': tool === null ? '' : undefined,\n 'data-stream-semantic-icon-owned': ownsStreamSemanticIcon ? kind : undefined,\n 'data-tool-semantic': tool?.semantic,\n 'data-tool-name': tool?.name,\n }\n const activityHeader = toolGroup !== undefined && headerIcon !== null\n ? <ToolActivityGroupHeader label={toolGroup.label} icon={headerIcon} />\n : null\n return (\n <FollowHost\n active={activityRunning}\n speedCpsRef={speedCpsRef}\n minSpeedPxPerSec={motion.minSpeedPxPerSec}\n maxSpeedPxPerSec={motion.maxSpeedPxPerSec}\n >\n {memberId !== undefined && address !== undefined && toolGroup !== undefined && activityHeader !== null ? (\n <ToolActivityGroupMember\n group={toolGroup}\n address={address}\n memberId={memberId}\n memberOrder={nodeOrder(props.node)}\n turnStartTime={turnStartTime}\n formatRunningElapsed={formatRunningElapsed}\n memberRef={eventRef}\n eventAttributes={eventAttributes}\n header={activityHeader}\n >\n {inner}\n </ToolActivityGroupMember>\n ) : memberId !== undefined && address !== undefined ? (\n <TurnProcessMember\n address={address}\n memberId={memberId}\n memberOrder={nodeOrder(props.node)}\n turnStartTime={turnStartTime}\n formatRunningElapsed={formatRunningElapsed}\n memberRef={eventRef}\n className={css.eventRow}\n onClickCapture={preventCompactionExpand}\n data-stream-node={kind}\n data-stream-turn={address.turn}\n data-stream-state={growing ? 'running' : 'settled'}\n data-stream-progress={toolProgressActive ? 'active' : undefined}\n data-stream-tool-row={tool === null ? undefined : ''}\n data-stream-native-disclosure={tool === null ? '' : undefined}\n data-stream-semantic-icon-owned={ownsStreamSemanticIcon ? kind : undefined}\n data-tool-semantic={tool?.semantic}\n data-tool-name={tool?.name}\n >\n {inner}\n </TurnProcessMember>\n ) : (\n <div\n ref={eventRef}\n className={css.eventRow}\n onClickCapture={preventCompactionExpand}\n data-stream-node={kind}\n data-stream-state={growing ? 'running' : 'settled'}\n data-stream-progress={toolProgressActive ? 'active' : undefined}\n data-stream-tool-row={tool === null ? undefined : ''}\n data-stream-native-disclosure={tool === null ? '' : undefined}\n data-stream-semantic-icon-owned={ownsStreamSemanticIcon ? kind : undefined}\n data-tool-semantic={tool?.semantic}\n data-tool-name={tool?.name}\n >\n {inner}\n </div>\n )}\n </FollowHost>\n )\n}\n","import { createElement, useEffect, useState, type ComponentType } from 'react'\nimport {\n IconChevronDownOutline14,\n IconChevronRightOutline14,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { FollowWrapProps } from './TypewriterToolNodeView.tsx'\nimport {\n turnProcessBoundaryId,\n useTurnProcessFold,\n type TurnFoldAddress,\n} from './turnProcessFold.ts'\nimport { formatTurnProcessed, type TurnElapsedTranslator } from './turnElapsed.ts'\nimport css from './TypewriterAssistantNodeView.module.css'\n\ninterface TimelineTurn {\n readonly turn: number\n readonly status: 'open' | 'closed' | 'unknown'\n readonly start?: { readonly seq?: number; readonly time?: number } | undefined\n readonly end?: { readonly seq?: number } | undefined\n}\n\nfunction nodeKey(node: unknown): string | undefined {\n if (node === null || typeof node !== 'object' || !('key' in node)) return undefined\n return typeof (node as { key: unknown }).key === 'string' ? (node as { key: string }).key : undefined\n}\n\nfunction userSeq(node: unknown): number | undefined {\n if (node === null || typeof node !== 'object' || !('data' in node)) return undefined\n const data = (node as { data: unknown }).data\n if (data === null || typeof data !== 'object' || !('seq' in data)) return undefined\n return typeof (data as { seq: unknown }).seq === 'number' ? (data as { seq: number }).seq : undefined\n}\n\nfunction userTime(node: unknown): number | undefined {\n if (node === null || typeof node !== 'object' || !('data' in node)) return undefined\n const data = (node as { data: unknown }).data\n if (data === null || typeof data !== 'object' || !('time' in data)) return undefined\n return typeof (data as { time: unknown }).time === 'number' ? (data as { time: number }).time : undefined\n}\n\nfunction chatParts(snapshot: unknown): {\n readonly order: readonly unknown[]\n readonly get: (key: string) => unknown\n readonly turns: ReadonlyMap<number, TimelineTurn>\n readonly turnOrder: readonly number[]\n} | undefined {\n if (snapshot === null || typeof snapshot !== 'object' || !('chat' in snapshot)) return undefined\n const chat = (snapshot as { chat: unknown }).chat\n if (chat === null || typeof chat !== 'object') return undefined\n if (!('order' in chat) || !Array.isArray((chat as { order: unknown }).order)) return undefined\n if (!('nodes' in chat) || !('timeline' in chat)) return undefined\n const nodes = (chat as { nodes: unknown }).nodes\n const timeline = (chat as { timeline: unknown }).timeline\n if (nodes === null || typeof nodes !== 'object' || !('get' in nodes)) return undefined\n if (timeline === null || typeof timeline !== 'object' || !('turns' in timeline) || !('turnOrder' in timeline)) return undefined\n const get = (nodes as { get: unknown }).get\n const turns = (timeline as { turns: unknown }).turns\n const turnOrder = (timeline as { turnOrder: unknown }).turnOrder\n if (typeof get !== 'function' || !(turns instanceof Map) || !Array.isArray(turnOrder)) return undefined\n return {\n order: (chat as { order: readonly unknown[] }).order,\n get: (key: string) => get.call(nodes, key),\n turns: turns as ReadonlyMap<number, TimelineTurn>,\n turnOrder: turnOrder as readonly number[],\n }\n}\n\nfunction associatedTurn(snapshot: unknown, currentKey: string, currentSeq: number): TimelineTurn | undefined {\n const chat = chatParts(snapshot)\n if (chat === undefined) return undefined\n const currentIndex = chat.order.indexOf(currentKey)\n if (currentIndex === -1) return undefined\n const current = chat.get(currentKey)\n if (current !== null && typeof current === 'object' && 'location' in current) {\n const location = (current as { location: unknown }).location\n if (\n location !== null\n && typeof location === 'object'\n && 'kind' in location\n && ((location as { kind: unknown }).kind === 'turn' || (location as { kind: unknown }).kind === 'step')\n && 'turn' in location\n ) {\n const turn = (location as { turn: unknown }).turn\n if (turn !== null && typeof turn === 'object' && 'turn' in turn) return turn as TimelineTurn\n }\n }\n let closest: TimelineTurn | undefined\n let closestStartSeq = Number.NEGATIVE_INFINITY\n for (const turnNumber of chat.turnOrder) {\n const turn = chat.turns.get(turnNumber)\n const startSeq = turn?.start?.seq\n const endSeq = turn?.end?.seq\n if (\n turn !== undefined\n && typeof startSeq === 'number'\n && startSeq < currentSeq\n && (typeof endSeq !== 'number' || currentSeq < endSeq)\n && startSeq > closestStartSeq\n ) {\n closest = turn\n closestStartSeq = startSeq\n }\n }\n return closest\n}\n\nfunction isLatestUser(snapshot: unknown, currentKey: string): boolean {\n const chat = chatParts(snapshot)\n if (chat === undefined) return false\n for (let index = chat.order.length - 1; index >= 0; index -= 1) {\n const key = chat.order[index]\n if (typeof key !== 'string') continue\n const candidate = chat.get(key)\n if (candidate === null || typeof candidate !== 'object' || !('kind' in candidate)) continue\n if ((candidate as { kind: unknown }).kind === 'user') return key === currentKey\n }\n return false\n}\n\nfunction isRunning(snapshot: unknown): boolean {\n return snapshot !== null\n && typeof snapshot === 'object'\n && 'running' in snapshot\n && (snapshot as { running: unknown }).running === true\n}\n\nfunction useElapsedNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n setNow(Date.now())\n const timer = window.setInterval(() => setNow(Date.now()), 1_000)\n return () => window.clearInterval(timer)\n }, [active])\n return now\n}\n\nfunction TurnPrelude({\n active,\n address,\n boundaryId,\n boundaryOrder,\n startTime,\n t,\n}: {\n readonly active: boolean\n readonly address: TurnFoldAddress | undefined\n readonly boundaryId: string\n readonly boundaryOrder: number\n readonly startTime: number\n readonly t: TurnElapsedTranslator\n}) {\n const fold = useTurnProcessFold(address, { boundaryId, boundaryOrder })\n const running = active && !fold.completed\n const now = useElapsedNow(running)\n if (!running && !fold.completed) return null\n const label = fold.completed ? fold.label : formatTurnProcessed(now - startTime, t)\n if (label === undefined) return null\n return (\n <div className={css.turnPrelude} data-turn-prelude=\"\">\n <div\n className={css.turnFoldRow}\n data-turn-fold-row=\"\"\n data-turn-fold-state={fold.completed ? 'completed' : 'running'}\n >\n {fold.completed ? (\n <button\n type=\"button\"\n className={css.turnFoldButton}\n aria-expanded={!fold.collapsed}\n aria-controls={fold.controls}\n onClick={fold.toggle}\n >\n <span>{label}</span>\n {fold.collapsed ? <IconChevronRightOutline14 /> : <IconChevronDownOutline14 />}\n </button>\n ) : (\n <span className={css.turnFoldLabel} aria-live=\"off\">{label}</span>\n )}\n </div>\n {running && !fold.hasMembers && (\n <div className={css.turnWaiting} data-turn-waiting=\"\" role=\"status\" aria-live=\"polite\">\n 思考中\n </div>\n )}\n </div>\n )\n}\n\n/** Add an immediate Turn status boundary directly after an ordinary user row. */\nexport function wrapTurnPreludeNodeView(Inner: ComponentType<FollowWrapProps>) {\n return function TurnPreludeUserNodeView(props: FollowWrapProps) {\n const key = nodeKey(props.node)\n const seq = userSeq(props.node)\n const time = userTime(props.node)\n const useSession = props.useSession\n if (\n key === undefined\n || seq === undefined\n || time === undefined\n || typeof props.sessionId !== 'string'\n || typeof useSession !== 'function'\n || typeof props.t !== 'function'\n ) return createElement(Inner, props)\n return (\n <TurnPreludeUserWithSession\n Inner={Inner}\n props={props}\n nodeKey={key}\n nodeSeq={seq}\n nodeTime={time}\n sessionId={props.sessionId}\n useSession={useSession as (selector: (snapshot: unknown) => unknown) => unknown}\n t={props.t as TurnElapsedTranslator}\n />\n )\n }\n}\n\nfunction TurnPreludeUserWithSession({\n Inner,\n props,\n nodeKey: currentKey,\n nodeSeq,\n nodeTime,\n sessionId,\n useSession,\n t,\n}: {\n readonly Inner: ComponentType<FollowWrapProps>\n readonly props: FollowWrapProps\n readonly nodeKey: string\n readonly nodeSeq: number\n readonly nodeTime: number\n readonly sessionId: string\n readonly useSession: (selector: (snapshot: unknown) => unknown) => unknown\n readonly t: TurnElapsedTranslator\n}) {\n const turn = useSession(snapshot => associatedTurn(snapshot, currentKey, nodeSeq)) as TimelineTurn | undefined\n const running = useSession(isRunning) as boolean\n const latestUser = useSession(snapshot => isLatestUser(snapshot, currentKey)) as boolean\n const address = turn === undefined ? undefined : { sessionId, turn: turn.turn }\n const active = turn?.status === 'open' || (turn === undefined && running && latestUser)\n const startTime = typeof turn?.start?.time === 'number' ? turn.start.time : nodeTime\n return (\n <>\n {createElement(Inner, props)}\n <TurnPrelude\n active={active}\n address={address}\n boundaryId={turnProcessBoundaryId(sessionId, currentKey)}\n boundaryOrder={nodeSeq}\n startTime={startTime}\n t={t}\n />\n </>\n )\n}\n","/**\n * The conversation-ui plugin configuration card, rendered inside the Web\n * Settings \"plugin configuration\" page. One toggle, staged until the user\n * saves — the same shape as the Host-shipped cards, hand-drawn because the\n * Host cards' chrome is not exported for reuse.\n */\n\nimport { useState } from 'react'\nimport type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type {} from '@deepseek-ai/dsh-client-ui-settings-plugins/client'\nimport { IconChevronDownOutline14, IconRefreshOutline14 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { ConversationCardFace } from './conversation-ui-card-controller.ts'\nimport css from './ConversationCard.module.css'\n\n/** Props the renderer binds for the conversation-ui card. */\nexport type ConversationCardProps =\n PropsRuntime<'settings.plugin.item'>\n & PropsLocale<'settings.conversationUi'>\n & InjectFace<ConversationCardFace>\n\n/** Render the conversation-ui card independently of the core settings namespace allowlist. */\nexport function ConversationCard(props: ConversationCardProps) {\n const { t } = props\n const [open, setOpen] = useState(false)\n const state = props.useConversationUiCard(snapshot => snapshot)\n const blocked = !state.dirty || state.saving || state.status !== 'ready'\n const versionLabel = state.version === undefined\n ? null\n : t(state.installation === 'development' ? 'developmentVersion' : 'version')\n .replace('{version}', state.version)\n\n return (\n <li className={open ? `${css.card} ${css.cardOpen}` : css.card}>\n <button\n type=\"button\"\n className={css.header}\n aria-expanded={open}\n onClick={() => { setOpen(!open) }}\n >\n <span className={css.headText}>\n <span className={css.name}>{t('title')}</span>\n <span className={css.description}>{t('description')}</span>\n </span>\n {versionLabel === null ? null : <span className={css.version}>{versionLabel}</span>}\n {state.dirty ? <span className={css.pending}>{t('unsaved')}</span> : null}\n <IconChevronDownOutline14 className={open ? `${css.chevron} ${css.chevronOpen}` : css.chevron} />\n </button>\n {open\n ? (\n <div className={css.body}>\n {state.status === 'loading' ? <p className={css.readOnly} role=\"status\">{t('loading')}</p> : null}\n {state.status === 'unavailable' ? (\n <div className={css.failure}>\n <p className={css.readOnly} role=\"status\">{t('unavailable')}</p>\n <button type=\"button\" className={css.discard} onClick={props.reload}>{t('retry')}</button>\n </div>\n ) : null}\n {state.status === 'ready' ? (\n <>\n {!state.writable ? <p className={css.readOnly} role=\"status\">{t('readOnly')}</p> : null}\n <label className={css.field}>\n <span className={css.fieldHead}>\n <span className={css.label}>{t('thinkAutoExpand')}</span>\n <input\n type=\"checkbox\"\n className={css.toggle}\n checked={state.thinkAutoExpand}\n disabled={!state.writable}\n onChange={(event) => { props.edit(event.target.checked) }}\n />\n </span>\n <span className={css.hint}>{t('thinkAutoExpandHint')}</span>\n </label>\n <div className={css.updateRow}>\n <span className={css.updateCopy}>\n <span className={css.label}>{t('updates')}</span>\n <span className={css.hint}>\n {state.restartRequired\n ? t('restartRequired')\n : state.installation === 'npm' ? t('updateHint')\n : state.installation === 'development' ? t('developmentBuild') : t('updateUnavailable')}\n </span>\n </span>\n <button\n type=\"button\"\n className={css.update}\n disabled={!state.canUpgrade || state.upgrading || state.restartRequired}\n title={state.canUpgrade ? undefined : t('updateUnavailable')}\n onClick={props.upgrade}\n >\n <span aria-hidden=\"true\"><IconRefreshOutline14 /></span>\n {t(state.upgrading ? 'updating' : 'update')}\n </button>\n </div>\n {state.upgradeFailed ? <p className={css.failed} role=\"status\">{t('updateFailed')}</p> : null}\n <div className={css.footer}>\n {state.failed ? <p className={css.failed} role=\"status\">{t('saveFailed')}</p> : null}\n <button\n type=\"button\"\n className={css.discard}\n disabled={!state.dirty || state.saving}\n onClick={props.discard}\n >\n {t('discard')}\n </button>\n <button\n type=\"button\"\n className={css.save}\n disabled={blocked}\n onClick={props.save}\n >\n {t(state.saving ? 'saving' : 'save')}\n </button>\n </div>\n </>\n ) : null}\n </div>\n )\n : null}\n </li>\n )\n}\n","/**\n * User-owned settings for the conversation-ui plugin, exposed to the Host\n * settings service and edited from the Web Settings \"plugin configuration\"\n * page. This is the runtime-editable complement to {@link ConversationConfig}: that\n * contract is composed at load and bridged once through the boot global, while\n * these preferences live in the durable user-settings document and take effect\n * live.\n */\n\n/** Settings namespace registered by the Host and served through the plugin RPC. */\nexport const CONVERSATION_SETTINGS_NS = 'conversation-ui'\n\n/**\n * Preferences a user may set. Deliberately separate from {@link ConversationConfig}\n * because the two change at different times: composition-time values go\n * through the boot global, a live UI edit goes through the protected plugin RPC.\n */\nexport interface ConversationSettings {\n /**\n * Whether a reasoning (\"Think\") block auto-expands while it is the\n * streaming tail. Off keeps the block collapsed — the user can still open\n * it by hand — and stops the running state from re-owning the disclosure.\n */\n thinkAutoExpand: boolean\n}\n\n/** Defaults shared by the Host schema and the client-side fallback. */\nexport const DEFAULT_CONVERSATION_SETTINGS: ConversationSettings = {\n thinkAutoExpand: true,\n}\n","/** Staged form state for the plugin-owned conversation-ui settings RPC. */\n\nimport { createSnapshotStore, type SnapshotStore } from '@deepseek-ai/dsh-client-runtime/client'\nimport { DEFAULT_CONVERSATION_SETTINGS } from '../settings.ts'\nimport type { ConversationInstallationKind, ConversationSettingsView } from '../settings-api.ts'\nimport type { ConversationSettingsApi } from './conversation-ui-settings-api.ts'\n\n/** What the conversation-ui card renders. It remains visible while its Host RPC loads. */\nexport interface ConversationCardState {\n status: 'loading' | 'ready' | 'unavailable'\n writable: boolean\n dirty: boolean\n saving: boolean\n failed: boolean\n thinkAutoExpand: boolean\n version: string | undefined\n installation: ConversationInstallationKind\n canUpgrade: boolean\n upgrading: boolean\n upgradeFailed: boolean\n restartRequired: boolean\n}\n\n/** The registration-side face injected into the settings slot renderer. */\nexport interface ConversationCardFace {\n hooks: {\n conversationUiCard: SnapshotStore<ConversationCardState>\n }\n edit: (value: boolean) => void\n save: () => void\n discard: () => void\n reload: () => void\n upgrade: () => void\n}\n\n/** Bridges the plugin's protected Host interface onto a staged settings form. */\nexport class ConversationCardController {\n private readonly store = createSnapshotStore<ConversationCardState>(this.projection())\n private loaded: ConversationSettingsView | undefined\n private staged: boolean | undefined\n private saving = false\n private failed = false\n private upgrading = false\n private upgradeFailed = false\n private restartRequired = false\n private loadGeneration = 0\n private loadStatus: 'loading' | 'ready' | 'unavailable' = 'loading'\n\n constructor(private readonly api: ConversationSettingsApi) {}\n\n /** Begin the background read after the card has been registered. */\n start(): void {\n void this.load()\n }\n\n /** Ignore a late response after the surrounding optional services unload. */\n stop(): void {\n this.loadGeneration += 1\n }\n\n /** Current card snapshot, also consumed by the streaming preference cell. */\n getSnapshot(): ConversationCardState {\n return this.store.getSnapshot()\n }\n\n /** Subscribe to state changes. */\n subscribe(listener: () => void): () => void {\n return this.store.subscribe(listener)\n }\n\n /** Build the face consumed by the settings slot renderer. */\n inject(): ConversationCardFace {\n return {\n hooks: { conversationUiCard: this.store },\n edit: (value) => {\n this.staged = value\n this.failed = false\n this.publish()\n },\n save: () => { void this.save() },\n discard: () => {\n if (this.staged === undefined && !this.failed) return\n this.staged = undefined\n this.failed = false\n this.publish()\n },\n reload: () => { void this.load() },\n upgrade: () => { void this.upgrade() },\n }\n }\n\n private projection(): ConversationCardState {\n return {\n status: this.loadStatus,\n writable: this.loaded?.writable ?? false,\n dirty: this.staged !== undefined,\n saving: this.saving,\n failed: this.failed,\n thinkAutoExpand: this.staged ?? this.loaded?.thinkAutoExpand ?? DEFAULT_CONVERSATION_SETTINGS.thinkAutoExpand,\n version: this.loaded?.version,\n installation: this.loaded?.installation ?? 'unmanaged',\n canUpgrade: this.loaded?.canUpgrade ?? false,\n upgrading: this.upgrading,\n upgradeFailed: this.upgradeFailed,\n restartRequired: this.restartRequired,\n }\n }\n\n private async load(): Promise<void> {\n const generation = ++this.loadGeneration\n this.loadStatus = 'loading'\n this.loaded = undefined\n this.publish()\n try {\n const view = await this.api.read()\n if (generation !== this.loadGeneration) return\n this.loaded = view\n this.loadStatus = 'ready'\n } catch {\n if (generation !== this.loadGeneration) return\n this.loaded = undefined\n this.loadStatus = 'unavailable'\n }\n this.publish()\n }\n\n private async save(): Promise<void> {\n if (this.staged === undefined || this.saving || this.loaded?.writable !== true) return\n const value = this.staged\n this.saving = true\n this.failed = false\n this.publish()\n try {\n this.loaded = await this.api.write(value)\n this.staged = undefined\n } catch {\n this.failed = true\n }\n this.saving = false\n this.publish()\n }\n\n private async upgrade(): Promise<void> {\n if (this.loaded?.canUpgrade !== true || this.upgrading) return\n this.upgrading = true\n this.upgradeFailed = false\n this.restartRequired = false\n this.publish()\n try {\n const result = await this.api.upgrade()\n this.restartRequired = result.restartRequired\n } catch {\n this.upgradeFailed = true\n }\n this.upgrading = false\n this.publish()\n }\n\n private publish(): void {\n this.store.set(this.projection())\n }\n}\n","import { useLayoutEffect, useState } from 'react'\nimport type { TurnTailOwnerProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport {\n IconChevronDownOutline14,\n IconChevronUpOutline14,\n IconGlobeOutline14,\n IconProjectAddOutline16,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { DeliverableEntry } from './deliverables.ts'\nimport css from './DeliverablesCard.module.css'\n\nexport interface DeliverablesCardProps extends TurnTailOwnerProps {\n readonly matched: readonly DeliverableEntry[]\n}\n\nfunction isWebsite(entry: DeliverableEntry): boolean {\n return entry.kind === 'website' || /^https?:\\/\\//i.test(entry.path)\n}\n\nfunction openWebsite(path: string): void {\n if (typeof window !== 'undefined') window.open(path, '_blank', 'noopener,noreferrer')\n}\n\nfunction pathParts(path: string): { parent: string; name: string } {\n const separator = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'))\n if (separator < 0) return { parent: '', name: path }\n return { parent: path.slice(0, separator + 1), name: path.slice(separator + 1) }\n}\n\nfunction hiddenKindLabel(entries: readonly DeliverableEntry[]): string {\n if (entries.every(isWebsite)) return '网站'\n if (entries.every(entry => !isWebsite(entry))) return '文件'\n return '产物'\n}\n\nfunction countLabel(entries: readonly DeliverableEntry[]): string {\n const files = entries.filter(entry => !isWebsite(entry)).length\n const websites = entries.length - files\n if (files > 0 && websites === 0) return `已编辑 ${files} 个文件`\n if (files === 0) return `交付 ${websites} 个网站`\n return `已交付 ${entries.length} 项产物`\n}\n\ninterface EditStats {\n readonly added: number\n readonly removed: number\n}\n\nfunction collectEditStats(turn: number): ReadonlyMap<string, EditStats> {\n const result = new Map<string, EditStats>()\n if (typeof document === 'undefined') return result\n for (const element of document.querySelectorAll<HTMLElement>('[data-stream-edit-stats]')) {\n const row = element.closest<HTMLElement>('[data-stream-turn]')\n if (row?.getAttribute('data-stream-turn') !== String(turn)) continue\n const path = element.getAttribute('data-stream-edit-file')\n const match = /\\+(\\d+)\\s+-\\s*(\\d+)/.exec(element.textContent ?? '')\n if (path === null || match === null) continue\n result.set(path, { added: Number(match[1]), removed: Number(match[2]) })\n }\n return result\n}\n\n/** Codex-style turn-tail card for edited files and deployed websites. */\nexport function DeliverablesCard({ matched, turn, openFile }: DeliverablesCardProps) {\n const [expanded, setExpanded] = useState(false)\n const [domStats, setDomStats] = useState<ReadonlyMap<string, EditStats>>(() => new Map())\n useLayoutEffect(() => {\n setDomStats(collectEditStats(turn.turn))\n }, [turn.turn, matched])\n const entries = matched.map(entry => {\n const stats = domStats.get(entry.path)\n return stats === undefined || entry.added > 0 || entry.removed > 0 ? entry : { ...entry, ...stats }\n })\n const visible = expanded ? entries : entries.slice(0, 3)\n const hidden = entries.length - visible.length\n const summary = countLabel(entries)\n const hasFiles = entries.some(entry => !isWebsite(entry))\n const firstWebsite = entries.find(isWebsite)\n return (\n <section className={css.root} data-stream-deliverables-card data-stream-deliverables-count={entries.length}>\n <div className={css.header}>\n <span className={css.headerIcon} aria-hidden>\n {hasFiles ? <IconProjectAddOutline16 size={20} /> : <IconGlobeOutline14 size={20} />}\n </span>\n <div className={css.heading}>\n <strong className={css.title}>{summary}</strong>\n {hasFiles ? (\n <button type=\"button\" className={css.subtitle} onClick={() => { setExpanded(true) }}>\n 查看更改 ↗\n </button>\n ) : firstWebsite !== undefined ? (\n <button type=\"button\" className={css.subtitle} onClick={() => { openWebsite(firstWebsite.path) }}>\n 打开网站 ↗\n </button>\n ) : null}\n </div>\n </div>\n <div className={css.list}>\n {visible.map(entry => {\n const website = isWebsite(entry)\n const parts = pathParts(entry.path)\n return (\n <button\n key={`${entry.kind}:${entry.path}`}\n type=\"button\"\n className={css.item}\n title={entry.path}\n onClick={() => { website ? openWebsite(entry.path) : openFile(entry.path) }}\n >\n {website ? (\n <span className={css.websitePath}>{entry.path}</span>\n ) : (\n <span className={css.filePath}>\n {parts.parent !== '' && <span className={css.parentPath}>{parts.parent}</span>}\n <span className={css.fileName}>{parts.name || entry.path}</span>\n </span>\n )}\n {!website && (entry.added > 0 || entry.removed > 0) && (\n <span className={css.stats}>\n {entry.added > 0 && <span className={css.added}>+{entry.added}</span>}\n {entry.removed > 0 && <span className={css.removed}>-{entry.removed}</span>}\n </span>\n )}\n {website && <span className={css.external} aria-hidden>↗</span>}\n </button>\n )\n })}\n </div>\n {hidden > 0 && (\n <button type=\"button\" className={css.more} onClick={() => { setExpanded(true) }}>\n 再显示 {hidden} 个{hiddenKindLabel(entries.slice(visible.length))}\n <span className={css.moreIcon} aria-hidden><IconChevronDownOutline14 /></span>\n </button>\n )}\n {expanded && entries.length > 3 && (\n <button type=\"button\" className={css.more} onClick={() => { setExpanded(false) }}>\n 收起 <span className={css.moreIcon} aria-hidden><IconChevronUpOutline14 /></span>\n </button>\n )}\n </section>\n )\n}\n","import type { ConversationNodeDefinition } from '@deepseek-ai/dsh-client-runtime/client'\nimport { isAppendSurfaceEvent } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { TurnTailOwnerProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\n\nexport const DELIVERABLES_DATA_KEY = 'dsh-conversation-ui-deliverables' as const\n\nexport interface DeliverableEntry {\n readonly path: string\n readonly seq: number\n readonly added: number\n readonly removed: number\n readonly kind: 'file' | 'website'\n}\n\nexport interface ConversationDeliverablesData {\n readonly entries: readonly DeliverableEntry[]\n}\n\ndeclare module '@deepseek-ai/dsh-client-runtime/client' {\n interface ConversationTurnDataMap {\n 'dsh-conversation-ui-deliverables': ConversationDeliverablesData\n }\n}\n\ninterface CallRecord {\n readonly name: string\n readonly argsRaw: string | undefined\n readonly view: unknown\n}\n\ninterface DeliverablesState extends ConversationDeliverablesData {\n readonly turn: number\n readonly calls: ReadonlyMap<string, CallRecord>\n}\n\ntype UnknownRecord = Record<string, unknown>\n\nfunction record(value: unknown): UnknownRecord | undefined {\n return value !== null && typeof value === 'object' ? value as UnknownRecord : undefined\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined\n}\n\nfunction diffLines(value: unknown): number {\n const text = stringValue(value)\n if (text === undefined) return 0\n const body = text.endsWith('\\n')\n ? text.slice(0, -1)\n : text.endsWith('\\\\n') ? text.slice(0, -2) : text\n return body === '' ? 0 : body.split(/\\r?\\n|\\\\n/).length\n}\n\nfunction jsonArgs(argsRaw: string | undefined): UnknownRecord {\n if (argsRaw === undefined) return {}\n try {\n const parsed: unknown = JSON.parse(argsRaw)\n return record(parsed) ?? {}\n } catch {\n return {}\n }\n}\n\nfunction viewEntries(view: unknown): readonly Omit<DeliverableEntry, 'seq'>[] {\n const object = record(view)\n if (object === undefined) return []\n const card = object.card\n const locations = Array.isArray(object.locations) ? object.locations : []\n const locationPaths = locations.flatMap(location => {\n const path = stringValue(record(location)?.path)\n return path === undefined ? [] : [path]\n })\n if (card === 'diff') {\n const diffs = Array.isArray(object.diffs) ? object.diffs : []\n if (diffs.length === 0) return locationPaths.map(path => ({ path, added: 0, removed: 0, kind: 'file' as const }))\n return diffs.flatMap(diff => {\n const item = record(diff)\n const path = stringValue(item?.path)\n if (path === undefined) return []\n return [{\n path,\n added: diffLines(item?.newText),\n removed: diffLines(item?.oldText),\n kind: 'file' as const,\n }]\n })\n }\n if (card === 'generic' && object.kind === 'edit') {\n return locationPaths.map(path => ({ path, added: 0, removed: 0, kind: 'file' as const }))\n }\n const url = stringValue(object.url) ?? stringValue(object.href)\n return url === undefined || !/^https?:\\/\\//i.test(url)\n ? []\n : [{ path: url, added: 0, removed: 0, kind: 'website' as const }]\n}\n\nfunction mutationPath(name: string, argsRaw: string | undefined): string | undefined {\n const args = jsonArgs(argsRaw)\n const path = stringValue(args.file_path) ?? stringValue(args.path) ?? stringValue(args.filename)\n if (path === undefined || /^https?:\\/\\//i.test(path)) return undefined\n const tokens = name.toLowerCase().split(/[^a-z\\d]+/).filter(Boolean)\n return tokens.some(token => ['edit', 'write', 'patch', 'replace', 'create', 'insert', 'append'].includes(token))\n ? path\n : undefined\n}\n\nfunction websiteTool(name: string): boolean {\n const tokens = name.toLowerCase().split(/[^a-z\\d]+/).filter(Boolean)\n return tokens.some(token => ['deploy', 'publish', 'preview', 'website', 'site', 'artifact'].includes(token))\n}\n\nfunction resultWebsiteEntries(name: string, value: unknown): readonly Omit<DeliverableEntry, 'seq'>[] {\n if (!websiteTool(name)) return []\n let text = ''\n try {\n text = JSON.stringify(value) ?? ''\n } catch {\n return []\n }\n const urls = text.match(/https?:\\/\\/[^\\s\"'<>\\\\]+/gi) ?? []\n return [...new Set(urls.map(url => url.replace(/[),.;]+$/g, '')))].map(path => ({\n path,\n added: 0,\n removed: 0,\n kind: 'website' as const,\n }))\n}\n\nfunction websiteUrl(name: string, argsRaw: string | undefined): string | undefined {\n const args = jsonArgs(argsRaw)\n const candidate = stringValue(args.url)\n ?? stringValue(args.href)\n ?? stringValue(args.preview_url)\n ?? stringValue(args.website_url)\n if (candidate === undefined || !/^https?:\\/\\//i.test(candidate)) return undefined\n const tokens = name.toLowerCase().split(/[^a-z\\d]+/).filter(Boolean)\n return tokens.some(token => ['deploy', 'publish', 'preview', 'website', 'site', 'artifact'].includes(token))\n ? candidate\n : undefined\n}\n\nfunction appendEntries(\n current: readonly DeliverableEntry[],\n next: readonly Omit<DeliverableEntry, 'seq'>[],\n seq: number,\n): readonly DeliverableEntry[] {\n const entries = [...current]\n for (const candidate of next) {\n const existing = entries.findIndex(entry => entry.path === candidate.path && entry.kind === candidate.kind)\n if (existing === -1) {\n entries.push({ ...candidate, seq })\n continue\n }\n const previous = entries[existing]\n if (previous === undefined) continue\n entries[existing] = {\n ...previous,\n seq,\n added: previous.added + candidate.added,\n removed: previous.removed + candidate.removed,\n }\n }\n return entries\n}\n\nfunction entriesForCall(call: CallRecord): readonly Omit<DeliverableEntry, 'seq'>[] {\n const fromView = viewEntries(call.view)\n if (fromView.length > 0) return fromView\n const path = mutationPath(call.name, call.argsRaw)\n if (path !== undefined) {\n const args = jsonArgs(call.argsRaw)\n return [{\n path,\n added: diffLines(args.new_string ?? args.new_text ?? args.content),\n removed: diffLines(args.old_string ?? args.old_text),\n kind: 'file',\n }]\n }\n const url = websiteUrl(call.name, call.argsRaw)\n return url === undefined ? [] : [{ path: url, added: 0, removed: 0, kind: 'website' }]\n}\n\n/** Conversation data used by the Codex-style delivery card. */\nexport const deliverablesDefinition: ConversationNodeDefinition<DeliverablesState> = {\n kind: DELIVERABLES_DATA_KEY,\n match: (event) => {\n if (event.type === 'turn/start') return { id: String(event.data.turn), role: 'start' }\n if (event.type === 'tool/call') return { id: String(event.data.turn), role: 'update' }\n if (event.type === 'tool/result' && isAppendSurfaceEvent(event)) {\n return { id: String(event.data.turn), role: 'update' }\n }\n return null\n },\n start: (_context, match) => {\n if (match.event.type !== 'turn/start') throw new Error('deliverables start requires turn/start')\n return { turn: match.event.data.turn, calls: new Map(), entries: [] }\n },\n update: (context, match) => {\n if (match.event.type === 'tool/call') {\n const calls = new Map(context.state.calls)\n const view = match.view?.for === 'call' ? match.view.view : null\n const name = stringValue(match.event.data.name) ?? ''\n const argsRaw = stringValue(match.event.data.arguments)\n calls.set(String(match.event.data.callId), { name, argsRaw, view })\n return { ...context.state, calls }\n }\n if (match.event.type !== 'tool/result') return context.state\n if (match.event.data.message.content[0]?.isError === true) return context.state\n const callId = String(match.event.data.message.source.callId)\n const call = context.state.calls.get(callId)\n if (call === undefined) return context.state\n const resultView = match.view?.for === 'result' ? match.view.view : call.view\n const fromView = viewEntries(resultView)\n const fromCall = fromView.length > 0 ? fromView : entriesForCall({ ...call, view: resultView })\n const fromResult = resultWebsiteEntries(call.name, match.event.data.message)\n const entries = appendEntries(context.state.entries, [...fromCall, ...fromResult], match.event.seq)\n const unchanged = entries.length === context.state.entries.length\n && entries.every((entry, index) => {\n const previous = context.state.entries[index]\n return previous?.path === entry.path\n && previous.seq === entry.seq\n && previous.added === entry.added\n && previous.removed === entry.removed\n && previous.kind === entry.kind\n })\n return unchanged ? context.state : { ...context.state, entries }\n },\n buildLocationData: (context, scope) => scope !== 'turn' || context.state === undefined || context.state.entries.length === 0\n ? null\n : {\n kind: 'turn',\n turn: context.state.turn,\n key: DELIVERABLES_DATA_KEY,\n value: { entries: context.state.entries },\n },\n}\n\nfunction nativeProducedEntries(owner: TurnTailOwnerProps): readonly DeliverableEntry[] {\n const data = (owner.turn.data as unknown as { get(key: string): unknown }).get('deliverables')\n const produced = record(data)?.produced\n if (!Array.isArray(produced)) return []\n const entries: DeliverableEntry[] = []\n for (const item of produced) {\n const value = record(item)\n const path = stringValue(value?.path)\n const seq = typeof value?.seq === 'number' ? value.seq : Number.POSITIVE_INFINITY\n if (path === undefined || seq > owner.seq || entries.some(entry => entry.path === path)) continue\n entries.push({ path, seq, added: 0, removed: 0, kind: 'file' })\n }\n return entries\n}\n\n/** Select entries that were delivered before the closing assistant message. */\nexport function selectDeliverables(owner: TurnTailOwnerProps): readonly DeliverableEntry[] | null {\n const value = owner.turn.data.get(DELIVERABLES_DATA_KEY)\n if (value !== undefined) {\n const entries = value.entries.filter(entry => entry.seq <= owner.seq)\n return entries.length === 0 ? null : entries\n }\n const nativeEntries = nativeProducedEntries(owner)\n return nativeEntries.length === 0 ? null : nativeEntries\n}\n","/** Shared wire vocabulary for the plugin-owned settings RPC channel. */\n\n/** Dedicated, loopback-only RPC channel registered by the Host half. */\nexport const CONVERSATION_SETTINGS_RPC_CHANNEL = '/conversation-ui'\n\n/** Endpoints accepted by {@link CONVERSATION_SETTINGS_RPC_CHANNEL}. */\nexport const CONVERSATION_SETTINGS_RPC = {\n read: 'settings.read',\n write: 'settings.write',\n upgrade: 'plugin.upgrade',\n} as const\n\n/** How the active profile supplied this plugin. */\nexport type ConversationInstallationKind = 'npm' | 'development' | 'unmanaged'\n\n/** Redacted, plugin-owned configuration state returned to the browser. */\nexport interface ConversationSettingsView {\n /** Version of the package currently running in the Host process. */\n version: string\n /** Source class of this package in the active profile. */\n installation: ConversationInstallationKind\n /** Whether the Host settings provider permits a write. */\n writable: boolean\n /** Current resolved preference. */\n thinkAutoExpand: boolean\n /** Whether a fixed npm update command is safe to offer. */\n canUpgrade: boolean\n}\n\n/** Successful package update acknowledgement; loading the new code needs a restart. */\nexport interface ConversationUpgradeView {\n restartRequired: true\n}\n","/** Browser adapter for the Host-owned conversation-ui settings RPC. */\n\nimport type { ConnectionHandle } from '@deepseek-ai/dsh-client-connection/client'\nimport {\n CONVERSATION_SETTINGS_RPC,\n CONVERSATION_SETTINGS_RPC_CHANNEL,\n type ConversationSettingsView,\n type ConversationUpgradeView,\n} from '../settings-api.ts'\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined\n}\n\nfunction settingsView(value: unknown): ConversationSettingsView {\n const data = record(value)\n if (data === undefined\n || typeof data.version !== 'string'\n || !['npm', 'development', 'unmanaged'].includes(data.installation as string)\n || typeof data.writable !== 'boolean'\n || typeof data.thinkAutoExpand !== 'boolean'\n || typeof data.canUpgrade !== 'boolean') {\n throw new Error('dsh-conversation-ui: malformed settings response')\n }\n return data as unknown as ConversationSettingsView\n}\n\nfunction upgradeView(value: unknown): ConversationUpgradeView {\n const data = record(value)\n if (data?.restartRequired !== true) throw new Error('dsh-conversation-ui: malformed update response')\n return { restartRequired: true }\n}\n\nfunction accepted(result: Awaited<ReturnType<ConnectionHandle['rpc']['call']>>): unknown {\n if (!result.ok) throw new Error(result.error.message)\n return result.value\n}\n\n/** Narrow client contract consumed by the staged settings-card controller. */\nexport interface ConversationSettingsApi {\n read(): Promise<ConversationSettingsView>\n write(thinkAutoExpand: boolean): Promise<ConversationSettingsView>\n upgrade(): Promise<ConversationUpgradeView>\n}\n\n/** Build the typed facade over the generic Connection RPC service. */\nexport function createConversationSettingsApi(connection: ConnectionHandle): ConversationSettingsApi {\n return {\n async read(): Promise<ConversationSettingsView> {\n return settingsView(accepted(await connection.rpc.call(CONVERSATION_SETTINGS_RPC_CHANNEL, CONVERSATION_SETTINGS_RPC.read, {})))\n },\n async write(thinkAutoExpand: boolean): Promise<ConversationSettingsView> {\n return settingsView(accepted(await connection.rpc.call(\n CONVERSATION_SETTINGS_RPC_CHANNEL,\n CONVERSATION_SETTINGS_RPC.write,\n { thinkAutoExpand },\n )))\n },\n async upgrade(): Promise<ConversationUpgradeView> {\n return upgradeView(accepted(await connection.rpc.call(CONVERSATION_SETTINGS_RPC_CHANNEL, CONVERSATION_SETTINGS_RPC.upgrade, {})))\n },\n }\n}\n","/** Locale bundles for the conversation-ui plugin configuration card. */\n\n/** Dictionary namespace owned by this plugin's settings card. */\nexport const NS = 'settings.conversationUi'\n\n/** Locale keys the card renders. */\nexport type ConversationLocaleKey =\n | 'title' | 'description'\n | 'thinkAutoExpand' | 'thinkAutoExpandHint'\n | 'readOnly' | 'loading' | 'unavailable' | 'retry'\n | 'version' | 'developmentVersion'\n | 'updates' | 'updateHint' | 'developmentBuild' | 'updateUnavailable'\n | 'update' | 'updating' | 'restartRequired' | 'updateFailed'\n | 'save' | 'saving' | 'discard' | 'unsaved' | 'saveFailed'\n\n/** English copy. */\nexport const en: Record<ConversationLocaleKey, string> = {\n title: 'Conversation UI',\n description: 'Codex-style progress, tool activity, and final answers.',\n thinkAutoExpand: 'Auto-expand thinking',\n thinkAutoExpandHint: 'Open the thinking block while it streams. Turn off to keep it collapsed.',\n readOnly: 'This deployment stores settings read-only.',\n loading: 'Loading plugin settings…',\n unavailable: 'Plugin settings are unavailable in this connection.',\n retry: 'Retry',\n version: 'Version {version}',\n developmentVersion: 'Development version {version}',\n updates: 'Updates',\n updateHint: 'Install the newest npm version, then restart Harness.',\n developmentBuild: 'Linked source; updates are managed in the checkout.',\n updateUnavailable: 'Updates are available only for an npm profile installation.',\n update: 'Update',\n updating: 'Updating…',\n restartRequired: 'Updated. Restart Harness to load the new version.',\n updateFailed: 'The package update failed; your current version is unchanged.',\n save: 'Save',\n saving: 'Saving…',\n discard: 'Discard',\n unsaved: 'Unsaved',\n saveFailed: 'The deployment did not accept these values; they were left for you to correct.',\n}\n\n/** Simplified Chinese copy. */\nexport const zh: Record<ConversationLocaleKey, string> = {\n title: '对话界面增强',\n description: '按 Codex 风格展示过程答复、工具活动和最终答案。',\n thinkAutoExpand: '自动展开思考',\n thinkAutoExpandHint: '思考块在流式时自动展开;关闭后保持折叠,可手动展开。',\n readOnly: '本部署的设置为只读。',\n loading: '正在加载插件设置…',\n unavailable: '当前连接无法访问插件设置。',\n retry: '重试',\n version: '版本 {version}',\n developmentVersion: '开发版本 {version}',\n updates: '更新',\n updateHint: '安装最新 npm 版本后重启 Harness。',\n developmentBuild: '当前为本地链接版本,请在源码目录管理更新。',\n updateUnavailable: '只有 profile 使用 npm 包时才能更新。',\n update: '更新',\n updating: '更新中…',\n restartRequired: '已更新;重启 Harness 后加载新版本。',\n updateFailed: '包更新失败,当前版本未改变。',\n save: '保存',\n saving: '保存中…',\n discard: '放弃修改',\n unsaved: '未保存',\n saveFailed: '本部署没有接受这些值,已保留供你修改。',\n}\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n 'settings.conversationUi': ConversationLocaleKey\n }\n}\n","import { createElement, useSyncExternalStore, type ComponentType } from 'react'\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\n// Type-only: the connection Context merge and the plugins section's SlotMap\n// entry ('settings.plugin.item').\nimport type { ConnectionHandle } from '@deepseek-ai/dsh-client-connection/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-settings-plugins/client'\nimport type { ChatNodeViewProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport { TypewriterAssistantNodeView } from './TypewriterAssistantNodeView.tsx'\nimport { wrapFollowNodeView, type FollowWrapProps } from './TypewriterToolNodeView.tsx'\nimport { wrapTurnPreludeNodeView } from './TurnPreludeUserNodeView.tsx'\nimport { ConversationCard } from './ConversationCard.tsx'\nimport { ConversationCardController } from './conversation-ui-card-controller.ts'\nimport { DeliverablesCard } from './DeliverablesCard.tsx'\nimport { deliverablesDefinition, selectDeliverables } from './deliverables.ts'\nimport { createConversationSettingsApi } from './conversation-ui-settings-api.ts'\nimport { NS as SETTINGS_NS, en, zh } from './locales.ts'\nimport { DEFAULT_CONVERSATION_CONFIG, CONVERSATION_BOOT_GLOBAL, type ConversationConfig } from '../config.ts'\nimport { DEFAULT_CONVERSATION_SETTINGS } from '../settings.ts'\n\n/**\n * Cordis services required by the browser half. Only `slots` is load-bearing\n * for the stream itself; locale and Connection power the configuration card\n * and are wired through `ctx.inject` below so a deployment without them still\n * streams with defaults.\n */\nexport const inject = ['slots']\n\ntype AssistantProps = ChatNodeViewProps<'assistant-step'>\n\nconst CONVERSATION_MODES: readonly string[] = ['typewriter', 'teleprompter']\nconst CONVERSATION_PRESETS: readonly string[] = ['realtime', 'balanced', 'silky']\n\n/** Steering/command rows stay untouched; `assistant-step` is replaced. */\nconst SKIP_WRAP = new Set(['assistant-step', 'steering', 'command-input'])\n\n/**\n * Read the Host-bridged boot config. The inline script is produced by this\n * plugin's Host half from a schema-validated value, so only the structural\n * guarantees that could break between the two halves are re-checked: the\n * global is absent when the client runs without its Host entry (defaults\n * apply), and any present-but-malformed value fails loudly instead of\n * rendering a half-configured view.\n * @returns The resolved configuration for the assistant node view.\n */\nfunction readBootConfig(): ConversationConfig {\n const raw = (globalThis as Record<string, unknown>)[CONVERSATION_BOOT_GLOBAL]\n if (raw === undefined) {\n console.info('[dsh-conversation-ui] no host config bridge; using defaults')\n return DEFAULT_CONVERSATION_CONFIG\n }\n if (\n typeof raw !== 'object' || raw === null\n || !CONVERSATION_MODES.includes((raw as ConversationConfig).mode)\n || !CONVERSATION_PRESETS.includes((raw as ConversationConfig).preset)\n || typeof (raw as ConversationConfig).revealCharsPerSec !== 'number'\n || typeof (raw as ConversationConfig).scrollSpeedPxPerSec !== 'number'\n || typeof (raw as ConversationConfig).maxScrollSpeedPxPerSec !== 'number'\n ) {\n throw new Error(`[dsh-conversation-ui] malformed ${CONVERSATION_BOOT_GLOBAL} boot global: ${JSON.stringify(raw)}`)\n }\n return raw as ConversationConfig\n}\n\n/**\n * Wrap every keyed Chat row except `assistant-step` in place. A second\n * register with the same `children` table throws because the child slot is\n * already declared, and only the winning entry receives `renderSlot`;\n * swapping `entry.component` keeps the original children, locale, and inject\n * seats. `assistant-step` is replaced below so text and Think use the\n * Codex-style Assistant presentation.\n * @param ctx - Browser context carrying the slot registry.\n * @returns Restorer that puts the original components back.\n */\nfunction wrapGrowingChatRows(ctx: ClientContext, config: ConversationConfig): () => void {\n const restores: Array<() => void> = []\n const wrapped = new WeakSet<object>()\n\n const wrapAll = (): void => {\n for (const entry of ctx.slots.entries('conversation.chat.node')) {\n const key = entry.options.key\n if (key === undefined || SKIP_WRAP.has(key)) continue\n const current = entry.component\n if (\n (typeof current !== 'function' && (typeof current !== 'object' || current === null))\n || wrapped.has(current)\n ) continue\n const inner = current as ComponentType<FollowWrapProps>\n const next = key === 'user'\n ? wrapTurnPreludeNodeView(inner)\n : wrapFollowNodeView(inner, {\n minSpeedPxPerSec: config.scrollSpeedPxPerSec,\n maxSpeedPxPerSec: config.maxScrollSpeedPxPerSec,\n })\n wrapped.add(next)\n entry.component = next\n restores.push(() => {\n if (entry.component === next) entry.component = inner\n })\n }\n }\n\n wrapAll()\n const off = ctx.on('slots/changed', (key: string) => {\n if (key === 'conversation.chat.node') wrapAll()\n })\n return () => {\n off()\n for (const restore of restores) restore()\n }\n}\n\n/**\n * A live preference cell read by `useSyncExternalStore`. It starts on the\n * shared default and, once the plugin-owned settings controller is attached,\n * tracks the resolved `thinkAutoExpand` value. A composition (or test) that\n * ships no settings surface keeps the cell on the default.\n */\nclass PreferenceCell {\n private readonly listeners = new Set<() => void>()\n private card: ConversationCardController | undefined\n private value = DEFAULT_CONVERSATION_SETTINGS.thinkAutoExpand\n\n /** Re-point the cell at the plugin-owned settings controller. */\n attach(card: ConversationCardController): () => void {\n this.card = card\n this.refresh()\n const unsubscribe = card.subscribe(() => { this.refresh() })\n return () => {\n unsubscribe()\n if (this.card !== card) return\n this.card = undefined\n this.refresh()\n }\n }\n\n private read(): boolean {\n return this.card?.getSnapshot().thinkAutoExpand ?? DEFAULT_CONVERSATION_SETTINGS.thinkAutoExpand\n }\n\n private refresh(): void {\n const next = this.read()\n if (next === this.value) return\n this.value = next\n for (const listener of this.listeners) listener()\n }\n\n readonly getSnapshot = (): boolean => this.value\n\n readonly subscribe = (listener: () => void): () => void => {\n this.listeners.add(listener)\n return () => { this.listeners.delete(listener) }\n }\n}\n\n/**\n * Register the Codex-style renderer after the conversation package declares the\n * keyed Chat node seat. A lower priority shadows the built-in assistant row;\n * every other growing row is wrapped in place so Tool cards, retries, and\n * workflow runs share conversation follow. The Host-bridged configuration\n * selects immediate or typewriter reveal, smoothing preset, and glide speed; the\n * plugin-owned settings RPC supplies the live auto-expand preference when the\n * settings surface is composed.\n * @param ctx - Browser context carrying the shared slot registry.\n */\nexport function apply(ctx: ClientContext): void {\n const config = readBootConfig()\n const preference = new PreferenceCell()\n\n // The native deliverables package already publishes successful file paths,\n // so the Codex card must register independently of our optional richer event\n // accumulator. Keeping the slot inside the service injection left Web with\n // only the built-in \"产物\" chips when that callback was not activated.\n ctx.slots.inject('conversation.chat.turnTail', () => ctx.slots.register({\n name: 'conversation.chat.turnTail',\n priority: -100,\n select: selectDeliverables,\n registrant: 'dsh-conversation-ui',\n }, DeliverablesCard))\n ctx.inject(['conversationEvents'], (deliverablesCtx) => {\n const events = deliverablesCtx.get('conversationEvents') as {\n register: (definition: typeof deliverablesDefinition) => () => void\n }\n return events.register(deliverablesDefinition)\n })\n\n // The card talks to the plugin-owned loopback RPC, so the core settings\n // namespace allowlist cannot make it disappear. The stream still applies\n // with defaults when the optional Settings UI or Connection is absent.\n ctx.inject(['slots', 'locale', 'connection'], (settingsCtx) => {\n const card = new ConversationCardController(\n // The shared Context augmentation also carries the Host-side Connection\n // shape. This browser entry runs after the client provider installs its\n // handle, so narrow through unknown to its client contract here.\n createConversationSettingsApi(settingsCtx.get('connection') as unknown as ConnectionHandle),\n )\n const detachPreference = preference.attach(card)\n card.start()\n settingsCtx.effect(() => settingsCtx.locale.register(SETTINGS_NS, { zh, en }), 'dsh-conversation-ui: settings dictionaries')\n settingsCtx.slots.inject('settings.plugin.item', () => settingsCtx.slots.register({\n name: 'settings.plugin.item',\n key: 'conversation-ui',\n locale: SETTINGS_NS,\n inject: () => card.inject(),\n }, ConversationCard))\n return () => {\n card.stop()\n detachPreference()\n }\n })\n\n const configured = function ConversationConfiguredView(props: AssistantProps) {\n const thinkAutoExpand = useSyncExternalStore(\n preference.subscribe,\n preference.getSnapshot,\n preference.getSnapshot,\n )\n return createElement(TypewriterAssistantNodeView, {\n ...props,\n mode: config.mode,\n preset: config.preset,\n revealCharsPerSec: config.revealCharsPerSec,\n scrollSpeedPxPerSec: config.scrollSpeedPxPerSec,\n maxScrollSpeedPxPerSec: config.maxScrollSpeedPxPerSec,\n thinkAutoExpand,\n })\n }\n ctx.slots.inject('conversation.chat.node', () => {\n const unwrap = wrapGrowingChatRows(ctx, config)\n const unshadow = ctx.slots.register({\n name: 'conversation.chat.node',\n key: 'assistant-step',\n priority: -100,\n locale: 'conversation',\n registrant: 'dsh-conversation-ui',\n }, configured)\n return () => {\n unshadow()\n unwrap()\n }\n })\n}\n"],"x_google_ignoreList":[9,10,11],"mappings":"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"}