@lobehub/ui 5.34.3 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/es/ActionIconGroup/ActionIconGroup.mjs +1 -1
  2. package/es/ActionIconGroup/ActionIconGroup.mjs.map +1 -1
  3. package/es/ActionIconGroup/type.d.mts +2 -2
  4. package/es/Alert/Alert.mjs +1 -1
  5. package/es/Alert/Alert.mjs.map +1 -1
  6. package/es/Burger/Burger.mjs +1 -1
  7. package/es/Burger/Burger.mjs.map +1 -1
  8. package/es/Burger/type.d.mts +2 -2
  9. package/es/CodeDiff/DiffPanel.mjs +1 -1
  10. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  11. package/es/CopyButton/CopyButton.mjs +1 -1
  12. package/es/CopyButton/CopyButton.mjs.map +1 -1
  13. package/es/CopyButton/type.d.mts +2 -2
  14. package/es/DownloadButton/DownloadButton.mjs +1 -1
  15. package/es/DownloadButton/DownloadButton.mjs.map +1 -1
  16. package/es/DownloadButton/type.d.mts +2 -2
  17. package/es/DraggablePanel/components/DraggablePanelHeader.mjs +1 -1
  18. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  19. package/es/Drawer/Drawer.mjs +1 -1
  20. package/es/Drawer/Drawer.mjs.map +1 -1
  21. package/es/Drawer/type.d.mts +2 -2
  22. package/es/EditableText/ControlInput.d.mts +2 -2
  23. package/es/EditableText/ControlInput.mjs +1 -1
  24. package/es/EditableText/ControlInput.mjs.map +1 -1
  25. package/es/EditableText/EditableText.mjs +1 -1
  26. package/es/EditableText/EditableText.mjs.map +1 -1
  27. package/es/EmojiPicker/EmojiPicker.mjs +1 -1
  28. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  29. package/es/GuideCard/GuideCard.mjs +1 -1
  30. package/es/GuideCard/GuideCard.mjs.map +1 -1
  31. package/es/GuideCard/type.d.mts +2 -2
  32. package/es/Highlighter/FullFeatured.mjs +1 -1
  33. package/es/Highlighter/FullFeatured.mjs.map +1 -1
  34. package/es/Highlighter/type.d.mts +2 -2
  35. package/es/HotkeyInput/HotkeyInput.mjs +1 -1
  36. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  37. package/es/HtmlPreview/HtmlPreview.mjs +1 -1
  38. package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
  39. package/es/HtmlPreview/type.d.mts +2 -2
  40. package/es/Image/type.d.mts +1 -0
  41. package/es/Image/viewer/GalleryNav.mjs +1 -1
  42. package/es/Image/viewer/GalleryNav.mjs.map +1 -1
  43. package/es/Image/viewer/ImageViewer.mjs +75 -70
  44. package/es/Image/viewer/ImageViewer.mjs.map +1 -1
  45. package/es/Image/viewer/Toolbar.mjs +19 -7
  46. package/es/Image/viewer/Toolbar.mjs.map +1 -1
  47. package/es/Image/viewer/ViewerChrome.mjs +1 -1
  48. package/es/Image/viewer/ViewerChrome.mjs.map +1 -1
  49. package/es/Mermaid/FullFeatured.mjs +1 -1
  50. package/es/Mermaid/FullFeatured.mjs.map +1 -1
  51. package/es/Mermaid/type.d.mts +2 -2
  52. package/es/Modal/Modal.mjs +1 -1
  53. package/es/Modal/Modal.mjs.map +1 -1
  54. package/es/SortableList/components/DragHandle.d.mts +2 -2
  55. package/es/SortableList/components/DragHandle.mjs +1 -1
  56. package/es/SortableList/components/DragHandle.mjs.map +1 -1
  57. package/es/Tabs/Tabs.mjs +1 -1
  58. package/es/Tabs/Tabs.mjs.map +1 -1
  59. package/es/ThemeSwitch/ThemeSwitch.mjs +1 -1
  60. package/es/ThemeSwitch/ThemeSwitch.mjs.map +1 -1
  61. package/es/ThemeSwitch/type.d.mts +2 -2
  62. package/es/Toc/TocMobile.mjs +1 -1
  63. package/es/Toc/TocMobile.mjs.map +1 -1
  64. package/es/Video/index.mjs +1 -1
  65. package/es/Video/index.mjs.map +1 -1
  66. package/es/base-ui/Button/SplitButton.mjs +1 -1
  67. package/es/base-ui/Form/components/FormSubmitFooter.mjs +1 -1
  68. package/es/base-ui/Input/style.d.mts +2 -2
  69. package/es/base-ui/Modal/imperative.mjs +1 -1
  70. package/es/base-ui/Tag/Tag.mjs +1 -1
  71. package/es/base-ui/Tag/Tag.mjs.map +1 -1
  72. package/es/base-ui/Tag/style.mjs +8 -3
  73. package/es/base-ui/Tag/style.mjs.map +1 -1
  74. package/es/base-ui/index.d.mts +4 -4
  75. package/es/base-ui/index.mjs +6 -6
  76. package/es/chat/ChatHeader/ChatHeader.mjs +1 -1
  77. package/es/chat/ChatHeader/ChatHeader.mjs.map +1 -1
  78. package/es/chat/EditableMessageList/EditableMessageList.mjs +1 -1
  79. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  80. package/es/chat/TokenTag/TokenTag.mjs +1 -1
  81. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  82. package/es/chat/TokenTag/type.d.mts +2 -2
  83. package/es/mobile/ChatHeader/ChatHeader.mjs +1 -1
  84. package/es/mobile/ChatHeader/ChatHeader.mjs.map +1 -1
  85. package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
  86. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  87. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import Center from "../Flex/Center.mjs";
3
3
  import TooltipGroup from "../base-ui/Tooltip/TooltipGroup.mjs";
4
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
5
4
  import DropdownMenu from "../base-ui/DropdownMenu/DropdownMenu.mjs";
5
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import { variants } from "./style.mjs";
7
7
  import { useMemo } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"ActionIconGroup.mjs","names":[],"sources":["../../src/ActionIconGroup/ActionIconGroup.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { MoreHorizontal } from 'lucide-react';\nimport { type FC, useMemo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport DropdownMenu from '@/DropdownMenu';\nimport { Center } from '@/Flex';\nimport { TooltipGroup } from '@/Tooltip';\n\nimport { variants } from './style';\nimport type { ActionIconGroupProps } from './type';\n\nconst ActionIconGroup: FC<ActionIconGroupProps> = ({\n variant = 'filled',\n disabled,\n shadow,\n glass,\n actionIconProps,\n items = [],\n horizontal = true,\n menu,\n onActionClick,\n className,\n size = 'small',\n ref,\n ...rest\n}) => {\n const tooltipPlacement = useMemo(\n () => (actionIconProps?.tooltipProps?.placement || horizontal ? 'top' : 'right'),\n [actionIconProps, horizontal],\n );\n\n const menuItems = useMemo(() => {\n const rawItems = typeof menu === 'function' ? menu() : menu;\n if (!rawItems) return [];\n return rawItems.map((item) => ({\n ...(item as any),\n onClick: (info: any) => {\n (item as any)?.onClick?.(info);\n onActionClick?.(info);\n },\n }));\n }, [menu, onActionClick]);\n\n return (\n <TooltipGroup>\n <Center\n className={cx(variants({ disabled, glass, shadow, variant }), className)}\n horizontal={horizontal}\n padding={2}\n ref={ref}\n {...rest}\n >\n {items?.length > 0 &&\n items.map((item) => {\n const { icon, key, label, onClick, danger, loading, ...itemRest } = item;\n return (\n <ActionIcon\n danger={danger}\n icon={icon}\n key={key}\n loading={loading}\n size={size}\n title={label}\n tooltipProps={{\n placement: tooltipPlacement,\n }}\n onClick={(e) => {\n onActionClick?.({\n domEvent: e,\n key: String(key),\n keyPath: [String(key)],\n });\n onClick?.(e as any);\n }}\n {...actionIconProps}\n disabled={disabled || loading || itemRest?.disabled}\n />\n );\n })}\n {menu && (\n <DropdownMenu items={menuItems} nativeButton={false}>\n <ActionIcon\n disabled={disabled}\n icon={MoreHorizontal}\n key=\"more\"\n size={size}\n {...actionIconProps}\n tooltipProps={{\n placement: tooltipPlacement,\n ...actionIconProps?.tooltipProps,\n }}\n />\n </DropdownMenu>\n )}\n </Center>\n </TooltipGroup>\n );\n};\n\nActionIconGroup.displayName = 'ActionIconGroup';\n\nexport default ActionIconGroup;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,mBAA6C,EACjD,UAAU,UACV,UACA,QACA,OACA,iBACA,QAAQ,CAAC,GACT,aAAa,MACb,MACA,eACA,WACA,OAAO,SACP,KACA,GAAG,WACC;CACJ,MAAM,mBAAmB,cAChB,iBAAiB,cAAc,aAAa,aAAa,QAAQ,SACxE,CAAC,iBAAiB,UAAU,CAC9B;CAEA,MAAM,YAAY,cAAc;EAC9B,MAAM,WAAW,OAAO,SAAS,aAAa,KAAK,IAAI;EACvD,IAAI,CAAC,UAAU,OAAO,CAAC;EACvB,OAAO,SAAS,KAAK,UAAU;GAC7B,GAAI;GACJ,UAAU,SAAc;IACtB,MAAe,UAAU,IAAI;IAC7B,gBAAgB,IAAI;GACtB;EACF,EAAE;CACJ,GAAG,CAAC,MAAM,aAAa,CAAC;CAExB,OACE,oBAAC,cAAD,EAAA,UACE,qBAAC,QAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAU;GAAO;GAAQ;EAAQ,CAAC,GAAG,SAAS;EAC3D;EACZ,SAAS;EACJ;EACL,GAAI;EALN,UAAA,CAOG,OAAO,SAAS,KACf,MAAM,KAAK,SAAS;GAClB,MAAM,EAAE,MAAM,KAAK,OAAO,SAAS,QAAQ,SAAS,GAAG,aAAa;GACpE,OACE,oBAAC,YAAD;IACU;IACF;IAEG;IACH;IACN,OAAO;IACP,cAAc,EACZ,WAAW,iBACb;IACA,UAAU,MAAM;KACd,gBAAgB;MACd,UAAU;MACV,KAAK,OAAO,GAAG;MACf,SAAS,CAAC,OAAO,GAAG,CAAC;KACvB,CAAC;KACD,UAAU,CAAQ;IACpB;IACA,GAAI;IACJ,UAAU,YAAY,WAAW,UAAU;GAC5C,GAjBM,GAiBN;EAEL,CAAC,GACF,QACC,oBAAC,cAAD;GAAc,OAAO;GAAW,cAAc;GAC5C,UAAA,oBAAC,YAAD;IACY;IACV,MAAM;IAEA;IACN,GAAI;IACJ,cAAc;KACZ,WAAW;KACX,GAAG,iBAAiB;IACtB;GACD,GAPK,MAOL;EACW,CAAA,CAEV;CACI,CAAA,EAAA,CAAA;AAElB;AAEA,gBAAgB,cAAc"}
