jaml-ui 8.1.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JimboPager-BBzrmMrB.js","sources":["../../src/ui/JimboBox.tsx","../../src/ui/JimboCanvas.tsx","../../src/ui/JimboSectionHeader.tsx","../../src/ui/JimboPanel.tsx","../../src/ui/jimboText.tsx","../../src/ui/JimboLayout.tsx","../../node_modules/.pnpm/react-icons@5.7.0_react@19.3.0/node_modules/react-icons/lib/iconContext.mjs","../../node_modules/.pnpm/react-icons@5.7.0_react@19.3.0/node_modules/react-icons/lib/iconBase.mjs","../../node_modules/.pnpm/react-icons@5.7.0_react@19.3.0/node_modules/react-icons/fi/index.mjs","../../src/ui/JimboButton.tsx","../../src/ui/JimboSeedCopyChip.tsx","../../src/ui/panel.tsx","../../src/ui/JimboSpinner.tsx","../../src/ui/tokens.ts","../../src/ui/JimboIconButton.tsx","../../src/ui/JimboShopBelt.tsx","../../src/ui/JimboBadge.tsx","../../src/ui/JimboInline.tsx","../../src/ui/JimboLink.tsx","../../src/ui/JimboTextInput.tsx","../../src/ui/jimboFlankNav.tsx","../../src/ui/JimboPanelSpinner.tsx","../../src/sprites/spriteMapper.ts","../../src/ui/sprites.tsx","../../src/ui/JimboPicker.tsx","../../src/ui/jimboTabs.tsx","../../src/ui/JimboListItem.tsx","../../src/ui/useMotionPreference.ts","../../src/ui/hooks.ts","../../src/ui/JimboInlineEdit.tsx","../../src/ui/JimboCodeSurface.tsx","../../src/ui/JimboOuterTab.tsx","../../src/ui/dockTree.ts","../../src/ui/JimboDock.tsx","../../src/ui/JimboStatusPill.tsx","../../src/ui/JimboSlider.tsx","../../src/ui/JimboTextArea.tsx","../../src/ui/JimboSeedBatchInput.tsx","../../src/ui/JimboBackground.tsx","../../src/ui/JimboApp.tsx","../../src/ui/JimboInset.tsx","../../src/ui/JimboWordmark.tsx","../../src/ui/JimboGrid.tsx","../../src/ui/JimboSpacer.tsx","../../src/ui/JimboDivider.tsx","../../src/ui/JimboErrorBlock.tsx","../../src/ui/orbitalLayout.ts","../../src/ui/JimboOrbitalMenu.tsx","../../src/ui/orbitalMenuStore.ts","../../assets/jammy-seed-mascot.png","../../src/ui/jammySeedMascotImage.ts","../../src/ui/JimboMascot.tsx","../../src/ui/JimboPager.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\n\nexport interface JimboBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Render as a different element (default: div) */\n as?: \"div\" | \"section\" | \"article\" | \"aside\" | \"main\" | \"nav\" | \"header\" | \"footer\";\n children?: React.ReactNode;\n}\n\n/**\n * Thin wrapper around `<div>` (or another block element).\n *\n * All consumer code outside `src/ui/` must use `JimboBox` instead of raw\n * `<div>` — the ESLint `no-raw-html` rule forbids intrinsic HTML elements.\n * This component exists so that layouts can still use a plain container\n * without reaching for a higher-level primitive that adds semantics they\n * don't need (e.g. `JimboPanel` implies a visible card).\n */\nexport const JimboBox = React.forwardRef<HTMLDivElement, JimboBoxProps>(\n function JimboBox({ as: Tag = \"div\", children, ...rest }, ref) {\n return <Tag ref={ref as React.Ref<HTMLDivElement>} {...rest}>{children}</Tag>;\n }\n);\n","\"use client\";\nimport React from \"react\";\n\nexport interface JimboCanvasProps extends React.CanvasHTMLAttributes<HTMLCanvasElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Thin wrapper around `<canvas>`.\n *\n * Used by `CanvasRenderer` and any other component that needs a raw\n * drawing surface. The ESLint `no-raw-html` rule forbids `<canvas>`\n * outside `src/ui/`, so consumers use this primitive instead.\n */\nexport const JimboCanvas = React.forwardRef<HTMLCanvasElement, JimboCanvasProps>(\n function JimboCanvas({ children, ...rest }, ref) {\n return <canvas ref={ref} {...rest}>{children}</canvas>;\n }\n);\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nexport type JimboSectionTone = \"red\" | \"orange\" | \"blue\" | \"green\" | \"purple\" | \"gold\" | \"grey\";\n\nexport interface JimboSectionHeaderProps extends HTMLAttributes<HTMLDivElement> {\n label: ReactNode;\n tone?: JimboSectionTone;\n}\n\n// Spelled out, not interpolated — see the note in JimboLayout.tsx.\nconst TAG_CLASS = {\n red: \"j-section-header__tag--red\",\n orange: \"j-section-header__tag--orange\",\n blue: \"j-section-header__tag--blue\",\n green: \"j-section-header__tag--green\",\n purple: \"j-section-header__tag--purple\",\n gold: \"j-section-header__tag--gold\",\n grey: \"j-section-header__tag--grey\",\n} as const satisfies Record<JimboSectionTone, string>;\n\nconst RULE_CLASS = {\n red: \"j-section-header__rule--red\",\n orange: \"j-section-header__rule--orange\",\n blue: \"j-section-header__rule--blue\",\n green: \"j-section-header__rule--green\",\n purple: \"j-section-header__rule--purple\",\n gold: \"j-section-header__rule--gold\",\n grey: \"j-section-header__rule--grey\",\n} as const satisfies Record<JimboSectionTone, string>;\n\n/** Colored tag + rule — section divider inside a panel. */\nexport function JimboSectionHeader({\n label,\n tone = \"blue\",\n className,\n ...rest\n}: JimboSectionHeaderProps) {\n const classes = [\"j-section-header\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} {...rest}>\n <span className={`j-section-header__tag ${TAG_CLASS[tone]}`}>{label}</span>\n <span className={`j-section-header__rule ${RULE_CLASS[tone]}`} aria-hidden />\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { JimboSectionHeader, type JimboSectionTone } from \"./JimboSectionHeader.js\";\n\nexport interface JimboPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Optional section tag at the top of the panel */\n title?: ReactNode;\n tone?: JimboSectionTone;\n /** Wrap children in .j-panel__body (default true when title set, else false for flex freestyle) */\n body?: boolean;\n}\n\nexport function JimboPanel({\n title,\n tone = \"blue\",\n body,\n className,\n children,\n ...rest\n}: JimboPanelProps) {\n const classes = [\"j-panel\", className].filter(Boolean).join(\" \");\n const wrapBody = body ?? Boolean(title);\n return (\n <div className={classes} {...rest}>\n {title != null && title !== false ? <JimboSectionHeader label={title} tone={tone} /> : null}\n {wrapBody ? <div className=\"j-panel__body\">{children}</div> : children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nexport type JimboTextSize = \"micro\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"display\";\nexport type JimboTextTone = \"white\" | \"grey\" | \"gold\" | \"red\" | \"blue\" | \"green\" | \"orange\" | \"purple\";\n\nexport interface JimboTextProps extends HTMLAttributes<HTMLSpanElement> {\n size?: JimboTextSize;\n tone?: JimboTextTone;\n}\n\n// Spelled out, not interpolated — see the note in JimboBadge.tsx.\nconst SIZE_CLASS = {\n micro: \"j-text--micro\",\n xs: \"j-text--xs\",\n sm: \"j-text--sm\",\n md: \"j-text--md\",\n lg: \"j-text--lg\",\n xl: \"j-text--xl\",\n display: \"j-text--display\",\n} as const satisfies Record<JimboTextSize, string>;\n\nconst TONE_CLASS = {\n white: \"j-text--white\",\n grey: \"j-text--grey\",\n gold: \"j-text--gold\",\n red: \"j-text--red\",\n blue: \"j-text--blue\",\n green: \"j-text--green\",\n orange: \"j-text--orange\",\n purple: \"j-text--purple\",\n} as const satisfies Record<JimboTextTone, string>;\n\nexport function JimboText({ size = \"md\", tone = \"white\", className, children, ...rest }: JimboTextProps) {\n const classes = [\"j-text\", SIZE_CLASS[size], TONE_CLASS[tone], className].filter(Boolean).join(\" \");\n return (\n <span className={classes} {...rest}>\n {children}\n </span>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\n// The .j-stack / .j-row classes these bind to already exist in jimbo.css and are\n// grid-based by design — see the \"Layout primitives\" section there. This file is\n// only the missing React half.\n\n/** Spacing scale — maps to the --j-space-* tokens. */\nexport type JimboGap = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n/** Cross-axis placement. */\nexport type JimboAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\n\n/** Main-axis distribution. */\nexport type JimboJustify = \"start\" | \"center\" | \"end\" | \"between\";\n\nexport type JimboLayoutProps = HTMLAttributes<HTMLDivElement> & {\n /** Space between children. Default \"md\" (8px). */\n gap?: JimboGap;\n align?: JimboAlign;\n justify?: JimboJustify;\n};\n\n// Class names are spelled out rather than interpolated. An interpolated name\n// never appears as a literal in the source, so nothing can grep for it and no\n// dead-CSS pass can count it — which is exactly how the orphaned `.j-row--md`\n// scale sat in jimbo.css unnoticed. `satisfies` makes a missing variant a type\n// error instead of a silently unstyled element.\nconst LAYOUT_CLASS = {\n \"j-stack\": {\n gap: {\n xs: \"j-stack--gap-xs\", sm: \"j-stack--gap-sm\", md: \"j-stack--gap-md\",\n lg: \"j-stack--gap-lg\", xl: \"j-stack--gap-xl\",\n },\n align: {\n start: \"j-stack--align-start\", center: \"j-stack--align-center\",\n end: \"j-stack--align-end\", stretch: \"j-stack--align-stretch\",\n },\n justify: {\n start: \"j-stack--justify-start\", center: \"j-stack--justify-center\",\n end: \"j-stack--justify-end\", between: \"j-stack--justify-between\",\n },\n },\n \"j-row\": {\n gap: {\n xs: \"j-row--gap-xs\", sm: \"j-row--gap-sm\", md: \"j-row--gap-md\",\n lg: \"j-row--gap-lg\", xl: \"j-row--gap-xl\",\n },\n align: {\n start: \"j-row--align-start\", center: \"j-row--align-center\",\n end: \"j-row--align-end\", stretch: \"j-row--align-stretch\",\n },\n justify: {\n start: \"j-row--justify-start\", center: \"j-row--justify-center\",\n end: \"j-row--justify-end\", between: \"j-row--justify-between\",\n },\n },\n} as const satisfies Record<\n \"j-stack\" | \"j-row\",\n { gap: Record<JimboGap, string>; align: Record<JimboAlign, string>; justify: Record<JimboJustify, string> }\n>;\n\nfunction layoutClasses(\n base: \"j-stack\" | \"j-row\",\n { gap = \"md\", align, justify }: JimboLayoutProps,\n className?: string,\n extra?: string,\n) {\n const map = LAYOUT_CLASS[base];\n return [\n base,\n map.gap[gap],\n align && map.align[align],\n justify && map.justify[justify],\n extra,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/** Vertical stack — the answer for \"these go under each other\". */\nexport function JimboStack({\n gap,\n align,\n justify,\n className,\n children,\n ...rest\n}: JimboLayoutProps) {\n return (\n <div className={layoutClasses(\"j-stack\", { gap, align, justify }, className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport type JimboRowProps = JimboLayoutProps & {\n /** Soft-wrap onto more rows when the row runs out of width. */\n wrap?: boolean;\n};\n\n/**\n * Horizontal row — the answer for \"these go next to each other\". Columns size to\n * their content (`grid-auto-columns: max-content`), so this is what every\n * hand-rolled layout div in the consumer screens should collapse into.\n * Defaults to vertically centred.\n */\nexport function JimboRow({\n gap,\n align = \"center\",\n justify,\n wrap,\n className,\n children,\n ...rest\n}: JimboRowProps) {\n return (\n <div\n className={layoutClasses(\n \"j-row\",\n { gap, align, justify },\n className,\n wrap ? \"j-row--wrap\" : undefined,\n )}\n {...rest}\n >\n {children}\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(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, 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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\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 attr = props.attr,\n size = props.size,\n title = props.title,\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 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};\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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};\n","\"use client\";\n\nimport type { ButtonHTMLAttributes } from \"react\";\n\nexport interface JimboButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n tone?: \"orange\" | \"red\" | \"blue\" | \"green\" | \"purple\" | \"grey\";\n fullWidth?: boolean;\n label?: string;\n}\n\n// Spelled out, not interpolated — see the note in JimboLayout.tsx.\nconst SIZE_CLASS = {\n xs: \"j-btn--xs\",\n sm: \"j-btn--sm\",\n md: \"j-btn--md\",\n lg: \"j-btn--lg\",\n} as const satisfies Record<NonNullable<JimboButtonProps[\"size\"]>, string>;\n\nconst TONE_CLASS = {\n orange: \"j-btn--orange\",\n red: \"j-btn--red\",\n blue: \"j-btn--blue\",\n green: \"j-btn--green\",\n purple: \"j-btn--purple\",\n grey: \"j-btn--grey\",\n} as const satisfies Record<NonNullable<JimboButtonProps[\"tone\"]>, string>;\n\nexport function JimboButton({\n size = \"md\",\n tone = \"orange\",\n fullWidth = false,\n label,\n className,\n children,\n disabled,\n ...rest\n}: JimboButtonProps) {\n const classes = [\n \"j-btn\",\n SIZE_CLASS[size],\n TONE_CLASS[tone],\n fullWidth ? \"j-btn--full\" : \"\",\n disabled ? \"j-btn--disabled\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <button className={classes} disabled={disabled} {...rest}>\n <span className=\"j-btn__face\">{label ?? children}</span>\n </button>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { FiCheck, FiCopy } from \"react-icons/fi\";\nimport { JimboButton } from \"./JimboButton.js\";\n\nexport interface JimboSeedCopyChipProps {\n value: string;\n placeholder?: string;\n disabled?: boolean;\n copiedLabel?: string;\n copiedDurationMs?: number;\n onCopy?: (value: string) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Tap-to-copy seed row. Idle: copy icon + seed. Copied: green check + label.\n */\nexport function JimboSeedCopyChip({\n value,\n placeholder = \"--------\",\n disabled = false,\n copiedLabel = \"Copied!\",\n copiedDurationMs = 2000,\n onCopy,\n className = \"\",\n style,\n}: JimboSeedCopyChipProps) {\n const [copied, setCopied] = useState(false);\n // A bare setTimeout here leaked twice: a second tap stacked a timer that\n // cleared the confirmation early (the first timer fires mid-second-copy), and\n // an unmount before it fired left it running. Keep one handle, replace it on\n // each copy, clear it on unmount.\n const resetTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const display = value.trim();\n const canCopy = !disabled && display.length > 0;\n\n useEffect(\n () => () => {\n if (resetTimer.current) clearTimeout(resetTimer.current);\n },\n [],\n );\n\n const handleCopy = async () => {\n if (!canCopy) return;\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(display);\n }\n } catch {\n // Non-fatal in Storybook or restricted clipboard contexts.\n }\n setCopied(true);\n onCopy?.(display);\n if (resetTimer.current) clearTimeout(resetTimer.current);\n resetTimer.current = setTimeout(() => setCopied(false), copiedDurationMs);\n };\n\n const rootClass = [\"j-seed-copy\", copied ? \"j-seed-copy--copied\" : \"\", className]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <JimboButton\n className={rootClass}\n style={style}\n onClick={handleCopy}\n disabled={!canCopy}\n fullWidth\n aria-label={canCopy ? `Copy seed ${display}` : \"Seed unavailable\"}\n >\n <span className=\"j-seed-copy__icon\" aria-hidden>\n {copied ? <FiCheck size={18} /> : <FiCopy size={18} />}\n </span>\n <span className=\"j-seed-copy__text\">\n {copied ? copiedLabel : display || placeholder}\n </span>\n </JimboButton>\n );\n}\n","\"use client\";\n\nimport { useEffect, useId, type HTMLAttributes, type ReactNode } from \"react\";\n\nexport type JimboTone =\n | \"red\" | \"blue\" | \"green\" | \"orange\" | \"purple\" | \"grey\" | \"gold\"\n | \"tarot\" | \"planet\" | \"spectral\";\n\nexport { JimboButton } from \"./JimboButton.js\";\n\nexport type JimboInnerPanelProps = HTMLAttributes<HTMLDivElement>;\n\nexport function JimboInnerPanel({ className, children, ...rest }: JimboInnerPanelProps) {\n const classes = [\"j-inner-panel\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface JimboModalProps {\n open: boolean;\n onClose?: () => void;\n title?: ReactNode;\n className?: string;\n children?: ReactNode;\n}\n\nexport function JimboModal({ open, onClose, title, className, children }: JimboModalProps) {\n const titleId = useId();\n\n // Backdrop click has always closed the modal; Escape is the keyboard equivalent\n // for people who can't or don't want to reach for the mouse to dismiss it.\n useEffect(() => {\n if (!open || !onClose) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose]);\n\n if (!open) return null;\n return (\n <div className=\"j-modal-overlay\" onClick={onClose}>\n <div\n className={[\"j-modal\", \"j-panel\", className].filter(Boolean).join(\" \")}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n onClick={(e) => e.stopPropagation()}\n >\n {title && <h2 id={titleId} className=\"j-modal__title\">{title}</h2>}\n <div className=\"j-panel__body\">{children}</div>\n </div>\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { JimboButton } from './panel.js'\nimport { JimboText } from './jimboText.js'\n\nexport interface JimboSpinnerProps {\n value: string | number\n label?: string\n onPrev?: () => void\n onNext?: () => void\n canPrev?: boolean\n canNext?: boolean\n className?: string\n}\n\n/**\n * Two-state-or-more value spinner: red `<` button + value chip + red `>` button.\n * This is the canonical Balatro on/off control (IMG_3678: `Shadows < OFF >`)\n * AND the canonical option-cycler (deck/stake/aesthetic picker).\n *\n * Note: previously named JimboStepper — that was a misnomer. A stepper is a\n * page-dot indicator (see JimboStepper). This is a spinner.\n */\nexport function JimboSpinner({\n value,\n label,\n onPrev,\n onNext,\n canPrev = true,\n canNext = true,\n className = '',\n}: JimboSpinnerProps) {\n return (\n <div className={`j-spinner-wrap ${className}`}>\n {label && (\n <div className=\"j-spinner__label\">\n <JimboText size=\"sm\" tone=\"white\">{label}</JimboText>\n </div>\n )}\n <div className=\"j-spinner\">\n <JimboButton\n tone=\"red\"\n size=\"sm\"\n onClick={onPrev}\n disabled={!canPrev}\n aria-label={`Previous ${label ?? 'value'}`}\n >\n {'<'}\n </JimboButton>\n <div className=\"j-spinner__value\">\n <JimboText size=\"sm\" tone=\"white\">{value}</JimboText>\n </div>\n <JimboButton\n tone=\"red\"\n size=\"sm\"\n onClick={onNext}\n disabled={!canNext}\n aria-label={`Next ${label ?? 'value'}`}\n >\n {'>'}\n </JimboButton>\n </div>\n </div>\n )\n}\n","/**\n * JS mirror of jimbo-tokens.css :root hex.\n * CSS vars win on DOM. Use these for Canvas, SVG, CodeMirror.\n * Post-shader eyedrops — not Lua G.C.\n */\n\nexport const JimboColorOption = {\n RED: \"#fe5148\",\n BLUE: \"#0093ff\",\n GREEN: \"#429f79\",\n ORANGE: \"#ff9800\",\n GOLD: \"#e4b643\",\n PURPLE: \"#9e74ce\",\n PLANET: \"#00a7ca\",\n SPECTRAL: \"#2e76fd\",\n\n DARK_RED: \"#a02721\",\n DARK_BLUE: \"#0057a1\",\n DARK_ORANGE: \"#a05b00\",\n DARK_GREEN: \"#215f46\",\n\n DARK_GREY: \"#3a5055\",\n DARKEST: \"#1e2b2d\",\n GREY: \"#a8bcbf\",\n TEAL_GREY: \"#404c4e\",\n SURFACE: \"#3a5055\",\n SURFACE_INSET: \"#2a3a3f\",\n\n PANEL_EDGE: \"#1e2e32\",\n INNER_BORDER: \"#334461\",\n BORDER_SILVER: \"#b9c2d2\",\n BORDER_SOUTH: \"#777e89\",\n\n GREEN_TEXT: \"#35bd86\",\n WHITE: \"#ffffff\",\n BLACK: \"#000000\",\n\n /** Same decision as GOLD — kept so CodeMirror / old callers don't grow a second gold. */\n GOLD_TEXT: \"#e4b643\",\n} as const;\n\nexport type JimboPaletteColor = keyof typeof JimboColorOption;\n\nexport function withAlpha(hex: string, alpha: number): string {\n const clean = hex.replace(\"#\", \"\");\n const r = parseInt(clean.slice(0, 2), 16);\n const g = parseInt(clean.slice(2, 4), 16);\n const b = parseInt(clean.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/** Juice / sway used by JS motion. Press lip lives in CSS (--j-press-y). */\nexport const JIMBO_ANIMATIONS = {\n JUICE_UP_SCALE: 1.05,\n JUICE_EASING: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n SWAY_AMOUNT: 1.5,\n SWAY_DURATION: 4000,\n} as const;\n","// PORTABLE — intended for jaml-ui/src/ui/jimboIconButton.tsx\n// On paste, replace `from 'jaml-ui'` with `from './tokens.js'`.\n\"use client\";\n\nimport { JimboColorOption } from \"./tokens.js\";\nimport type React from \"react\";\nimport { useState } from \"react\";\n\nconst C = JimboColorOption;\n\nexport type JimboIconButtonTone = \"default\" | \"destructive\";\n\nexport interface JimboIconButtonProps {\n \"aria-label\"?: string;\n children: React.ReactNode;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /** Pass-through for drag-start guards (e.g. stopPropagation inside draggable rows). */\n onMouseDown?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onTouchStart?: (e: React.TouchEvent<HTMLButtonElement>) => void;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: JimboIconButtonTone;\n title?: string;\n}\n\nconst SIZE_PX: Record<NonNullable<JimboIconButtonProps[\"size\"]>, number> = {\n xs: 22,\n sm: 26,\n md: 30,\n};\n\nconst TONE_BG: Record<JimboIconButtonTone, { rest: string; hover: string; border: string }> = {\n default: { rest: C.DARKEST, hover: C.DARK_GREY, border: C.PANEL_EDGE },\n destructive: { rest: C.RED, hover: C.ORANGE, border: C.BLACK },\n};\n\nexport function JimboIconButton({\n onClick,\n onMouseDown,\n onTouchStart,\n title,\n \"aria-label\": ariaLabel,\n disabled = false,\n size = \"md\",\n tone = \"default\",\n children,\n}: JimboIconButtonProps) {\n const [hover, setHover] = useState(false);\n const side = SIZE_PX[size];\n const palette = TONE_BG[tone];\n // Destructive uses the Balatro \"raised chip\" look (thicker dark border +\n // bottom drop-shadow) to read clearly against red/orange clause backgrounds.\n const borderWidth = tone === \"destructive\" ? 2 : 1;\n const boxShadow =\n tone === \"destructive\"\n ? `inset 0 1px 0 rgba(255,255,255,.2), 0 2px 0 ${C.BLACK}`\n : undefined;\n\n return (\n <button\n aria-label={ariaLabel ?? title}\n disabled={disabled}\n onClick={(e) => !disabled && onClick?.(e)}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n style={{\n width: side,\n height: side,\n display: \"inline-grid\",\n placeItems: \"center\",\n background: hover && !disabled ? palette.hover : palette.rest,\n color: C.WHITE,\n border: `${borderWidth}px solid ${palette.border}`,\n borderRadius: 4,\n boxShadow,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.55 : 1,\n padding: 0,\n fontSize: 14,\n lineHeight: 1,\n transition: \"background 80ms ease\",\n }}\n title={title}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { FiChevronLeft, FiChevronRight } from \"react-icons/fi\";\nimport { JimboBox } from \"./JimboBox.js\";\nimport { JimboIconButton } from \"./JimboIconButton.js\";\n\nconst BUFFER_PX = 280;\nconst STEP_PX = 260;\n\nexport interface JimboShopBeltProps {\n children?: ReactNode;\n className?: string;\n onNearEnd?: () => void;\n snap?: boolean;\n}\n\n/** Horizontal pixel-card tape. Drag follows the finger; wheel maps to x. */\nexport function JimboShopBelt({ children, className, onNearEnd, snap = false }: JimboShopBeltProps) {\n const scrollerRef = useRef<HTMLDivElement>(null);\n const drag = useRef<{ id: number; x: number; left: number } | null>(null);\n const [grabbing, setGrabbing] = useState(false);\n\n const maybeEnd = useCallback(() => {\n const el = scrollerRef.current;\n if (!el || !onNearEnd) return;\n if (el.scrollWidth - (el.scrollLeft + el.clientWidth) <= BUFFER_PX) onNearEnd();\n }, [onNearEnd]);\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el) return;\n const onWheel = (event: WheelEvent) => {\n if (el.scrollWidth <= el.clientWidth) return;\n const delta = Math.abs(event.deltaY) > Math.abs(event.deltaX) ? event.deltaY : event.deltaX;\n if (delta === 0) return;\n el.scrollLeft += delta;\n event.preventDefault();\n maybeEnd();\n };\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => el.removeEventListener(\"wheel\", onWheel);\n }, [maybeEnd]);\n\n const nudge = (dir: -1 | 1) => {\n scrollerRef.current?.scrollBy({ left: dir * STEP_PX, behavior: \"smooth\" });\n if (dir > 0) maybeEnd();\n };\n\n const classes = [\n \"j-shop-belt\",\n \"j-shop-belt--grab\",\n snap ? \"j-shop-belt--snap\" : \"\",\n grabbing ? \"j-shop-belt--grabbing\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <JimboBox className=\"j-shop-belt-wrap\">\n <JimboIconButton size=\"sm\" aria-label=\"Scroll left\" onClick={() => nudge(-1)}>\n <FiChevronLeft />\n </JimboIconButton>\n <JimboBox\n ref={scrollerRef}\n className={classes}\n onScroll={maybeEnd}\n onPointerDown={(event) => {\n if (event.button !== 0) return;\n drag.current = { id: event.pointerId, x: event.clientX, left: event.currentTarget.scrollLeft };\n event.currentTarget.setPointerCapture(event.pointerId);\n setGrabbing(true);\n }}\n onPointerMove={(event) => {\n const d = drag.current;\n if (!d || d.id !== event.pointerId) return;\n event.currentTarget.scrollLeft = d.left - (event.clientX - d.x);\n }}\n onPointerUp={(event) => {\n if (drag.current?.id !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag.current = null;\n setGrabbing(false);\n maybeEnd();\n }}\n onPointerCancel={() => {\n drag.current = null;\n setGrabbing(false);\n }}\n >\n {children}\n </JimboBox>\n <JimboIconButton size=\"sm\" aria-label=\"Scroll right\" onClick={() => nudge(1)}>\n <FiChevronRight />\n </JimboIconButton>\n </JimboBox>\n );\n}\n","import React from 'react'\n\n// No 'gold' tone — Balatro doesn't use gold badges. Gold is reserved for\n// text-on-dark (prices, titles), not for chip/pill surfaces.\nexport type JimboBadgeTone = 'dark' | 'blue' | 'red' | 'green' | 'grey' | 'orange' | 'purple'\n\nexport interface JimboBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md'\n tone?: JimboBadgeTone\n children: React.ReactNode\n}\n\n// Class names are spelled out rather than interpolated. An interpolated name\n// never appears as a literal in the source, so nothing can grep for it, no\n// dead-CSS pass can count it, and a rename goes silently unstyled. `satisfies`\n// makes a missing tone a type error instead of a blank badge.\nconst SIZE_CLASS = {\n sm: 'j-badge--sm',\n md: 'j-badge--md',\n} as const satisfies Record<NonNullable<JimboBadgeProps['size']>, string>\n\nconst TONE_CLASS = {\n dark: 'j-badge--dark',\n blue: 'j-badge--blue',\n red: 'j-badge--red',\n green: 'j-badge--green',\n grey: 'j-badge--grey',\n orange: 'j-badge--orange',\n purple: 'j-badge--purple',\n} as const satisfies Record<JimboBadgeTone, string>\n\n/**\n * Small colored label pill. Matches Balatro's in-game tag/rarity badges.\n * All styling via jimbo.css `.j-badge` classes.\n */\nexport function JimboBadge({ size = 'sm', tone = 'dark', className, children, ...props }: JimboBadgeProps) {\n const classes = ['j-badge', SIZE_CLASS[size], TONE_CLASS[tone], className].filter(Boolean).join(' ')\n return (\n <span className={classes} {...props}>\n {children}\n </span>\n )\n}\n","\"use client\";\nimport React from \"react\";\n\nexport interface JimboInlineProps extends React.HTMLAttributes<HTMLSpanElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Thin wrapper around `<span>`.\n *\n * Use when you need an inline container that is not a `JimboText` (which\n * applies typography tokens). For styled text, prefer `JimboText`.\n */\nexport function JimboInline({ children, ...rest }: JimboInlineProps) {\n return <span {...rest}>{children}</span>;\n}\n","\"use client\";\nimport React from \"react\";\n\nexport interface JimboLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Thin wrapper around `<a>`.\n *\n * Use when you need a plain hyperlink. The ESLint `no-raw-html` rule\n * forbids `<a>` outside `src/ui/`, so consumers use this primitive.\n */\nexport function JimboLink({ children, ...rest }: JimboLinkProps) {\n return <a {...rest}>{children}</a>;\n}\n","\"use client\";\n\nimport type { InputHTMLAttributes, Ref } from \"react\";\n\nexport type JimboTextInputProps = InputHTMLAttributes<HTMLInputElement> & {\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function JimboTextInput({ className, ref, ...rest }: JimboTextInputProps) {\n const classes = [\"j-text-input\", className].filter(Boolean).join(\" \");\n return <input ref={ref} className={classes} {...rest} />;\n}\n","'use client'\n\nimport React from 'react'\n\n\nexport interface JimboFlankNavProps {\n onPrev: () => void\n onNext: () => void\n canPrev?: boolean\n canNext?: boolean\n prevLabel?: string\n nextLabel?: string\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Prev/next navigation with flanking buttons around a central stage.\n * No hardcoded labels, no lucide dep (inline chevron SVGs).\n */\nexport function JimboFlankNav({\n onPrev,\n onNext,\n canPrev = true,\n canNext = true,\n prevLabel = 'Previous',\n nextLabel = 'Next',\n children,\n className = '',\n style,\n}: JimboFlankNavProps) {\n return (\n <div className={`j-flank ${className}`} style={style}>\n <NavButton direction=\"left\" onClick={onPrev} disabled={!canPrev} aria-label={prevLabel} />\n <div className=\"j-flank__content\">{children}</div>\n <NavButton direction=\"right\" onClick={onNext} disabled={!canNext} aria-label={nextLabel} />\n </div>\n )\n}\n\nfunction NavButton({\n direction,\n onClick,\n disabled,\n 'aria-label': ariaLabel,\n}: {\n direction: 'left' | 'right'\n onClick: () => void\n disabled: boolean\n 'aria-label': string\n}) {\n const [pressed, setPressed] = React.useState(false)\n return (\n <button\n type=\"button\"\n className=\"j-flank__btn\"\n data-pressed={pressed && !disabled}\n onClick={onClick}\n disabled={disabled}\n aria-label={ariaLabel}\n title={ariaLabel}\n onMouseDown={() => !disabled && setPressed(true)}\n onMouseUp={() => setPressed(false)}\n onMouseLeave={() => setPressed(false)}\n onTouchStart={() => !disabled && setPressed(true)}\n onTouchEnd={() => setPressed(false)}\n >\n <ChevronSvg direction={direction} />\n </button>\n )\n}\n\nfunction ChevronSvg({ direction }: { direction: 'left' | 'right' }) {\n const points = direction === 'left' ? '18,4 8,14 18,24' : '10,4 20,14 10,24'\n return (\n <svg width={28} height={28} viewBox=\"0 0 28 28\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <polyline points={points} />\n </svg>\n )\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { JimboButton } from \"./JimboButton.js\";\nimport { JimboText } from \"./jimboText.js\";\n\nexport interface JimboPanelSpinnerProps {\n label?: string;\n title: string;\n description?: string;\n media?: ReactNode;\n onPrev?: () => void;\n onNext?: () => void;\n canPrev?: boolean;\n canNext?: boolean;\n className?: string;\n}\n\n/** Fat Balatro option cycler: 140px arrows flanking a fixed-height face. */\nexport function JimboPanelSpinner({\n label,\n title,\n description,\n media,\n onPrev,\n onNext,\n canPrev = true,\n canNext = true,\n className = \"\",\n}: JimboPanelSpinnerProps) {\n return (\n <div className={[\"j-panel-spinner\", className].filter(Boolean).join(\" \")}>\n {label ? (\n <div className=\"j-panel-spinner__label\">\n <JimboText size=\"sm\" tone=\"white\">\n {label}\n </JimboText>\n </div>\n ) : null}\n <div className=\"j-panel-spinner__row\">\n <JimboButton\n tone=\"red\"\n size=\"sm\"\n className=\"j-panel-spinner__arrow j-panel-spinner__arrow--left\"\n onClick={onPrev}\n disabled={!canPrev}\n aria-label={`Previous ${label ?? title}`}\n >\n {\"<\"}\n </JimboButton>\n <div className=\"j-panel-spinner__panel\">\n {media ? <div className=\"j-panel-spinner__media\">{media}</div> : null}\n <div className=\"j-panel-spinner__title\">\n <JimboText size=\"md\" tone=\"white\">\n {title}\n </JimboText>\n </div>\n {description ? (\n <div className=\"j-panel-spinner__description\">\n <JimboText size=\"xs\" tone=\"grey\">\n {description}\n </JimboText>\n </div>\n ) : null}\n </div>\n <JimboButton\n tone=\"red\"\n size=\"sm\"\n className=\"j-panel-spinner__arrow j-panel-spinner__arrow--right\"\n onClick={onNext}\n disabled={!canNext}\n aria-label={`Next ${label ?? title}`}\n >\n {\">\"}\n </JimboButton>\n </div>\n </div>\n );\n}\n","import {\n JOKERS, JOKER_FACES, TAROTS_AND_PLANETS, CONSUMABLE_FACES,\n VOUCHERS, BOSSES, TAGS, BOOSTER_PACKS,\n type SpriteEntry,\n} from \"./spriteData.js\";\n\nexport interface SpritePos {\n x: number;\n y: number;\n}\n\nexport type SpriteSheetType =\n | \"Jokers\" | \"Tarots\" | \"Vouchers\" | \"Boosters\"\n | \"Enhancers\" | \"Editions\" | \"BlindChips\" | \"tags\"\n | \"Stakes\" | \"Decks\";\n\nimport type { JamlAssetKey } from '../assets.js';\n\nexport const SHEET_META: Record<SpriteSheetType, { cols: number; rows: number; assetKey: JamlAssetKey }> = {\n Jokers: { cols: 10, rows: 16, assetKey: 'jokers' },\n Tarots: { cols: 10, rows: 6, assetKey: 'tarots' },\n Vouchers: { cols: 9, rows: 4, assetKey: 'vouchers' },\n Boosters: { cols: 4, rows: 9, assetKey: 'boosters' },\n BlindChips:{ cols: 21, rows: 31, assetKey: 'blinds' },\n tags: { cols: 6, rows: 5, assetKey: 'tags' },\n Enhancers: { cols: 7, rows: 5, assetKey: 'enhancers' },\n Editions: { cols: 5, rows: 1, assetKey: 'editions' },\n Stakes: { cols: 5, rows: 2, assetKey: 'stakes' },\n Decks: { cols: 13, rows: 4, assetKey: 'deck' },\n};\n\nexport interface SpriteData {\n pos: SpritePos;\n type: SpriteSheetType;\n}\n\nconst normalize = (name: string): string => name.toLowerCase().replace(/\\s+/g, \"\");\nconst stripPrefix = (name: string): string =>\n name.replace(/^(Joker|Tarot|Planet|Voucher|Pack|Edition|Tag) [|:] /i, \"\").trim();\n\nconst ITEM_MAP = new Map<string, SpriteData>();\n\nfunction registerAll(items: SpriteEntry[], type: SpriteSheetType) {\n for (const item of items) {\n if (!item.name || !item.pos) continue;\n const key = normalize(item.name);\n if (!ITEM_MAP.has(key)) {\n ITEM_MAP.set(key, { pos: item.pos, type });\n }\n }\n}\n\nregisterAll(JOKERS, \"Jokers\");\nregisterAll(JOKER_FACES, \"Jokers\");\nregisterAll(TAROTS_AND_PLANETS, \"Tarots\");\nregisterAll(CONSUMABLE_FACES ?? [], \"Tarots\");\nregisterAll(VOUCHERS, \"Vouchers\");\nregisterAll(BOSSES, \"BlindChips\");\nregisterAll(TAGS, \"tags\");\nregisterAll(BOOSTER_PACKS ?? [], \"Boosters\");\n\n/**\n * Per-sheet mystery/back card positions for unknown items.\n * Used as fallback when an item name can't be resolved.\n */\nexport const MYSTERY_SPRITES: Partial<Record<SpriteSheetType, SpritePos>> = {\n Jokers: { x: 9, y: 9 }, // grey card back (legendary face row)\n Tarots: { x: 4, y: 2 }, // blank consumable\n Vouchers: { x: 8, y: 2 }, // mystery voucher\n Boosters: { x: 0, y: 5 }, // grey empty pack\n tags: { x: 3, y: 4 }, // grey ? tag\n BlindChips: { x: 0, y: 30 }, // grey ? blind\n};\n\n/** Get the mystery/fallback sprite for a given sheet type. */\nexport function getMysterySprite(sheet: SpriteSheetType): SpriteData {\n return { pos: MYSTERY_SPRITES[sheet] ?? { x: 0, y: 0 }, type: sheet };\n}\n\n/** Look up sprite data by name. Accepts display names (\"Icy Joker\"), enum keys (\"IcyJoker\"), and \"Joker | Name\" prefixed forms. */\nexport function getSpriteData(name: string): SpriteData | null {\n return ITEM_MAP.get(normalize(stripPrefix(name))) ?? ITEM_MAP.get(normalize(name)) ?? null;\n}\n\n/**\n * Wildcard \"Any\" sprites from the Enhancers sheet.\n * Used in the JAML visual editor when a clause value is \"Any\" (e.g. `legendaryJoker: Any`).\n */\nexport const WILDCARD_SPRITES = {\n /** Grey silhouette — Enhancers row 3 col 5. For generic \"Any\" items. */\n anySilhouette: { pos: { x: 5, y: 3 }, type: \"Enhancers\" as SpriteSheetType },\n /** Grey ? circle — Enhancers row 3 col 6. For \"boss: Any\" etc. */\n anyMystery: { pos: { x: 6, y: 3 }, type: \"Enhancers\" as SpriteSheetType },\n /** Red X debuff — Editions row 0 col 4. For mustNot zone indicator. */\n mustNotDebuff: { pos: { x: 4, y: 0 }, type: \"Editions\" as SpriteSheetType },\n /** The Soul card — Tarots row 2 col 2. Base for \"legendaryJoker: Any\" (they spawn from Soul). */\n anyLegendary: { pos: { x: 2, y: 2 }, type: \"Tarots\" as SpriteSheetType },\n /** Blank spectral back — Tarots row 2 col 5. For \"spectralCard: Any\". */\n anySpectral: { pos: { x: 5, y: 2 }, type: \"Tarots\" as SpriteSheetType },\n /** Blank tarot back — Tarots row 2 col 6. For \"tarotCard: Any\". */\n anyTarot: { pos: { x: 6, y: 2 }, type: \"Tarots\" as SpriteSheetType },\n /** Blank planet back — Tarots row 2 col 7. For \"planetCard: Any\". */\n anyPlanet: { pos: { x: 7, y: 2 }, type: \"Tarots\" as SpriteSheetType },\n} as const;\n\n/** Look up sprite data by name, falling back to the mystery card for the given sheet if not found. */\nexport function getSpriteDataOrMystery(name: string, fallbackSheet: SpriteSheetType = \"Jokers\"): SpriteData {\n return getSpriteData(name) ?? getMysterySprite(fallbackSheet);\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { resolveJamlAssetUrl } from \"../assets.js\";\nimport { SHEET_META, getSpriteDataOrMystery, type SpriteSheetType } from \"../sprites/spriteMapper.js\";\n\nexport interface JimboSpriteProps {\n name: string;\n sheet: SpriteSheetType;\n width: number;\n className?: string;\n style?: CSSProperties;\n}\n\n// Card-shaped sheets (jokers/tarots/vouchers/packs) render taller than wide,\n// matching the standard Balatro card proportion; chip/icon sheets are square.\nconst CARD_SHEETS = new Set<SpriteSheetType>([\"Jokers\", \"Tarots\", \"Vouchers\", \"Boosters\"]);\n\nexport function JimboSprite({ name, sheet, width, className, style }: JimboSpriteProps) {\n const { pos, type } = getSpriteDataOrMystery(name, sheet);\n const meta = SHEET_META[type];\n const height = CARD_SHEETS.has(type) ? Math.round(width * (95 / 71)) : width;\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n display: \"inline-block\",\n width,\n height,\n overflow: \"hidden\",\n imageRendering: \"pixelated\",\n ...style,\n }}\n title={name}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl(meta.assetKey)})`,\n backgroundSize: `${meta.cols * 100}% ${meta.rows * 100}%`,\n backgroundPosition: `${(pos.x / (meta.cols - 1)) * 100}% ${(pos.y / (meta.rows - 1)) * 100}%`,\n backgroundRepeat: \"no-repeat\",\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nexport function JimboPicker({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function JimboPickerSection({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker__section\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function JimboPickerSearch({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker__search\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function JimboPickerHint({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker__hint\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface JimboPickerGridProps extends HTMLAttributes<HTMLDivElement> {\n legendary?: boolean;\n scroll?: boolean;\n}\n\nexport function JimboPickerGrid({ legendary, className, children, ...rest }: JimboPickerGridProps) {\n const classes = [\"j-picker__grid\", legendary ? \"j-picker__grid--legendary\" : \"\", className]\n .filter(Boolean)\n .join(\" \");\n return (\n <div className={classes} {...rest}>\n {children}\n </div>\n );\n}\n\nexport interface JimboPickerItemProps extends HTMLAttributes<HTMLButtonElement> {\n muted?: boolean;\n title?: string;\n onClick?: () => void;\n children?: ReactNode;\n}\n\nexport function JimboPickerItem({ muted, className, children, ...rest }: JimboPickerItemProps) {\n const classes = [\"j-picker__item\", className].filter(Boolean).join(\" \");\n return (\n <button type=\"button\" className={classes} data-muted={muted} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function JimboPickerPair({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker__pair\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function JimboPickerEmpty({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={[\"j-picker__empty\", className].filter(Boolean).join(\" \")} {...rest}>\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport { JimboButton } from \"./JimboButton.js\";\n\nexport interface JimboTabDef {\n id: string;\n label: string;\n}\n\nexport interface JimboTabsProps {\n tabs: JimboTabDef[];\n activeTab: string;\n onTabChange: (id: string) => void;\n}\n\n/**\n * Balatro shop-style tab row. Each tab IS a JimboButton — same face, same\n * chunky press, same red tone as the in-game shop buttons. The only thing\n * that marks the selected tab is the red bouncing triangle above it.\n */\nexport function JimboTabs({ tabs, activeTab, onTabChange }: JimboTabsProps) {\n return (\n <div className=\"j-tabs\">\n {tabs.map((tab) => {\n const active = tab.id === activeTab;\n return (\n <div key={tab.id} className=\"j-tab\">\n <div className=\"j-tab__indicator\" data-active={active}>\n <svg width=\"10\" height=\"8\" viewBox=\"0 0 10 8\">\n <path d=\"M5 8 L0 0 L10 0 Z\" />\n </svg>\n </div>\n <JimboButton\n size=\"sm\"\n tone=\"red\"\n label={tab.label}\n onClick={() => onTabChange(tab.id)}\n />\n </div>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ButtonHTMLAttributes } from \"react\";\n\nexport interface JimboListItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n active?: boolean;\n}\n\nexport function JimboListItem({ active, className, children, ...rest }: JimboListItemProps) {\n const classes = [\"j-list-item\", className].filter(Boolean).join(\" \");\n return (\n <button type=\"button\" className={classes} data-active={active} {...rest}>\n {children}\n </button>\n );\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nexport type JimboMotionSetting = 'auto' | 'full' | 'reduced'\n\nconst ATTR = 'data-j-motion'\nconst STORAGE_KEY = 'jimbo-motion'\nconst MEDIA_QUERY = '(prefers-reduced-motion: reduce)'\n\nfunction applyAttr(setting: JimboMotionSetting) {\n const root = document.documentElement\n if (setting === 'auto') {\n root.removeAttribute(ATTR)\n } else {\n root.setAttribute(ATTR, setting)\n }\n}\n\nfunction readStoredSetting(): JimboMotionSetting {\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY)\n if (stored === 'full' || stored === 'reduced') return stored\n } catch {\n // localStorage unavailable (e.g. sandboxed MCP iframe) — fall through to auto.\n }\n return 'auto'\n}\n\n/**\n * A real, user-settable motion preference — not a silent one-way OS override.\n *\n * `setting` starts as `'auto'` (follows the OS prefers-reduced-motion signal, same\n * as before) but a user's explicit `'full'` or `'reduced'` choice always wins over\n * the OS, in both directions: someone can ask for full tactile motion even with the\n * OS set to reduce, or ask for reduced motion even when the OS says nothing. The\n * choice persists across visits via localStorage.\n *\n * Writes the `data-j-motion` attribute on <html>, which jimbo-tokens.css and\n * jimbo.css both key off — see the motion-setting block in jimbo-tokens.css.\n */\nexport function useMotionPreference() {\n const [setting, setSettingState] = useState<JimboMotionSetting>(() =>\n typeof document === 'undefined' ? 'auto' : readStoredSetting()\n )\n const [osPrefersReduced, setOsPrefersReduced] = useState(() =>\n typeof window === 'undefined' ? false : window.matchMedia(MEDIA_QUERY).matches\n )\n\n useEffect(() => {\n applyAttr(setting)\n }, [setting])\n\n useEffect(() => {\n const mql = window.matchMedia(MEDIA_QUERY)\n const onChange = () => setOsPrefersReduced(mql.matches)\n mql.addEventListener('change', onChange)\n return () => mql.removeEventListener('change', onChange)\n }, [])\n\n const setSetting = useCallback((next: JimboMotionSetting) => {\n setSettingState(next)\n try {\n if (next === 'auto') window.localStorage.removeItem(STORAGE_KEY)\n else window.localStorage.setItem(STORAGE_KEY, next)\n } catch {\n // Best-effort persistence only — the in-memory setting still applies this session.\n }\n }, [])\n\n // What's actually in effect right now, resolving 'auto' against the OS signal —\n // for components (useDOMMagneticTilt, useSway) that gate JS-driven motion\n // directly rather than through the CSS custom properties.\n const effectiveReducedMotion =\n setting === 'reduced' ? true : setting === 'full' ? false : osPrefersReduced\n\n return { setting, setSetting, osPrefersReduced, effectiveReducedMotion }\n}\n","import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { JamlVisualClause, JamlVisualFilter, JamlZone } from '../components/JamlIdeVisual.js'\nimport { JIMBO_ANIMATIONS } from './tokens.js'\nimport { Layer } from '../render/Layer.js'\nimport { SPRITE_SHEETS } from '../sprites/spriteData.js'\nimport { useMotionPreference } from './useMotionPreference.js'\n\nfunction loadImage(url: string): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const image = new window.Image()\n image.addEventListener('load', () => resolve(image))\n image.addEventListener('error', () => resolve(null))\n image.src = url\n })\n}\n\nfunction renderImage(\n canvas: HTMLCanvasElement,\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n layer: Layer,\n timestamp?: number,\n) {\n if (!image || !layer || !layer?.pos) return 0\n const cardWidth = image.width / layer.columns\n const cardHeight = image.height / layer.rows\n const canvasStyle = canvas.style\n\n if (layer.order === 0) {\n canvas.width = cardWidth\n canvas.height = cardHeight\n canvasStyle.width = `${cardWidth}px`\n canvasStyle.height = `${cardHeight}px`\n }\n\n canvasStyle.imageRendering = 'pixelated'\n context.imageSmoothingEnabled = true\n\n context.save()\n\n if (layer.animated && timestamp) {\n const elapsed = timestamp\n const yOffset = Math.sin(elapsed / 1000) * 3\n const xOffset = Math.sin(elapsed / 1500) * 1.5\n context.globalAlpha = 0.65 + (Math.sin(elapsed / 2000) + 1) * 0.075\n context.translate(xOffset, yOffset)\n }\n\n context.drawImage(image, layer.pos.x * cardWidth, layer.pos.y * cardHeight, cardWidth, cardHeight, 0, 0, canvas.width, canvas.height)\n context.restore()\n\n return cardWidth / cardHeight\n}\n\n/**\n * Sway animation for Balatro-style UI elements.\n */\nexport function useSway(active: boolean) {\n const ref = useRef<HTMLDivElement>(null)\n const { effectiveReducedMotion } = useMotionPreference()\n\n useEffect(() => {\n if (!active || effectiveReducedMotion || !ref.current) return\n let frame: number\n const start = Date.now()\n const el = ref.current\n const tick = () => {\n const t = ((Date.now() - start) % JIMBO_ANIMATIONS.SWAY_DURATION) / JIMBO_ANIMATIONS.SWAY_DURATION * Math.PI * 2\n el.style.transform = `translate(${Math.sin(t) * JIMBO_ANIMATIONS.SWAY_AMOUNT * 0.3}px, ${Math.sin(t * 0.8) * JIMBO_ANIMATIONS.SWAY_AMOUNT}px)`\n frame = requestAnimationFrame(tick)\n }\n frame = requestAnimationFrame(tick)\n return () => {\n cancelAnimationFrame(frame)\n if (el) el.style.transform = ''\n }\n }, [active, effectiveReducedMotion])\n\n return ref\n}\n\n/**\n * Handles delayed visibility for transitions (e.g. modals).\n */\nexport function useDelayedVisibility(open: boolean, delay: number) {\n const [visible, setVisible] = useState(open)\n const [opacity, setOpacity] = useState(open ? 1 : 0)\n const [prevOpen, setPrevOpen] = useState(open)\n\n if (open !== prevOpen) {\n setPrevOpen(open)\n if (open) {\n setVisible(true)\n } else {\n setOpacity(0)\n }\n }\n\n useEffect(() => {\n if (open) {\n const frame = requestAnimationFrame(() => setOpacity(1))\n return () => cancelAnimationFrame(frame)\n } else {\n const t = setTimeout(() => setVisible(false), delay)\n return () => clearTimeout(t)\n }\n }, [open, delay])\n\n return { visible, opacity }\n}\n\nexport type JimboBackgroundColor = string | [number, number, number]\n\nexport interface JimboBackgroundConfig {\n /** Three palette colors. Each can be `#RRGGBB` / `#RGB` or `[r,g,b]` in 0..1. */\n primary?: JimboBackgroundColor\n secondary?: JimboBackgroundColor\n dark?: JimboBackgroundColor\n /** Animation speed multiplier on top of the base SPIN_SPEED. Default 1. */\n speed?: number\n /** Twirl rotation seed (default -2). */\n spinRotation?: number\n /** How much the twirl warps the field, 0..1ish (default 0.35). */\n spinAmount?: number\n /** Pixelation. Higher = finer pixels (default ~244 = 740*0.33). */\n pixelFilter?: number\n /** Contrast multiplier (default 4.5). */\n contrast?: number\n /** Bright lighting amount (default 0.5). */\n lighting?: number\n /** Color transition duration in ms when palette changes. Default 800. */\n transitionMs?: number\n}\n\nconst BALATRO_DEFAULTS = {\n primary: [1.0, 0.2, 0.2 ] as [number, number, number], // red\n secondary: [0.0, 0.5, 1.0 ] as [number, number, number], // blue\n dark: [0.05, 0.08, 0.1 ] as [number, number, number], // near-black\n speed: 1.0,\n spinRotation: -2.0,\n spinAmount: 0.35,\n pixelFilter: 740.0 * 0.33,\n contrast: 4.5,\n lighting: 0.5,\n transitionMs: 800,\n}\n\nfunction parseColor(c: JimboBackgroundColor | undefined, fallback: [number, number, number]): [number, number, number] {\n if (!c) return fallback\n if (Array.isArray(c)) return [c[0], c[1], c[2]]\n let hex = c.trim().replace(/^#/, '')\n if (hex.length === 3) hex = hex.split('').map((ch) => ch + ch).join('')\n if (hex.length !== 6) return fallback\n const n = parseInt(hex, 16)\n if (Number.isNaN(n)) return fallback\n return [((n >> 16) & 0xff) / 255, ((n >> 8) & 0xff) / 255, (n & 0xff) / 255]\n}\n\n/**\n * Hook for the Balatro hypnotic swirl background.\n * Manages WebGL context, shader compilation, and animation loop.\n *\n * All shader constants are exposed as uniforms so they can be tuned at\n * runtime. Palette and scalar uniforms (pixelFilter, contrast, spin, etc.)\n * interpolate over `transitionMs` so control changes fade smoothly.\n */\nexport function useBalatroBackground(config: JimboBackgroundConfig = {}) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n // Latest config lives in a ref so the render loop can read fresh values\n // without re-creating the WebGL context on every prop change.\n const configRef = useRef(config)\n useLayoutEffect(() => {\n configRef.current = config\n })\n\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n\n const gl = canvas.getContext('webgl')\n if (!gl) return\n\n const vsSource = `\n attribute vec2 position;\n void main() {\n gl_Position = vec4(position, 0.0, 1.0);\n }\n `\n\n const fsSource = `\n precision mediump float;\n\n uniform float u_time;\n uniform vec2 u_resolution;\n uniform vec3 u_color1;\n uniform vec3 u_color2;\n uniform vec3 u_color3;\n uniform float u_spinRotation;\n uniform float u_spinSpeed;\n uniform float u_spinAmount;\n uniform float u_pixelFilter;\n uniform float u_contrast;\n uniform float u_lighting;\n\n void main() {\n vec2 screenSize = u_resolution;\n float pixel_size = length(screenSize.xy) / max(1.0, u_pixelFilter);\n vec2 uv = (floor(gl_FragCoord.xy*(1.0/pixel_size))*pixel_size - 0.5*screenSize.xy)/length(screenSize.xy);\n float uv_len = length(uv);\n\n float speed = (u_spinRotation * 0.2) + 302.2;\n float new_pixel_angle = atan(uv.y, uv.x) + speed - 20.0*(u_spinAmount*uv_len + (1.0 - u_spinAmount));\n\n vec2 mid = (screenSize.xy/length(screenSize.xy))/2.0;\n uv = (vec2((uv_len * cos(new_pixel_angle) + mid.x), (uv_len * sin(new_pixel_angle) + mid.y)) - mid);\n\n uv *= 30.0;\n speed = u_time * u_spinSpeed;\n vec2 uv2 = vec2(uv.x, uv.y);\n\n for(int i=0; i < 5; i++) {\n uv2 += sin(max(uv.x, uv.y)) + uv;\n uv += 0.5*vec2(cos(5.1123314 + 0.353*uv2.y + speed*0.131121), sin(uv2.x - 0.113*speed));\n uv -= 1.0*cos(uv.x + uv.y) - 1.0*sin(uv.x*0.711 - uv.y);\n }\n\n float contrast_mod = (0.25*u_contrast + 0.5*u_spinAmount + 1.2);\n float paint_res = min(2.0, max(0.0, length(uv)*(0.035)*contrast_mod));\n float c1p = max(0.0, 1.0 - contrast_mod*abs(1.0 - paint_res));\n float c2p = max(0.0, 1.0 - contrast_mod*abs(paint_res));\n float c3p = 1.0 - min(1.0, c1p + c2p);\n float light = (u_lighting - 0.2)*max(c1p*5.0 - 4.0, 0.0) + u_lighting*max(c2p*5.0 - 4.0, 0.0);\n\n vec3 base = (0.3/u_contrast)*u_color1 + (1.0 - 0.3/u_contrast)*(u_color1*c1p + u_color2*c2p + c3p*u_color3) + vec3(light);\n gl_FragColor = vec4(base, 1.0);\n }\n `\n\n const createShader = (type: number, source: string) => {\n const shader = gl.createShader(type)\n if (!shader) return null\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error('[JimboBackground] shader compile error:', gl.getShaderInfoLog(shader))\n gl.deleteShader(shader)\n return null\n }\n return shader\n }\n\n const vertexShader = createShader(gl.VERTEX_SHADER, vsSource)\n const fragmentShader = createShader(gl.FRAGMENT_SHADER, fsSource)\n if (!vertexShader || !fragmentShader) return\n\n const program = gl.createProgram()\n if (!program) return\n gl.attachShader(program, vertexShader)\n gl.attachShader(program, fragmentShader)\n gl.linkProgram(program)\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error('[JimboBackground] program link error:', gl.getProgramInfoLog(program))\n return\n }\n\n gl.useProgram(program)\n\n const positionBuffer = gl.createBuffer()\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([\n -1.0, -1.0, 1.0, -1.0, -1.0, 1.0,\n -1.0, 1.0, 1.0, -1.0, 1.0, 1.0,\n ]),\n gl.STATIC_DRAW,\n )\n\n const positionLocation = gl.getAttribLocation(program, 'position')\n gl.enableVertexAttribArray(positionLocation)\n gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0)\n\n const u_time = gl.getUniformLocation(program, 'u_time')\n const u_resolution = gl.getUniformLocation(program, 'u_resolution')\n const u_color1 = gl.getUniformLocation(program, 'u_color1')\n const u_color2 = gl.getUniformLocation(program, 'u_color2')\n const u_color3 = gl.getUniformLocation(program, 'u_color3')\n const u_spinRotation = gl.getUniformLocation(program, 'u_spinRotation')\n const u_spinSpeed = gl.getUniformLocation(program, 'u_spinSpeed')\n const u_spinAmount = gl.getUniformLocation(program, 'u_spinAmount')\n const u_pixelFilter = gl.getUniformLocation(program, 'u_pixelFilter')\n const u_contrast = gl.getUniformLocation(program, 'u_contrast')\n const u_lighting = gl.getUniformLocation(program, 'u_lighting')\n\n const resolveScalars = (cfg: JimboBackgroundConfig) => ({\n spinRotation: cfg.spinRotation ?? BALATRO_DEFAULTS.spinRotation,\n spinSpeed: 4.5 * (cfg.speed ?? BALATRO_DEFAULTS.speed),\n spinAmount: cfg.spinAmount ?? BALATRO_DEFAULTS.spinAmount,\n pixelFilter: cfg.pixelFilter ?? BALATRO_DEFAULTS.pixelFilter,\n contrast: cfg.contrast ?? BALATRO_DEFAULTS.contrast,\n lighting: cfg.lighting ?? BALATRO_DEFAULTS.lighting,\n })\n\n // Interpolated palette + shader scalars — all ease toward configRef over transitionMs.\n const boot = configRef.current\n const current: [number, number, number][] = [\n parseColor(boot.primary, BALATRO_DEFAULTS.primary),\n parseColor(boot.secondary, BALATRO_DEFAULTS.secondary),\n parseColor(boot.dark, BALATRO_DEFAULTS.dark),\n ]\n const currentScalars = resolveScalars(boot)\n const startTime = performance.now()\n let lastFrame = startTime\n let animationFrameId = 0\n\n const render = () => {\n const now = performance.now()\n const dt = Math.max(0, now - lastFrame)\n lastFrame = now\n\n const cfg = configRef.current\n const target: [number, number, number][] = [\n parseColor(cfg.primary, BALATRO_DEFAULTS.primary),\n parseColor(cfg.secondary, BALATRO_DEFAULTS.secondary),\n parseColor(cfg.dark, BALATRO_DEFAULTS.dark),\n ]\n const targetScalars = resolveScalars(cfg)\n const transitionMs = Math.max(1, cfg.transitionMs ?? BALATRO_DEFAULTS.transitionMs)\n // Frame-rate-independent lerp: alpha = 1 - exp(-dt / tau).\n const alpha = 1 - Math.exp(-dt / transitionMs)\n for (let i = 0; i < 3; i++) {\n for (let c = 0; c < 3; c++) {\n current[i][c] += (target[i][c] - current[i][c]) * alpha\n }\n }\n const lerpScalar = (key: keyof typeof currentScalars) => {\n currentScalars[key] += (targetScalars[key] - currentScalars[key]) * alpha\n }\n lerpScalar('spinRotation')\n lerpScalar('spinSpeed')\n lerpScalar('spinAmount')\n lerpScalar('pixelFilter')\n lerpScalar('contrast')\n lerpScalar('lighting')\n\n const displayWidth = canvas.clientWidth\n const displayHeight = canvas.clientHeight\n if (canvas.width !== displayWidth || canvas.height !== displayHeight) {\n canvas.width = displayWidth\n canvas.height = displayHeight\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight)\n }\n\n gl.uniform1f(u_time, (now - startTime) / 1000.0)\n gl.uniform2f(u_resolution, canvas.width, canvas.height)\n gl.uniform3f(u_color1, current[0][0], current[0][1], current[0][2])\n gl.uniform3f(u_color2, current[1][0], current[1][1], current[1][2])\n gl.uniform3f(u_color3, current[2][0], current[2][1], current[2][2])\n gl.uniform1f(u_spinRotation, currentScalars.spinRotation)\n gl.uniform1f(u_spinSpeed, currentScalars.spinSpeed)\n gl.uniform1f(u_spinAmount, currentScalars.spinAmount)\n gl.uniform1f(u_pixelFilter, currentScalars.pixelFilter)\n gl.uniform1f(u_contrast, currentScalars.contrast)\n gl.uniform1f(u_lighting, currentScalars.lighting)\n\n gl.drawArrays(gl.TRIANGLES, 0, 6)\n animationFrameId = requestAnimationFrame(render)\n }\n\n animationFrameId = requestAnimationFrame(render)\n\n return () => {\n cancelAnimationFrame(animationFrameId)\n gl.deleteProgram(program)\n gl.deleteShader(vertexShader)\n gl.deleteShader(fragmentShader)\n gl.deleteBuffer(positionBuffer)\n }\n }, [])\n\n return canvasRef\n}\n\nexport type JimboTooltipMode = 'snap' | 'mouse'\nexport type JimboTooltipPlacement = 'top' | 'bottom' | 'auto'\n\n/**\n * Hook for managing JimboTooltip state and positioning.\n */\nexport function useJimboTooltip({\n mode = 'snap',\n placement = 'auto',\n delay = 80,\n disabled = false,\n}: {\n mode?: JimboTooltipMode\n placement?: JimboTooltipPlacement\n delay?: number\n disabled?: boolean\n}) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState<{ left: number; top: number; align: 'top' | 'bottom' } | null>(null)\n const targetRef = useRef<HTMLElement | null>(null)\n const tooltipRef = useRef<HTMLDivElement | null>(null)\n const delayTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n if (disabled) return\n if (delayTimerRef.current) clearTimeout(delayTimerRef.current)\n delayTimerRef.current = setTimeout(() => setVisible(true), delay)\n }, [disabled, delay])\n\n const hide = useCallback(() => {\n if (delayTimerRef.current) clearTimeout(delayTimerRef.current)\n setVisible(false)\n setPos(null)\n }, [])\n\n const computeSnapPos = useCallback(() => {\n const el = targetRef.current\n const tip = tooltipRef.current\n if (!el || !tip) return\n const rect = el.getBoundingClientRect()\n const tipRect = tip.getBoundingClientRect()\n const roomAbove = rect.top\n const align: 'top' | 'bottom' =\n placement === 'top' ? 'top'\n : placement === 'bottom' ? 'bottom'\n : roomAbove >= tipRect.height + 12 ? 'top' : 'bottom'\n\n const left = rect.left + rect.width / 2 - tipRect.width / 2\n const top = align === 'top' ? rect.top - tipRect.height - 8 : rect.bottom + 8\n setPos({\n left: Math.max(8, Math.min(window.innerWidth - tipRect.width - 8, left)),\n top,\n align\n })\n }, [placement])\n\n useEffect(() => {\n if (!visible || mode !== 'snap') return\n const raf = requestAnimationFrame(computeSnapPos)\n window.addEventListener('resize', computeSnapPos)\n window.addEventListener('scroll', computeSnapPos, true)\n return () => {\n cancelAnimationFrame(raf)\n window.removeEventListener('resize', computeSnapPos)\n window.removeEventListener('scroll', computeSnapPos, true)\n }\n }, [visible, mode, computeSnapPos])\n\n useEffect(() => () => {\n if (delayTimerRef.current) clearTimeout(delayTimerRef.current)\n }, [])\n\n const handleMouseMove = useCallback((e: React.MouseEvent | React.PointerEvent) => {\n if (mode !== 'mouse') return\n setPos({ left: e.clientX + 12, top: e.clientY + 16, align: 'bottom' })\n }, [mode])\n\n return {\n visible,\n pos,\n targetRef,\n tooltipRef,\n show,\n hide,\n handleMouseMove,\n }\n}\n\n/**\n * Hook for managing the JamlCardRenderer logic.\n */\nexport function useJamlCardRenderer({\n layers,\n invert = false,\n hoverTilt = false,\n}: {\n layers: Layer[]\n invert?: boolean\n hoverTilt?: boolean\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const imageCacheRef = useRef<Map<string, HTMLImageElement>>(new Map())\n const [ratio, setRatio] = useState(3 / 4)\n const [, forceUpdate] = useState(0)\n const frameRef = useRef<number | null>(null)\n const targetRef = useRef({ rx: 0, ry: 0, rz: 0 })\n const currentRef = useRef({ rx: 0, ry: 0, rz: 0 })\n\n const hasAnimatedLayer = layers?.some((layer) => layer.animated)\n\n // Preload all known sheets once\n useEffect(() => {\n let cancelled = false\n const imageCache = imageCacheRef.current\n const preload = async () => {\n const urls = Array.from(new Set(Object.values(SPRITE_SHEETS).map((sheet) => sheet.src)))\n const images = await Promise.all(urls.map((url) => loadImage(url)))\n if (cancelled) return\n images.forEach((image, index) => {\n if (image) imageCache.set(urls[index], image)\n })\n forceUpdate((prev) => prev + 1)\n }\n\n preload().catch((err) => console.error('[JamlCardRenderer]', err))\n\n return () => {\n cancelled = true\n imageCache.clear()\n }\n }, [])\n\n // Drawing: RAF loop for animated layers, single paint otherwise. Previously\n // the canvas redrew via an Effect that depended on an `elapsed` state which\n // a separate ~10fps RAF loop kept ticking — re-running setup/teardown of\n // the drawing Effect every animation frame. Now drawing lives inside the\n // RAF loop and the Effect only re-runs on layer / invert / animated changes.\n useEffect(() => {\n const canvas = canvasRef.current\n if (!canvas || !layers || layers.length === 0) return\n const context = canvas.getContext('2d')\n if (!context) return\n\n let cancelled = false\n let frame: number | null = null\n let startTime: number | undefined\n\n const drawOnce = (animTime?: number) => {\n context.clearRect(0, 0, canvas.width, canvas.height)\n ;[...layers]\n .sort((a, b) => a.order - b.order)\n .forEach((layer) => {\n const cached = imageCacheRef.current.get(layer.source)\n if (cached) {\n const imageRatio = renderImage(canvas, context, cached, layer, hasAnimatedLayer ? animTime : undefined)\n if (layer.order === 0) setRatio(imageRatio)\n return\n }\n loadImage(layer.source).then((img) => {\n if (cancelled || !img) return\n imageCacheRef.current.set(layer.source, img)\n // For non-animated layers there's no RAF tick to repaint the\n // newly-loaded image, so paint it now.\n if (!hasAnimatedLayer) {\n const imageRatio = renderImage(canvas, context, img, layer)\n if (layer.order === 0) setRatio(imageRatio)\n }\n forceUpdate((prev) => prev + 1)\n })\n })\n canvas.style.filter = invert ? 'invert(0.94)' : 'none'\n }\n\n if (hasAnimatedLayer) {\n const tick = (timestamp: number) => {\n if (cancelled) return\n if (startTime === undefined) startTime = timestamp\n drawOnce(timestamp - startTime)\n frame = requestAnimationFrame(tick)\n }\n frame = requestAnimationFrame(tick)\n } else {\n drawOnce()\n }\n\n return () => {\n cancelled = true\n if (frame !== null) cancelAnimationFrame(frame)\n }\n }, [layers, invert, hasAnimatedLayer])\n\n const stopTiltLoop = useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current)\n frameRef.current = null\n }\n }, [])\n\n const writeCardTransform = useCallback(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n const c = currentRef.current\n canvas.style.transform = `rotateX(${c.rx}deg) rotateY(${c.ry}deg) rotateZ(${c.rz}deg)`\n }, [])\n\n const runTiltLoop = useCallback((rate: number, onSettled?: () => void) => {\n stopTiltLoop()\n let previous = performance.now()\n const tick = (now: number) => {\n const dt = Math.min(0.05, (now - previous) / 1000)\n previous = now\n const target = targetRef.current\n const current = currentRef.current\n const alpha = 1 - Math.exp(-rate * dt)\n current.rx += (target.rx - current.rx) * alpha\n current.ry += (target.ry - current.ry) * alpha\n current.rz += (target.rz - current.rz) * alpha\n writeCardTransform()\n const settled =\n Math.abs(target.rx - current.rx) < 0.02 &&\n Math.abs(target.ry - current.ry) < 0.02 &&\n Math.abs(target.rz - current.rz) < 0.02\n if (settled) {\n current.rx = target.rx\n current.ry = target.ry\n current.rz = target.rz\n writeCardTransform()\n frameRef.current = null\n onSettled?.()\n return\n }\n frameRef.current = requestAnimationFrame(tick)\n }\n frameRef.current = requestAnimationFrame(tick)\n }, [stopTiltLoop, writeCardTransform])\n\n useEffect(() => () => stopTiltLoop(), [stopTiltLoop])\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!hoverTilt || event.pointerType === 'touch') return\n containerRef.current?.setAttribute('data-hovered', 'true')\n runTiltLoop(22)\n }\n\n const onPointerLeave = () => {\n if (!hoverTilt) return\n containerRef.current?.setAttribute('data-hovered', 'false')\n targetRef.current = { rx: 0, ry: 0, rz: 0 }\n runTiltLoop(14, () => {\n const canvas = canvasRef.current\n if (canvas) canvas.style.transform = ''\n })\n }\n\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!hoverTilt || event.pointerType === 'touch') return\n const rect = event.currentTarget.getBoundingClientRect()\n const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - 0.5) * 2))\n const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - 0.5) * 2))\n targetRef.current = {\n rx: ny * -10,\n ry: nx * 12,\n rz: nx * ny * -1.2,\n }\n containerRef.current?.style.setProperty('--j-card-glare-x', `${(nx + 1) * 50}%`)\n containerRef.current?.style.setProperty('--j-card-glare-y', `${(1 - ny) * 50}%`)\n runTiltLoop(22)\n }\n\n return {\n canvasRef,\n containerRef,\n ratio,\n handlers: {\n onPointerEnter: hoverTilt ? onPointerEnter : undefined,\n onPointerLeave: hoverTilt ? onPointerLeave : undefined,\n onPointerMove: hoverTilt ? onPointerMove : undefined,\n }\n }\n}\n\n/**\n * Tracks which 'ante' section is currently most visible in a scrollable container.\n */\nexport function useAnteTracker(antes: { ante: number }[], options: { threshold?: number[] } = {}) {\n const [currentAnte, setCurrentAnte] = useState(antes[0]?.ante ?? 0)\n const [prevFirstAnte, setPrevFirstAnte] = useState(antes[0]?.ante)\n const scrollRef = useRef<HTMLDivElement>(null)\n const anteRefs = useRef<Map<number, HTMLElement>>(new Map())\n\n if (antes[0]?.ante !== prevFirstAnte) {\n setPrevFirstAnte(antes[0]?.ante)\n if (antes.length > 0) {\n setCurrentAnte(antes[0].ante)\n }\n }\n\n useEffect(() => {\n const root = scrollRef.current\n if (!root || antes.length === 0) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n // Find the entry with the highest intersection ratio\n const mostVisible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0]\n\n if (mostVisible) {\n const ante = Number((mostVisible.target as HTMLElement).dataset.ante)\n if (!Number.isNaN(ante)) {\n setCurrentAnte(ante)\n }\n }\n },\n {\n root,\n threshold: options.threshold ?? [0.4, 0.6, 0.8],\n }\n )\n\n anteRefs.current.forEach((el) => observer.observe(el))\n\n return () => observer.disconnect()\n }, [antes, options.threshold])\n\n const scrollToAnte = useCallback((ante: number) => {\n const el = anteRefs.current.get(ante)\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'start' })\n }\n }, [])\n\n const registerAnteRef = useCallback((ante: number, el: HTMLElement | null) => {\n if (el) {\n anteRefs.current.set(ante, el)\n } else {\n anteRefs.current.delete(ante)\n }\n }, [])\n\n return {\n currentAnte,\n scrollRef,\n scrollToAnte,\n registerAnteRef,\n }\n}\n\nexport interface DragState {\n clause: JamlVisualClause\n fromZone: JamlZone\n x: number\n y: number\n offX: number\n offY: number\n}\n\ninterface PendingDragState {\n clause: JamlVisualClause\n fromZone: JamlZone\n x: number\n y: number\n offX: number\n offY: number\n}\n\n/**\n * Manages drag-and-drop state for the Jaml IDE visual filter editor.\n */\nexport function useJamlIdeDrag(\n filter: JamlVisualFilter,\n onChange: (filter: JamlVisualFilter) => void,\n rootRef: React.RefObject<HTMLDivElement | null>\n) {\n const [drag, setDrag] = useState<DragState | null>(null)\n const [pendingDrag, setPendingDrag] = useState<PendingDragState | null>(null)\n const [hoverZone, setHoverZone] = useState<string | null>(null)\n\n const onDragStart = useCallback(\n (e: React.MouseEvent | React.TouchEvent, clause: JamlVisualClause, fromZone: JamlZone) => {\n const t = 'touches' in e ? e.touches[0] : e\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n setPendingDrag({\n clause,\n fromZone,\n x: t.clientX,\n y: t.clientY,\n offX: t.clientX - rect.left,\n offY: t.clientY - rect.top,\n })\n setHoverZone(null)\n },\n []\n )\n\n // Mirror live state into refs so the window listeners can read fresh values\n // without re-binding on every drag tick.\n const dragRef = useRef(drag)\n const pendingRef = useRef(pendingDrag)\n const hoverRef = useRef(hoverZone)\n const filterRef = useRef(filter)\n const onChangeRef = useRef(onChange)\n useLayoutEffect(() => {\n dragRef.current = drag\n pendingRef.current = pendingDrag\n hoverRef.current = hoverZone\n filterRef.current = filter\n onChangeRef.current = onChange\n })\n\n const active = drag !== null || pendingDrag !== null\n\n useEffect(() => {\n if (!active) return\n\n const move = (e: MouseEvent | TouchEvent) => {\n const touchEvent = 'touches' in e ? (e as TouchEvent) : null\n const t = touchEvent ? touchEvent.touches[0] : (e as MouseEvent)\n if (!t) return\n\n let activeDrag = dragRef.current\n\n if (!activeDrag && pendingRef.current) {\n const dx = t.clientX - pendingRef.current.x\n const dy = t.clientY - pendingRef.current.y\n if (Math.hypot(dx, dy) < 8) return\n activeDrag = {\n ...pendingRef.current,\n x: t.clientX,\n y: t.clientY,\n }\n setPendingDrag(null)\n setDrag(activeDrag)\n } else if (activeDrag) {\n activeDrag = { ...activeDrag, x: t.clientX, y: t.clientY }\n setDrag(activeDrag)\n }\n\n if (!activeDrag) return\n if (touchEvent?.cancelable) touchEvent.preventDefault()\n\n const rails = rootRef.current?.querySelectorAll('[data-zone]') ?? []\n let found: string | null = null\n for (const r of rails) {\n const rc = r.getBoundingClientRect()\n if (t.clientX >= rc.left && t.clientX <= rc.right && t.clientY >= rc.top && t.clientY <= rc.bottom) {\n found = r.getAttribute('data-zone')\n break\n }\n }\n setHoverZone(found)\n }\n\n const up = () => {\n const d = dragRef.current\n const h = hoverRef.current\n if (d && h && h !== d.fromZone) {\n const to = h as JamlZone\n const f = filterRef.current\n onChangeRef.current({\n ...f,\n [d.fromZone]: f[d.fromZone].filter((c) => c.id !== d.clause.id),\n [to]: [...f[to], { ...d.clause }],\n })\n }\n setPendingDrag(null)\n setDrag(null)\n setHoverZone(null)\n }\n\n window.addEventListener('mousemove', move)\n window.addEventListener('mouseup', up)\n window.addEventListener('touchmove', move, { passive: false })\n window.addEventListener('touchend', up)\n\n return () => {\n window.removeEventListener('mousemove', move)\n window.removeEventListener('mouseup', up)\n window.removeEventListener('touchmove', move)\n window.removeEventListener('touchend', up)\n }\n }, [active, rootRef])\n\n return {\n drag,\n hoverZone,\n onDragStart,\n }\n}\n\n/**\n * Provides a magnetic 3D tilt effect for DOM elements, replicating the hover-follow\n * of Balatro cards. Continuous (tracks the cursor). Pure CSS transform — no 3D deps.\n */\nexport function useDOMMagneticTilt(enabledProp: boolean = true) {\n const [isHovered, setIsHovered] = useState(false)\n const [transform, setTransform] = useState('none')\n const { effectiveReducedMotion } = useMotionPreference()\n // rotateX/rotateY/scale/translateY tilt is exactly the kind of motion\n // prefers-reduced-motion exists for — it's JS-driven inline style, invisible to\n // any CSS media query, so it has to check the setting itself.\n const enabled = enabledProp && !effectiveReducedMotion\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!enabled || event.pointerType === 'touch') return\n setIsHovered(true)\n }\n\n const onPointerLeave = () => {\n if (!enabled) return\n setIsHovered(false)\n setTransform('none')\n }\n\n const onPointerMove = (event: React.PointerEvent) => {\n if (!enabled || event.pointerType === 'touch') return\n const rect = event.currentTarget.getBoundingClientRect()\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n const rotateY = (x / rect.width) * 12 - 6\n const rotateX = (y / rect.height) * -16 + 8\n const juiceScale = 1.05\n const juiceY = -2 // slight move up\n setTransform(`perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${juiceScale}) translateY(${juiceY}px)`)\n }\n\n const handlers = {\n onPointerEnter: enabled ? onPointerEnter : undefined,\n onPointerLeave: enabled ? onPointerLeave : undefined,\n onPointerMove: enabled ? onPointerMove : undefined,\n }\n\n const tiltStyle: React.CSSProperties = {\n transition: enabled && !isHovered ? 'transform 0.4s ease, box-shadow 0.4s ease-out' : 'transform 0.1s ease-out',\n transform: enabled ? (isHovered ? transform : 'none') : undefined,\n transformStyle: enabled ? 'preserve-3d' : undefined,\n transformOrigin: enabled ? 'center center' : undefined,\n willChange: enabled ? 'transform' : undefined,\n pointerEvents: enabled ? 'none' : undefined,\n }\n\n return { handlers, tiltStyle, isHovered }\n}\n","'use client'\n\nimport React from 'react'\n\nexport type JimboInlineEditSize = 'xs' | 'sm' | 'md' | 'lg'\nexport type JimboInlineEditTone = 'white' | 'gold' | 'grey'\n\nexport interface JimboInlineEditProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Visual size — echoes JimboText size scale. */\n size?: JimboInlineEditSize\n tone?: JimboInlineEditTone\n /** Render at reduced opacity (e.g. description-style sub-text). */\n dim?: boolean\n}\n\n// Spelled out, not interpolated — see the note in JimboLayout.tsx.\nconst SIZE_CLASS = {\n xs: 'j-inline-edit--xs',\n sm: 'j-inline-edit--sm',\n md: 'j-inline-edit--md',\n lg: 'j-inline-edit--lg',\n} as const satisfies Record<JimboInlineEditSize, string>\n\nconst TONE_CLASS = {\n white: 'j-inline-edit--white',\n gold: 'j-inline-edit--gold',\n grey: 'j-inline-edit--grey',\n} as const satisfies Record<JimboInlineEditTone, string>\n\n/**\n * Borderless transparent input that reads as inline text until focused —\n * for editable titles, bylines, or descriptions inside cards/panels.\n * Focus chrome only shows on keyboard navigation so mouse use stays clean.\n */\nexport const JimboInlineEdit = React.forwardRef<HTMLInputElement, JimboInlineEditProps>(\n function JimboInlineEdit(\n { size = 'md', tone = 'white', dim = false, className = '', ...rest },\n ref,\n ) {\n const classes = [\n 'j-inline-edit',\n SIZE_CLASS[size],\n TONE_CLASS[tone],\n dim ? 'j-inline-edit--dim' : null,\n className || null,\n ]\n .filter(Boolean)\n .join(' ')\n return <input ref={ref} type=\"text\" className={classes} {...rest} />\n },\n)\n","\"use client\";\n\nimport type { CSSProperties, HTMLAttributes, Ref } from \"react\";\n\nexport type JimboCodeSurfaceProps = Omit<HTMLAttributes<HTMLDivElement>, \"children\"> & {\n ref?: Ref<HTMLDivElement>;\n /** Floor height in px for the surface before the view has content. */\n minHeight?: number;\n};\n\n/**\n * Mount point for an externally-managed editor view (CodeMirror, etc.).\n * Owns the sunken code background and the height floor; the view that attaches\n * to the ref owns everything inside it.\n */\nexport function JimboCodeSurface({\n className,\n minHeight = 320,\n style,\n ref,\n ...rest\n}: JimboCodeSurfaceProps) {\n const classes = [\"j-code-surface\", className].filter(Boolean).join(\" \");\n const vars = {\n \"--j-code-surface-min-height\": `${minHeight}px`,\n ...style,\n } as CSSProperties;\n return <div ref={ref} className={classes} style={vars} {...rest} />;\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { FiMaximize2, FiMinimize2, FiMove } from \"react-icons/fi\";\n\nexport type JimboOuterTabTone = \"blue\" | \"red\" | \"orange\" | \"green\" | \"purple\" | \"gold\";\n\nexport interface JimboOuterTabProps extends HTMLAttributes<HTMLDivElement> {\n /** Pane name shown in the tab (m6x11, letter-spaced). */\n label: string;\n /** Accent color for the label; maps to `--j-*` tone tokens. */\n tone?: JimboOuterTabTone;\n /** Highlight as the live/drop-target tab. */\n active?: boolean;\n /** Current expanded state — swaps the max/min icon. */\n fullscreen?: boolean;\n /** When provided, the fullscreen toggle button renders. */\n onToggleFullscreen?: () => void;\n}\n\n// Spelled out, not interpolated — see the note in JimboBadge.tsx.\nconst TONE_CLASS = {\n blue: \"j-outer-tab--blue\",\n red: \"j-outer-tab--red\",\n orange: \"j-outer-tab--orange\",\n green: \"j-outer-tab--green\",\n purple: \"j-outer-tab--purple\",\n gold: \"j-outer-tab--gold\",\n} as const satisfies Record<JimboOuterTabTone, string>;\n\n/**\n * Grabbable chrome strip that sits on the OUTER top edge of a pane — the\n * handle a user drags to tear panes around a layout. Drag semantics live with\n * the consumer (this primitive just passes `draggable` + `onDrag*` through\n * `...rest`); fullscreen is a one-prop toggle. Layout is grid per design rule 1.\n */\nexport function JimboOuterTab({\n label,\n tone,\n active = false,\n fullscreen = false,\n onToggleFullscreen,\n className,\n children,\n ...rest\n}: JimboOuterTabProps) {\n const classes = [\n \"j-outer-tab\",\n tone ? TONE_CLASS[tone] : \"\",\n active ? \"j-outer-tab--active\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div className={classes} {...rest}>\n <span className=\"j-outer-tab__grip\" aria-hidden>\n <FiMove />\n </span>\n <span className=\"j-outer-tab__label\">{label}</span>\n <span className=\"j-outer-tab__space\">{children}</span>\n {onToggleFullscreen ? (\n <button\n type=\"button\"\n className=\"j-outer-tab__fs\"\n aria-label={fullscreen ? \"Restore pane\" : \"Fullscreen pane\"}\n onClick={(e) => {\n e.stopPropagation();\n onToggleFullscreen();\n }}\n >\n {fullscreen ? <FiMinimize2 /> : <FiMaximize2 />}\n </button>\n ) : null}\n </div>\n );\n}\n","/** Dock tree — layout is user data. Harvested from seedfinder.app SeedLab dock.js. */\n\nexport type DockDir = \"row\" | \"column\";\nexport type DockEdge = \"left\" | \"right\" | \"top\" | \"bottom\" | \"center\";\n\nexport interface DockGroup {\n type: \"group\";\n id: string;\n panes: string[];\n active: string | null;\n}\n\nexport interface DockSplit {\n type: \"split\";\n id: string;\n dir: DockDir;\n ratio: number;\n children: [DockNode, DockNode];\n}\n\nexport type DockNode = DockGroup | DockSplit;\n\nlet idCounter = 0;\nfunction newId(prefix: string) {\n return `${prefix}${++idCounter}-${Date.now().toString(36)}`;\n}\n\nexport function defaultPyramidDock(keys: {\n filter: string;\n search: string;\n results: string;\n jamlyze: string;\n}): DockNode {\n return {\n type: \"split\",\n id: \"s-root\",\n dir: \"column\",\n ratio: 0.34,\n children: [\n {\n type: \"split\",\n id: \"s-entry\",\n dir: \"row\",\n ratio: 0.55,\n children: [\n { type: \"group\", id: \"g-filter\", panes: [keys.filter], active: keys.filter },\n { type: \"group\", id: \"g-search\", panes: [keys.search], active: keys.search },\n ],\n },\n {\n type: \"group\",\n id: \"g-results\",\n panes: [keys.results, keys.jamlyze],\n active: keys.results,\n },\n ],\n };\n}\n\n/*\n * Narrow screens: the pyramid's side-by-side entry row squeezes the IDE and the\n * search controls into ~180px columns, which is the \"cramped phone\" look. A\n * single column — filter, then search, then results — gives every pane the\n * full width and lets the phone scroll the dock instead of squinting at it.\n */\nexport function stackedDock(keys: {\n filter: string;\n search: string;\n results: string;\n jamlyze: string;\n}): DockNode {\n return {\n type: \"split\",\n id: \"s-root\",\n dir: \"column\",\n ratio: 0.5,\n children: [\n { type: \"group\", id: \"g-filter\", panes: [keys.filter], active: keys.filter },\n {\n type: \"split\",\n id: \"s-rest\",\n dir: \"column\",\n ratio: 0.32,\n children: [\n { type: \"group\", id: \"g-search\", panes: [keys.search], active: keys.search },\n {\n type: \"group\",\n id: \"g-results\",\n panes: [keys.results, keys.jamlyze],\n active: keys.results,\n },\n ],\n },\n ],\n };\n}\n\nexport function dockRemove(node: DockNode, key: string): DockNode {\n if (node.type === \"group\") {\n if (!node.panes.includes(key)) return node;\n const panes = node.panes.filter((k) => k !== key);\n const active = node.active === key ? panes[0] ?? null : node.active;\n return { ...node, panes, active };\n }\n const children = node.children\n .map((c) => dockRemove(c, key))\n .filter((c) => !(c.type === \"group\" && c.panes.length === 0));\n if (children.length === 1) return children[0];\n return { ...node, children: children as [DockNode, DockNode] };\n}\n\nexport function dockMapGroup(node: DockNode, id: string, fn: (g: DockGroup) => DockGroup): DockNode {\n if (node.type === \"group\") return node.id === id ? fn(node) : node;\n return { ...node, children: node.children.map((c) => dockMapGroup(c, id, fn)) as [DockNode, DockNode] };\n}\n\nexport function dockSplitAt(node: DockNode, id: string, key: string, side: DockEdge): DockNode {\n if (side === \"center\") return node;\n if (node.type === \"group\") {\n if (node.id !== id) return node;\n const newGroup: DockGroup = { type: \"group\", id: newId(\"g\"), panes: [key], active: key };\n const dir: DockDir = side === \"left\" || side === \"right\" ? \"row\" : \"column\";\n const children: [DockNode, DockNode] =\n side === \"left\" || side === \"top\" ? [newGroup, node] : [node, newGroup];\n return { type: \"split\", id: newId(\"s\"), dir, ratio: 0.5, children };\n }\n return { ...node, children: node.children.map((c) => dockSplitAt(c, id, key, side)) as [DockNode, DockNode] };\n}\n\nexport function dockGroups(node: DockNode, acc: DockGroup[] = []): DockGroup[] {\n if (node.type === \"group\") {\n acc.push(node);\n return acc;\n }\n node.children.forEach((c) => dockGroups(c, acc));\n return acc;\n}\n\nexport function dockActivate(node: DockNode, key: string): DockNode {\n if (node.type === \"group\") {\n return node.panes.includes(key) ? { ...node, active: key } : node;\n }\n return { ...node, children: node.children.map((c) => dockActivate(c, key)) as [DockNode, DockNode] };\n}\n\nexport function dockIsValid(node: DockNode, paneKeys: string[]): boolean {\n const groups = dockGroups(node);\n if (!groups.length) return false;\n const panes = groups.flatMap((g) => g.panes);\n return panes.length > 0 && panes.every((p) => paneKeys.includes(p)) && groups.every((g) => g.panes.length > 0);\n}\n\nexport function loadDock(storageKey: string, fallback: DockNode, paneKeys: string[]): DockNode {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return fallback;\n const tree = JSON.parse(raw) as DockNode;\n return dockIsValid(tree, paneKeys) ? tree : fallback;\n } catch {\n return fallback;\n }\n}\n\nexport function saveDock(storageKey: string, tree: DockNode) {\n try {\n localStorage.setItem(storageKey, JSON.stringify(tree));\n } catch {\n /* private mode */\n }\n}\n","\"use client\";\n\nimport { useEffect, useState, type CSSProperties, type DragEvent, type ReactNode } from \"react\";\nimport { JimboBox } from \"./JimboBox.js\";\nimport { JimboOuterTab, type JimboOuterTabTone } from \"./JimboOuterTab.js\";\nimport {\n defaultPyramidDock,\n dockMapGroup,\n dockRemove,\n dockSplitAt,\n loadDock,\n saveDock,\n type DockEdge,\n type DockGroup,\n type DockNode,\n} from \"./dockTree.js\";\n\nexport interface JimboDockPane {\n label: string;\n tone: JimboOuterTabTone;\n content: ReactNode;\n}\n\nexport interface JimboDockProps {\n panes: Record<string, JimboDockPane>;\n /** Filter / search / results / jamlyze keys for the pyramid default. */\n pyramid?: { filter: string; search: string; results: string; jamlyze: string };\n /**\n * Explicit starting layout — wins over the pyramid default. Pair with a\n * `key` on the dock when the layout follows viewport size, so crossing the\n * breakpoint rebuilds the tree instead of keeping the stale one.\n */\n defaultLayout?: DockNode;\n storageKey?: string;\n className?: string;\n}\n\nexport function JimboDock({\n panes,\n pyramid,\n defaultLayout,\n storageKey,\n className,\n}: JimboDockProps) {\n const keys = Object.keys(panes);\n const fallback =\n defaultLayout ??\n (pyramid && keys.includes(pyramid.filter)\n ? defaultPyramidDock(pyramid)\n : {\n type: \"group\" as const,\n id: \"g-all\",\n panes: keys,\n active: keys[0] ?? null,\n });\n\n const [tree, setTree] = useState<DockNode>(() =>\n storageKey && typeof localStorage !== \"undefined\"\n ? loadDock(storageKey, fallback, keys)\n : fallback,\n );\n const [dropZone, setDropZone] = useState<{ groupId: string; zone: DockEdge } | null>(null);\n const [fsPane, setFsPane] = useState<string | null>(null);\n\n useEffect(() => {\n if (storageKey) saveDock(storageKey, tree);\n }, [storageKey, tree]);\n\n const zoneFromEvent = (e: DragEvent): DockEdge => {\n const t = e.target as HTMLElement;\n if (t.closest(\".j-dock-tabs\")) return \"center\";\n const r = e.currentTarget.getBoundingClientRect();\n const x = (e.clientX - r.left) / r.width;\n const y = (e.clientY - r.top) / r.height;\n if (x < 0.25) return \"left\";\n if (x > 0.75) return \"right\";\n if (y < 0.25) return \"top\";\n if (y > 0.75) return \"bottom\";\n return \"center\";\n };\n\n const dropPane = (key: string, group: DockGroup, zone: DockEdge) => {\n if (!panes[key]) return;\n if (group.panes.length === 1 && group.panes[0] === key) return;\n setTree((prev) => {\n const removed = dockRemove(prev, key);\n if (zone === \"center\") {\n return dockMapGroup(removed, group.id, (g) => ({\n ...g,\n panes: [...g.panes, key],\n active: key,\n }));\n }\n return dockSplitAt(removed, group.id, key, zone);\n });\n };\n\n const renderTab = (key: string, active: boolean) => {\n const meta = panes[key];\n if (!meta) return null;\n return (\n <JimboOuterTab\n key={key}\n label={meta.label}\n tone={meta.tone}\n active={active}\n fullscreen={fsPane === key}\n onToggleFullscreen={() => setFsPane((v) => (v === key ? null : key))}\n draggable\n onDragStart={(e) => e.dataTransfer.setData(\"text/plain\", key)}\n />\n );\n };\n\n const renderGroup = (group: DockGroup) => {\n const drop = dropZone && dropZone.groupId === group.id ? dropZone.zone : null;\n const dropClass =\n drop && drop !== \"center\" ? ` j-dock-pane--drop-${drop}` : \"\";\n return (\n <JimboBox\n key={group.id}\n className={`j-dock-pane${dropClass}`}\n onDragOver={(e) => {\n e.preventDefault();\n const zone = zoneFromEvent(e);\n setDropZone((v) =>\n v && v.groupId === group.id && v.zone === zone ? v : { groupId: group.id, zone },\n );\n }}\n onDragLeave={() =>\n setDropZone((v) => (v && v.groupId === group.id ? null : v))\n }\n onDrop={(e) => {\n e.preventDefault();\n const key = e.dataTransfer.getData(\"text/plain\");\n const zone = zoneFromEvent(e);\n setDropZone(null);\n dropPane(key, group, zone);\n }}\n >\n <JimboBox\n className={`j-dock-tabs${drop === \"center\" ? \" j-dock-tabs--drop\" : \"\"}`}\n >\n {group.panes.map((key) => (\n <JimboBox\n key={key}\n onClick={() =>\n setTree((t) => dockMapGroup(t, group.id, (g) => ({ ...g, active: key })))\n }\n >\n {renderTab(key, group.active === key)}\n </JimboBox>\n ))}\n </JimboBox>\n <JimboBox className=\"j-dock-body\">\n {group.active && panes[group.active] ? panes[group.active].content : null}\n </JimboBox>\n </JimboBox>\n );\n };\n\n const renderNode = (node: DockNode) => {\n if (node.type === \"group\") return renderGroup(node);\n const [a, b] = node.children;\n return (\n <JimboBox\n key={node.id}\n className={`j-dock-split j-dock-split--${node.dir}`}\n style={\n {\n \"--j-dock-a\": `${node.ratio}fr`,\n \"--j-dock-b\": `${1 - node.ratio}fr`,\n } as CSSProperties\n }\n >\n {renderNode(a)}\n <JimboBox className={`j-dock-gutter j-dock-gutter--${node.dir}`} />\n {renderNode(b)}\n </JimboBox>\n );\n };\n\n if (fsPane && panes[fsPane]) {\n return (\n <JimboBox className={`j-dock j-dock--fs ${className ?? \"\"}`.trim()}>\n <JimboBox className=\"j-dock-tabs\">\n {renderTab(fsPane, true)}\n </JimboBox>\n <JimboBox className=\"j-dock-body\">{panes[fsPane].content}</JimboBox>\n </JimboBox>\n );\n }\n\n return (\n <JimboBox className={`j-dock ${className ?? \"\"}`.trim()}>{renderNode(tree)}</JimboBox>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nexport type JimboStatus = \"idle\" | \"running\" | \"ok\" | \"error\" | \"paused\";\n\nexport interface JimboStatusPillProps extends HTMLAttributes<HTMLSpanElement> {\n status?: JimboStatus;\n label?: string;\n}\n\n// Spelled out, not interpolated — see the note in JimboBadge.tsx.\nconst STATUS_CLASS = {\n idle: \"j-status-pill--idle\",\n running: \"j-status-pill--running\",\n ok: \"j-status-pill--ok\",\n error: \"j-status-pill--error\",\n paused: \"j-status-pill--paused\",\n} as const satisfies Record<JimboStatus, string>;\n\n/** Short single-word state indicator — the missing React half of `.j-status-pill`. */\nexport function JimboStatusPill({ status = \"idle\", label, className, children, ...rest }: JimboStatusPillProps) {\n const classes = [\"j-status-pill\", STATUS_CLASS[status], className].filter(Boolean).join(\" \");\n return (\n <span className={classes} {...rest}>\n <span className=\"j-status-pill__dot\" aria-hidden />\n {label ?? children ?? status}\n </span>\n );\n}\n","\"use client\";\nimport React from \"react\";\n\nexport interface JimboSliderProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"type\"> {\n /** Fires with the parsed numeric value on every input. */\n onValueChange?: (value: number) => void;\n}\n\n/**\n * Chunky Balatro range dial — the missing React half of `.j-slider`.\n * The filled track is driven by the `--j-slider-fill` custom property so the\n * gold portion always matches the thumb position.\n */\nexport const JimboSlider = React.forwardRef<HTMLInputElement, JimboSliderProps>(\n function JimboSlider({ onValueChange, className, value, min = 0, max = 100, style, ...rest }, ref) {\n const v = Number(value ?? 0);\n const lo = Number(min);\n const hi = Number(max);\n const fill = hi > lo ? Math.min(100, Math.max(0, ((v - lo) / (hi - lo)) * 100)) : 0;\n const classes = [\"j-slider\", className].filter(Boolean).join(\" \");\n return (\n <input\n ref={ref}\n type=\"range\"\n className={classes}\n value={value}\n min={min}\n max={max}\n style={{ ...(style ?? {}), [\"--j-slider-fill\" as string]: `${fill}%` }}\n onChange={(e) => onValueChange?.(Number(e.currentTarget.value))}\n {...rest}\n />\n );\n }\n);\n","\"use client\";\n\nimport type { TextareaHTMLAttributes } from \"react\";\n\nexport type JimboTextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport function JimboTextArea({ className, style, ...rest }: JimboTextAreaProps) {\n const classes = [\"j-textarea\", className].filter(Boolean).join(\" \");\n return <textarea className={classes} style={style} {...rest} />;\n}\n","\"use client\";\n\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { JimboBox } from \"./JimboBox.js\";\nimport { JimboButton } from \"./JimboButton.js\";\nimport { JimboText } from \"./jimboText.js\";\nimport { JimboBadge } from \"./JimboBadge.js\";\nimport { JimboRow, JimboStack } from \"./JimboLayout.js\";\nimport { JimboTextArea } from \"./JimboTextArea.js\";\n\nconst SEED_ALPHABET = /^[1-9A-Z]{1,8}$/;\nconst NOT_SEEDS = new Set([\n \"SEED\", \"SEEDS\", \"SCORE\", \"SCORES\", \"DECK\", \"STAKE\", \"NAME\", \"ANTE\", \"ANTES\",\n \"TRUE\", \"FALSE\", \"NULL\", \"NAN\", \"HTTP\", \"HTTPS\", \"WWW\", \"COM\", \"APP\", \"MUST\",\n \"SHOULD\", \"JOKER\", \"TAG\", \"BOSS\", \"PACK\", \"SHOP\", \"CARD\", \"TALLY\", \"TALLIES\",\n]);\n\n/** Pull seed codes out of arbitrary pasted text. Same logic as seedfinder's\n * parseSeedList, but self-contained so jaml-ui does not depend on app code. */\nfunction extractSeeds(text: string) {\n if (!text || typeof text !== \"string\") return [];\n const scrubbed = text\n .toUpperCase()\n .replace(/[A-Z]+:\\/\\/\\S*/g, \" \") // drop URLs whole\n .replace(/0/g, \"O\"); // Balatro converts 0→O\n const tokens = scrubbed\n .split(/[^0-9A-Z]+/)\n .filter((t) => SEED_ALPHABET.test(t));\n const full = tokens.filter((t) => t.length === 8);\n const chosen = full.length\n ? full\n : tokens.filter((t) => t.length >= 4 && !NOT_SEEDS.has(t));\n return [...new Set(chosen)];\n}\n\nfunction invalidTokens(text: string) {\n if (!text) return [];\n const lines = text.split(/\\r?\\n/);\n const bad = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n const tokens = line.split(/[^0-9A-Za-z]+/).filter(Boolean);\n for (const tok of tokens) {\n const clean = tok.toUpperCase().replace(/0/g, \"O\");\n if (!SEED_ALPHABET.test(clean) || clean.length < 4) {\n bad.push({ line: i + 1, text: tok });\n }\n }\n }\n return bad.slice(0, 8);\n}\n\nexport interface JimboSeedBatchInputProps {\n /** Called with the cleaned seed list when the user hits Analyze. */\n onAnalyze: (seeds: string[]) => void;\n /** Optional: also inject seeds into the JAML document as a `seeds:` block. */\n onInjectIntoJaml?: (seeds: string[]) => void;\n /** Whether the engine is ready to analyze. */\n ready?: boolean;\n /** Whether an analysis is currently running. */\n running?: boolean;\n /** Optional pre-filled text (e.g. from clipboard sniff). */\n defaultText?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * A concrete surface for batch seed input.\n *\n * Aphantasia UX: every state is described in words, not shown by position or\n * color alone. The user always knows:\n * - how many seeds were found\n * - how many are valid (8 chars)\n * - how many are partial (4-7 chars — maybe typos)\n * - what the next action is called and what it will do\n *\n * The textarea is the only input. Paste anywhere inside it. No hidden\n * shortcuts. The Analyze button is disabled with a sentence explaining why.\n */\nexport function JimboSeedBatchInput({\n onAnalyze,\n onInjectIntoJaml,\n ready = false,\n running = false,\n defaultText = \"\",\n className,\n style,\n}: JimboSeedBatchInputProps) {\n const [text, setText] = useState(defaultText);\n const [showInvalid, setShowInvalid] = useState(false);\n\n const seeds = useMemo(() => extractSeeds(text), [text]);\n const full = useMemo(() => seeds.filter((s) => s.length === 8), [seeds]);\n const partial = useMemo(() => seeds.filter((s) => s.length >= 4 && s.length < 8), [seeds]);\n const bad = useMemo(() => invalidTokens(text), [text]);\n\n const handleAnalyze = useCallback(() => {\n if (!full.length || running) return;\n onAnalyze(full);\n }, [full, running, onAnalyze]);\n\n const handleInject = useCallback(() => {\n if (!full.length) return;\n onInjectIntoJaml?.(full);\n }, [full, onInjectIntoJaml]);\n\n const countLabel = full.length === 0\n ? \"No valid 8-character seeds yet.\"\n : full.length === 1\n ? \"1 valid seed.\"\n : `${full.length} valid seeds.`;\n\n const partialLabel = partial.length > 0\n ? `${partial.length} partial (${partial.join(\", \")}) — might be typos.`\n : null;\n\n const canAnalyze = ready && !running && full.length > 0;\n const whyDisabled = running\n ? \"Cannot start: a search is already running.\"\n : !ready\n ? \"Cannot start: the engine is still booting.\"\n : full.length === 0\n ? \"Cannot start: paste at least one 8-character seed.\"\n : null;\n\n return (\n <JimboStack gap=\"md\" align=\"stretch\" className={className} style={style}>\n <JimboBox>\n <JimboText size=\"sm\" tone=\"white\">\n Paste a list of seeds here — one per line, comma-separated, from a\n spreadsheet, a chat message, or a share link. The field finds every\n 8-character code automatically.\n </JimboText>\n </JimboBox>\n\n <JimboTextArea\n value={text}\n onChange={(e) => setText(e.target.value)}\n placeholder={`WEEJOKER\\n18Z47K9Q\\nQ1J3A11E\\n…`}\n spellCheck={false}\n autoComplete=\"off\"\n style={{ minHeight: 120, fontFamily: \"m6x11, monospace\", fontSize: 14 }}\n />\n\n <JimboRow gap=\"sm\" wrap align=\"center\">\n <JimboBadge tone={full.length > 0 ? \"green\" : \"grey\"} size=\"sm\">\n {countLabel}\n </JimboBadge>\n {partialLabel ? (\n <JimboBadge tone=\"orange\" size=\"sm\" title={partialLabel}>\n {partial.length} partial\n </JimboBadge>\n ) : null}\n {bad.length > 0 ? (\n <JimboBadge\n tone=\"red\"\n size=\"sm\"\n title={bad.map((b) => `line ${b.line}: \"${b.text}\"`).join(\"; \")}\n >\n {bad.length} unrecognised\n </JimboBadge>\n ) : null}\n </JimboRow>\n\n {bad.length > 0 && showInvalid ? (\n <JimboBox>\n {bad.map((b) => (\n <JimboText key={`${b.line}-${b.text}`} size=\"xs\" tone=\"red\">\n Line {b.line}: \"{b.text}\" — not a valid seed character.\n </JimboText>\n ))}\n </JimboBox>\n ) : null}\n\n {bad.length > 0 ? (\n <JimboButton size=\"xs\" tone=\"grey\" onClick={() => setShowInvalid((v) => !v)}>\n {showInvalid ? \"Hide unrecognised tokens\" : \"Show unrecognised tokens\"}\n </JimboButton>\n ) : null}\n\n <JimboButton\n fullWidth\n tone=\"blue\"\n disabled={!canAnalyze}\n onClick={handleAnalyze}\n title={whyDisabled || \"Score every seed against the current filter\"}\n >\n {running ? \"Searching…\" : `Analyze ${full.length || \"\"} seed${full.length === 1 ? \"\" : \"s\"}`}\n </JimboButton>\n\n {onInjectIntoJaml && full.length > 0 ? (\n <JimboButton\n fullWidth\n tone=\"grey\"\n onClick={handleInject}\n title=\"Add these seeds to the JAML document so they are saved with the filter\"\n >\n Save seeds to filter document\n </JimboButton>\n ) : null}\n\n {whyDisabled && !running ? (\n <JimboText size=\"xs\" tone=\"grey\">\n {whyDisabled}\n </JimboText>\n ) : null}\n </JimboStack>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { useBalatroBackground, type JimboBackgroundConfig } from './hooks.js'\n\nexport type { JimboBackgroundConfig, JimboBackgroundColor } from './hooks.js'\n\nexport interface JimboBackgroundProps extends JimboBackgroundConfig {\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Fullscreen WebGL CRT/spin background. Shader knobs are uniforms\n * (`useBalatroBackground`) so Storybook can drive swirl / pixel / RGB.\n */\nexport function JimboBackground({ className, style, ...config }: JimboBackgroundProps = {}) {\n const canvasRef = useBalatroBackground(config)\n const classes = ['j-background-canvas', className].filter(Boolean).join(' ')\n return <canvas ref={canvasRef} className={classes} style={style} aria-hidden />\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nexport type JimboAppVariant = \"embed\" | \"phone\" | \"page\";\n\nexport interface JimboAppProps extends HTMLAttributes<HTMLDivElement> {\n /** embed = MCP-on-desktop 375×375 square. phone = locked portrait. page = full website. */\n variant?: JimboAppVariant;\n /** Main column. For embed/phone, scrolls inside the frame when true. */\n scroll?: boolean;\n footer?: ReactNode;\n}\n\n/**\n * App chrome.\n * embed = MCP host iframe (square, funny on purpose).\n * phone = mobile portrait, 375×667 (iPhone SE) / 100dvh — not the MCP square.\n * page = desktop website, full viewport.\n * None paints a second background (use JimboBackground behind).\n */\nexport function JimboApp({\n variant = \"embed\",\n scroll = true,\n footer,\n className,\n children,\n ...rest\n}: JimboAppProps) {\n if (variant === \"page\") {\n const classes = [\"j-page\", \"j-page--full\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} {...rest}>\n <div className=\"j-page__main\">{children}</div>\n {footer ? <div className=\"j-page__footer\">{footer}</div> : null}\n </div>\n );\n }\n\n if (variant === \"phone\") {\n const classes = [\"j-phone\", className].filter(Boolean).join(\" \");\n const bodyClass = scroll ? \"j-phone__scroll\" : \"j-phone__content\";\n return (\n <div className={classes} {...rest}>\n <div className={bodyClass}>{children}</div>\n {footer ? <div className=\"j-phone__footer\">{footer}</div> : null}\n </div>\n );\n }\n\n const classes = [\"j-app\", className].filter(Boolean).join(\" \");\n const bodyClass = scroll ? \"j-app__scroll\" : \"j-app__content\";\n return (\n <div className={classes} {...rest}>\n <div className={bodyClass}>{children}</div>\n {footer ? <div className=\"j-app__footer\">{footer}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nexport type JimboInsetProps = HTMLAttributes<HTMLDivElement>;\n\n/** Sunken well for code rows, logs, recent finds — not a second modal frame. */\nexport function JimboInset({ className, children, ...rest }: JimboInsetProps) {\n const classes = [\"j-inset\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} {...rest}>\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes, ReactNode } from \"react\";\n\nexport interface JimboWordmarkProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n sub?: ReactNode;\n}\n\n/** Hero title + optional subtitle — gold wordmark, grey sub. */\nexport function JimboWordmark({ title, sub, className, ...rest }: JimboWordmarkProps) {\n const classes = [\"j-wordmark\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} {...rest}>\n <div className=\"j-wordmark__title\">{title}</div>\n {sub != null && sub !== false ? <div className=\"j-wordmark__sub\">{sub}</div> : null}\n </div>\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport type { JimboGap } from \"./JimboLayout.js\";\n\nconst GAP_PX: Record<JimboGap, string> = {\n xs: \"var(--j-space-xs)\",\n sm: \"var(--j-space-sm)\",\n md: \"var(--j-space-md)\",\n lg: \"var(--j-space-lg)\",\n xl: \"var(--j-space-xl)\",\n};\n\nexport interface JimboGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed column count (default 3). Ignored when `minColWidth` is set. */\n columns?: number;\n /** Auto-fit as many columns of at least this many px as the width allows. */\n minColWidth?: number;\n gap?: JimboGap;\n}\n\n/**\n * Multi-column grid container. Grid is deterministic across host iframes\n * (unlike flex), so this is the only sanctioned multi-column layout.\n */\nexport function JimboGrid({ columns = 3, minColWidth, gap = \"md\", style, ...rest }: JimboGridProps) {\n const template = minColWidth\n ? `repeat(auto-fit, minmax(${minColWidth}px, 1fr))`\n : `repeat(${columns}, minmax(0, 1fr))`;\n return (\n <div\n style={{\n ...style,\n display: \"grid\",\n gridTemplateColumns: template,\n gap: GAP_PX[gap],\n width: \"100%\",\n }}\n {...rest}\n />\n );\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nexport interface JimboSpacerProps extends HTMLAttributes<HTMLDivElement> {\n /** Vertical space in px. Default 16. */\n size?: number;\n}\n\n/** Empty vertical breathing room between stacks of content. */\nexport function JimboSpacer({ size = 16, style, ...rest }: JimboSpacerProps) {\n return <div aria-hidden style={{ ...style, height: size, width: \"100%\" }} {...rest} />;\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\n\nexport interface JimboDividerProps extends HTMLAttributes<HTMLHRElement> {\n /** Vertical rule for use inside a JimboRow. */\n vert?: boolean;\n}\n\n/** Thin hairline rule — the missing React half of `.j-divider`. */\nexport function JimboDivider({ vert = false, className, ...rest }: JimboDividerProps) {\n const classes = [\"j-divider\", vert ? \"j-divider--vert\" : \"\", className].filter(Boolean).join(\" \");\n return <hr className={classes} {...rest} />;\n}\n","\"use client\";\n\nimport { useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { FiX } from \"react-icons/fi\";\nimport { JimboIconButton } from \"./JimboIconButton.js\";\nimport { JimboRow } from \"./JimboLayout.js\";\n\nexport interface JimboErrorBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode;\n /** Render a destructive dismiss button; hides the block when pressed. */\n onDismiss?: () => void;\n}\n\n/** Red error callout — the missing React half of `.j-error-block`. */\nexport function JimboErrorBlock({ title, onDismiss, className, children, ...rest }: JimboErrorBlockProps) {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed) return null;\n const classes = [\"j-error-block\", className].filter(Boolean).join(\" \");\n return (\n <div className={classes} role=\"alert\" {...rest}>\n <JimboRow justify=\"between\" align=\"center\">\n <div>\n {title != null && <div className=\"j-error-block__title\">{title}</div>}\n {children}\n </div>\n {onDismiss && (\n <JimboIconButton\n size=\"sm\"\n tone=\"destructive\"\n aria-label=\"Dismiss error\"\n onClick={() => {\n setDismissed(true);\n onDismiss();\n }}\n >\n <FiX />\n </JimboIconButton>\n )}\n </JimboRow>\n </div>\n );\n}\n","// Orbit geometry for JimboOrbitalMenu. Pure math — no React, no DOM, no imports,\n// so it is unit-testable and any renderer (DOM, SVG, canvas) can drive it.\n//\n// Harvested from @pifreak/jammy-orbital (`radialLayout.ts`), itself excavated\n// from JAMMY. The math is unchanged; only the names moved into Jimbo's spelling.\n//\n// This is the file that carries the \"magnetic snap\" feel. There is no physics\n// and no spring solver — the feel comes from three decisions:\n//\n// 1. Slots sit at *exactly even* angle steps. Items never drift to arbitrary\n// positions, so every open lands on the same lattice.\n// 2. A pill that would overlap the mascot is pushed **outward along its own\n// ray** (k >= 1) — never sideways, never inward. Collision resolution\n// preserves the angle, so the lattice survives it.\n// 3. Everything animates on one shared cubic-bezier(0.16, 1, 0.3, 1) — fast\n// out, long settle. Combined with (1), pills appear to snap into detents.\n//\n// An earlier version ran an iterative overlap solver and clamped X toward 0.\n// Both are gone: the solver produced mushy, uneven layouts, and the X-clamp\n// pulled pills *inward* onto the mascot, which is the opposite of the intent.\n\nexport const FULL_CIRCLE_RAD = 2 * Math.PI;\n\n/** Angle reserved for the pinned back/start button. Positive Y is down. */\nexport const SOUTH_ANGLE_RAD = Math.PI / 2;\n\n/** ~half height of an orbital pill (px) — paired with width for mascot clearance. */\nexport const PILL_HALF_H = 16;\n\n/** Gap (px) between the mascot bitmap edge and the nearest pill corner. */\nexport const MASCOT_CLEARANCE_GAP = 10;\n\n/** Floor width for the south button so it always reads as the primary action. */\nexport const MIN_SOUTH_WIDTH = 148;\n\n/**\n * Inset (px) from the container edge for the bottom-pinned south button.\n *\n * Small on purpose: Balatro's exit button is full-bleed against its modal's\n * inner edge, so this is a hairline breathing gap, not a margin.\n */\nexport const SOUTH_EDGE_INSET = 4;\n\n/** Vertical breathing gap (px) between stacked pills. */\nexport const ARC_STACK_GAP = 6;\n\n/** How far (px) the page-control centers sit above the south button's center. */\nexport const PAGE_CONTROL_LIFT = 22;\n\n/** Distance below orbit center at which a boxless south pill is drawn. */\nexport const SOUTH_PILL_OFFSET = 8;\n\nexport interface OrbitSlot<T> {\n item: T;\n /** Offset from orbit center, px. */\n x: number;\n /** Offset from orbit center, px. Positive is down (screen coords). */\n y: number;\n}\n\n/** What the layout needs to know about a pill it has not measured. */\nexport interface OrbitMeasure {\n label: string;\n hasToggleDot: boolean;\n}\n\n/**\n * Estimated pill width for clamp math.\n *\n * Tuned for the pixel font at the `sm` button size plus its padding and the\n * optional toggle dot. Deliberately an estimate — measuring every pill would\n * force a layout pass per frame, and clearance only needs to be close.\n */\nexport function estimatePillWidth(label: string, hasToggleDot: boolean): number {\n const charW = 6.6;\n const basePad = 32;\n const dot = hasToggleDot ? 15 : 0;\n return Math.min(200, Math.max(56, basePad + dot + label.length * charW));\n}\n\n/**\n * Minimum distance from orbit center to pill center so the pill's *corner*\n * clears the round mascot bitmap. Uses diagonal reach, not half-width, so pills\n * at 45° don't clip.\n */\nexport function minDistanceFromMascotCenter(mascotHalfPx: number, pillHalfW: number): number {\n return mascotHalfPx + MASCOT_CLEARANCE_GAP + Math.hypot(pillHalfW, PILL_HALF_H);\n}\n\n/**\n * Place items on an ellipse at even angle steps, pushing outward-only when a\n * slot would collide with the mascot.\n *\n * @param items Orbital items — the south-pinned one must already be removed.\n * @param rx Horizontal orbit radius, px.\n * @param ry Vertical orbit radius, px.\n * @param startAngle Angle of the first slot, radians.\n * @param stepRad Angle between slots, radians.\n * @param mascotSizePx Mascot hit-target diameter, px.\n * @param measure Label + toggle-dot presence, for width estimation.\n */\nexport function layoutOrbitalEllipse<T>(\n items: T[],\n rx: number,\n ry: number,\n startAngle: number,\n stepRad: number,\n mascotSizePx: number,\n measure: (item: T) => OrbitMeasure,\n): Array<OrbitSlot<T>> {\n if (items.length === 0) return [];\n\n const mascotHalf = Math.max(0, mascotSizePx) / 2;\n\n return items.map((item, i) => {\n const angle = startAngle + i * stepRad;\n const ux = Math.cos(angle) * rx;\n const uy = Math.sin(angle) * ry;\n const d0 = Math.hypot(ux, uy);\n\n const { label, hasToggleDot } = measure(item);\n const minDist = minDistanceFromMascotCenter(mascotHalf, estimatePillWidth(label, hasToggleDot) / 2);\n\n // Degenerate center slot — push due east.\n if (d0 < 1e-4) return { item, x: minDist, y: 0 };\n\n // Outward-only scale along the existing ray. k >= 1 guarantees we never\n // pull a pill toward the mascot, only away from it.\n const k = Math.max(1, minDist / d0);\n return { item, x: ux * k, y: uy * k };\n });\n}\n\n/**\n * THE ORBIT LAW (pifreak, 2026-08-17). Read this before touching the geometry.\n *\n * The ring is NOT a circle, and treating it as one is what made it overflow on\n * a short viewport. The real shape:\n *\n * 1. Every pill has the SAME HEIGHT. Only width varies, and it varies with\n * content. So **height is the only parameter that governs overlap** —\n * stack slots vertically with at least one pill-height between them and\n * two pills can never collide, whatever their labels say.\n * 2. Then X FLIES OUT: each pill travels away from center along its own side\n * until its outer edge hits the container wall. Nothing is ever pulled\n * inward toward the mascot.\n * 3. The arc is bounded by the TIPS of the extra-wide south button, which\n * spans nearly the full width along the bottom — so the arc runs from its\n * left tip, up the left wall, across the top, and down to its right tip.\n * Roughly 300°, not 360°.\n *\n * Why this beats the ellipse-with-clamp it replaces: an ellipse sized by\n * min(boxW, boxH) wastes the width of a short-and-wide box and still needs a\n * mascot-clearance push that can exceed any radius bound (measured: a 103px\n * pill shoved 23px out of a 275x185 box). Height-spacing plus wall-flyout fills\n * the box exactly and cannot overflow it, because the wall IS the stop\n * condition — so the mascot never has to shrink to make the math work.\n *\n * The wall is HARD. There is deliberately no mascot-clearance push here: pills\n * render above the mascot, so wall-flush X can graze the character's silhouette\n * — measured up to ~25px for the widest toggle pill at his equator in the\n * tightest 275px-wide phone box, ~1px for ordinary pills. That is a cosmetic\n * cost paid knowingly: the character stays full-size and visible behind the\n * pill, while the alternative — pushing past the wall to clear him — clips the\n * pill out of the container, which is a functional bug. Never shrink the mascot\n * to buy clearance; that trade was made once already and rejected.\n *\n * @param southTopY Y of the topmost south chrome edge (the south button, or the\n * page controls when shown), relative to center, positive down.\n * The arc must not descend past it.\n */\nexport function layoutOrbitalArc<T>(\n items: T[],\n boxW: number,\n boxH: number,\n southTopY: number,\n measure: (item: T) => OrbitMeasure,\n): Array<OrbitSlot<T>> {\n if (items.length === 0) return [];\n\n const halfW = boxW / 2;\n const halfH = boxH / 2;\n\n // The band the arc may occupy: top wall down to the south chrome's top edge.\n const yTop = -halfH + PILL_HALF_H;\n const yBottom = Math.min(halfH - PILL_HALF_H, southTopY - PILL_HALF_H - ARC_STACK_GAP);\n\n // Two columns. Order runs up the left then down the right, so the sequence\n // still reads clockwise from the south button's left tip.\n const leftCount = Math.ceil(items.length / 2);\n const rightCount = items.length - leftCount;\n const step = 2 * PILL_HALF_H + ARC_STACK_GAP;\n\n // When a side holds more pills than the band fits at full spacing we compress\n // evenly rather than spilling: pills touching is a legible crowd, pills\n // outside the container is a bug.\n const slotY = (indexOnSide: number, countOnSide: number): number => {\n if (countOnSide <= 1) return yTop;\n const span = yBottom - yTop;\n const wanted = step * (countOnSide - 1);\n const gap = wanted <= span ? step : span / (countOnSide - 1);\n // Fill from the bottom tip upward, so a short menu hugs the south button\n // rather than floating at the top of an empty box.\n return yBottom - indexOnSide * gap;\n };\n\n let li = 0;\n let ri = 0;\n\n return items.map((item, i) => {\n const side = i < leftCount ? -1 : 1;\n const y = side < 0 ? slotY(li++, leftCount) : slotY(ri++, rightCount);\n\n const { label, hasToggleDot } = measure(item);\n const pillHalfW = estimatePillWidth(label, hasToggleDot) / 2;\n\n // Fly out until the outer edge meets the wall. The wall is the hard\n // boundary — see THE ORBIT LAW above for why there is no mascot nudge.\n return { item, x: side * Math.max(0, halfW - pillHalfW - SOUTH_EDGE_INSET), y };\n });\n}\n\n/**\n * How many pills a box holds on the arc without breaking the height law.\n *\n * The band conservatively reserves room for the page controls, so flipping from\n * \"fits\" to \"paginates\" can never itself shrink the band it was measured\n * against. This is the number a pager should respect: past it, show fewer items\n * per page — never smaller pills, and never a smaller mascot.\n */\nexport function arcPageCapacity(boxH: number): number {\n if (!Number.isFinite(boxH) || boxH <= 0) return 2;\n const halfH = boxH / 2;\n const yTop = -halfH + PILL_HALF_H;\n const southButtonY = halfH - PILL_HALF_H - SOUTH_EDGE_INSET;\n const yBottom = southButtonY - PAGE_CONTROL_LIFT - PILL_HALF_H - PILL_HALF_H - ARC_STACK_GAP;\n const step = 2 * PILL_HALF_H + ARC_STACK_GAP;\n return 2 * Math.max(1, Math.floor((yBottom - yTop) / step) + 1);\n}\n\n/**\n * Width of the south-pinned button when it rides the orbit (no box height).\n *\n * Sized to fill the angular gap it occupies so it reads as one wide primary\n * action rather than \"another pill that happens to be at the bottom\", then\n * clamped to the container and floored at {@link MIN_SOUTH_WIDTH}.\n */\nexport function southButtonWidth(totalSlots: number, orbitRadiusX: number, containerW: number): number {\n const fill =\n totalSlots <= 1\n ? Math.round(2 * orbitRadiusX * 1.05)\n : Math.round(2 * orbitRadiusX * Math.sin(FULL_CIRCLE_RAD / totalSlots / 2) * 1.28);\n\n return Math.max(MIN_SOUTH_WIDTH, Math.min(fill, containerW - 16));\n}\n\n/**\n * Orbit radius for a given mascot size and item count.\n *\n * Grows 3px per orbital item so a crowded ring breathes outward instead of\n * cramming, and is floored so pills always clear the mascot.\n */\nexport function orbitRadiusForCount(mascotSizePx: number, orbitalCount: number, baseRadius: number): number {\n return Math.max(84, baseRadius + orbitalCount * 3, mascotSizePx / 2 + 42);\n}\n\n/**\n * Largest orbit radius that still fits inside a boxW x boxH container.\n *\n * The ring is centered in its box, so only half of each dimension is available,\n * and the outermost thing on the ring is not a pill *center* — it is the south\n * pill's bottom edge, which sits SOUTH_PILL_OFFSET + PILL_HALF_H past the\n * radius. Subtract both and the ring is guaranteed to stay inside.\n *\n * Why this exists: orbitRadiusForCount grows the radius with item count from a\n * base derived from viewport WIDTH alone — height is never consulted. On a\n * short viewport that combination puts the south pill below the bottom edge\n * with no upper bound. Clamping to the box makes overflow structurally\n * impossible instead of something every host has to notice and hand-tune.\n */\nexport function maxOrbitRadiusForBox(boxW: number, boxH: number): number {\n return Math.max(0, Math.min(boxW, boxH) / 2 - PILL_HALF_H - SOUTH_PILL_OFFSET);\n}\n\n/**\n * Clamp a desired radius to its box.\n *\n * The floor keeps the ring clear of the mascot: squeezing below the mascot's\n * own half-size drops pills on top of the character, which reads as broken\n * rather than as tight. Below that point the box is simply too small for a\n * ring, and the caller should show fewer items rather than a smaller circle —\n * pagination already exists for exactly that.\n */\nexport function clampOrbitRadius(radius: number, mascotSizePx: number, maxRadius?: number): number {\n if (maxRadius == null || !Number.isFinite(maxRadius) || maxRadius <= 0) return radius;\n return Math.max(mascotSizePx / 2 + MASCOT_CLEARANCE_GAP, Math.min(radius, maxRadius));\n}\n","\"use client\";\n\n// Harvested from @pifreak/jammy-orbital (`RadialMenu.tsx` + `RadialButton.tsx` +\n// `RadialPill.tsx`), which was itself excavated from JAMMY. This replaces the\n// 67-line badges-on-a-circle stub that shipped under this name and was never\n// imported by anything but JimboMascot.\n//\n// Rewritten rather than pasted, on three counts:\n// - the harvest was Tailwind + clsx + tailwind-merge; jaml-ui has none of\n// those, and `display: flex` is banned in src/ (the iframe determinism\n// rule). Every row here is grid.\n// - pills were a bespoke button reimplementing the south-edge lip that\n// JimboButton already owns. They compose it now, so a tone change lands in\n// one place.\n// - the store was Zustand. See ./orbitalMenuStore for what replaced it.\n//\n// This file is the renderer only: it decides *what component* each item becomes\n// and where the chrome sits. The orbit math lives in ./orbitalLayout, and the\n// menu stack lives in ./orbitalMenuStore, so both are testable without a DOM.\n\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { JimboButton } from \"./JimboButton.js\";\nimport { JimboStatusPill, type JimboStatus } from \"./JimboStatusPill.js\";\nimport {\n FULL_CIRCLE_RAD,\n MIN_SOUTH_WIDTH,\n PAGE_CONTROL_LIFT,\n PILL_HALF_H,\n SOUTH_ANGLE_RAD,\n SOUTH_EDGE_INSET,\n SOUTH_PILL_OFFSET,\n layoutOrbitalArc,\n layoutOrbitalEllipse,\n southButtonWidth,\n type OrbitMeasure,\n} from \"./orbitalLayout.js\";\n\nexport type JimboOrbitalTone = \"red\" | \"blue\" | \"orange\" | \"green\" | \"purple\";\n\n/**\n * Strict color semantics, carried over from the harvest because they are how\n * the ring stays readable at a glance:\n *\n * RED submenu or plain action ORANGE toggle, and the way out\n * BLUE talks to the assistant GREEN start (welcome screen only)\n * PURPLE a counted / tallied thing\n */\nexport interface JimboOrbitalMenuItem {\n label: string;\n /** Emitted through `onAction`. Omit when `submenu` is set. */\n action?: string;\n /** Pushes a submenu of this name instead of firing an action. */\n submenu?: string;\n tone?: JimboOrbitalTone;\n /** Present (even as `false`) makes this a toggle and draws the state dot. */\n active?: boolean;\n disabled?: boolean;\n /** Draws a tally on the pill's right edge. */\n count?: number;\n /** Drawn in place of a count. */\n icon?: ReactNode;\n tooltip?: string;\n /** Renders a non-interactive status pill instead of a button. */\n badge?: { label: string; status: JimboStatus };\n /**\n * Pin to the south slot. That slot is the way out — Balatro's exit law is a\n * full-width button along the very bottom at any modal size — so at most one\n * item should carry it.\n */\n south?: boolean;\n /** Render at lower opacity (unavailable, but worth showing). */\n dim?: boolean;\n}\n\nexport interface JimboOrbitalMenuProps {\n items: JimboOrbitalMenuItem[];\n onAction?: (action: string, item: JimboOrbitalMenuItem) => void;\n /** Fired when a `submenu` item is clicked. */\n onNavigate?: (submenu: string) => void;\n /** Fired when the south item is clicked. */\n onBack?: () => void;\n /** Current menu name — keys the pills so a submenu push re-animates them. */\n currentMenu?: string;\n /** Collapse the pills to center (the close/push animation). */\n closing?: boolean;\n /** Mascot diameter (px). Pills are pushed out to clear it. */\n mascotSize?: number;\n /** Horizontal orbit radius (px). */\n radius?: number;\n /** Vertical orbit radius (px). Defaults to `radius`. */\n radiusY?: number;\n /**\n * Height of the box the ring is sectioned into (px).\n *\n * When given, geometry switches to THE ORBIT LAW (see ./orbitalLayout): pills\n * stack by height and fly out to the walls, and the south button pins to the\n * container's bottom edge at full width instead of riding the orbit. That is\n * what makes the ring fit a short, wide box without shrinking the mascot.\n */\n boxHeight?: number;\n /** Vertical shift (px) — hosts use it to dodge an on-screen keyboard. */\n translateY?: number;\n /** Rendered above the south button. */\n breadcrumb?: ReactNode;\n showPageControls?: boolean;\n onPagePrev?: () => void;\n onPageNext?: () => void;\n /** Drawn at the ring's center, beneath the pills — usually a JimboMascot. */\n center?: ReactNode;\n className?: string;\n \"aria-label\"?: string;\n}\n\nconst isToggle = (item: JimboOrbitalMenuItem) => typeof item.active === \"boolean\";\n\nconst measure = (item: JimboOrbitalMenuItem): OrbitMeasure => ({\n label: item.label,\n hasToggleDot: isToggle(item),\n});\n\n/**\n * Orbital radial menu.\n *\n * The south item stays pinned under the mascot; everyone else sits at equal\n * angle steps with a single outward push when a pill would overlap the center.\n * See ./orbitalLayout for why there is no iterative solver — the evenness is\n * the whole effect.\n */\nexport function JimboOrbitalMenu({\n items,\n onAction,\n onNavigate,\n onBack,\n currentMenu = \"main\",\n closing = false,\n mascotSize = 96,\n radius = 90,\n radiusY,\n boxHeight,\n translateY = 0,\n breadcrumb,\n showPageControls = false,\n onPagePrev,\n onPageNext,\n center,\n className,\n \"aria-label\": ariaLabel = \"Orbital menu\",\n}: JimboOrbitalMenuProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const [containerW, setContainerW] = useState(375);\n\n useEffect(() => {\n const el = rootRef.current;\n if (!el) return;\n const apply = () => setContainerW(Math.max(1, el.clientWidth));\n apply();\n const observer = new ResizeObserver(apply);\n observer.observe(el);\n return () => observer.disconnect();\n }, []);\n\n // A closed ring still has to draw its center: the mascot IS the tap target\n // that opens it, so returning null here would leave nothing to tap.\n if (items.length === 0) {\n return center ? (\n <div\n ref={rootRef}\n className={[\"j-orbital-menu\", className].filter(Boolean).join(\" \")}\n style={{ transform: `translateY(${translateY}px)` }}\n >\n <div className=\"j-orbital-menu__center\">{center}</div>\n </div>\n ) : null;\n }\n\n const rx = radius;\n const ry = radiusY ?? radius;\n\n // The south item holds a slot in the angular budget even though it renders at\n // a fixed position — that is what keeps the ring even around it.\n const southItem = items.find((item) => item.south) ?? null;\n const orbitalItems = items.filter((item) => !item.south);\n const totalSlots = orbitalItems.length + (southItem ? 1 : 0);\n const slotStepRad = FULL_CIRCLE_RAD / totalSlots;\n const startAngle = southItem ? SOUTH_ANGLE_RAD + slotStepRad : SOUTH_ANGLE_RAD;\n\n const pinnedSouth = boxHeight != null && Number.isFinite(boxHeight) && boxHeight > 0;\n const southWidth = pinnedSouth\n ? Math.max(MIN_SOUTH_WIDTH, containerW - SOUTH_EDGE_INSET * 2)\n : southButtonWidth(totalSlots, rx, containerW);\n\n // Chrome is anchored to the south button rather than to the viewport, so it\n // stays attached to it when the orbit resizes.\n const southY = pinnedSouth ? boxHeight / 2 - PILL_HALF_H - SOUTH_EDGE_INSET : ry + SOUTH_PILL_OFFSET;\n // Capped, not just floored. The harvested formula was half the south button,\n // which was fine when south rode the orbit — but a pinned south spans the\n // whole container, and two half-width controls then tile it edge to edge and\n // read as one segmented bar. Capped, they sit at south's tips as nudges.\n const pageControlW = Math.min(96, Math.max(56, Math.floor(southWidth * 0.5)));\n const pageControlY = southY - PAGE_CONTROL_LIFT;\n\n // The arc must clear the topmost south chrome — page controls sit above the\n // south button when pagination is on, so they set the floor.\n const southChromeTopY =\n (showPageControls && southItem ? pageControlY : southY) - PILL_HALF_H;\n\n const solved =\n pinnedSouth && boxHeight != null\n ? layoutOrbitalArc(orbitalItems, containerW, boxHeight, southChromeTopY, measure)\n : layoutOrbitalEllipse(orbitalItems, rx, ry, startAngle, slotStepRad, mascotSize, measure);\n\n const clickItem = (item: JimboOrbitalMenuItem) => (event: MouseEvent) => {\n // The mascot underneath is itself a tap target; without this every pill\n // click would also toggle the menu shut.\n event.stopPropagation();\n if (item.south) onBack?.();\n else if (item.submenu) onNavigate?.(item.submenu);\n else if (item.action) onAction?.(item.action, item);\n };\n\n return (\n <div\n ref={rootRef}\n className={[\"j-orbital-menu\", className].filter(Boolean).join(\" \")}\n style={{ transform: `translateY(${translateY}px)` }}\n >\n {center ? <div className=\"j-orbital-menu__center\">{center}</div> : null}\n\n {/* Zero-size anchor: every pill positions against this exact center point. */}\n <div className=\"j-orbital-menu__anchor\" role=\"menu\" aria-label={ariaLabel}>\n {breadcrumb ? (\n <OrbitalPill x={0} y={southY - 46} hiding={closing} interactive={false}>\n {breadcrumb}\n </OrbitalPill>\n ) : null}\n\n {solved.map(({ item, x, y }, i) => (\n <OrbitalPill\n // `currentMenu` in the key forces a fresh element per menu, so pills\n // animate out from center on a push rather than sliding over from\n // the previous menu's slots.\n key={`${currentMenu}-${item.label}-${i}`}\n x={x}\n y={y}\n hiding={closing}\n dim={item.dim}\n >\n <OrbitalItem item={item} onClick={clickItem(item)} />\n </OrbitalPill>\n ))}\n\n {southItem ? (\n <OrbitalPill x={0} y={southY} hiding={closing}>\n <JimboButton\n tone={southItem.tone ?? \"orange\"}\n size=\"sm\"\n fullWidth\n className=\"j-orbital-btn j-orbital-btn--south\"\n style={{ width: southWidth }}\n title={southItem.tooltip ?? southItem.label}\n onClick={clickItem(southItem)}\n role=\"menuitem\"\n >\n {southItem.label}\n </JimboButton>\n </OrbitalPill>\n ) : null}\n\n {southItem && showPageControls ? (\n <>\n <OrbitalPill x={-(southWidth / 2) + pageControlW / 2} y={pageControlY} hiding={closing}>\n <PageControl label=\"<\" title=\"Previous page\" width={pageControlW} onClick={onPagePrev} />\n </OrbitalPill>\n <OrbitalPill x={southWidth / 2 - pageControlW / 2} y={pageControlY} hiding={closing}>\n <PageControl label=\">\" title=\"Next page\" width={pageControlW} onClick={onPageNext} />\n </OrbitalPill>\n </>\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * Absolutely-positioned wrapper for one orbital item.\n *\n * Position rides on two custom properties read by one shared stylesheet rule.\n * The excavated version injected a `<style>` tag per pill, which thrashed the\n * CSSOM on every menu change.\n */\nfunction OrbitalPill({\n x,\n y,\n hiding,\n dim,\n interactive = true,\n children,\n}: {\n x: number;\n y: number;\n hiding: boolean;\n dim?: boolean;\n interactive?: boolean;\n children: ReactNode;\n}) {\n return (\n <div\n className=\"j-orbital-pill\"\n data-hiding={hiding ? \"true\" : \"false\"}\n data-dim={dim ? \"true\" : undefined}\n data-static={interactive ? undefined : \"true\"}\n style={\n {\n \"--j-orbit-x\": `${hiding ? 0 : x}px`,\n \"--j-orbit-y\": `${hiding ? 0 : y}px`,\n } as CSSProperties\n }\n >\n {children}\n </div>\n );\n}\n\n/** Order matters: a badge is checked first so it can never become a button. */\nfunction OrbitalItem({\n item,\n onClick,\n}: {\n item: JimboOrbitalMenuItem;\n onClick: (event: MouseEvent) => void;\n}) {\n if (item.badge) {\n return <JimboStatusPill status={item.badge.status} label={item.badge.label} title={item.tooltip} />;\n }\n\n const toggle = isToggle(item);\n\n return (\n <JimboButton\n tone={item.tone ?? (toggle ? \"orange\" : \"red\")}\n size=\"sm\"\n className=\"j-orbital-btn\"\n disabled={item.disabled}\n title={item.tooltip ?? item.label}\n aria-label={toggle ? `${item.label} (${item.active ? \"on\" : \"off\"})` : item.label}\n aria-pressed={toggle ? item.active : undefined}\n role=\"menuitem\"\n onClick={onClick}\n >\n {toggle ? <span className=\"j-orbital-dot\" data-on={item.active ? \"true\" : \"false\"} aria-hidden /> : null}\n <span>{item.label}</span>\n {item.icon ? (\n <span className=\"j-orbital-glyph\" aria-hidden>\n {item.icon}\n </span>\n ) : typeof item.count === \"number\" ? (\n <span className=\"j-orbital-count\" data-any={item.count > 0 ? \"true\" : \"false\"}>\n {item.count}\n </span>\n ) : null}\n </JimboButton>\n );\n}\n\nfunction PageControl({\n label,\n title,\n width,\n onClick,\n}: {\n label: string;\n title: string;\n width: number;\n onClick?: () => void;\n}) {\n return (\n <JimboButton\n tone=\"blue\"\n size=\"sm\"\n className=\"j-orbital-btn\"\n style={{ width }}\n title={title}\n aria-label={title}\n onClick={(event) => {\n event.stopPropagation();\n onClick?.();\n }}\n >\n {label}\n </JimboButton>\n );\n}\n","\"use client\";\n\n// Orbital menu state machine — harvested from @pifreak/jammy-orbital\n// (`radialMenuStore.ts`), itself excavated from JAMMY.\n//\n// Kept OUT of component state, deliberately. The original's comment explains\n// why: \"Zustand survives the component; hook useState did not.\" The mascot\n// unmounts and remounts across scene transitions, and the open menu path must\n// survive that. Move this into useState and you reintroduce the bug where the\n// menu snaps back to root on every scene change.\n//\n// It is a plain external store here rather than Zustand: jaml-ui ships as an\n// MCP app into a host we do not control, and a state library is a dependency\n// that buys nothing this file cannot do in forty lines. `useSyncExternalStore`\n// gives the same subscribe/snapshot contract with a React-owned tearing\n// guarantee.\n//\n// Unlike the harvested original the store is *instanceable*. A single global\n// meant two rings on one page shared one open menu — invisible in the app that\n// only ever mounted one mascot, immediately visible on a Storybook docs page\n// that renders several stories at once.\n\nimport { useCallback, useMemo, useSyncExternalStore } from \"react\";\n\n/** Submenu push/pop: pills sink to center, the stack swaps, they rise again. */\nexport const ORBITAL_SINK_MS = 200;\n/** Full close. Must match the `.j-orbital-pill` transition in jimbo.css. */\nexport const ORBITAL_CLOSE_MS = 320;\n\nexport interface JimboOrbitalState {\n /** Menu path. Empty = closed. `[\"main\"]` = root open. */\n stack: string[];\n /** Zero-based page within the current menu, for menus past the page size. */\n page: number;\n /** Submenu labels pushed so far, for a breadcrumb. */\n breadcrumb: string[];\n /** Mid-animation: pills are collapsing to center. */\n closing: boolean;\n}\n\nexport interface JimboOrbitalStore {\n subscribe: (listener: () => void) => () => void;\n getState: () => JimboOrbitalState;\n open: (root?: string) => void;\n close: () => void;\n back: () => void;\n navigateTo: (submenuLabel: string) => void;\n nextPage: (totalPages: number) => void;\n prevPage: (totalPages: number) => void;\n reset: () => void;\n /**\n * \"Get out of the way — something arrived.\"\n *\n * Auto-closes the menu when background work produces a result worth looking\n * at, so the user isn't left staring at a submenu over fresh content. In\n * JAMMY this was seed-search results and `topScore` was the seed score; any\n * monotonically-improving quality metric works, and it is optional.\n *\n * Two independent triggers:\n * - a new *best* score closes a submenu (depth > 1) but leaves root open\n * - simply *more* results than last time closes any open menu\n */\n signalIncomingResults: (results: { count: number; topScore?: number }) => void;\n}\n\nconst CLOSED: JimboOrbitalState = { stack: [], page: 0, breadcrumb: [], closing: false };\n\nexport function createJimboOrbitalStore(): JimboOrbitalStore {\n let state: JimboOrbitalState = CLOSED;\n let prevTopScore = -1;\n let prevResultCount = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n const listeners = new Set<() => void>();\n\n const emit = () => listeners.forEach((l) => l());\n\n const set = (next: Partial<JimboOrbitalState>) => {\n state = { ...state, ...next };\n emit();\n };\n\n const clearTimer = () => {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n const armTimer = (fn: () => void, ms: number) => {\n clearTimer();\n timer = setTimeout(() => {\n timer = null;\n fn();\n }, ms);\n };\n\n const close = () => {\n clearTimer();\n set({ closing: true });\n armTimer(() => set({ ...CLOSED }), ORBITAL_CLOSE_MS);\n };\n\n return {\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n\n getState: () => state,\n\n open: (root = \"main\") => {\n // Guard: skip when already at the target root. Without it, `open()` mints\n // a fresh state object, every subscriber re-renders, and any effect\n // depending on the menu state loops forever. Load-bearing — do not\n // \"simplify\" it away.\n if (state.stack.length === 1 && state.stack[0] === root && state.page === 0) return;\n clearTimer();\n set({ stack: [root], page: 0, breadcrumb: [], closing: false });\n },\n\n close,\n\n back: () => {\n if (state.stack.length <= 1) {\n set({ breadcrumb: [] });\n close();\n return;\n }\n clearTimer();\n set({ breadcrumb: state.breadcrumb.slice(0, -1), closing: true });\n armTimer(\n () => set({ stack: state.stack.slice(0, -1), page: 0, closing: false }),\n ORBITAL_SINK_MS,\n );\n },\n\n navigateTo: (submenuLabel) => {\n clearTimer();\n set({ breadcrumb: [...state.breadcrumb, submenuLabel], closing: true });\n // Pills sink to center, *then* the stack swaps and they rise again. The\n // delay is what sells the push as one motion instead of a hard cut.\n armTimer(\n () => set({ stack: [...state.stack, submenuLabel], page: 0, closing: false }),\n ORBITAL_SINK_MS,\n );\n },\n\n nextPage: (totalPages) => {\n const pages = Math.max(1, totalPages);\n set({ page: pages <= 1 ? 0 : (state.page + 1) % pages });\n },\n\n prevPage: (totalPages) => {\n const pages = Math.max(1, totalPages);\n set({ page: pages <= 1 ? 0 : (state.page - 1 + pages) % pages });\n },\n\n reset: () => {\n clearTimer();\n prevTopScore = -1;\n prevResultCount = 0;\n set({ ...CLOSED });\n },\n\n signalIncomingResults: ({ count, topScore }) => {\n let shouldClose = false;\n\n if (count > 0 && topScore !== undefined && topScore > prevTopScore) {\n shouldClose = state.stack.length > 1;\n }\n if (count > 0 && count > prevResultCount) {\n shouldClose = shouldClose || state.stack.length > 0;\n }\n\n prevTopScore = count > 0 && topScore !== undefined ? topScore : -1;\n prevResultCount = count;\n\n if (shouldClose) close();\n },\n };\n}\n\n/** Shared store — the common case, one mascot per app. */\nexport const jimboOrbitalStore = createJimboOrbitalStore();\n\nexport interface JimboOrbitalMenuController extends JimboOrbitalState {\n /** Top of the stack, or `root` when closed. */\n currentMenu: string;\n /** The ring should be mounted. */\n isOpen: boolean;\n /** Pills should be animating toward center. */\n isClosing: boolean;\n /** The stack is deep enough that the south button means \"back\", not \"exit\". */\n canGoBack: boolean;\n open: () => void;\n close: () => void;\n back: () => void;\n navigateTo: (submenuLabel: string) => void;\n nextPage: (totalPages: number) => void;\n prevPage: (totalPages: number) => void;\n /** The single tap target: closed → open, open → close. */\n toggle: () => void;\n}\n\nexport interface UseJimboOrbitalMenuProps {\n /** Root menu name. A welcome screen might open to `\"welcome\"` instead. */\n root?: string;\n /** Use a private store instead of the shared one. */\n store?: JimboOrbitalStore;\n}\n\n/** Controller for {@link JimboOrbitalMenu} — stack, pagination, close animation. */\nexport function useJimboOrbitalMenu({\n root = \"main\",\n store = jimboOrbitalStore,\n}: UseJimboOrbitalMenuProps = {}): JimboOrbitalMenuController {\n // The server snapshot is the closed state: nothing is open before hydration,\n // and returning the live object would hand React a value that changes\n // between render passes.\n const state = useSyncExternalStore(store.subscribe, store.getState, () => CLOSED);\n\n const open = useCallback(() => store.open(root), [store, root]);\n const toggle = useCallback(() => {\n const { stack, closing } = store.getState();\n if (stack.length === 0 && !closing) store.open(root);\n else store.close();\n }, [store, root]);\n\n return useMemo(\n () => ({\n ...state,\n currentMenu: state.stack.at(-1) ?? root,\n isOpen: state.stack.length > 0,\n isClosing: state.closing && state.stack.length > 0,\n canGoBack: state.stack.length > 1,\n open,\n close: store.close,\n back: store.back,\n navigateTo: store.navigateTo,\n nextPage: store.nextPage,\n prevPage: store.prevPage,\n toggle,\n }),\n [state, root, open, toggle, store],\n );\n}\n","export default import.meta.ROLLUP_FILE_URL_D_WyAel8;","// The real Jammy mascot artwork (hand-drawn) — a big brown seed with a\n// green sprout and a jester/joker character peeking out from behind it.\n//\n// This used to be a 257 kB base64 string literal pasted straight into this\n// module, on the reasoning that the published npm package should be\n// self-contained. It stayed self-contained without the cost: the PNG now lives\n// in assets/ alongside the sprite sheets, ships via the `assets/*.png` entry in\n// package.json \"files\", and the build emits it to dist/assets/ (see\n// emitAssetsAsFiles in vite.config.ts). A data URI in a JS module cannot be\n// cached as an image, decoded off the main thread, or skipped by a consumer\n// that never renders the mascot — a real file is all three.\nimport mascotUrl from \"../../assets/jammy-seed-mascot.png\";\n\nexport const JAMMY_SEED_MASCOT_URL: string = mascotUrl;\n","\"use client\";\n\nimport {\n useMemo,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { JimboOrbitalMenu, type JimboOrbitalMenuItem } from \"./JimboOrbitalMenu.js\";\nimport { JimboText } from \"./jimboText.js\";\nimport {\n createJimboOrbitalStore,\n useJimboOrbitalMenu,\n type JimboOrbitalStore,\n} from \"./orbitalMenuStore.js\";\nimport { arcPageCapacity, clampOrbitRadius, orbitRadiusForCount } from \"./orbitalLayout.js\";\nimport { JAMMY_SEED_MASCOT_URL } from \"./jammySeedMascotImage.js\";\n\nfunction onActivateKey(handler: () => void) {\n return (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handler();\n }\n };\n}\n\n/**\n * Items per orbital page.\n *\n * 14 is the original JAMMY value and it is load-bearing: the longest real menu\n * is exactly 14 items, so at 14 it renders as one page with no pagination\n * chrome. An agent once \"simplified\" this to 7 with a confident comment about\n * crowding, silently splitting that menu across two pages. Don't.\n *\n * This is the design CEILING, not a fixed size — {@link pageSizeForBox} lowers\n * it only when the box physically cannot hold 14 same-height pills, so a phone\n * paginates while every box that fits the menu shows it whole.\n */\nconst ORBITAL_PAGE_SIZE = 14;\n\n/**\n * Effective items per page: 14 is the design ceiling, the box is the physical\n * one. Where the box is smaller, the pager absorbs the difference — pills and\n * mascot never shrink to compensate (see THE ORBIT LAW in orbitalLayout).\n */\nfunction pageSizeForBox(orbitBoxHeight: number | undefined): number {\n if (orbitBoxHeight == null || !Number.isFinite(orbitBoxHeight) || orbitBoxHeight <= 0) {\n return ORBITAL_PAGE_SIZE;\n }\n return Math.max(2, Math.min(ORBITAL_PAGE_SIZE, arcPageCapacity(orbitBoxHeight)));\n}\n\nexport interface JimboMascotProps extends HTMLAttributes<HTMLDivElement> {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n /** Box size in px. Default 96. */\n size?: number;\n /** A flat ring, no submenus. Ignored when `getMenuItems` is given. */\n menuItems?: JimboOrbitalMenuItem[];\n /**\n * Resolve the items for a menu path — `[]`, `[\"main\"]`, `[\"main\",\"Tools\"]`.\n *\n * This is the seam that makes submenus, paging and the south exit the\n * mascot's job rather than every consumer's. An item with a `submenu` pushes\n * onto the path; one with an `action` fires `onMenuAction`.\n */\n getMenuItems?: (menuStack: string[]) => JimboOrbitalMenuItem[];\n onMenuAction?: (action: string, item: JimboOrbitalMenuItem) => void;\n /**\n * Largest orbit radius the ring may use, px. Pass\n * `maxOrbitRadiusForBox(w, h)` for the box the mascot is sectioned into and\n * the ring can never overflow it, however many items a menu holds.\n */\n maxOrbitRadius?: number;\n /**\n * Height of the box the mascot is sectioned into, px. Pins the south button\n * to the box's bottom edge at full width — Balatro's exit law — instead of\n * letting it ride the orbit radius.\n */\n orbitBoxHeight?: number;\n /**\n * Width of that same box, px.\n *\n * Load-bearing whenever `orbitBoxHeight` is set: the ring measures the\n * element it is drawn into, and left to itself that element is the mascot's\n * own box — a couple of hundred pixels narrower than the territory the ring\n * owns. Pills then have nowhere to fly out to and stack on the character.\n * Give the ring the real square and it fills it.\n *\n * The ring is centered on the mascot, so place the mascot where the ring's\n * center belongs — usually the middle of that square.\n */\n orbitBoxWidth?: number;\n /** Orbit radius before item-count growth. Default 90. */\n baseOrbitRadius?: number;\n /** Keep the ring shut (an overlay owns the screen). */\n menuHidden?: boolean;\n /** South-button label at the root of the menu. Deeper in it always says Back. */\n closeLabel?: string;\n /** Use a private menu store instead of the shared one. */\n orbitalStore?: JimboOrbitalStore;\n /** Draw something else as the character — the artwork seam. */\n renderImage?: (info: { size: number }) => ReactNode;\n}\n\n/** Jammy, the seed mascot — bounces, shakes, and hosts the orbital menu. */\nexport function JimboMascot({\n mood = \"idle\",\n size = 96,\n menuItems,\n getMenuItems,\n onMenuAction,\n maxOrbitRadius,\n orbitBoxHeight,\n orbitBoxWidth,\n baseOrbitRadius = 90,\n menuHidden = false,\n closeLabel = \"Close\",\n orbitalStore,\n renderImage,\n className = \"\",\n ...rest\n}: JimboMascotProps) {\n // A private store by default: two mascots on one page must not drive each\n // other. A host that needs to reach in (auto-close on incoming results, say)\n // passes its own.\n const [fallbackStore] = useState(createJimboOrbitalStore);\n const menu = useJimboOrbitalMenu({ store: orbitalStore ?? fallbackStore });\n\n const resolve = useMemo(\n () => getMenuItems ?? (menuItems ? () => menuItems : null),\n [getMenuItems, menuItems],\n );\n const interactive = resolve != null && !menuHidden;\n\n const handleTap = () => {\n if (interactive) menu.toggle();\n };\n\n const animation =\n mood === \"happy\" ? \"jammy-happy\" : mood === \"surprised\" ? \"jammy-shake\" : \"jammy-idle\";\n\n // Everything below only matters while the ring is up, but it must be computed\n // unconditionally — hooks above, plain math here.\n const open = interactive && (menu.isOpen || menu.isClosing);\n const all = open && resolve ? resolve(menu.stack) : [];\n\n const pageSize = pageSizeForBox(orbitBoxHeight);\n const totalPages = Math.max(1, Math.ceil(all.length / pageSize));\n const page = Math.min(Math.max(0, menu.page), totalPages - 1);\n const paged = all.slice(page * pageSize, (page + 1) * pageSize);\n\n // The way out is always present and always last: \"Back\" once there is a path\n // to pop, otherwise the close label.\n const south: JimboOrbitalMenuItem = {\n label: menu.canGoBack ? \"Back\" : closeLabel,\n south: true,\n };\n const items = open ? [...paged, south] : [];\n\n const orbitRadius = clampOrbitRadius(\n orbitRadiusForCount(size, paged.length, baseOrbitRadius),\n size,\n maxOrbitRadius,\n );\n\n const character = (\n <div\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={handleTap}\n onKeyDown={interactive ? onActivateKey(handleTap) : undefined}\n aria-label=\"Jammy mascot\"\n aria-expanded={interactive ? menu.isOpen : undefined}\n className={interactive ? \"j-mascot__hit j-mascot__hit--interactive\" : \"j-mascot__hit\"}\n >\n {renderImage ? (\n renderImage({ size })\n ) : (\n <img src={JAMMY_SEED_MASCOT_URL} alt=\"Jammy\" draggable={false} className=\"j-mascot__img\" />\n )}\n </div>\n );\n\n return (\n <div\n className={[\"j-mascot\", animation, className].filter(Boolean).join(\" \")}\n style={{ \"--j-mascot-size\": `${size}px` } as CSSProperties}\n {...rest}\n >\n {character}\n {open ? (\n <div\n className=\"j-mascot__orbit\"\n style={\n {\n \"--j-orbit-w\": orbitBoxWidth != null ? `${orbitBoxWidth}px` : undefined,\n \"--j-orbit-h\": orbitBoxHeight != null ? `${orbitBoxHeight}px` : undefined,\n } as CSSProperties\n }\n >\n <JimboOrbitalMenu\n items={items}\n currentMenu={menu.currentMenu}\n closing={menu.isClosing}\n mascotSize={size}\n radius={orbitRadius}\n boxHeight={orbitBoxHeight}\n showPageControls={all.length > pageSize}\n onPagePrev={() => menu.prevPage(totalPages)}\n onPageNext={() => menu.nextPage(totalPages)}\n breadcrumb={\n menu.breadcrumb.length > 0 ? (\n <JimboText size=\"xs\" tone=\"grey\">\n {menu.breadcrumb.join(\" / \")}\n </JimboText>\n ) : null\n }\n onNavigate={menu.navigateTo}\n onBack={menu.back}\n onAction={(action, item) => {\n onMenuAction?.(action, item);\n menu.close();\n }}\n />\n </div>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { Children, useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { FiChevronLeft, FiChevronRight } from \"react-icons/fi\";\nimport { JimboIconButton } from \"./JimboIconButton.js\";\nimport { JimboText } from \"./jimboText.js\";\n\nexport interface JimboPagerProps {\n /**\n * One page per child. Children, not a render prop, so the pager can live in the\n * json-render registry — a spec only carries data, never a function.\n */\n children?: ReactNode;\n /** Controlled page. Omit it and the pager keeps its own. */\n index?: number;\n defaultIndex?: number;\n /** Fires once a swipe or a button settles on a new page. */\n onPageChange?: (index: number) => void;\n /** Pixels or any CSS length. Omit to fill the parent. */\n height?: number | string;\n \"aria-label\"?: string;\n}\n\n/** Horizontal px a mouse has to travel before it counts as a swipe and not a click. */\nconst DRAG_START_PX = 6;\n/** Fraction of a page a mouse drag has to cover to turn it. */\nconst DRAG_TURN_FRACTION = 0.2;\n/** Things a drag must never start on: it would eat text selection and caret moves. */\nconst NO_DRAG = \"input, textarea, select, [contenteditable='true'], [data-no-swipe]\";\n\nfunction prefersReducedMotion(): boolean {\n return typeof window !== \"undefined\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/**\n * Swipe left and right through pages. Nothing tilts, nothing flies off, nothing\n * stacks behind: the page you are on simply moves with your finger and settles\n * on the next one (native scroll-snap).\n *\n * Each page scrolls on its own vertical axis, so a page taller than the pager is\n * reachable instead of clipped.\n */\nexport function JimboPager({\n children,\n index,\n defaultIndex = 0,\n onPageChange,\n height = \"100%\",\n \"aria-label\": ariaLabel = \"Pages\",\n}: JimboPagerProps) {\n const pages = Children.toArray(children);\n const count = pages.length;\n\n const [inner, setInner] = useState(defaultIndex);\n const current = Math.max(0, Math.min(index ?? inner, Math.max(0, count - 1)));\n\n const scroller = useRef<HTMLDivElement | null>(null);\n const frame = useRef<number | null>(null);\n // startPage is pinned at pointer-down: the scroll position crosses page boundaries\n // mid-drag, and the release has to turn from where the drag began, not from there.\n const drag = useRef<{ startX: number; startScroll: number; startPage: number; active: boolean } | null>(null);\n const justDragged = useRef(false);\n const [dragging, setDragging] = useState(false);\n\n const scrollToIndex = useCallback((i: number) => {\n const el = scroller.current;\n if (!el) return;\n el.scrollTo({ left: i * el.clientWidth, behavior: prefersReducedMotion() ? \"auto\" : \"smooth\" });\n }, []);\n\n const goTo = useCallback(\n (i: number) => scrollToIndex(Math.max(0, Math.min(i, count - 1))),\n [count, scrollToIndex],\n );\n\n // The scroll position is the truth; the page number is read off it once it settles.\n const onScroll = () => {\n // A mouse drag moves the scroll position through every page on the way; only the\n // page it lands on counts, and that is reported once the release settles it.\n if (drag.current?.active) return;\n if (frame.current !== null) cancelAnimationFrame(frame.current);\n frame.current = requestAnimationFrame(() => {\n frame.current = null;\n const el = scroller.current;\n if (!el || el.clientWidth === 0) return;\n const settled = Math.round(el.scrollLeft / el.clientWidth);\n if (settled !== current) {\n setInner(settled);\n onPageChange?.(settled);\n }\n });\n };\n\n useEffect(\n () => () => {\n if (frame.current !== null) cancelAnimationFrame(frame.current);\n },\n [],\n );\n\n // Controlled: follow `index` when it disagrees with where the scroller is.\n useEffect(() => {\n if (index === undefined) return;\n const el = scroller.current;\n if (!el || el.clientWidth === 0) return;\n if (Math.round(el.scrollLeft / el.clientWidth) !== current) scrollToIndex(current);\n }, [index, current, scrollToIndex]);\n\n const onPointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n // Touch and pen already swipe natively; only a mouse needs help.\n if (e.pointerType !== \"mouse\" || e.button !== 0) return;\n if ((e.target as HTMLElement).closest(NO_DRAG)) return;\n const el = scroller.current;\n if (!el) return;\n drag.current = { startX: e.clientX, startScroll: el.scrollLeft, startPage: current, active: false };\n };\n\n const onPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n const el = scroller.current;\n if (!d || !el) return;\n const dx = e.clientX - d.startX;\n if (!d.active) {\n if (Math.abs(dx) < DRAG_START_PX) return;\n d.active = true;\n setDragging(true);\n e.currentTarget.setPointerCapture(e.pointerId);\n }\n // The press that began this drag may have started selecting the text under it.\n window.getSelection()?.removeAllRanges();\n el.scrollLeft = d.startScroll - dx;\n };\n\n const endDrag = (e: React.PointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n const el = scroller.current;\n drag.current = null;\n if (!d?.active || !el) return;\n justDragged.current = true;\n setDragging(false);\n const dx = e.clientX - d.startX;\n const turned = Math.abs(dx) >= el.clientWidth * DRAG_TURN_FRACTION;\n goTo(turned ? d.startPage + (dx < 0 ? 1 : -1) : d.startPage);\n };\n\n // A drag ends in a click on whatever is under the mouse; swallow that one.\n const onClickCapture = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!justDragged.current) return;\n justDragged.current = false;\n e.preventDefault();\n e.stopPropagation();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(NO_DRAG)) return;\n if (e.key === \"ArrowRight\") goTo(current + 1);\n if (e.key === \"ArrowLeft\") goTo(current - 1);\n };\n\n return (\n <div\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n style={{ display: \"grid\", gridTemplateRows: \"minmax(0, 1fr) auto\", gap: 10, height, minHeight: 0 }}\n >\n <div\n ref={scroller}\n tabIndex={0}\n onScroll={onScroll}\n onKeyDown={onKeyDown}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n onClickCapture={onClickCapture}\n style={{\n display: \"grid\",\n gridAutoFlow: \"column\",\n gridAutoColumns: \"100%\",\n minHeight: 0,\n overflowX: \"auto\",\n overflowY: \"hidden\",\n overscrollBehaviorX: \"contain\",\n // Snap is off while a mouse drives the scroll position, or it fights every pixel.\n scrollSnapType: dragging ? \"none\" : \"x mandatory\",\n scrollbarWidth: \"none\",\n cursor: dragging ? \"grabbing\" : undefined,\n userSelect: dragging ? \"none\" : undefined,\n outline: \"none\",\n }}\n >\n {count === 0 ? (\n <div style={{ display: \"grid\", placeItems: \"center\" }}>\n <JimboText size=\"sm\" tone=\"grey\">\n Nothing here\n </JimboText>\n </div>\n ) : null}\n\n {pages.map((page, i) => (\n <div\n key={i}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${i + 1} of ${count}`}\n style={{\n minWidth: 0,\n minHeight: 0,\n overflowY: \"auto\",\n scrollSnapAlign: \"start\",\n scrollSnapStop: \"always\",\n }}\n >\n {page}\n </div>\n ))}\n </div>\n\n <div style={{ display: \"grid\", gridAutoFlow: \"column\", gap: 12, alignItems: \"center\", justifyContent: \"center\" }}>\n <JimboIconButton\n aria-label=\"Previous\"\n title=\"Previous (left arrow)\"\n size=\"sm\"\n onClick={() => goTo(current - 1)}\n disabled={current <= 0}\n >\n <FiChevronLeft />\n </JimboIconButton>\n\n <JimboText size=\"micro\" tone=\"grey\">\n {count === 0 ? \"0 / 0\" : `${current + 1} / ${count}`}\n </JimboText>\n\n <JimboIconButton\n aria-label=\"Next\"\n title=\"Next (right arrow)\"\n size=\"sm\"\n onClick={() => goTo(current + 1)}\n disabled={current >= count - 1}\n >\n <FiChevronRight />\n </JimboIconButton>\n </div>\n </div>\n );\n}\n"],"names":["JimboBox","React","Tag","children","rest","ref","jsx","JimboCanvas","TAG_CLASS","RULE_CLASS","JimboSectionHeader","label","tone","className","classes","jsxs","JimboPanel","title","body","wrapBody","SIZE_CLASS","TONE_CLASS","JimboText","size","LAYOUT_CLASS","layoutClasses","base","gap","align","justify","extra","map","JimboStack","JimboRow","wrap","DefaultContext","IconContext","_excluded","_objectWithoutProperties","o","i","_objectWithoutPropertiesLoose","n","r","e","t","_extends","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","Tree2Element","tree","node","GenIcon","data","props","IconBase","elem","conf","attr","svgProps","computedSize","FiX","FiStar","FiSearch","FiPlay","FiMove","FiMinimize2","FiMaximize2","FiDownload","FiCopy","FiCode","FiChevronRight","FiChevronLeft","FiCheck","JimboButton","fullWidth","disabled","JimboSeedCopyChip","value","placeholder","copiedLabel","copiedDurationMs","onCopy","style","copied","setCopied","useState","resetTimer","useRef","display","canCopy","useEffect","handleCopy","_a","rootClass","JimboInnerPanel","JimboModal","open","onClose","titleId","useId","onKeyDown","JimboSpinner","onPrev","onNext","canPrev","canNext","JimboColorOption","withAlpha","hex","alpha","clean","g","b","JIMBO_ANIMATIONS","C","SIZE_PX","TONE_BG","JimboIconButton","onClick","onMouseDown","onTouchStart","ariaLabel","hover","setHover","side","palette","borderWidth","boxShadow","BUFFER_PX","STEP_PX","JimboShopBelt","onNearEnd","snap","scrollerRef","drag","grabbing","setGrabbing","maybeEnd","useCallback","el","onWheel","event","delta","nudge","dir","d","JimboBadge","JimboInline","JimboLink","JimboTextInput","JimboFlankNav","prevLabel","nextLabel","NavButton","direction","pressed","setPressed","ChevronSvg","JimboPanelSpinner","description","media","SHEET_META","normalize","name","stripPrefix","ITEM_MAP","registerAll","items","type","item","key","JOKERS","JOKER_FACES","TAROTS_AND_PLANETS","CONSUMABLE_FACES","VOUCHERS","BOSSES","TAGS","BOOSTER_PACKS","MYSTERY_SPRITES","getMysterySprite","sheet","getSpriteData","getSpriteDataOrMystery","fallbackSheet","CARD_SHEETS","JimboSprite","width","pos","meta","height","resolveJamlAssetUrl","JimboPicker","JimboPickerSection","JimboPickerSearch","JimboPickerHint","JimboPickerGrid","legendary","JimboPickerItem","muted","JimboPickerPair","JimboPickerEmpty","JimboTabs","tabs","activeTab","onTabChange","tab","active","JimboListItem","ATTR","STORAGE_KEY","MEDIA_QUERY","applyAttr","setting","root","readStoredSetting","stored","useMotionPreference","setSettingState","osPrefersReduced","setOsPrefersReduced","mql","onChange","setSetting","next","BALATRO_DEFAULTS","parseColor","c","fallback","ch","useBalatroBackground","config","canvasRef","configRef","useLayoutEffect","canvas","gl","vsSource","fsSource","createShader","source","shader","vertexShader","fragmentShader","program","positionBuffer","positionLocation","u_time","u_resolution","u_color1","u_color2","u_color3","u_spinRotation","u_spinSpeed","u_spinAmount","u_pixelFilter","u_contrast","u_lighting","resolveScalars","cfg","boot","current","currentScalars","startTime","lastFrame","animationFrameId","render","now","dt","target","targetScalars","transitionMs","lerpScalar","displayWidth","displayHeight","useJamlIdeDrag","filter","rootRef","setDrag","pendingDrag","setPendingDrag","hoverZone","setHoverZone","onDragStart","clause","fromZone","rect","dragRef","pendingRef","hoverRef","filterRef","onChangeRef","move","touchEvent","activeDrag","dx","dy","rails","found","rc","up","h","to","f","JimboInlineEdit","dim","JimboCodeSurface","minHeight","vars","JimboOuterTab","fullscreen","onToggleFullscreen","idCounter","newId","prefix","defaultPyramidDock","keys","stackedDock","dockRemove","panes","k","dockMapGroup","id","fn","dockSplitAt","newGroup","dockGroups","acc","dockActivate","dockIsValid","paneKeys","groups","p","loadDock","storageKey","raw","saveDock","JimboDock","pyramid","defaultLayout","setTree","dropZone","setDropZone","fsPane","setFsPane","zoneFromEvent","x","y","dropPane","group","zone","prev","removed","renderTab","v","renderGroup","drop","dropClass","renderNode","a","STATUS_CLASS","JimboStatusPill","status","JimboSlider","onValueChange","min","max","lo","hi","fill","JimboTextArea","SEED_ALPHABET","NOT_SEEDS","extractSeeds","text","tokens","full","chosen","invalidTokens","lines","bad","line","tok","JimboSeedBatchInput","onAnalyze","onInjectIntoJaml","ready","running","defaultText","setText","showInvalid","setShowInvalid","seeds","useMemo","s","partial","handleAnalyze","handleInject","countLabel","partialLabel","canAnalyze","whyDisabled","JimboBackground","JimboApp","variant","scroll","footer","JimboInset","JimboWordmark","sub","GAP_PX","JimboGrid","columns","minColWidth","template","JimboSpacer","JimboDivider","vert","JimboErrorBlock","onDismiss","dismissed","setDismissed","FULL_CIRCLE_RAD","SOUTH_ANGLE_RAD","PILL_HALF_H","MASCOT_CLEARANCE_GAP","MIN_SOUTH_WIDTH","SOUTH_EDGE_INSET","ARC_STACK_GAP","PAGE_CONTROL_LIFT","SOUTH_PILL_OFFSET","estimatePillWidth","hasToggleDot","minDistanceFromMascotCenter","mascotHalfPx","pillHalfW","layoutOrbitalEllipse","rx","ry","startAngle","stepRad","mascotSizePx","measure","mascotHalf","angle","ux","uy","d0","minDist","layoutOrbitalArc","boxW","boxH","southTopY","halfW","halfH","yTop","yBottom","leftCount","rightCount","step","slotY","indexOnSide","countOnSide","span","li","ri","arcPageCapacity","southButtonWidth","totalSlots","orbitRadiusX","containerW","orbitRadiusForCount","orbitalCount","baseRadius","maxOrbitRadiusForBox","clampOrbitRadius","radius","maxRadius","isToggle","JimboOrbitalMenu","onAction","onNavigate","onBack","currentMenu","closing","mascotSize","radiusY","boxHeight","translateY","breadcrumb","showPageControls","onPagePrev","onPageNext","center","setContainerW","apply","observer","southItem","orbitalItems","slotStepRad","pinnedSouth","southWidth","southY","pageControlW","pageControlY","southChromeTopY","solved","clickItem","OrbitalPill","OrbitalItem","Fragment","PageControl","hiding","interactive","toggle","ORBITAL_SINK_MS","ORBITAL_CLOSE_MS","CLOSED","createJimboOrbitalStore","state","prevTopScore","prevResultCount","timer","listeners","emit","l","set","clearTimer","armTimer","ms","close","listener","submenuLabel","totalPages","pages","count","topScore","shouldClose","jimboOrbitalStore","useJimboOrbitalMenu","store","useSyncExternalStore","stack","mascotUrl","JAMMY_SEED_MASCOT_URL","onActivateKey","handler","ORBITAL_PAGE_SIZE","pageSizeForBox","orbitBoxHeight","JimboMascot","mood","menuItems","getMenuItems","onMenuAction","maxOrbitRadius","orbitBoxWidth","baseOrbitRadius","menuHidden","closeLabel","orbitalStore","renderImage","fallbackStore","menu","resolve","handleTap","animation","all","pageSize","page","paged","south","orbitRadius","character","action","DRAG_START_PX","DRAG_TURN_FRACTION","NO_DRAG","prefersReducedMotion","JimboPager","index","defaultIndex","onPageChange","Children","inner","setInner","scroller","frame","justDragged","dragging","setDragging","scrollToIndex","goTo","onScroll","settled","onPointerDown","onPointerMove","endDrag","turned"],"mappings":"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","x_google_ignoreList":[6,7,8]}