1
+ {"version":3,"file":"ActionIconGroup.mjs","names":[],"sources":["../../src/ActionIconGroup/ActionIconGroup.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { MoreHorizontal } from 'lucide-react';\nimport { type FC, useMemo } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport DropdownMenu from '@/DropdownMenu';\nimport { Center } from '@/Flex';\nimport { TooltipGroup } from '@/Tooltip';\n\nimport { variants } from './style';\nimport type { ActionIconGroupProps } from './type';\n\nconst ActionIconGroup: FC<ActionIconGroupProps> = ({\n variant = 'filled',\n disabled,\n shadow,\n glass,\n actionIconProps,\n items = [],\n horizontal = true,\n menu,\n onActionClick,\n className,\n size = 'small',\n ref,\n ...rest\n}) => {\n const tooltipPlacement = useMemo(\n () => (actionIconProps?.tooltipProps?.placement || horizontal ? 'top' : 'right'),\n [actionIconProps, horizontal],\n );\n\n const menuItems = useMemo(() => {\n const rawItems = typeof menu === 'function' ? menu() : menu;\n if (!rawItems) return [];\n return rawItems.map((item) => ({\n ...(item as any),\n onClick: (info: any) => {\n (item as any)?.onClick?.(info);\n onActionClick?.(info);\n },\n }));\n }, [menu, onActionClick]);\n\n return (\n <TooltipGroup>\n <Center\n className={cx(variants({ disabled, glass, shadow, variant }), className)}\n horizontal={horizontal}\n padding={2}\n ref={ref}\n {...rest}\n >\n {items?.length > 0 &&\n items.map((item) => {\n const { icon, key, label, onClick, danger, loading, ...itemRest } = item;\n return (\n <ActionIcon\n danger={danger}\n icon={icon}\n key={key}\n loading={loading}\n size={size}\n title={label}\n tooltipProps={{\n placement: tooltipPlacement,\n }}\n onClick={(e) => {\n onActionClick?.({\n domEvent: e,\n key: String(key),\n keyPath: [String(key)],\n });\n onClick?.(e as any);\n }}\n {...actionIconProps}\n disabled={disabled || loading || itemRest?.disabled}\n />\n );\n })}\n {menu && (\n <DropdownMenu items={menuItems} nativeButton={false}>\n <ActionIcon\n disabled={disabled}\n icon={MoreHorizontal}\n key=\"more\"\n size={size}\n {...actionIconProps}\n tooltipProps={{\n placement: tooltipPlacement,\n ...actionIconProps?.tooltipProps,\n }}\n />\n </DropdownMenu>\n )}\n </Center>\n </TooltipGroup>\n );\n};\n\nActionIconGroup.displayName = 'ActionIconGroup';\n\nexport default ActionIconGroup;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,mBAA6C,EACjD,UAAU,UACV,UACA,QACA,OACA,iBACA,QAAQ,CAAC,GACT,aAAa,MACb,MACA,eACA,WACA,OAAO,SACP,KACA,GAAG,WACC;CACJ,MAAM,mBAAmB,cAChB,iBAAiB,cAAc,aAAa,aAAa,QAAQ,SACxE,CAAC,iBAAiB,UAAU,CAC9B;CAEA,MAAM,YAAY,cAAc;EAC9B,MAAM,WAAW,OAAO,SAAS,aAAa,KAAK,IAAI;EACvD,IAAI,CAAC,UAAU,OAAO,CAAC;EACvB,OAAO,SAAS,KAAK,UAAU;GAC7B,GAAI;GACJ,UAAU,SAAc;IACtB,MAAe,UAAU,IAAI;IAC7B,gBAAgB,IAAI;GACtB;EACF,EAAE;CACJ,GAAG,CAAC,MAAM,aAAa,CAAC;CAExB,OACE,oBAAC,cAAD,EAAA,UACE,qBAAC,QAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAU;GAAO;GAAQ;EAAQ,CAAC,GAAG,SAAS;EAC3D;EACZ,SAAS;EACJ;EACL,GAAI;EALN,UAAA,CAOG,OAAO,SAAS,KACf,MAAM,KAAK,SAAS;GAClB,MAAM,EAAE,MAAM,KAAK,OAAO,SAAS,QAAQ,SAAS,GAAG,aAAa;GACpE,OACE,oBAAC,YAAD;IACU;IACF;IAEG;IACH;IACN,OAAO;IACP,cAAc,EACZ,WAAW,iBACb;IACA,UAAU,MAAM;KACd,gBAAgB;MACd,UAAU;MACV,KAAK,OAAO,GAAG;MACf,SAAS,CAAC,OAAO,GAAG,CAAC;KACvB,CAAC;KACD,UAAU,CAAQ;IACpB;IACA,GAAI;IACJ,UAAU,YAAY,WAAW,UAAU;GAC5C,GAjBM,GAiBN;EAEL,CAAC,GACF,QACC,oBAAC,cAAD;GAAc,OAAO;GAAW,cAAc;GAC5C,UAAA,oBAAC,YAAD;IACY;IACV,MAAM;IAEA;IACN,GAAI;IACJ,cAAc;KACZ,WAAW;KACX,GAAG,iBAAiB;IACtB;GACD,GAPK,MAOL;EACW,CAAA,CAEV;CACI,CAAA,EAAA,CAAA;AAElB;AAEA,gBAAgB,cAAc"}
@@ -1,7 +1,7 @@
1
1
  import { CenterProps } from "../Flex/type.mjs";
2
2
  import "../Flex/index.mjs";
3
- import { ActionIconProps } from "../ActionIcon/type.mjs";
4
- import "../ActionIcon/index.mjs";
3
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
4
+ import "../base-ui/ActionIcon/index.mjs";
5
5
  import { MenuInfo, MenuItemType } from "../Menu/type.mjs";
6
6
  import "../Menu/index.mjs";
7
7
  import { DropdownMenuProps } from "../base-ui/DropdownMenu/type.mjs";
@@ -3,7 +3,7 @@ import Accordion from "../Accordion/Accordion.mjs";
3
3
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
4
4
  import Icon from "../Icon/Icon.mjs";
5
5
  import AccordionItem from "../Accordion/AccordionItem.mjs";
6
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
6
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
7
7
  import { extraHeaderVariants, extraVariants, rootVariants } from "./style.mjs";
8
8
  import { memo } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.mjs","names":["Alert","AntdAlert","Flexbox"],"sources":["../../src/Alert/Alert.tsx"],"sourcesContent":["'use client';\n\nimport { Alert as AntdAlert } from 'antd';\nimport { cssVar, cx, useTheme } from 'antd-style';\nimport { camelCase } from 'es-toolkit/compat';\nimport { AlertTriangle, CheckCircle, Info, X, XCircle } from 'lucide-react';\nimport { memo } from 'react';\n\nimport { Accordion, AccordionItem } from '@/Accordion';\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport { extraHeaderVariants, extraVariants, rootVariants } from './style';\nimport type { AlertProps } from './type';\n\nconst typeIcons = {\n error: XCircle,\n info: Info,\n secondary: AlertTriangle,\n success: CheckCircle,\n warning: AlertTriangle,\n};\n\nconst colors = (theme: any, type: string = 'info', ...keys: string[]) => {\n if (type === 'secondary') return theme[camelCase(['color', ...keys].join('-'))] as string;\n return theme[camelCase(['color', type, ...keys].join('-'))] as string;\n};\n\nconst Alert = memo<AlertProps>(\n ({\n closable = false,\n description,\n showIcon = true,\n type = 'info',\n glass,\n icon,\n colorfulText = true,\n iconProps,\n style,\n extra,\n classNames,\n styles: customStyles,\n text,\n extraDefaultExpand = false,\n extraIsolate,\n banner,\n variant = 'filled',\n ref,\n ...rest\n }) => {\n const theme = useTheme();\n const hasTitle = !!description;\n const isClosable = !!closable;\n const isShowIcon = !!showIcon;\n\n const isInsideExtra = Boolean(!extraIsolate && !!extra);\n\n const alert = (\n <AntdAlert\n banner={banner}\n description={description}\n ref={ref}\n showIcon={showIcon}\n type={type === 'secondary' ? 'info' : type}\n className={cx(\n rootVariants({\n closable: isClosable,\n colorfulText,\n glass,\n hasExtra: isInsideExtra,\n hasTitle,\n showIcon: isShowIcon,\n variant,\n }),\n classNames?.alert,\n )}\n closable={\n typeof closable === 'boolean'\n ? closable\n : {\n closeIcon: <ActionIcon color={colors(theme, type)} icon={X} size={'small'} />,\n ...closable,\n }\n }\n icon={\n <Icon\n color={type === 'secondary' ? cssVar.colorTextSecondary : undefined}\n icon={icon || typeIcons[type]}\n size={description ? 24 : 18}\n {...iconProps}\n />\n }\n style={{\n background: colors(theme, type, 'fillTertiary'),\n borderColor: colors(theme, type, 'fillSecondary'),\n color: colorfulText ? colors(theme, type) : undefined,\n ...style,\n ...customStyles?.alert,\n }}\n {...rest}\n />\n );\n\n if (!extra) return alert;\n\n if (extraIsolate)\n return (\n <Flexbox className={classNames?.container} gap={8}>\n {alert}\n {extra}\n </Flexbox>\n );\n\n return (\n <Flexbox className={classNames?.container} style={customStyles?.container}>\n {alert}\n <Flexbox\n className={extraVariants({ banner, variant })}\n style={{\n background: colors(theme, type, 'fillTertiary'),\n borderColor: colors(theme, type, 'fillSecondary'),\n color: colors(theme, type),\n fontSize: description ? 14 : 12,\n }}\n >\n <Accordion defaultExpandedKeys={extraDefaultExpand ? ['extra'] : []}>\n <AccordionItem\n itemKey={'extra'}\n title={text?.detail || 'Show Details'}\n classNames={{\n content: classNames?.extraContent,\n header: extraHeaderVariants({ hasTitle, variant }),\n }}\n styles={{\n content: {\n fontSize: 12,\n ...customStyles?.extraContent,\n },\n header: {\n borderColor: colors(theme, type, 'fillSecondary'),\n },\n indicator: {\n color: colors(theme, type),\n },\n title: {\n color: colors(theme, type),\n fontSize: 12,\n },\n }}\n >\n {extra}\n </AccordionItem>\n </Accordion>\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n\nexport default Alert;\n"],"mappings":";;;;;;;;;;;;;;AAgBA,MAAM,YAAY;CAChB,OAAO;CACP,MAAM;CACN,WAAW;CACX,SAAS;CACT,SAAS;AACX;AAEA,MAAM,UAAU,OAAY,OAAe,QAAQ,GAAG,SAAmB;CACvE,IAAI,SAAS,aAAa,OAAO,MAAM,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;CAC7E,OAAO,MAAM,UAAU;EAAC;EAAS;EAAM,GAAG;CAAI,CAAC,CAAC,KAAK,GAAG,CAAC;AAC3D;AAEA,MAAMA,UAAQ,MACX,EACC,WAAW,OACX,aACA,WAAW,MACX,OAAO,QACP,OACA,MACA,eAAe,MACf,WACA,OACA,OACA,YACA,QAAQ,cACR,MACA,qBAAqB,OACrB,cACA,QACA,UAAU,UACV,KACA,GAAG,WACC;CACJ,MAAM,QAAQ,SAAS;CACvB,MAAM,WAAW,CAAC,CAAC;CAMnB,MAAM,QACJ,oBAACC,OAAD;EACU;EACK;EACR;EACK;EACV,MAAM,SAAS,cAAc,SAAS;EACtC,WAAW,GACT,aAAa;GACX,UAAU,CAdE,CAAC;GAeb;GACA;GACA,UAdc,QAAQ,CAAC,gBAAgB,CAAC,CAAC,KAcnB;GACtB;GACA,UAAU,CAlBE,CAAC;GAmBb;EACF,CAAC,GACD,YAAY,KACd;EACA,UACE,OAAO,aAAa,YAChB,WACA;GACE,WAAW,oBAAC,YAAD;IAAY,OAAO,OAAO,OAAO,IAAI;IAAG,MAAM;IAAG,MAAM;GAAU,CAAA;GAC5E,GAAG;EACL;EAEN,MACE,oBAAC,MAAD;GACE,OAAO,SAAS,cAAc,OAAO,qBAAqB,KAAA;GAC1D,MAAM,QAAQ,UAAU;GACxB,MAAM,cAAc,KAAK;GACzB,GAAI;EACL,CAAA;EAEH,OAAO;GACL,YAAY,OAAO,OAAO,MAAM,cAAc;GAC9C,aAAa,OAAO,OAAO,MAAM,eAAe;GAChD,OAAO,eAAe,OAAO,OAAO,IAAI,IAAI,KAAA;GAC5C,GAAG;GACH,GAAG,cAAc;EACnB;EACA,GAAI;CACL,CAAA;CAGH,IAAI,CAAC,OAAO,OAAO;CAEnB,IAAI,cACF,OACE,qBAACC,mBAAD;EAAS,WAAW,YAAY;EAAW,KAAK;EAAhD,UAAA,CACG,OACA,KACM;;CAGb,OACE,qBAACA,mBAAD;EAAS,WAAW,YAAY;EAAW,OAAO,cAAc;EAAhE,UAAA,CACG,OACD,oBAACA,mBAAD;GACE,WAAW,cAAc;IAAE;IAAQ;GAAQ,CAAC;GAC5C,OAAO;IACL,YAAY,OAAO,OAAO,MAAM,cAAc;IAC9C,aAAa,OAAO,OAAO,MAAM,eAAe;IAChD,OAAO,OAAO,OAAO,IAAI;IACzB,UAAU,cAAc,KAAK;GAC/B;GAEA,UAAA,oBAAC,WAAD;IAAW,qBAAqB,qBAAqB,CAAC,OAAO,IAAI,CAAC;IAChE,UAAA,oBAAC,eAAD;KACE,SAAS;KACT,OAAO,MAAM,UAAU;KACvB,YAAY;MACV,SAAS,YAAY;MACrB,QAAQ,oBAAoB;OAAE;OAAU;MAAQ,CAAC;KACnD;KACA,QAAQ;MACN,SAAS;OACP,UAAU;OACV,GAAG,cAAc;MACnB;MACA,QAAQ,EACN,aAAa,OAAO,OAAO,MAAM,eAAe,EAClD;MACA,WAAW,EACT,OAAO,OAAO,OAAO,IAAI,EAC3B;MACA,OAAO;OACL,OAAO,OAAO,OAAO,IAAI;OACzB,UAAU;MACZ;KACF;KAEC,UAAA;IACY,CAAA;GACN,CAAA;EACJ,CAAA,CACF;;AAEb,CACF;AAEA,QAAM,cAAc"}
1
+ {"version":3,"file":"Alert.mjs","names":["Alert","AntdAlert","Flexbox"],"sources":["../../src/Alert/Alert.tsx"],"sourcesContent":["'use client';\n\nimport { Alert as AntdAlert } from 'antd';\nimport { cssVar, cx, useTheme } from 'antd-style';\nimport { camelCase } from 'es-toolkit/compat';\nimport { AlertTriangle, CheckCircle, Info, X, XCircle } from 'lucide-react';\nimport { memo } from 'react';\n\nimport { Accordion, AccordionItem } from '@/Accordion';\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport { extraHeaderVariants, extraVariants, rootVariants } from './style';\nimport type { AlertProps } from './type';\n\nconst typeIcons = {\n error: XCircle,\n info: Info,\n secondary: AlertTriangle,\n success: CheckCircle,\n warning: AlertTriangle,\n};\n\nconst colors = (theme: any, type: string = 'info', ...keys: string[]) => {\n if (type === 'secondary') return theme[camelCase(['color', ...keys].join('-'))] as string;\n return theme[camelCase(['color', type, ...keys].join('-'))] as string;\n};\n\nconst Alert = memo<AlertProps>(\n ({\n closable = false,\n description,\n showIcon = true,\n type = 'info',\n glass,\n icon,\n colorfulText = true,\n iconProps,\n style,\n extra,\n classNames,\n styles: customStyles,\n text,\n extraDefaultExpand = false,\n extraIsolate,\n banner,\n variant = 'filled',\n ref,\n ...rest\n }) => {\n const theme = useTheme();\n const hasTitle = !!description;\n const isClosable = !!closable;\n const isShowIcon = !!showIcon;\n\n const isInsideExtra = Boolean(!extraIsolate && !!extra);\n\n const alert = (\n <AntdAlert\n banner={banner}\n description={description}\n ref={ref}\n showIcon={showIcon}\n type={type === 'secondary' ? 'info' : type}\n className={cx(\n rootVariants({\n closable: isClosable,\n colorfulText,\n glass,\n hasExtra: isInsideExtra,\n hasTitle,\n showIcon: isShowIcon,\n variant,\n }),\n classNames?.alert,\n )}\n closable={\n typeof closable === 'boolean'\n ? closable\n : {\n closeIcon: <ActionIcon color={colors(theme, type)} icon={X} size={'small'} />,\n ...closable,\n }\n }\n icon={\n <Icon\n color={type === 'secondary' ? cssVar.colorTextSecondary : undefined}\n icon={icon || typeIcons[type]}\n size={description ? 24 : 18}\n {...iconProps}\n />\n }\n style={{\n background: colors(theme, type, 'fillTertiary'),\n borderColor: colors(theme, type, 'fillSecondary'),\n color: colorfulText ? colors(theme, type) : undefined,\n ...style,\n ...customStyles?.alert,\n }}\n {...rest}\n />\n );\n\n if (!extra) return alert;\n\n if (extraIsolate)\n return (\n <Flexbox className={classNames?.container} gap={8}>\n {alert}\n {extra}\n </Flexbox>\n );\n\n return (\n <Flexbox className={classNames?.container} style={customStyles?.container}>\n {alert}\n <Flexbox\n className={extraVariants({ banner, variant })}\n style={{\n background: colors(theme, type, 'fillTertiary'),\n borderColor: colors(theme, type, 'fillSecondary'),\n color: colors(theme, type),\n fontSize: description ? 14 : 12,\n }}\n >\n <Accordion defaultExpandedKeys={extraDefaultExpand ? ['extra'] : []}>\n <AccordionItem\n itemKey={'extra'}\n title={text?.detail || 'Show Details'}\n classNames={{\n content: classNames?.extraContent,\n header: extraHeaderVariants({ hasTitle, variant }),\n }}\n styles={{\n content: {\n fontSize: 12,\n ...customStyles?.extraContent,\n },\n header: {\n borderColor: colors(theme, type, 'fillSecondary'),\n },\n indicator: {\n color: colors(theme, type),\n },\n title: {\n color: colors(theme, type),\n fontSize: 12,\n },\n }}\n >\n {extra}\n </AccordionItem>\n </Accordion>\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n\nexport default Alert;\n"],"mappings":";;;;;;;;;;;;;;AAgBA,MAAM,YAAY;CAChB,OAAO;CACP,MAAM;CACN,WAAW;CACX,SAAS;CACT,SAAS;AACX;AAEA,MAAM,UAAU,OAAY,OAAe,QAAQ,GAAG,SAAmB;CACvE,IAAI,SAAS,aAAa,OAAO,MAAM,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;CAC7E,OAAO,MAAM,UAAU;EAAC;EAAS;EAAM,GAAG;CAAI,CAAC,CAAC,KAAK,GAAG,CAAC;AAC3D;AAEA,MAAMA,UAAQ,MACX,EACC,WAAW,OACX,aACA,WAAW,MACX,OAAO,QACP,OACA,MACA,eAAe,MACf,WACA,OACA,OACA,YACA,QAAQ,cACR,MACA,qBAAqB,OACrB,cACA,QACA,UAAU,UACV,KACA,GAAG,WACC;CACJ,MAAM,QAAQ,SAAS;CACvB,MAAM,WAAW,CAAC,CAAC;CAMnB,MAAM,QACJ,oBAACC,OAAD;EACU;EACK;EACR;EACK;EACV,MAAM,SAAS,cAAc,SAAS;EACtC,WAAW,GACT,aAAa;GACX,UAAU,CAdE,CAAC;GAeb;GACA;GACA,UAdc,QAAQ,CAAC,gBAAgB,CAAC,CAAC,KAcnB;GACtB;GACA,UAAU,CAlBE,CAAC;GAmBb;EACF,CAAC,GACD,YAAY,KACd;EACA,UACE,OAAO,aAAa,YAChB,WACA;GACE,WAAW,oBAAC,YAAD;IAAY,OAAO,OAAO,OAAO,IAAI;IAAG,MAAM;IAAG,MAAM;GAAU,CAAA;GAC5E,GAAG;EACL;EAEN,MACE,oBAAC,MAAD;GACE,OAAO,SAAS,cAAc,OAAO,qBAAqB,KAAA;GAC1D,MAAM,QAAQ,UAAU;GACxB,MAAM,cAAc,KAAK;GACzB,GAAI;EACL,CAAA;EAEH,OAAO;GACL,YAAY,OAAO,OAAO,MAAM,cAAc;GAC9C,aAAa,OAAO,OAAO,MAAM,eAAe;GAChD,OAAO,eAAe,OAAO,OAAO,IAAI,IAAI,KAAA;GAC5C,GAAG;GACH,GAAG,cAAc;EACnB;EACA,GAAI;CACL,CAAA;CAGH,IAAI,CAAC,OAAO,OAAO;CAEnB,IAAI,cACF,OACE,qBAACC,mBAAD;EAAS,WAAW,YAAY;EAAW,KAAK;EAAhD,UAAA,CACG,OACA,KACM;;CAGb,OACE,qBAACA,mBAAD;EAAS,WAAW,YAAY;EAAW,OAAO,cAAc;EAAhE,UAAA,CACG,OACD,oBAACA,mBAAD;GACE,WAAW,cAAc;IAAE;IAAQ;GAAQ,CAAC;GAC5C,OAAO;IACL,YAAY,OAAO,OAAO,MAAM,cAAc;IAC9C,aAAa,OAAO,OAAO,MAAM,eAAe;IAChD,OAAO,OAAO,OAAO,IAAI;IACzB,UAAU,cAAc,KAAK;GAC/B;GAEA,UAAA,oBAAC,WAAD;IAAW,qBAAqB,qBAAqB,CAAC,OAAO,IAAI,CAAC;IAChE,UAAA,oBAAC,eAAD;KACE,SAAS;KACT,OAAO,MAAM,UAAU;KACvB,YAAY;MACV,SAAS,YAAY;MACrB,QAAQ,oBAAoB;OAAE;OAAU;MAAQ,CAAC;KACnD;KACA,QAAQ;MACN,SAAS;OACP,UAAU;OACV,GAAG,cAAc;MACnB;MACA,QAAQ,EACN,aAAa,OAAO,OAAO,MAAM,eAAe,EAClD;MACA,WAAW,EACT,OAAO,OAAO,OAAO,IAAI,EAC3B;MACA,OAAO;OACL,OAAO,OAAO,OAAO,IAAI;OACzB,UAAU;MACZ;KACF;KAEC,UAAA;IACY,CAAA;GACN,CAAA;EACJ,CAAA,CACF;;AAEb,CACF;AAEA,QAAM,cAAc"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import Center from "../Flex/Center.mjs";
3
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import { styles } from "./style.mjs";
5
5
  import { memo, useMemo } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"Burger.mjs","names":[],"sources":["../../src/Burger/Burger.tsx"],"sourcesContent":["'use client';\n\nimport { Drawer, Menu } from 'antd';\nimport { cx } from 'antd-style';\nimport { MenuIcon, X } from 'lucide-react';\nimport { memo, useMemo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Center } from '@/Flex';\n\nimport { styles } from './style';\nimport type { BurgerProps } from './type';\n\nconst Burger = memo<BurgerProps>(\n ({\n items,\n openKeys,\n selectedKeys,\n opened,\n setOpened,\n className,\n headerHeight = 64,\n onClick,\n iconProps,\n size,\n variant,\n rootClassName,\n fullscreen,\n drawerProps,\n ...rest\n }) => {\n // Convert props to CSS variables\n const cssVariables = useMemo<Record<string, string>>(() => {\n const vars: Record<string, string> = {\n '--burger-header-height': `${headerHeight}px`,\n };\n if (fullscreen) {\n vars['--burger-drawer-top'] = '0';\n vars['--burger-menu-padding-top'] = '0px';\n } else {\n vars['--burger-drawer-top'] = `calc(var(--burger-header-height, ${headerHeight}px) + 1px)`;\n vars['--burger-menu-padding-top'] = `${headerHeight}px`;\n }\n return vars;\n }, [fullscreen, headerHeight]);\n\n return (\n <Center\n className={cx(styles.container, className)}\n onClick={() => {\n setOpened(!opened);\n }}\n {...rest}\n >\n <ActionIcon icon={opened ? X : MenuIcon} size={size} variant={variant} {...iconProps} />\n <Drawer\n closeIcon={undefined}\n open={opened}\n placement={'left'}\n width={'100vw'}\n {...drawerProps}\n className={styles.drawer}\n rootClassName={cx(\n fullscreen ? styles.drawerRootFullscreen : styles.drawerRoot,\n rootClassName,\n )}\n rootStyle={{\n ...cssVariables,\n ...drawerProps?.rootStyle,\n }}\n styles={{\n body: { padding: 0 },\n header: { display: 'none' },\n }}\n >\n <Menu\n className={styles.menu}\n items={items}\n mode={'inline'}\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n style={cssVariables}\n onClick={onClick}\n />\n <div className={styles.fillRect} />\n </Drawer>\n </Center>\n );\n },\n);\n\nBurger.displayName = 'Burger';\n\nexport default Burger;\n"],"mappings":";;;;;;;;;;AAaA,MAAM,SAAS,MACZ,EACC,OACA,UACA,cACA,QACA,WACA,WACA,eAAe,IACf,SACA,WACA,MACA,SACA,eACA,YACA,aACA,GAAG,WACC;CAEJ,MAAM,eAAe,cAAsC;EACzD,MAAM,OAA+B,EACnC,0BAA0B,GAAG,aAAa,IAC5C;EACA,IAAI,YAAY;GACd,KAAK,yBAAyB;GAC9B,KAAK,+BAA+B;EACtC,OAAO;GACL,KAAK,yBAAyB,oCAAoC,aAAa;GAC/E,KAAK,+BAA+B,GAAG,aAAa;EACtD;EACA,OAAO;CACT,GAAG,CAAC,YAAY,YAAY,CAAC;CAE7B,OACE,qBAAC,QAAD;EACE,WAAW,GAAG,OAAO,WAAW,SAAS;EACzC,eAAe;GACb,UAAU,CAAC,MAAM;EACnB;EACA,GAAI;EALN,UAAA,CAOE,oBAAC,YAAD;GAAY,MAAM,SAAS,IAAI;GAAgB;GAAe;GAAS,GAAI;EAAY,CAAA,GACvF,qBAAC,QAAD;GACE,WAAW,KAAA;GACX,MAAM;GACN,WAAW;GACX,OAAO;GACP,GAAI;GACJ,WAAW,OAAO;GAClB,eAAe,GACb,aAAa,OAAO,uBAAuB,OAAO,YAClD,aACF;GACA,WAAW;IACT,GAAG;IACH,GAAG,aAAa;GAClB;GACA,QAAQ;IACN,MAAM,EAAE,SAAS,EAAE;IACnB,QAAQ,EAAE,SAAS,OAAO;GAC5B;GAlBF,UAAA,CAoBE,oBAAC,MAAD;IACE,WAAW,OAAO;IACX;IACP,MAAM;IACI;IACI;IACd,OAAO;IACE;GACV,CAAA,GACD,oBAAC,OAAD,EAAK,WAAW,OAAO,SAAW,CAAA,CAC5B;EACF,CAAA,CAAA;;AAEZ,CACF;AAEA,OAAO,cAAc"}
1
+ {"version":3,"file":"Burger.mjs","names":[],"sources":["../../src/Burger/Burger.tsx"],"sourcesContent":["'use client';\n\nimport { Drawer, Menu } from 'antd';\nimport { cx } from 'antd-style';\nimport { MenuIcon, X } from 'lucide-react';\nimport { memo, useMemo } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Center } from '@/Flex';\n\nimport { styles } from './style';\nimport type { BurgerProps } from './type';\n\nconst Burger = memo<BurgerProps>(\n ({\n items,\n openKeys,\n selectedKeys,\n opened,\n setOpened,\n className,\n headerHeight = 64,\n onClick,\n iconProps,\n size,\n variant,\n rootClassName,\n fullscreen,\n drawerProps,\n ...rest\n }) => {\n // Convert props to CSS variables\n const cssVariables = useMemo<Record<string, string>>(() => {\n const vars: Record<string, string> = {\n '--burger-header-height': `${headerHeight}px`,\n };\n if (fullscreen) {\n vars['--burger-drawer-top'] = '0';\n vars['--burger-menu-padding-top'] = '0px';\n } else {\n vars['--burger-drawer-top'] = `calc(var(--burger-header-height, ${headerHeight}px) + 1px)`;\n vars['--burger-menu-padding-top'] = `${headerHeight}px`;\n }\n return vars;\n }, [fullscreen, headerHeight]);\n\n return (\n <Center\n className={cx(styles.container, className)}\n onClick={() => {\n setOpened(!opened);\n }}\n {...rest}\n >\n <ActionIcon icon={opened ? X : MenuIcon} size={size} variant={variant} {...iconProps} />\n <Drawer\n closeIcon={undefined}\n open={opened}\n placement={'left'}\n width={'100vw'}\n {...drawerProps}\n className={styles.drawer}\n rootClassName={cx(\n fullscreen ? styles.drawerRootFullscreen : styles.drawerRoot,\n rootClassName,\n )}\n rootStyle={{\n ...cssVariables,\n ...drawerProps?.rootStyle,\n }}\n styles={{\n body: { padding: 0 },\n header: { display: 'none' },\n }}\n >\n <Menu\n className={styles.menu}\n items={items}\n mode={'inline'}\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n style={cssVariables}\n onClick={onClick}\n />\n <div className={styles.fillRect} />\n </Drawer>\n </Center>\n );\n },\n);\n\nBurger.displayName = 'Burger';\n\nexport default Burger;\n"],"mappings":";;;;;;;;;;AAaA,MAAM,SAAS,MACZ,EACC,OACA,UACA,cACA,QACA,WACA,WACA,eAAe,IACf,SACA,WACA,MACA,SACA,eACA,YACA,aACA,GAAG,WACC;CAEJ,MAAM,eAAe,cAAsC;EACzD,MAAM,OAA+B,EACnC,0BAA0B,GAAG,aAAa,IAC5C;EACA,IAAI,YAAY;GACd,KAAK,yBAAyB;GAC9B,KAAK,+BAA+B;EACtC,OAAO;GACL,KAAK,yBAAyB,oCAAoC,aAAa;GAC/E,KAAK,+BAA+B,GAAG,aAAa;EACtD;EACA,OAAO;CACT,GAAG,CAAC,YAAY,YAAY,CAAC;CAE7B,OACE,qBAAC,QAAD;EACE,WAAW,GAAG,OAAO,WAAW,SAAS;EACzC,eAAe;GACb,UAAU,CAAC,MAAM;EACnB;EACA,GAAI;EALN,UAAA,CAOE,oBAAC,YAAD;GAAY,MAAM,SAAS,IAAI;GAAgB;GAAe;GAAS,GAAI;EAAY,CAAA,GACvF,qBAAC,QAAD;GACE,WAAW,KAAA;GACX,MAAM;GACN,WAAW;GACX,OAAO;GACP,GAAI;GACJ,WAAW,OAAO;GAClB,eAAe,GACb,aAAa,OAAO,uBAAuB,OAAO,YAClD,aACF;GACA,WAAW;IACT,GAAG;IACH,GAAG,aAAa;GAClB;GACA,QAAQ;IACN,MAAM,EAAE,SAAS,EAAE;IACnB,QAAQ,EAAE,SAAS,OAAO;GAC5B;GAlBF,UAAA,CAoBE,oBAAC,MAAD;IACE,WAAW,OAAO;IACX;IACP,MAAM;IACI;IACI;IACd,OAAO;IACE;GACV,CAAA,GACD,oBAAC,OAAD,EAAK,WAAW,OAAO,SAAW,CAAA,CAC5B;EACF,CAAA,CAAA;;AAEZ,CACF;AAEA,OAAO,cAAc"}
@@ -1,5 +1,5 @@
1
- import { ActionIconProps } from "../ActionIcon/type.mjs";
2
- import "../ActionIcon/index.mjs";
1
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
2
+ import "../base-ui/ActionIcon/index.mjs";
3
3
  import { CSSProperties, Ref } from "react";
4
4
  import { DrawerProps, MenuProps } from "antd";
5
5
  //#region src/Burger/type.d.ts
@@ -2,7 +2,7 @@
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Text from "../Text/Text.mjs";
4
4
  import { stopPropagation } from "../utils/dom.mjs";
5
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
5
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import MaterialFileTypeIcon from "../MaterialFileTypeIcon/MaterialFileTypeIcon.mjs";
7
7
  import Tag from "../Tag/Tag.mjs";
8
8
  import { bodyVariants, headerVariants, prefix, styles, variants } from "./style.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"DiffPanel.mjs","names":["Flexbox"],"sources":["../../src/CodeDiff/DiffPanel.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { memo, useCallback, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport type { FlexboxProps } from '@/Flex';\nimport { Flexbox } from '@/Flex';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Tag from '@/Tag';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport { bodyVariants, headerVariants, prefix, styles, variants } from './style';\n\ninterface DiffPanelProps extends Omit<FlexboxProps, 'children'> {\n actions?: ReactNode;\n additions: number;\n body: ReactNode;\n classNames?: {\n body?: string;\n header?: string;\n };\n dataCodeType: string;\n defaultExpand?: boolean;\n deletions: number;\n displayName: string;\n fileName?: string;\n fullFeatured?: boolean;\n showHeader?: boolean;\n styles?: {\n body?: CSSProperties;\n header?: CSSProperties;\n };\n variant?: 'filled' | 'outlined' | 'borderless';\n}\n\nexport const DiffPanel = memo<DiffPanelProps>(\n ({\n actions,\n body,\n className,\n classNames,\n dataCodeType,\n defaultExpand = true,\n deletions,\n displayName,\n fileName,\n fullFeatured = true,\n showHeader = true,\n styles: customStyles,\n variant = 'filled',\n additions,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n if (!fullFeatured)\n return (\n <Flexbox\n className={cx(variants({ variant }), className)}\n data-code-type={dataCodeType}\n {...rest}\n >\n <Flexbox horizontal align=\"center\" className={styles.actionsCompact} flex=\"none\" gap={4}>\n {actions}\n </Flexbox>\n {showHeader && <Tag className={styles.lang}>{displayName}</Tag>}\n <div className={cx(styles.body, classNames?.body)} style={customStyles?.body}>\n {body}\n </div>\n </Flexbox>\n );\n\n return (\n <Flexbox\n className={cx(variants({ variant }), className)}\n data-code-type={dataCodeType}\n {...rest}\n >\n {showHeader && (\n <Flexbox\n horizontal\n align=\"center\"\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify=\"space-between\"\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <Flexbox\n horizontal\n align=\"center\"\n className=\"language-title\"\n flex={1}\n gap={4}\n justify=\"flex-start\"\n paddingInline={8}\n >\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={fileName || displayName}\n size={18}\n type=\"file\"\n variant=\"raw\"\n />\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n <Flexbox horizontal align=\"center\" flex=\"none\" gap={8} onClick={stopPropagation}>\n {actions && (\n <Flexbox\n horizontal\n align=\"center\"\n className={cx('panel-actions', `${prefix}-actions`, styles.actions)}\n flex=\"none\"\n gap={4}\n >\n {actions}\n </Flexbox>\n )}\n {(deletions > 0 || additions > 0) && (\n <Flexbox horizontal className={styles.stats} gap={8}>\n {deletions > 0 && <span className={styles.deletions}>-{deletions}</span>}\n {additions > 0 && <span className={styles.additions}>+{additions}</span>}\n </Flexbox>\n )}\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size=\"small\"\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n )}\n <div\n className={cx(bodyVariants({ expand }), `${prefix}-body`, styles.body, classNames?.body)}\n style={customStyles?.body}\n >\n {body}\n </div>\n </Flexbox>\n );\n },\n);\n\nDiffPanel.displayName = 'DiffPanel';\n"],"mappings":";;;;;;;;;;;;;AAuCA,MAAa,YAAY,MACtB,EACC,SACA,MACA,WACA,YACA,cACA,gBAAgB,MAChB,WACA,aACA,UACA,eAAe,MACf,aAAa,MACb,QAAQ,cACR,UAAU,UACV,WACA,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAElD,MAAM,qBAAqB,kBAAkB;EAC3C,WAAW,SAAS,CAAC,IAAI;CAC3B,GAAG,CAAC,CAAC;CAEL,IAAI,CAAC,cACH,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS;EAC9C,kBAAgB;EAChB,GAAI;EAHN,UAAA;GAKE,oBAACA,mBAAD;IAAS,YAAA;IAAW,OAAM;IAAS,WAAW,OAAO;IAAgB,MAAK;IAAO,KAAK;IACnF,UAAA;GACM,CAAA;GACR,cAAc,oBAAC,KAAD;IAAK,WAAW,OAAO;IAAO,UAAA;GAAiB,CAAA;GAC9D,oBAAC,OAAD;IAAK,WAAW,GAAG,OAAO,MAAM,YAAY,IAAI;IAAG,OAAO,cAAc;IACrE,UAAA;GACE,CAAA;EACE;;CAGb,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS;EAC9C,kBAAgB;EAChB,GAAI;EAHN,UAAA,CAKG,cACC,qBAACA,mBAAD;GACE,YAAA;GACA,OAAM;GACN,WAAW,GAAG,eAAe,EAAE,QAAQ,CAAC,GAAG,YAAY,MAAM;GAC7D,SAAQ;GACR,OAAO,cAAc;GACrB,SAAS;GANX,UAAA,CAQE,qBAACA,mBAAD;IACE,YAAA;IACA,OAAM;IACN,WAAU;IACV,MAAM;IACN,KAAK;IACL,SAAQ;IACR,eAAe;IAPjB,UAAA,CASE,oBAAC,sBAAD;KACE,qBAAqB;KACrB,UAAU,YAAY;KACtB,MAAM;KACN,MAAK;KACL,SAAQ;IACT,CAAA,GACD,oBAAC,MAAD;KAAM,UAAA;KAAS,UAAU;KACtB,UAAA;IACG,CAAA,CACC;GACT,CAAA,GAAA,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAM;IAAS,MAAK;IAAO,KAAK;IAAG,SAAS;IAAhE,UAAA;KACG,WACC,oBAACA,mBAAD;MACE,YAAA;MACA,OAAM;MACN,WAAW,GAAG,iBAAiB,0BAAqB,OAAO,OAAO;MAClE,MAAK;MACL,KAAK;MAEJ,UAAA;KACM,CAAA;MAET,YAAY,KAAK,YAAY,MAC7B,qBAACA,mBAAD;MAAS,YAAA;MAAW,WAAW,OAAO;MAAO,KAAK;MAAlD,UAAA,CACG,YAAY,KAAK,qBAAC,QAAD;OAAM,WAAW,OAAO;OAAxB,UAAA,CAAmC,KAAE,SAAgB;MACtE,CAAA,GAAA,YAAY,KAAK,qBAAC,QAAD;OAAM,WAAW,OAAO;OAAxB,UAAA,CAAmC,KAAE,SAAgB;MAChE,CAAA,CAAA;;KAEX,oBAAC,YAAD;MACE,MAAM,SAAS,cAAc;MAC7B,MAAK;MACL,SAAS;KACV,CAAA;IACM;GACF,CAAA,CAAA;EAEX,CAAA,GAAA,oBAAC,OAAD;GACE,WAAW,GAAG,aAAa,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,QAAQ,OAAO,MAAM,YAAY,IAAI;GACvF,OAAO,cAAc;GAEpB,UAAA;EACE,CAAA,CACE;;AAEb,CACF;AAEA,UAAU,cAAc"}
1
+ {"version":3,"file":"DiffPanel.mjs","names":["Flexbox"],"sources":["../../src/CodeDiff/DiffPanel.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { memo, useCallback, useState } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport type { FlexboxProps } from '@/Flex';\nimport { Flexbox } from '@/Flex';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Tag from '@/Tag';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport { bodyVariants, headerVariants, prefix, styles, variants } from './style';\n\ninterface DiffPanelProps extends Omit<FlexboxProps, 'children'> {\n actions?: ReactNode;\n additions: number;\n body: ReactNode;\n classNames?: {\n body?: string;\n header?: string;\n };\n dataCodeType: string;\n defaultExpand?: boolean;\n deletions: number;\n displayName: string;\n fileName?: string;\n fullFeatured?: boolean;\n showHeader?: boolean;\n styles?: {\n body?: CSSProperties;\n header?: CSSProperties;\n };\n variant?: 'filled' | 'outlined' | 'borderless';\n}\n\nexport const DiffPanel = memo<DiffPanelProps>(\n ({\n actions,\n body,\n className,\n classNames,\n dataCodeType,\n defaultExpand = true,\n deletions,\n displayName,\n fileName,\n fullFeatured = true,\n showHeader = true,\n styles: customStyles,\n variant = 'filled',\n additions,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n if (!fullFeatured)\n return (\n <Flexbox\n className={cx(variants({ variant }), className)}\n data-code-type={dataCodeType}\n {...rest}\n >\n <Flexbox horizontal align=\"center\" className={styles.actionsCompact} flex=\"none\" gap={4}>\n {actions}\n </Flexbox>\n {showHeader && <Tag className={styles.lang}>{displayName}</Tag>}\n <div className={cx(styles.body, classNames?.body)} style={customStyles?.body}>\n {body}\n </div>\n </Flexbox>\n );\n\n return (\n <Flexbox\n className={cx(variants({ variant }), className)}\n data-code-type={dataCodeType}\n {...rest}\n >\n {showHeader && (\n <Flexbox\n horizontal\n align=\"center\"\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify=\"space-between\"\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <Flexbox\n horizontal\n align=\"center\"\n className=\"language-title\"\n flex={1}\n gap={4}\n justify=\"flex-start\"\n paddingInline={8}\n >\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={fileName || displayName}\n size={18}\n type=\"file\"\n variant=\"raw\"\n />\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n <Flexbox horizontal align=\"center\" flex=\"none\" gap={8} onClick={stopPropagation}>\n {actions && (\n <Flexbox\n horizontal\n align=\"center\"\n className={cx('panel-actions', `${prefix}-actions`, styles.actions)}\n flex=\"none\"\n gap={4}\n >\n {actions}\n </Flexbox>\n )}\n {(deletions > 0 || additions > 0) && (\n <Flexbox horizontal className={styles.stats} gap={8}>\n {deletions > 0 && <span className={styles.deletions}>-{deletions}</span>}\n {additions > 0 && <span className={styles.additions}>+{additions}</span>}\n </Flexbox>\n )}\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size=\"small\"\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n )}\n <div\n className={cx(bodyVariants({ expand }), `${prefix}-body`, styles.body, classNames?.body)}\n style={customStyles?.body}\n >\n {body}\n </div>\n </Flexbox>\n );\n },\n);\n\nDiffPanel.displayName = 'DiffPanel';\n"],"mappings":";;;;;;;;;;;;;AAuCA,MAAa,YAAY,MACtB,EACC,SACA,MACA,WACA,YACA,cACA,gBAAgB,MAChB,WACA,aACA,UACA,eAAe,MACf,aAAa,MACb,QAAQ,cACR,UAAU,UACV,WACA,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAElD,MAAM,qBAAqB,kBAAkB;EAC3C,WAAW,SAAS,CAAC,IAAI;CAC3B,GAAG,CAAC,CAAC;CAEL,IAAI,CAAC,cACH,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS;EAC9C,kBAAgB;EAChB,GAAI;EAHN,UAAA;GAKE,oBAACA,mBAAD;IAAS,YAAA;IAAW,OAAM;IAAS,WAAW,OAAO;IAAgB,MAAK;IAAO,KAAK;IACnF,UAAA;GACM,CAAA;GACR,cAAc,oBAAC,KAAD;IAAK,WAAW,OAAO;IAAO,UAAA;GAAiB,CAAA;GAC9D,oBAAC,OAAD;IAAK,WAAW,GAAG,OAAO,MAAM,YAAY,IAAI;IAAG,OAAO,cAAc;IACrE,UAAA;GACE,CAAA;EACE;;CAGb,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS;EAC9C,kBAAgB;EAChB,GAAI;EAHN,UAAA,CAKG,cACC,qBAACA,mBAAD;GACE,YAAA;GACA,OAAM;GACN,WAAW,GAAG,eAAe,EAAE,QAAQ,CAAC,GAAG,YAAY,MAAM;GAC7D,SAAQ;GACR,OAAO,cAAc;GACrB,SAAS;GANX,UAAA,CAQE,qBAACA,mBAAD;IACE,YAAA;IACA,OAAM;IACN,WAAU;IACV,MAAM;IACN,KAAK;IACL,SAAQ;IACR,eAAe;IAPjB,UAAA,CASE,oBAAC,sBAAD;KACE,qBAAqB;KACrB,UAAU,YAAY;KACtB,MAAM;KACN,MAAK;KACL,SAAQ;IACT,CAAA,GACD,oBAAC,MAAD;KAAM,UAAA;KAAS,UAAU;KACtB,UAAA;IACG,CAAA,CACC;GACT,CAAA,GAAA,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAM;IAAS,MAAK;IAAO,KAAK;IAAG,SAAS;IAAhE,UAAA;KACG,WACC,oBAACA,mBAAD;MACE,YAAA;MACA,OAAM;MACN,WAAW,GAAG,iBAAiB,0BAAqB,OAAO,OAAO;MAClE,MAAK;MACL,KAAK;MAEJ,UAAA;KACM,CAAA;MAET,YAAY,KAAK,YAAY,MAC7B,qBAACA,mBAAD;MAAS,YAAA;MAAW,WAAW,OAAO;MAAO,KAAK;MAAlD,UAAA,CACG,YAAY,KAAK,qBAAC,QAAD;OAAM,WAAW,OAAO;OAAxB,UAAA,CAAmC,KAAE,SAAgB;MACtE,CAAA,GAAA,YAAY,KAAK,qBAAC,QAAD;OAAM,WAAW,OAAO;OAAxB,UAAA,CAAmC,KAAE,SAAgB;MAChE,CAAA,CAAA;;KAEX,oBAAC,YAAD;MACE,MAAM,SAAS,cAAc;MAC7B,MAAK;MACL,SAAS;KACV,CAAA;IACM;GACF,CAAA,CAAA;EAEX,CAAA,GAAA,oBAAC,OAAD;GACE,WAAW,GAAG,aAAa,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,QAAQ,OAAO,MAAM,YAAY,IAAI;GACvF,OAAO,cAAc;GAEpB,UAAA;EACE,CAAA,CACE;;AAEb,CACF;AAEA,UAAU,cAAc"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
2
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
3
3
  import { useCopied } from "../hooks/useCopied.mjs";
4
4
  import { copyToClipboard } from "../utils/copyToClipboard.mjs";
5
5
  import { memo } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.mjs","names":[],"sources":["../../src/CopyButton/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { memo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport { useCopied } from '@/hooks/useCopied';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport type { CopyButtonProps } from './type';\n\nconst CopyButton = memo<CopyButtonProps>(\n ({ active, content, size, icon, glass = true, onClick, ...rest }) => {\n const { copied, setCopied } = useCopied();\n const Icon = icon || Copy;\n\n return (\n <ActionIcon\n glass={glass}\n size={size}\n title={'Copy'}\n {...rest}\n active={active || copied}\n icon={copied ? Check : Icon}\n onClick={async (e) => {\n const resolvedContent = typeof content === 'function' ? content() : content;\n await copyToClipboard(resolvedContent);\n setCopied();\n onClick?.(e);\n }}\n />\n );\n },\n);\n\nCopyButton.displayName = 'CopyButton';\n\nexport default CopyButton;\n"],"mappings":";;;;;;;;AAWA,MAAM,aAAa,MAChB,EAAE,QAAQ,SAAS,MAAM,MAAM,QAAQ,MAAM,SAAS,GAAG,WAAW;CACnE,MAAM,EAAE,QAAQ,cAAc,UAAU;CACxC,MAAM,OAAO,QAAQ;CAErB,OACE,oBAAC,YAAD;EACS;EACD;EACN,OAAO;EACP,GAAI;EACJ,QAAQ,UAAU;EAClB,MAAM,SAAS,QAAQ;EACvB,SAAS,OAAO,MAAM;GACpB,MAAM,kBAAkB,OAAO,YAAY,aAAa,QAAQ,IAAI;GACpE,MAAM,gBAAgB,eAAe;GACrC,UAAU;GACV,UAAU,CAAC;EACb;CACD,CAAA;AAEL,CACF;AAEA,WAAW,cAAc"}
1
+ {"version":3,"file":"CopyButton.mjs","names":[],"sources":["../../src/CopyButton/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { memo } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { useCopied } from '@/hooks/useCopied';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport type { CopyButtonProps } from './type';\n\nconst CopyButton = memo<CopyButtonProps>(\n ({ active, content, size, icon, glass = true, onClick, ...rest }) => {\n const { copied, setCopied } = useCopied();\n const Icon = icon || Copy;\n\n return (\n <ActionIcon\n glass={glass}\n size={size}\n title={'Copy'}\n {...rest}\n active={active || copied}\n icon={copied ? Check : Icon}\n onClick={async (e) => {\n const resolvedContent = typeof content === 'function' ? content() : content;\n await copyToClipboard(resolvedContent);\n setCopied();\n onClick?.(e);\n }}\n />\n );\n },\n);\n\nCopyButton.displayName = 'CopyButton';\n\nexport default CopyButton;\n"],"mappings":";;;;;;;;AAWA,MAAM,aAAa,MAChB,EAAE,QAAQ,SAAS,MAAM,MAAM,QAAQ,MAAM,SAAS,GAAG,WAAW;CACnE,MAAM,EAAE,QAAQ,cAAc,UAAU;CACxC,MAAM,OAAO,QAAQ;CAErB,OACE,oBAAC,YAAD;EACS;EACD;EACN,OAAO;EACP,GAAI;EACJ,QAAQ,UAAU;EAClB,MAAM,SAAS,QAAQ;EACvB,SAAS,OAAO,MAAM;GACpB,MAAM,kBAAkB,OAAO,YAAY,aAAa,QAAQ,IAAI;GACpE,MAAM,gBAAgB,eAAe;GACrC,UAAU;GACV,UAAU,CAAC;EACb;CACD,CAAA;AAEL,CACF;AAEA,WAAW,cAAc"}
@@ -1,5 +1,5 @@
1
- import { ActionIconProps } from "../ActionIcon/type.mjs";
2
- import "../ActionIcon/index.mjs";
1
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
2
+ import "../base-ui/ActionIcon/index.mjs";
3
3
  //#region src/CopyButton/type.d.ts
4
4
  interface CopyButtonProps extends Omit<ActionIconProps, 'content'> {
5
5
  content: string | (() => string);
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
2
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
3
3
  import { downloadBlob } from "../utils/downloadBlob.mjs";
4
4
  import { memo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadButton.mjs","names":[],"sources":["../../src/DownloadButton/DownloadButton.tsx"],"sourcesContent":["'use client';\n\nimport { Download } from 'lucide-react';\nimport React, { memo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport { downloadBlob } from '@/utils/downloadBlob';\n\nimport type { DownloadButtonProps } from './type';\n\nconst DownloadButton = memo<DownloadButtonProps>(\n ({ fileName = 'download', fileType = 'svg', disabled = false, blobUrl, ...rest }) => {\n const handleDownload = async () => {\n if (!blobUrl || disabled) return;\n try {\n await downloadBlob(blobUrl, `${fileName.replace(/\\.[^./]+$/, '')}.${fileType}`);\n } catch (error) {\n console.error('Download failed:', error);\n }\n };\n return (\n <ActionIcon\n title={`Download ${fileType.toUpperCase()}`}\n {...rest}\n icon={Download}\n onClick={handleDownload}\n />\n );\n },\n);\n\nDownloadButton.displayName = 'DownloadButton';\n\nexport default DownloadButton;\n"],"mappings":";;;;;;;AAUA,MAAM,iBAAiB,MACpB,EAAE,WAAW,YAAY,WAAW,OAAO,WAAW,OAAO,SAAS,GAAG,WAAW;CACnF,MAAM,iBAAiB,YAAY;EACjC,IAAI,CAAC,WAAW,UAAU;EAC1B,IAAI;GACF,MAAM,aAAa,SAAS,GAAG,SAAS,QAAQ,aAAa,EAAE,EAAE,GAAG,UAAU;EAChF,SAAS,OAAO;GACd,QAAQ,MAAM,oBAAoB,KAAK;EACzC;CACF;CACA,OACE,oBAAC,YAAD;EACE,OAAO,YAAY,SAAS,YAAY;EACxC,GAAI;EACJ,MAAM;EACN,SAAS;CACV,CAAA;AAEL,CACF;AAEA,eAAe,cAAc"}
1
+ {"version":3,"file":"DownloadButton.mjs","names":[],"sources":["../../src/DownloadButton/DownloadButton.tsx"],"sourcesContent":["'use client';\n\nimport { Download } from 'lucide-react';\nimport React, { memo } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { downloadBlob } from '@/utils/downloadBlob';\n\nimport type { DownloadButtonProps } from './type';\n\nconst DownloadButton = memo<DownloadButtonProps>(\n ({ fileName = 'download', fileType = 'svg', disabled = false, blobUrl, ...rest }) => {\n const handleDownload = async () => {\n if (!blobUrl || disabled) return;\n try {\n await downloadBlob(blobUrl, `${fileName.replace(/\\.[^./]+$/, '')}.${fileType}`);\n } catch (error) {\n console.error('Download failed:', error);\n }\n };\n return (\n <ActionIcon\n title={`Download ${fileType.toUpperCase()}`}\n {...rest}\n icon={Download}\n onClick={handleDownload}\n />\n );\n },\n);\n\nDownloadButton.displayName = 'DownloadButton';\n\nexport default DownloadButton;\n"],"mappings":";;;;;;;AAUA,MAAM,iBAAiB,MACpB,EAAE,WAAW,YAAY,WAAW,OAAO,WAAW,OAAO,SAAS,GAAG,WAAW;CACnF,MAAM,iBAAiB,YAAY;EACjC,IAAI,CAAC,WAAW,UAAU;EAC1B,IAAI;GACF,MAAM,aAAa,SAAS,GAAG,SAAS,QAAQ,aAAa,EAAE,EAAE,GAAG,UAAU;EAChF,SAAS,OAAO;GACd,QAAQ,MAAM,oBAAoB,KAAK;EACzC;CACF;CACA,OACE,oBAAC,YAAD;EACE,OAAO,YAAY,SAAS,YAAY;EACxC,GAAI;EACJ,MAAM;EACN,SAAS;CACV,CAAA;AAEL,CACF;AAEA,eAAe,cAAc"}
@@ -1,5 +1,5 @@
1
- import { ActionIconProps } from "../ActionIcon/type.mjs";
2
- import "../ActionIcon/index.mjs";
1
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
2
+ import "../base-ui/ActionIcon/index.mjs";
3
3
  //#region src/DownloadButton/type.d.ts
4
4
  interface DownloadButtonProps extends ActionIconProps {
5
5
  blobUrl?: string;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../../Flex/FlexBasic.mjs";
3
- import ActionIcon from "../../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import { styles } from "./style.mjs";
5
5
  import { memo } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"DraggablePanelHeader.mjs","names":["useControlledState","Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelHeader.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { PanelLeft, Pin, PinOff } from 'lucide-react';\nimport { memo } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {\n pin?: boolean;\n position?: 'left' | 'right';\n setExpand?: (expand: boolean) => void;\n setPin?: (pin: boolean) => void;\n title?: string;\n}\n\nconst DraggablePanelHeader = memo<DraggablePanelHeaderProps>((props) => {\n const { pin, setPin, className, setExpand, title, position = 'left', ...rest } = props;\n\n const [isPinned, setIsPinned] = useControlledState(false, {\n onChange: setPin,\n value: pin,\n });\n\n const panelIcon = (\n <ActionIcon icon={PanelLeft} size={'small'} onClick={() => setExpand?.(false)} />\n );\n const pinIcon = (\n <ActionIcon\n active={pin}\n icon={pin ? Pin : PinOff}\n size={'small'}\n onClick={() => setIsPinned(!isPinned)}\n />\n );\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(styles.header, className)}\n flex={'none'}\n gap={8}\n justify={'space-between'}\n {...rest}\n >\n {position === 'left' ? panelIcon : pinIcon}\n {title}\n {position === 'left' ? pinIcon : panelIcon}\n </Flexbox>\n );\n});\n\nDraggablePanelHeader.displayName = 'DraggablePanelHeader';\n\nexport default DraggablePanelHeader;\n"],"mappings":";;;;;;;;;;AAqBA,MAAM,uBAAuB,MAAiC,UAAU;CACtE,MAAM,EAAE,KAAK,QAAQ,WAAW,WAAW,OAAO,WAAW,QAAQ,GAAG,SAAS;CAEjF,MAAM,CAAC,UAAU,eAAeA,cAAmB,OAAO;EACxD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,YACJ,oBAAC,YAAD;EAAY,MAAM;EAAW,MAAM;EAAS,eAAe,YAAY,KAAK;CAAI,CAAA;CAElF,MAAM,UACJ,oBAAC,YAAD;EACE,QAAQ;EACR,MAAM,MAAM,MAAM;EAClB,MAAM;EACN,eAAe,YAAY,CAAC,QAAQ;CACrC,CAAA;CAEH,OACE,qBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,SAAS;EACtC,MAAM;EACN,KAAK;EACL,SAAS;EACT,GAAI;EAPN,UAAA;GASG,aAAa,SAAS,YAAY;GAClC;GACA,aAAa,SAAS,UAAU;EAC1B;;AAEb,CAAC;AAED,qBAAqB,cAAc"}
1
+ {"version":3,"file":"DraggablePanelHeader.mjs","names":["useControlledState","Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelHeader.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { PanelLeft, Pin, PinOff } from 'lucide-react';\nimport { memo } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {\n pin?: boolean;\n position?: 'left' | 'right';\n setExpand?: (expand: boolean) => void;\n setPin?: (pin: boolean) => void;\n title?: string;\n}\n\nconst DraggablePanelHeader = memo<DraggablePanelHeaderProps>((props) => {\n const { pin, setPin, className, setExpand, title, position = 'left', ...rest } = props;\n\n const [isPinned, setIsPinned] = useControlledState(false, {\n onChange: setPin,\n value: pin,\n });\n\n const panelIcon = (\n <ActionIcon icon={PanelLeft} size={'small'} onClick={() => setExpand?.(false)} />\n );\n const pinIcon = (\n <ActionIcon\n active={pin}\n icon={pin ? Pin : PinOff}\n size={'small'}\n onClick={() => setIsPinned(!isPinned)}\n />\n );\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(styles.header, className)}\n flex={'none'}\n gap={8}\n justify={'space-between'}\n {...rest}\n >\n {position === 'left' ? panelIcon : pinIcon}\n {title}\n {position === 'left' ? pinIcon : panelIcon}\n </Flexbox>\n );\n});\n\nDraggablePanelHeader.displayName = 'DraggablePanelHeader';\n\nexport default DraggablePanelHeader;\n"],"mappings":";;;;;;;;;;AAqBA,MAAM,uBAAuB,MAAiC,UAAU;CACtE,MAAM,EAAE,KAAK,QAAQ,WAAW,WAAW,OAAO,WAAW,QAAQ,GAAG,SAAS;CAEjF,MAAM,CAAC,UAAU,eAAeA,cAAmB,OAAO;EACxD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,YACJ,oBAAC,YAAD;EAAY,MAAM;EAAW,MAAM;EAAS,eAAe,YAAY,KAAK;CAAI,CAAA;CAElF,MAAM,UACJ,oBAAC,YAAD;EACE,QAAQ;EACR,MAAM,MAAM,MAAM;EAClB,MAAM;EACN,eAAe,YAAY,CAAC,QAAQ;CACrC,CAAA;CAEH,OACE,qBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,SAAS;EACtC,MAAM;EACN,KAAK;EACL,SAAS;EACT,GAAI;EAPN,UAAA;GASG,aAAa,SAAS,YAAY;GAClC;GACA,aAAa,SAAS,UAAU;EAC1B;;AAEb,CAAC;AAED,qBAAqB,cAAc"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import { memo, useMemo } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { Drawer } from "antd";
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.mjs","names":["Drawer","Flexbox","AntdDrawer"],"sources":["../../src/Drawer/Drawer.tsx"],"sourcesContent":["'use client';\n\nimport { Drawer as AntdDrawer } from 'antd';\nimport { cssVar } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { type CSSProperties, memo, useMemo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\n\nimport type { DrawerProps } from './type';\n\nconst Drawer = memo<DrawerProps>(\n ({\n onClose,\n containerMaxWidth = 1024,\n classNames,\n title,\n placement,\n styles,\n children,\n height,\n width,\n extra,\n closeIconProps,\n noHeader,\n sidebarWidth = 280,\n sidebar,\n closeIcon,\n ref,\n ...rest\n }) => {\n const headerBorder: CSSProperties = useMemo(() => {\n if (height === '100%' || width === '100%' || height === '100vh' || width === '100vw')\n return {};\n\n switch (placement) {\n case 'top': {\n return {\n borderBottom: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'bottom': {\n return {\n borderTop: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'left': {\n return {\n borderRight: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'right': {\n return {\n borderLeft: `1px solid ${cssVar.colorBorder}`,\n };\n }\n default: {\n return {};\n }\n }\n }, [placement, height, width]);\n\n const extraNode = (\n <Flexbox\n horizontal\n align={'center'}\n className={classNames?.extra}\n gap={4}\n justify={'flex-end'}\n style={{\n position: 'absolute',\n right: 4,\n top: 4,\n ...styles?.extra,\n }}\n >\n {extra}\n {closeIcon || <ActionIcon icon={XIcon} onClick={onClose} {...closeIconProps} />}\n </Flexbox>\n );\n\n const sidebarContent = (\n <>\n <Flexbox\n className={classNames?.sidebar}\n paddingBlock={12}\n paddingInline={16}\n width={sidebarWidth}\n style={{\n background: cssVar.colorBgLayout,\n borderRight: `1px solid ${cssVar.colorBorderSecondary}`,\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'sticky',\n top: 0,\n ...styles?.sidebar,\n }}\n >\n {sidebar}\n </Flexbox>\n <Flexbox\n className={classNames?.sidebarContent}\n flex={1}\n paddingBlock={12}\n paddingInline={16}\n style={{\n background: cssVar.colorBgContainer,\n overflowX: 'hidden',\n overflowY: 'auto',\n ...styles?.sidebarContent,\n }}\n >\n {children}\n </Flexbox>\n </>\n );\n\n return (\n <AntdDrawer\n classNames={classNames}\n closable={false}\n extra={noHeader ? undefined : extraNode}\n height={height}\n keyboard={true}\n panelRef={ref}\n placement={placement}\n width={width}\n styles={\n typeof styles === 'function'\n ? styles\n : {\n ...styles,\n body: {\n background: 'transparent',\n paddingBlock: sidebar ? 0 : 12,\n paddingInline: sidebar ? 0 : 16,\n ...styles?.body,\n },\n header: {\n background: 'transparent',\n display: noHeader ? 'none' : undefined,\n padding: 4,\n ...styles?.header,\n },\n section: {\n background: sidebar\n ? `linear-gradient(to right, ${cssVar.colorBgLayout} 49.9%, ${cssVar.colorBgContainer} 50%)`\n : cssVar.colorBgContainer,\n ...styles?.section,\n },\n wrapper: {\n background: cssVar.colorBgContainer,\n ...headerBorder,\n ...styles?.wrapper,\n },\n }\n }\n title={\n <Flexbox\n horizontal\n align={'center'}\n className={classNames?.title}\n justify={'flex-start'}\n paddingBlock={8}\n paddingInline={16}\n style={{\n justifySelf: 'center',\n maxWidth: containerMaxWidth,\n width: '100%',\n ...styles?.title,\n }}\n >\n {title}\n </Flexbox>\n }\n onClose={onClose}\n {...rest}\n >\n <Flexbox\n className={classNames?.bodyContent}\n horizontal={!!sidebar}\n style={{\n justifySelf: 'center',\n maxWidth: containerMaxWidth,\n minHeight: '100%',\n overflow: sidebar ? 'visible' : undefined,\n width: '100%',\n ...styles?.bodyContent,\n }}\n >\n {noHeader && extraNode}\n {sidebar ? sidebarContent : children}\n </Flexbox>\n </AntdDrawer>\n );\n },\n);\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,WAAS,MACZ,EACC,SACA,oBAAoB,MACpB,YACA,OACA,WACA,QACA,UACA,QACA,OACA,OACA,gBACA,UACA,eAAe,KACf,SACA,WACA,KACA,GAAG,WACC;CACJ,MAAM,eAA8B,cAAc;EAChD,IAAI,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,UAAU,SAC3E,OAAO,CAAC;EAEV,QAAQ,WAAR;GACE,KAAK,OACH,OAAO,EACL,cAAc,aAAa,OAAO,cACpC;GAEF,KAAK,UACH,OAAO,EACL,WAAW,aAAa,OAAO,cACjC;GAEF,KAAK,QACH,OAAO,EACL,aAAa,aAAa,OAAO,cACnC;GAEF,KAAK,SACH,OAAO,EACL,YAAY,aAAa,OAAO,cAClC;GAEF,SACE,OAAO,CAAC;EAEZ;CACF,GAAG;EAAC;EAAW;EAAQ;CAAK,CAAC;CAE7B,MAAM,YACJ,qBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,YAAY;EACvB,KAAK;EACL,SAAS;EACT,OAAO;GACL,UAAU;GACV,OAAO;GACP,KAAK;GACL,GAAG,QAAQ;EACb;EAXF,UAAA,CAaG,OACA,aAAa,oBAAC,YAAD;GAAY,MAAM;GAAO,SAAS;GAAS,GAAI;EAAiB,CAAA,CACvE;;CAGX,MAAM,iBACJ,qBAAA,YAAA,EAAA,UAAA,CACE,oBAACA,mBAAD;EACE,WAAW,YAAY;EACvB,cAAc;EACd,eAAe;EACf,OAAO;EACP,OAAO;GACL,YAAY,OAAO;GACnB,aAAa,aAAa,OAAO;GACjC,QAAQ;GACR,WAAW;GACX,WAAW;GACX,UAAU;GACV,KAAK;GACL,GAAG,QAAQ;EACb;EAEC,UAAA;CACM,CAAA,GACT,oBAACA,mBAAD;EACE,WAAW,YAAY;EACvB,MAAM;EACN,cAAc;EACd,eAAe;EACf,OAAO;GACL,YAAY,OAAO;GACnB,WAAW;GACX,WAAW;GACX,GAAG,QAAQ;EACb;EAEC;CACM,CAAA,CACT,EAAA,CAAA;CAGJ,OACE,oBAACC,QAAD;EACc;EACZ,UAAU;EACV,OAAO,WAAW,KAAA,IAAY;EACtB;EACR,UAAU;EACV,UAAU;EACC;EACJ;EACP,QACE,OAAO,WAAW,aACd,SACA;GACE,GAAG;GACH,MAAM;IACJ,YAAY;IACZ,cAAc,UAAU,IAAI;IAC5B,eAAe,UAAU,IAAI;IAC7B,GAAG,QAAQ;GACb;GACA,QAAQ;IACN,YAAY;IACZ,SAAS,WAAW,SAAS,KAAA;IAC7B,SAAS;IACT,GAAG,QAAQ;GACb;GACA,SAAS;IACP,YAAY,UACR,6BAA6B,OAAO,cAAc,UAAU,OAAO,iBAAiB,SACpF,OAAO;IACX,GAAG,QAAQ;GACb;GACA,SAAS;IACP,YAAY,OAAO;IACnB,GAAG;IACH,GAAG,QAAQ;GACb;EACF;EAEN,OACE,oBAACD,mBAAD;GACE,YAAA;GACA,OAAO;GACP,WAAW,YAAY;GACvB,SAAS;GACT,cAAc;GACd,eAAe;GACf,OAAO;IACL,aAAa;IACb,UAAU;IACV,OAAO;IACP,GAAG,QAAQ;GACb;GAEC,UAAA;EACM,CAAA;EAEF;EACT,GAAI;EAEJ,UAAA,qBAACA,mBAAD;GACE,WAAW,YAAY;GACvB,YAAY,CAAC,CAAC;GACd,OAAO;IACL,aAAa;IACb,UAAU;IACV,WAAW;IACX,UAAU,UAAU,YAAY,KAAA;IAChC,OAAO;IACP,GAAG,QAAQ;GACb;GAVF,UAAA,CAYG,YAAY,WACZ,UAAU,iBAAiB,QACrB;;CACC,CAAA;AAEhB,CACF;AAEA,SAAO,cAAc"}
1
+ {"version":3,"file":"Drawer.mjs","names":["Drawer","Flexbox","AntdDrawer"],"sources":["../../src/Drawer/Drawer.tsx"],"sourcesContent":["'use client';\n\nimport { Drawer as AntdDrawer } from 'antd';\nimport { cssVar } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { type CSSProperties, memo, useMemo } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\n\nimport type { DrawerProps } from './type';\n\nconst Drawer = memo<DrawerProps>(\n ({\n onClose,\n containerMaxWidth = 1024,\n classNames,\n title,\n placement,\n styles,\n children,\n height,\n width,\n extra,\n closeIconProps,\n noHeader,\n sidebarWidth = 280,\n sidebar,\n closeIcon,\n ref,\n ...rest\n }) => {\n const headerBorder: CSSProperties = useMemo(() => {\n if (height === '100%' || width === '100%' || height === '100vh' || width === '100vw')\n return {};\n\n switch (placement) {\n case 'top': {\n return {\n borderBottom: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'bottom': {\n return {\n borderTop: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'left': {\n return {\n borderRight: `1px solid ${cssVar.colorBorder}`,\n };\n }\n case 'right': {\n return {\n borderLeft: `1px solid ${cssVar.colorBorder}`,\n };\n }\n default: {\n return {};\n }\n }\n }, [placement, height, width]);\n\n const extraNode = (\n <Flexbox\n horizontal\n align={'center'}\n className={classNames?.extra}\n gap={4}\n justify={'flex-end'}\n style={{\n position: 'absolute',\n right: 4,\n top: 4,\n ...styles?.extra,\n }}\n >\n {extra}\n {closeIcon || <ActionIcon icon={XIcon} onClick={onClose} {...closeIconProps} />}\n </Flexbox>\n );\n\n const sidebarContent = (\n <>\n <Flexbox\n className={classNames?.sidebar}\n paddingBlock={12}\n paddingInline={16}\n width={sidebarWidth}\n style={{\n background: cssVar.colorBgLayout,\n borderRight: `1px solid ${cssVar.colorBorderSecondary}`,\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n position: 'sticky',\n top: 0,\n ...styles?.sidebar,\n }}\n >\n {sidebar}\n </Flexbox>\n <Flexbox\n className={classNames?.sidebarContent}\n flex={1}\n paddingBlock={12}\n paddingInline={16}\n style={{\n background: cssVar.colorBgContainer,\n overflowX: 'hidden',\n overflowY: 'auto',\n ...styles?.sidebarContent,\n }}\n >\n {children}\n </Flexbox>\n </>\n );\n\n return (\n <AntdDrawer\n classNames={classNames}\n closable={false}\n extra={noHeader ? undefined : extraNode}\n height={height}\n keyboard={true}\n panelRef={ref}\n placement={placement}\n width={width}\n styles={\n typeof styles === 'function'\n ? styles\n : {\n ...styles,\n body: {\n background: 'transparent',\n paddingBlock: sidebar ? 0 : 12,\n paddingInline: sidebar ? 0 : 16,\n ...styles?.body,\n },\n header: {\n background: 'transparent',\n display: noHeader ? 'none' : undefined,\n padding: 4,\n ...styles?.header,\n },\n section: {\n background: sidebar\n ? `linear-gradient(to right, ${cssVar.colorBgLayout} 49.9%, ${cssVar.colorBgContainer} 50%)`\n : cssVar.colorBgContainer,\n ...styles?.section,\n },\n wrapper: {\n background: cssVar.colorBgContainer,\n ...headerBorder,\n ...styles?.wrapper,\n },\n }\n }\n title={\n <Flexbox\n horizontal\n align={'center'}\n className={classNames?.title}\n justify={'flex-start'}\n paddingBlock={8}\n paddingInline={16}\n style={{\n justifySelf: 'center',\n maxWidth: containerMaxWidth,\n width: '100%',\n ...styles?.title,\n }}\n >\n {title}\n </Flexbox>\n }\n onClose={onClose}\n {...rest}\n >\n <Flexbox\n className={classNames?.bodyContent}\n horizontal={!!sidebar}\n style={{\n justifySelf: 'center',\n maxWidth: containerMaxWidth,\n minHeight: '100%',\n overflow: sidebar ? 'visible' : undefined,\n width: '100%',\n ...styles?.bodyContent,\n }}\n >\n {noHeader && extraNode}\n {sidebar ? sidebarContent : children}\n </Flexbox>\n </AntdDrawer>\n );\n },\n);\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,WAAS,MACZ,EACC,SACA,oBAAoB,MACpB,YACA,OACA,WACA,QACA,UACA,QACA,OACA,OACA,gBACA,UACA,eAAe,KACf,SACA,WACA,KACA,GAAG,WACC;CACJ,MAAM,eAA8B,cAAc;EAChD,IAAI,WAAW,UAAU,UAAU,UAAU,WAAW,WAAW,UAAU,SAC3E,OAAO,CAAC;EAEV,QAAQ,WAAR;GACE,KAAK,OACH,OAAO,EACL,cAAc,aAAa,OAAO,cACpC;GAEF,KAAK,UACH,OAAO,EACL,WAAW,aAAa,OAAO,cACjC;GAEF,KAAK,QACH,OAAO,EACL,aAAa,aAAa,OAAO,cACnC;GAEF,KAAK,SACH,OAAO,EACL,YAAY,aAAa,OAAO,cAClC;GAEF,SACE,OAAO,CAAC;EAEZ;CACF,GAAG;EAAC;EAAW;EAAQ;CAAK,CAAC;CAE7B,MAAM,YACJ,qBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,YAAY;EACvB,KAAK;EACL,SAAS;EACT,OAAO;GACL,UAAU;GACV,OAAO;GACP,KAAK;GACL,GAAG,QAAQ;EACb;EAXF,UAAA,CAaG,OACA,aAAa,oBAAC,YAAD;GAAY,MAAM;GAAO,SAAS;GAAS,GAAI;EAAiB,CAAA,CACvE;;CAGX,MAAM,iBACJ,qBAAA,YAAA,EAAA,UAAA,CACE,oBAACA,mBAAD;EACE,WAAW,YAAY;EACvB,cAAc;EACd,eAAe;EACf,OAAO;EACP,OAAO;GACL,YAAY,OAAO;GACnB,aAAa,aAAa,OAAO;GACjC,QAAQ;GACR,WAAW;GACX,WAAW;GACX,UAAU;GACV,KAAK;GACL,GAAG,QAAQ;EACb;EAEC,UAAA;CACM,CAAA,GACT,oBAACA,mBAAD;EACE,WAAW,YAAY;EACvB,MAAM;EACN,cAAc;EACd,eAAe;EACf,OAAO;GACL,YAAY,OAAO;GACnB,WAAW;GACX,WAAW;GACX,GAAG,QAAQ;EACb;EAEC;CACM,CAAA,CACT,EAAA,CAAA;CAGJ,OACE,oBAACC,QAAD;EACc;EACZ,UAAU;EACV,OAAO,WAAW,KAAA,IAAY;EACtB;EACR,UAAU;EACV,UAAU;EACC;EACJ;EACP,QACE,OAAO,WAAW,aACd,SACA;GACE,GAAG;GACH,MAAM;IACJ,YAAY;IACZ,cAAc,UAAU,IAAI;IAC5B,eAAe,UAAU,IAAI;IAC7B,GAAG,QAAQ;GACb;GACA,QAAQ;IACN,YAAY;IACZ,SAAS,WAAW,SAAS,KAAA;IAC7B,SAAS;IACT,GAAG,QAAQ;GACb;GACA,SAAS;IACP,YAAY,UACR,6BAA6B,OAAO,cAAc,UAAU,OAAO,iBAAiB,SACpF,OAAO;IACX,GAAG,QAAQ;GACb;GACA,SAAS;IACP,YAAY,OAAO;IACnB,GAAG;IACH,GAAG,QAAQ;GACb;EACF;EAEN,OACE,oBAACD,mBAAD;GACE,YAAA;GACA,OAAO;GACP,WAAW,YAAY;GACvB,SAAS;GACT,cAAc;GACd,eAAe;GACf,OAAO;IACL,aAAa;IACb,UAAU;IACV,OAAO;IACP,GAAG,QAAQ;GACb;GAEC,UAAA;EACM,CAAA;EAEF;EACT,GAAI;EAEJ,UAAA,qBAACA,mBAAD;GACE,WAAW,YAAY;GACvB,YAAY,CAAC,CAAC;GACd,OAAO;IACL,aAAa;IACb,UAAU;IACV,WAAW;IACX,UAAU,UAAU,YAAY,KAAA;IAChC,OAAO;IACP,GAAG,QAAQ;GACb;GAVF,UAAA,CAYG,YAAY,WACZ,UAAU,iBAAiB,QACrB;;CACC,CAAA;AAEhB,CACF;AAEA,SAAO,cAAc"}
@@ -1,5 +1,5 @@
1
- import { ActionIconProps } from "../ActionIcon/type.mjs";
2
- import "../ActionIcon/index.mjs";
1
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
2
+ import "../base-ui/ActionIcon/index.mjs";
3
3
  import { CSSProperties, ReactNode, Ref } from "react";
4
4
  import { DrawerProps } from "antd";
5
5
  //#region src/Drawer/type.d.ts
@@ -1,5 +1,5 @@
1
- import { ActionIconProps } from "../ActionIcon/type.mjs";
2
- import "../ActionIcon/index.mjs";
1
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
2
+ import "../base-ui/ActionIcon/index.mjs";
3
3
  import { InputProps } from "../Input/type.mjs";
4
4
  import "../Input/index.mjs";
5
5
  //#region src/EditableText/ControlInput.d.ts
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import Input from "../Input/Input.mjs";
5
5
  import { memo, useEffect, useRef, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"ControlInput.mjs","names":["Flexbox"],"sources":["../../src/EditableText/ControlInput.tsx"],"sourcesContent":["'use client';\n\nimport type { InputRef } from 'antd';\nimport { RotateCcw, Save } from 'lucide-react';\nimport { memo, useEffect, useRef, useState } from 'react';\n\nimport ActionIcon, { type ActionIconProps } from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Input, { type InputProps } from '@/Input';\n\nexport interface ControlInputProps extends Omit<InputProps, 'onChange' | 'value' | 'onAbort'> {\n onChange?: (value: string) => void;\n onChangeEnd?: (value: string) => void;\n onValueChanging?: (value: string) => void;\n submitIcon?: ActionIconProps['icon'];\n texts?: {\n reset?: string;\n submit?: string;\n };\n value?: string;\n}\n\nconst ControlInput = memo<ControlInputProps>(\n ({\n value,\n onChange,\n onValueChanging,\n onChangeEnd,\n onCompositionEnd,\n onCompositionStart,\n onPressEnter,\n onFocus,\n submitIcon,\n style,\n texts,\n ...rest\n }) => {\n const ref = useRef<InputRef>(null);\n const [input, setInput] = useState<string>(value || '');\n\n const isChineseInput = useRef(false);\n\n useEffect(() => {\n if (value !== undefined) setInput(value);\n }, [value]);\n\n const handleUpload = () => {\n onChange?.(input);\n ref?.current?.blur();\n onChangeEnd?.(input);\n };\n\n return (\n <Input\n autoFocus\n ref={ref}\n value={input}\n style={{\n width: '100%',\n ...style,\n }}\n suffix={\n value === input ? (\n <span />\n ) : (\n <Flexbox\n horizontal\n gap={2}\n style={{\n marginRight: -4,\n zIndex: 1,\n }}\n >\n <ActionIcon\n icon={RotateCcw}\n size=\"small\"\n title={texts?.reset || 'Reset'}\n onClick={(e) => {\n e.preventDefault();\n setInput(value || '');\n }}\n />\n <ActionIcon\n icon={submitIcon || Save}\n size=\"small\"\n title={texts?.submit || 'Submit'}\n variant={'filled'}\n onClick={(e) => {\n e.preventDefault();\n handleUpload();\n }}\n />\n </Flexbox>\n )\n }\n onFocus={onFocus}\n onChange={(e) => {\n setInput(e.target.value);\n onValueChanging?.(e.target.value);\n }}\n onCompositionEnd={(e) => {\n isChineseInput.current = false;\n onCompositionEnd?.(e);\n }}\n onCompositionStart={(e) => {\n isChineseInput.current = true;\n onCompositionStart?.(e);\n }}\n onPressEnter={(e) => {\n if (!e.shiftKey && !isChineseInput.current) {\n e.preventDefault();\n handleUpload();\n onPressEnter?.(e);\n }\n }}\n {...rest}\n />\n );\n },\n);\n\nControlInput.displayName = 'ControlInput';\n\nexport default ControlInput;\n"],"mappings":";;;;;;;;AAsBA,MAAM,eAAe,MAClB,EACC,OACA,UACA,iBACA,aACA,kBACA,oBACA,cACA,SACA,YACA,OACA,OACA,GAAG,WACC;CACJ,MAAM,MAAM,OAAiB,IAAI;CACjC,MAAM,CAAC,OAAO,YAAY,SAAiB,SAAS,EAAE;CAEtD,MAAM,iBAAiB,OAAO,KAAK;CAEnC,gBAAgB;EACd,IAAI,UAAU,KAAA,GAAW,SAAS,KAAK;CACzC,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,qBAAqB;EACzB,WAAW,KAAK;EAChB,KAAK,SAAS,KAAK;EACnB,cAAc,KAAK;CACrB;CAEA,OACE,oBAAC,OAAD;EACE,WAAA;EACK;EACL,OAAO;EACP,OAAO;GACL,OAAO;GACP,GAAG;EACL;EACA,QACE,UAAU,QACR,oBAAC,QAAD,CAAO,CAAA,IAEP,qBAACA,mBAAD;GACE,YAAA;GACA,KAAK;GACL,OAAO;IACL,aAAa;IACb,QAAQ;GACV;GANF,UAAA,CAQE,oBAAC,YAAD;IACE,MAAM;IACN,MAAK;IACL,OAAO,OAAO,SAAS;IACvB,UAAU,MAAM;KACd,EAAE,eAAe;KACjB,SAAS,SAAS,EAAE;IACtB;GACD,CAAA,GACD,oBAAC,YAAD;IACE,MAAM,cAAc;IACpB,MAAK;IACL,OAAO,OAAO,UAAU;IACxB,SAAS;IACT,UAAU,MAAM;KACd,EAAE,eAAe;KACjB,aAAa;IACf;GACD,CAAA,CACM;;EAGJ;EACT,WAAW,MAAM;GACf,SAAS,EAAE,OAAO,KAAK;GACvB,kBAAkB,EAAE,OAAO,KAAK;EAClC;EACA,mBAAmB,MAAM;GACvB,eAAe,UAAU;GACzB,mBAAmB,CAAC;EACtB;EACA,qBAAqB,MAAM;GACzB,eAAe,UAAU;GACzB,qBAAqB,CAAC;EACxB;EACA,eAAe,MAAM;GACnB,IAAI,CAAC,EAAE,YAAY,CAAC,eAAe,SAAS;IAC1C,EAAE,eAAe;IACjB,aAAa;IACb,eAAe,CAAC;GAClB;EACF;EACA,GAAI;CACL,CAAA;AAEL,CACF;AAEA,aAAa,cAAc"}
1
+ {"version":3,"file":"ControlInput.mjs","names":["Flexbox"],"sources":["../../src/EditableText/ControlInput.tsx"],"sourcesContent":["'use client';\n\nimport type { InputRef } from 'antd';\nimport { RotateCcw, Save } from 'lucide-react';\nimport { memo, useEffect, useRef, useState } from 'react';\n\nimport ActionIcon, { type ActionIconProps } from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Input, { type InputProps } from '@/Input';\n\nexport interface ControlInputProps extends Omit<InputProps, 'onChange' | 'value' | 'onAbort'> {\n onChange?: (value: string) => void;\n onChangeEnd?: (value: string) => void;\n onValueChanging?: (value: string) => void;\n submitIcon?: ActionIconProps['icon'];\n texts?: {\n reset?: string;\n submit?: string;\n };\n value?: string;\n}\n\nconst ControlInput = memo<ControlInputProps>(\n ({\n value,\n onChange,\n onValueChanging,\n onChangeEnd,\n onCompositionEnd,\n onCompositionStart,\n onPressEnter,\n onFocus,\n submitIcon,\n style,\n texts,\n ...rest\n }) => {\n const ref = useRef<InputRef>(null);\n const [input, setInput] = useState<string>(value || '');\n\n const isChineseInput = useRef(false);\n\n useEffect(() => {\n if (value !== undefined) setInput(value);\n }, [value]);\n\n const handleUpload = () => {\n onChange?.(input);\n ref?.current?.blur();\n onChangeEnd?.(input);\n };\n\n return (\n <Input\n autoFocus\n ref={ref}\n value={input}\n style={{\n width: '100%',\n ...style,\n }}\n suffix={\n value === input ? (\n <span />\n ) : (\n <Flexbox\n horizontal\n gap={2}\n style={{\n marginRight: -4,\n zIndex: 1,\n }}\n >\n <ActionIcon\n icon={RotateCcw}\n size=\"small\"\n title={texts?.reset || 'Reset'}\n onClick={(e) => {\n e.preventDefault();\n setInput(value || '');\n }}\n />\n <ActionIcon\n icon={submitIcon || Save}\n size=\"small\"\n title={texts?.submit || 'Submit'}\n variant={'filled'}\n onClick={(e) => {\n e.preventDefault();\n handleUpload();\n }}\n />\n </Flexbox>\n )\n }\n onFocus={onFocus}\n onChange={(e) => {\n setInput(e.target.value);\n onValueChanging?.(e.target.value);\n }}\n onCompositionEnd={(e) => {\n isChineseInput.current = false;\n onCompositionEnd?.(e);\n }}\n onCompositionStart={(e) => {\n isChineseInput.current = true;\n onCompositionStart?.(e);\n }}\n onPressEnter={(e) => {\n if (!e.shiftKey && !isChineseInput.current) {\n e.preventDefault();\n handleUpload();\n onPressEnter?.(e);\n }\n }}\n {...rest}\n />\n );\n },\n);\n\nControlInput.displayName = 'ControlInput';\n\nexport default ControlInput;\n"],"mappings":";;;;;;;;AAsBA,MAAM,eAAe,MAClB,EACC,OACA,UACA,iBACA,aACA,kBACA,oBACA,cACA,SACA,YACA,OACA,OACA,GAAG,WACC;CACJ,MAAM,MAAM,OAAiB,IAAI;CACjC,MAAM,CAAC,OAAO,YAAY,SAAiB,SAAS,EAAE;CAEtD,MAAM,iBAAiB,OAAO,KAAK;CAEnC,gBAAgB;EACd,IAAI,UAAU,KAAA,GAAW,SAAS,KAAK;CACzC,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,qBAAqB;EACzB,WAAW,KAAK;EAChB,KAAK,SAAS,KAAK;EACnB,cAAc,KAAK;CACrB;CAEA,OACE,oBAAC,OAAD;EACE,WAAA;EACK;EACL,OAAO;EACP,OAAO;GACL,OAAO;GACP,GAAG;EACL;EACA,QACE,UAAU,QACR,oBAAC,QAAD,CAAO,CAAA,IAEP,qBAACA,mBAAD;GACE,YAAA;GACA,KAAK;GACL,OAAO;IACL,aAAa;IACb,QAAQ;GACV;GANF,UAAA,CAQE,oBAAC,YAAD;IACE,MAAM;IACN,MAAK;IACL,OAAO,OAAO,SAAS;IACvB,UAAU,MAAM;KACd,EAAE,eAAe;KACjB,SAAS,SAAS,EAAE;IACtB;GACD,CAAA,GACD,oBAAC,YAAD;IACE,MAAM,cAAc;IACpB,MAAK;IACL,OAAO,OAAO,UAAU;IACxB,SAAS;IACT,UAAU,MAAM;KACd,EAAE,eAAe;KACjB,aAAa;IACf;GACD,CAAA,CACM;;EAGJ;EACT,WAAW,MAAM;GACf,SAAS,EAAE,OAAO,KAAK;GACvB,kBAAkB,EAAE,OAAO,KAAK;EAClC;EACA,mBAAmB,MAAM;GACvB,eAAe,UAAU;GACzB,mBAAmB,CAAC;EACtB;EACA,qBAAqB,MAAM;GACzB,eAAe,UAAU;GACzB,qBAAqB,CAAC;EACxB;EACA,eAAe,MAAM;GACnB,IAAI,CAAC,EAAE,YAAY,CAAC,eAAe,SAAS;IAC1C,EAAE,eAAe;IACjB,aAAa;IACb,eAAe,CAAC;GAClB;EACF;EACA,GAAI;CACL,CAAA;AAEL,CACF;AAEA,aAAa,cAAc"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import ControlInput from "./ControlInput.mjs";
5
5
  import { memo, useMemo } from "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"EditableText.mjs","names":["useControlledState","Flexbox"],"sources":["../../src/EditableText/EditableText.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { Edit3 } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\n\nimport ControlInput from './ControlInput';\nimport type { EditableTextProps } from './type';\n\nconst EditableText = memo<EditableTextProps>(\n ({\n value,\n showEditIcon = true,\n onChange,\n editing,\n onEditingChange,\n onChangeEnd,\n onFocus,\n onBlur,\n className,\n inputProps,\n onValueChanging,\n gap = 8,\n style,\n size = 'small',\n styles,\n classNames,\n variant = 'borderless',\n ...rest\n }) => {\n const [edited, setEdited] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n useHotkeys(\n 'esc',\n () => {\n setEdited(false);\n },\n {\n enableOnFormTags: true,\n enabled: edited,\n preventDefault: true,\n },\n );\n\n const height = useMemo(() => {\n if (!size) return 32;\n switch (size) {\n case 'large': {\n return 40;\n }\n case 'middle': {\n return 32;\n }\n case 'small': {\n return 24;\n }\n }\n }, [size]);\n\n const input = (\n <ControlInput\n className={cx(className, classNames?.input)}\n size={size}\n value={value as string}\n variant={variant}\n style={{\n height,\n ...style,\n ...styles?.input,\n }}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onValueChanging={onValueChanging}\n onChangeEnd={(v) => {\n onChangeEnd?.(v);\n setEdited(false);\n }}\n {...inputProps}\n />\n );\n\n const content = (\n <>\n <span>{value}</span>\n {showEditIcon && (\n <ActionIcon\n icon={Edit3}\n size=\"small\"\n title={'Edit'}\n onClick={() => {\n setEdited(!edited);\n }}\n />\n )}\n </>\n );\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(className, classNames?.container)}\n gap={gap}\n style={{\n height,\n width: '100%',\n ...style,\n ...styles?.container,\n }}\n {...rest}\n >\n {edited ? input : content}\n </Flexbox>\n );\n },\n);\n\nEditableText.displayName = 'EditableText';\n\nexport default EditableText;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,eAAe,MAClB,EACC,OACA,eAAe,MACf,UACA,SACA,iBACA,aACA,SACA,QACA,WACA,YACA,iBACA,MAAM,GACN,OACA,OAAO,SACP,QACA,YACA,UAAU,cACV,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAaA,cAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,WACE,aACM;EACJ,UAAU,KAAK;CACjB,GACA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CACF;CAEA,MAAM,SAAS,cAAc;EAC3B,IAAI,CAAC,MAAM,OAAO;EAClB,QAAQ,MAAR;GACE,KAAK,SACH,OAAO;GAET,KAAK,UACH,OAAO;GAET,KAAK,SACH,OAAO;EAEX;CACF,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,QACJ,oBAAC,cAAD;EACE,WAAW,GAAG,WAAW,YAAY,KAAK;EACpC;EACC;EACE;EACT,OAAO;GACL;GACA,GAAG;GACH,GAAG,QAAQ;EACb;EACQ;EACE;EACD;EACQ;EACjB,cAAc,MAAM;GAClB,cAAc,CAAC;GACf,UAAU,KAAK;EACjB;EACA,GAAI;CACL,CAAA;CAGH,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,GAClB,gBACC,oBAAC,YAAD;EACE,MAAM;EACN,MAAK;EACL,OAAO;EACP,eAAe;GACb,UAAU,CAAC,MAAM;EACnB;CACD,CAAA,CAEH,EAAA,CAAA;CAGJ,OACE,oBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,WAAW,YAAY,SAAS;EACzC;EACL,OAAO;GACL;GACA,OAAO;GACP,GAAG;GACH,GAAG,QAAQ;EACb;EACA,GAAI;EAEH,UAAA,SAAS,QAAQ;CACX,CAAA;AAEb,CACF;AAEA,aAAa,cAAc"}
1
+ {"version":3,"file":"EditableText.mjs","names":["useControlledState","Flexbox"],"sources":["../../src/EditableText/EditableText.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { Edit3 } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\n\nimport ControlInput from './ControlInput';\nimport type { EditableTextProps } from './type';\n\nconst EditableText = memo<EditableTextProps>(\n ({\n value,\n showEditIcon = true,\n onChange,\n editing,\n onEditingChange,\n onChangeEnd,\n onFocus,\n onBlur,\n className,\n inputProps,\n onValueChanging,\n gap = 8,\n style,\n size = 'small',\n styles,\n classNames,\n variant = 'borderless',\n ...rest\n }) => {\n const [edited, setEdited] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n useHotkeys(\n 'esc',\n () => {\n setEdited(false);\n },\n {\n enableOnFormTags: true,\n enabled: edited,\n preventDefault: true,\n },\n );\n\n const height = useMemo(() => {\n if (!size) return 32;\n switch (size) {\n case 'large': {\n return 40;\n }\n case 'middle': {\n return 32;\n }\n case 'small': {\n return 24;\n }\n }\n }, [size]);\n\n const input = (\n <ControlInput\n className={cx(className, classNames?.input)}\n size={size}\n value={value as string}\n variant={variant}\n style={{\n height,\n ...style,\n ...styles?.input,\n }}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onValueChanging={onValueChanging}\n onChangeEnd={(v) => {\n onChangeEnd?.(v);\n setEdited(false);\n }}\n {...inputProps}\n />\n );\n\n const content = (\n <>\n <span>{value}</span>\n {showEditIcon && (\n <ActionIcon\n icon={Edit3}\n size=\"small\"\n title={'Edit'}\n onClick={() => {\n setEdited(!edited);\n }}\n />\n )}\n </>\n );\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(className, classNames?.container)}\n gap={gap}\n style={{\n height,\n width: '100%',\n ...style,\n ...styles?.container,\n }}\n {...rest}\n >\n {edited ? input : content}\n </Flexbox>\n );\n },\n);\n\nEditableText.displayName = 'EditableText';\n\nexport default EditableText;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,eAAe,MAClB,EACC,OACA,eAAe,MACf,UACA,SACA,iBACA,aACA,SACA,QACA,WACA,YACA,iBACA,MAAM,GACN,OACA,OAAO,SACP,QACA,YACA,UAAU,cACV,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAaA,cAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,WACE,aACM;EACJ,UAAU,KAAK;CACjB,GACA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CACF;CAEA,MAAM,SAAS,cAAc;EAC3B,IAAI,CAAC,MAAM,OAAO;EAClB,QAAQ,MAAR;GACE,KAAK,SACH,OAAO;GAET,KAAK,UACH,OAAO;GAET,KAAK,SACH,OAAO;EAEX;CACF,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,QACJ,oBAAC,cAAD;EACE,WAAW,GAAG,WAAW,YAAY,KAAK;EACpC;EACC;EACE;EACT,OAAO;GACL;GACA,GAAG;GACH,GAAG,QAAQ;EACb;EACQ;EACE;EACD;EACQ;EACjB,cAAc,MAAM;GAClB,cAAc,CAAC;GACf,UAAU,KAAK;EACjB;EACA,GAAI;CACL,CAAA;CAGH,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,GAClB,gBACC,oBAAC,YAAD;EACE,MAAM;EACN,MAAK;EACL,OAAO;EACP,eAAe;GACb,UAAU,CAAC,MAAM;EACnB;CACD,CAAA,CAEH,EAAA,CAAA;CAGJ,OACE,oBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,WAAW,YAAY,SAAS;EACzC;EACL,OAAO;GACL;GACA,OAAO;GACP,GAAG;GACH,GAAG,QAAQ;EACb;EACA,GAAI;EAEH,UAAA,SAAS,QAAQ;CACX,CAAA;AAEb,CACF;AAEA,aAAa,cAAc"}
@@ -2,7 +2,7 @@
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Icon from "../Icon/Icon.mjs";
4
4
  import { Tooltip } from "../base-ui/Tooltip/Tooltip.mjs";
5
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
5
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import Avatar from "../Avatar/index.mjs";
7
7
  import { useTranslation } from "../i18n/useTranslation.mjs";
8
8
  import emojiPicker_default from "../i18n/resources/en/emojiPicker.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN, toc } from '@lobehub/icons';\nimport { cx, useTheme } from 'antd-style';\nimport chroma from 'chroma-js';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport useSWR from 'swr';\nimport useMergeState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport Avatar from '@/Avatar';\nimport { Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport Tabs, { type TabsProps } from '@/Tabs';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useMergeState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const { data: i18n } = useSWR(\n locale,\n async () =>\n await import(/* @vite-ignore */ `@emoji-mart/data/i18n/${locale.split('-')[0]}.json`),\n { revalidateOnFocus: false, revalidateOnMount: false },\n );\n\n const [ava, setAva] = useMergeState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n className={cx(styles.picker, popupClassName)}\n ref={ref}\n style={{\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n }}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n className={styles.tabs}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n compact\n activeKey={tab}\n items={items}\n size={'small'}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={data}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className={cx(styles.popover)}\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: styles.popover,\n root: styles.positioner,\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={cx(styles.root, className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN, toc } from '@lobehub/icons';\nimport { cx, useTheme } from 'antd-style';\nimport chroma from 'chroma-js';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport useSWR from 'swr';\nimport useMergeState from 'use-merge-value';\n\nimport Avatar from '@/Avatar';\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport Tabs, { type TabsProps } from '@/Tabs';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useMergeState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const { data: i18n } = useSWR(\n locale,\n async () =>\n await import(/* @vite-ignore */ `@emoji-mart/data/i18n/${locale.split('-')[0]}.json`),\n { revalidateOnFocus: false, revalidateOnMount: false },\n );\n\n const [ava, setAva] = useMergeState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n className={cx(styles.picker, popupClassName)}\n ref={ref}\n style={{\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n }}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n className={styles.tabs}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n compact\n activeKey={tab}\n items={items}\n size={'small'}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={data}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className={cx(styles.popover)}\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: styles.popover,\n root: styles.positioner,\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={cx(styles.root, className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
3
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
4
4
  import Img from "../Img/index.mjs";
5
5
  import { styles, variants } from "./style.mjs";
6
6
  import { memo, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"GuideCard.mjs","names":["Flexbox"],"sources":["../../src/GuideCard/GuideCard.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useThemeMode } from 'antd-style';\nimport { X } from 'lucide-react';\nimport { memo, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Img from '@/Img';\n\nimport { styles, variants } from './style';\nimport type { GuideCardProps } from './type';\n\nconst GuideCard = memo<GuideCardProps>(\n ({\n cover,\n onClose,\n shadow,\n closable = true,\n afterClose,\n alt,\n className,\n title,\n desc,\n width,\n styles: customStyles,\n height,\n coverProps,\n variant = 'filled',\n closeIconProps,\n classNames,\n ref,\n ...rest\n }) => {\n const [show, setShow] = useState(true);\n const { isDarkMode } = useThemeMode();\n\n if (!show) return null;\n\n return (\n <Flexbox\n className={cx(variants({ isDarkMode, shadow, variant }), className)}\n ref={ref}\n {...rest}\n >\n {closable && (\n <ActionIcon\n size={'small'}\n {...closeIconProps}\n className={cx(styles.close, closeIconProps?.className)}\n icon={X}\n onClick={(e) => {\n setShow(false);\n onClose?.(e);\n afterClose?.();\n }}\n />\n )}\n {cover && (\n <Img\n alt={alt}\n className={cx(styles.cover, classNames?.cover)}\n height={height}\n src={cover}\n style={customStyles?.cover}\n width={width}\n {...coverProps}\n />\n )}\n <Flexbox\n className={cx(styles.content, classNames?.content)}\n gap={8}\n style={customStyles?.content}\n >\n {title && <div className={styles.title}>{title}</div>}\n {desc && <div className={styles.desc}>{desc}</div>}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nGuideCard.displayName = 'GuideCard';\n\nexport default GuideCard;\n"],"mappings":";;;;;;;;;;AAaA,MAAM,YAAY,MACf,EACC,OACA,SACA,QACA,WAAW,MACX,YACA,KACA,WACA,OACA,MACA,OACA,QAAQ,cACR,QACA,YACA,UAAU,UACV,gBACA,YACA,KACA,GAAG,WACC;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,IAAI;CACrC,MAAM,EAAE,eAAe,aAAa;CAEpC,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAY;GAAQ;EAAQ,CAAC,GAAG,SAAS;EAC7D;EACL,GAAI;EAHN,UAAA;GAKG,YACC,oBAAC,YAAD;IACE,MAAM;IACN,GAAI;IACJ,WAAW,GAAG,OAAO,OAAO,gBAAgB,SAAS;IACrD,MAAM;IACN,UAAU,MAAM;KACd,QAAQ,KAAK;KACb,UAAU,CAAC;KACX,aAAa;IACf;GACD,CAAA;GAEF,SACC,oBAAC,KAAD;IACO;IACL,WAAW,GAAG,OAAO,OAAO,YAAY,KAAK;IACrC;IACR,KAAK;IACL,OAAO,cAAc;IACd;IACP,GAAI;GACL,CAAA;GAEH,qBAACA,mBAAD;IACE,WAAW,GAAG,OAAO,SAAS,YAAY,OAAO;IACjD,KAAK;IACL,OAAO,cAAc;IAHvB,UAAA,CAKG,SAAS,oBAAC,OAAD;KAAK,WAAW,OAAO;KAAQ,UAAA;IAAW,CAAA,GACnD,QAAQ,oBAAC,OAAD;KAAK,WAAW,OAAO;KAAO,UAAA;IAAU,CAAA,CAC1C;;EACF;;AAEb,CACF;AAEA,UAAU,cAAc"}
1
+ {"version":3,"file":"GuideCard.mjs","names":["Flexbox"],"sources":["../../src/GuideCard/GuideCard.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useThemeMode } from 'antd-style';\nimport { X } from 'lucide-react';\nimport { memo, useState } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport Img from '@/Img';\n\nimport { styles, variants } from './style';\nimport type { GuideCardProps } from './type';\n\nconst GuideCard = memo<GuideCardProps>(\n ({\n cover,\n onClose,\n shadow,\n closable = true,\n afterClose,\n alt,\n className,\n title,\n desc,\n width,\n styles: customStyles,\n height,\n coverProps,\n variant = 'filled',\n closeIconProps,\n classNames,\n ref,\n ...rest\n }) => {\n const [show, setShow] = useState(true);\n const { isDarkMode } = useThemeMode();\n\n if (!show) return null;\n\n return (\n <Flexbox\n className={cx(variants({ isDarkMode, shadow, variant }), className)}\n ref={ref}\n {...rest}\n >\n {closable && (\n <ActionIcon\n size={'small'}\n {...closeIconProps}\n className={cx(styles.close, closeIconProps?.className)}\n icon={X}\n onClick={(e) => {\n setShow(false);\n onClose?.(e);\n afterClose?.();\n }}\n />\n )}\n {cover && (\n <Img\n alt={alt}\n className={cx(styles.cover, classNames?.cover)}\n height={height}\n src={cover}\n style={customStyles?.cover}\n width={width}\n {...coverProps}\n />\n )}\n <Flexbox\n className={cx(styles.content, classNames?.content)}\n gap={8}\n style={customStyles?.content}\n >\n {title && <div className={styles.title}>{title}</div>}\n {desc && <div className={styles.desc}>{desc}</div>}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nGuideCard.displayName = 'GuideCard';\n\nexport default GuideCard;\n"],"mappings":";;;;;;;;;;AAaA,MAAM,YAAY,MACf,EACC,OACA,SACA,QACA,WAAW,MACX,YACA,KACA,WACA,OACA,MACA,OACA,QAAQ,cACR,QACA,YACA,UAAU,UACV,gBACA,YACA,KACA,GAAG,WACC;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,IAAI;CACrC,MAAM,EAAE,eAAe,aAAa;CAEpC,IAAI,CAAC,MAAM,OAAO;CAElB,OACE,qBAACA,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAY;GAAQ;EAAQ,CAAC,GAAG,SAAS;EAC7D;EACL,GAAI;EAHN,UAAA;GAKG,YACC,oBAAC,YAAD;IACE,MAAM;IACN,GAAI;IACJ,WAAW,GAAG,OAAO,OAAO,gBAAgB,SAAS;IACrD,MAAM;IACN,UAAU,MAAM;KACd,QAAQ,KAAK;KACb,UAAU,CAAC;KACX,aAAa;IACf;GACD,CAAA;GAEF,SACC,oBAAC,KAAD;IACO;IACL,WAAW,GAAG,OAAO,OAAO,YAAY,KAAK;IACrC;IACR,KAAK;IACL,OAAO,cAAc;IACd;IACP,GAAI;GACL,CAAA;GAEH,qBAACA,mBAAD;IACE,WAAW,GAAG,OAAO,SAAS,YAAY,OAAO;IACjD,KAAK;IACL,OAAO,cAAc;IAHvB,UAAA,CAKG,SAAS,oBAAC,OAAD;KAAK,WAAW,OAAO;KAAQ,UAAA;IAAW,CAAA,GACnD,QAAQ,oBAAC,OAAD;KAAK,WAAW,OAAO;KAAO,UAAA;IAAU,CAAA,CAC1C;;EACF;;AAEb,CACF;AAEA,UAAU,cAAc"}
@@ -1,8 +1,8 @@
1
1
  import { FlexboxProps } from "../Flex/type.mjs";
2
2
  import "../Flex/index.mjs";
3
3
  import { ImgProps } from "../types/index.mjs";
4
- import { ActionIconProps } from "../ActionIcon/type.mjs";
5
- import "../ActionIcon/index.mjs";
4
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
5
+ import "../base-ui/ActionIcon/index.mjs";
6
6
  import { CSSProperties, ReactNode, Ref } from "react";
7
7
  import { ImageProps } from "antd";
8
8
  //#region src/GuideCard/type.d.ts
@@ -2,7 +2,7 @@
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Text from "../Text/Text.mjs";
4
4
  import { stopPropagation } from "../utils/dom.mjs";
5
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
5
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import MaterialFileTypeIcon from "../MaterialFileTypeIcon/MaterialFileTypeIcon.mjs";
7
7
  import { getCodeLanguageDisplayName, getCodeLanguageFilename } from "./const.mjs";
8
8
  import CopyButton from "../CopyButton/CopyButton.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"FullFeatured.mjs","names":["Flexbox"],"sources":["../../src/Highlighter/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName, getCodeLanguageFilename } from '@/Highlighter/const';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport LangSelect from './LangSelect';\nimport { bodyVariants, headerVariants, variants } from './style';\nimport { type HighlighterProps } from './type';\n\ninterface HeaderLanguageProps {\n allowChangeLanguage: boolean;\n displayName: string;\n fileName?: string;\n filetype: string;\n icon?: ReactNode;\n language: string;\n setLanguage?: (language: string) => void;\n showLanguage?: boolean;\n}\n\nconst HeaderLanguage = memo<HeaderLanguageProps>(\n ({\n allowChangeLanguage,\n displayName,\n fileName,\n filetype,\n icon,\n language,\n setLanguage,\n showLanguage,\n }) => {\n if (!showLanguage) return null;\n\n if (allowChangeLanguage && !fileName)\n return <LangSelect value={language.toLowerCase()} onSelect={setLanguage} />;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'languageTitle'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n {icon || (\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={filetype}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n )}\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.allowChangeLanguage === next.allowChangeLanguage &&\n prev.displayName === next.displayName &&\n prev.fileName === next.fileName &&\n prev.filetype === next.filetype &&\n prev.icon === next.icon &&\n prev.language === next.language &&\n prev.setLanguage === next.setLanguage &&\n prev.showLanguage === next.showLanguage,\n);\n\ninterface HighlighterFullFeaturedProps extends Omit<\n HighlighterProps,\n 'children' | 'bodyRender' | 'enableTransformer'\n> {\n content: string;\n setLanguage?: (language: string) => void;\n}\n\nexport const HighlighterFullFeatured = memo<HighlighterFullFeaturedProps & { children: ReactNode }>(\n ({\n content,\n language,\n setLanguage,\n showLanguage,\n className,\n classNames,\n styles: customStyles,\n style,\n allowChangeLanguage = false,\n fileName,\n icon,\n actionsRender,\n copyable,\n variant,\n shadow,\n wrap,\n defaultExpand = true,\n children,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n language,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, language, originalActions]);\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const filetype = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageFilename(language);\n }, [fileName, language]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant, wrap }), className)}\n data-code-type=\"highlighter\"\n style={style}\n {...rest}\n >\n <Flexbox\n horizontal\n align={'center'}\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify={'space-between'}\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <HeaderLanguage\n allowChangeLanguage={allowChangeLanguage}\n displayName={displayName}\n fileName={fileName}\n filetype={filetype}\n icon={icon}\n language={language}\n setLanguage={setLanguage}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n className={cx(bodyVariants({ expand }), classNames?.body)}\n style={customStyles?.body}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default HighlighterFullFeatured;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FullFeatured.mjs","names":["Flexbox"],"sources":["../../src/Highlighter/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName, getCodeLanguageFilename } from '@/Highlighter/const';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport LangSelect from './LangSelect';\nimport { bodyVariants, headerVariants, variants } from './style';\nimport { type HighlighterProps } from './type';\n\ninterface HeaderLanguageProps {\n allowChangeLanguage: boolean;\n displayName: string;\n fileName?: string;\n filetype: string;\n icon?: ReactNode;\n language: string;\n setLanguage?: (language: string) => void;\n showLanguage?: boolean;\n}\n\nconst HeaderLanguage = memo<HeaderLanguageProps>(\n ({\n allowChangeLanguage,\n displayName,\n fileName,\n filetype,\n icon,\n language,\n setLanguage,\n showLanguage,\n }) => {\n if (!showLanguage) return null;\n\n if (allowChangeLanguage && !fileName)\n return <LangSelect value={language.toLowerCase()} onSelect={setLanguage} />;\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={'languageTitle'}\n flex={1}\n gap={4}\n justify={'flex-start'}\n paddingInline={8}\n >\n {icon || (\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={filetype}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n )}\n <Text ellipsis fontSize={13}>\n {displayName}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.allowChangeLanguage === next.allowChangeLanguage &&\n prev.displayName === next.displayName &&\n prev.fileName === next.fileName &&\n prev.filetype === next.filetype &&\n prev.icon === next.icon &&\n prev.language === next.language &&\n prev.setLanguage === next.setLanguage &&\n prev.showLanguage === next.showLanguage,\n);\n\ninterface HighlighterFullFeaturedProps extends Omit<\n HighlighterProps,\n 'children' | 'bodyRender' | 'enableTransformer'\n> {\n content: string;\n setLanguage?: (language: string) => void;\n}\n\nexport const HighlighterFullFeatured = memo<HighlighterFullFeaturedProps & { children: ReactNode }>(\n ({\n content,\n language,\n setLanguage,\n showLanguage,\n className,\n classNames,\n styles: customStyles,\n style,\n allowChangeLanguage = false,\n fileName,\n icon,\n actionsRender,\n copyable,\n variant,\n shadow,\n wrap,\n defaultExpand = true,\n children,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n language,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, language, originalActions]);\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const filetype = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageFilename(language);\n }, [fileName, language]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant, wrap }), className)}\n data-code-type=\"highlighter\"\n style={style}\n {...rest}\n >\n <Flexbox\n horizontal\n align={'center'}\n className={cx(headerVariants({ variant }), classNames?.header)}\n justify={'space-between'}\n style={customStyles?.header}\n onClick={handleToggleExpand}\n >\n <HeaderLanguage\n allowChangeLanguage={allowChangeLanguage}\n displayName={displayName}\n fileName={fileName}\n filetype={filetype}\n icon={icon}\n language={language}\n setLanguage={setLanguage}\n showLanguage={showLanguage}\n />\n <Flexbox horizontal align={'center'} flex={'none'} gap={4} onClick={stopPropagation}>\n <Flexbox horizontal align={'center'} className={'panel-actions'} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n size={'small'}\n onClick={handleToggleExpand}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n className={cx(bodyVariants({ expand }), classNames?.body)}\n style={customStyles?.body}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default HighlighterFullFeatured;\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { FlexboxProps } from "../Flex/type.mjs";
2
2
  import "../Flex/index.mjs";
3
3
  import { DivProps } from "../types/index.mjs";
4
- import { ActionIconProps } from "../ActionIcon/type.mjs";
5
- import "../ActionIcon/index.mjs";
4
+ import { ActionIconProps } from "../base-ui/ActionIcon/type.mjs";
5
+ import "../base-ui/ActionIcon/index.mjs";
6
6
  import { CSSProperties, ReactNode, Ref } from "react";
7
7
  import { BuiltinTheme } from "shiki";
8
8
  //#region src/Highlighter/type.d.ts
@@ -2,7 +2,7 @@
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import { NORMATIVE_MODIFIER, checkIsAppleDevice, splitKeysByPlus } from "../Hotkey/utils.mjs";
4
4
  import Hotkey from "../Hotkey/Hotkey.mjs";
5
- import ActionIcon from "../ActionIcon/ActionIcon.mjs";
5
+ import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import { useTranslation } from "../i18n/useTranslation.mjs";
7
7
  import hotkey_default from "../i18n/resources/en/hotkey.mjs";
8
8
  import { styles, variants } from "./style.mjs";