@lobehub/ui 5.9.3 → 5.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/es/A/index.mjs.map +1 -1
  2. package/es/Accordion/Accordion.mjs +2 -2
  3. package/es/Accordion/Accordion.mjs.map +1 -1
  4. package/es/Accordion/AccordionItem.mjs +2 -2
  5. package/es/Accordion/AccordionItem.mjs.map +1 -1
  6. package/es/Alert/Alert.mjs.map +1 -1
  7. package/es/Checkbox/Checkbox.mjs +2 -2
  8. package/es/Checkbox/Checkbox.mjs.map +1 -1
  9. package/es/Checkbox/CheckboxGroup.mjs +2 -2
  10. package/es/Checkbox/CheckboxGroup.mjs.map +1 -1
  11. package/es/CodeEditor/CodeEditor.mjs +2 -2
  12. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  13. package/es/ColorSwatches/ColorSwatches.mjs +2 -2
  14. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  15. package/es/ConfigProvider/index.mjs.map +1 -1
  16. package/es/DraggablePanel/DraggablePanel.mjs +21 -5
  17. package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
  18. package/es/DraggablePanel/components/DraggablePanelHeader.mjs +2 -2
  19. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  20. package/es/DraggableSideNav/DraggableSideNav.mjs +2 -2
  21. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  22. package/es/EditableText/EditableText.mjs +2 -2
  23. package/es/EditableText/EditableText.mjs.map +1 -1
  24. package/es/EditorSlashMenu/useNormalizedItems.mjs.map +1 -1
  25. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  26. package/es/EmojiPicker/EmojiPicker.mjs +3 -3
  27. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  28. package/es/Form/components/FormFlatGroup.mjs.map +1 -1
  29. package/es/Grid/Grid.mjs.map +1 -1
  30. package/es/Highlighter/LangSelect.mjs.map +1 -1
  31. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
  32. package/es/Highlighter/const.mjs.map +1 -1
  33. package/es/Hotkey/Hotkey.mjs.map +1 -1
  34. package/es/HotkeyInput/HotkeyInput.mjs +2 -2
  35. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  36. package/es/Icon/style.mjs.map +1 -1
  37. package/es/Image/components/Toolbar.mjs.map +1 -1
  38. package/es/ImageSelect/ImageSelect.mjs +2 -2
  39. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  40. package/es/Img/index.mjs.map +1 -1
  41. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs.map +1 -1
  42. package/es/Markdown/SyntaxMarkdown/useSmoothStreamContent.mjs.map +1 -1
  43. package/es/Markdown/components/CodeBlock.mjs.map +1 -1
  44. package/es/Markdown/markdown.style.mjs.map +1 -1
  45. package/es/Markdown/plugins/remarkBr.mjs.map +1 -1
  46. package/es/Markdown/plugins/remarkColor.mjs.map +1 -1
  47. package/es/Markdown/plugins/remarkGfmPlus.mjs.map +1 -1
  48. package/es/MaterialFileTypeIcon/MaterialFileTypeIcon.mjs.map +1 -1
  49. package/es/MaterialFileTypeIcon/utils.mjs.map +1 -1
  50. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs.map +1 -1
  51. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs.map +1 -1
  52. package/es/Modal/imperative.mjs.map +1 -1
  53. package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
  54. package/es/SearchBar/SearchBar.mjs +2 -2
  55. package/es/SearchBar/SearchBar.mjs.map +1 -1
  56. package/es/SortableList/SortableList.mjs.map +1 -1
  57. package/es/SortableList/components/SortableItem.mjs.map +1 -1
  58. package/es/Text/Text.mjs.map +1 -1
  59. package/es/ThemeProvider/ThemeProvider.mjs.map +1 -1
  60. package/es/Toc/TocMobile.mjs +2 -2
  61. package/es/Toc/TocMobile.mjs.map +1 -1
  62. package/es/Toc/style.mjs.map +1 -1
  63. package/es/Tooltip/TooltipGroup.mjs.map +1 -1
  64. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  65. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  66. package/es/Tooltip/useMergedTooltipProps.mjs.map +1 -1
  67. package/es/awesome/Spline/ParentSize.mjs.map +1 -1
  68. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
  69. package/es/base-ui/ContextMenu/renderItems.mjs +14 -7
  70. package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
  71. package/es/base-ui/ContextMenu/store.mjs.map +1 -1
  72. package/es/base-ui/DropdownMenu/atoms.mjs +14 -7
  73. package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
  74. package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
  75. package/es/base-ui/FloatingSheet/FloatingSheet.mjs.map +1 -1
  76. package/es/base-ui/FloatingSheet/useSheetDrag.mjs.map +1 -1
  77. package/es/base-ui/FloatingSheet/useSnapPoints.mjs.map +1 -1
  78. package/es/base-ui/Modal/atoms.mjs.map +1 -1
  79. package/es/base-ui/Modal/imperative.mjs.map +1 -1
  80. package/es/base-ui/Modal/zIndexManager.mjs.map +1 -1
  81. package/es/base-ui/Popover/useMergedPopoverProps.mjs.map +1 -1
  82. package/es/base-ui/Select/Select.mjs.map +1 -1
  83. package/es/base-ui/Switch/atoms.mjs +2 -2
  84. package/es/base-ui/Switch/atoms.mjs.map +1 -1
  85. package/es/base-ui/Toast/imperative.mjs.map +1 -1
  86. package/es/brand/BrandLoading/index.mjs.map +1 -1
  87. package/es/brand/Logo3d/index.mjs.map +1 -1
  88. package/es/chat/ChatItem/components/Actions.mjs.map +1 -1
  89. package/es/chat/EditableMessage/EditableMessage.mjs +3 -3
  90. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  91. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  92. package/es/chat/MessageModal/MessageModal.mjs +3 -3
  93. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  94. package/es/hooks/useHighlight.mjs.map +1 -1
  95. package/es/hooks/useMarkdown/latex.mjs.map +1 -1
  96. package/es/hooks/useMarkdown/useMarkdownComponents.mjs.map +1 -1
  97. package/es/hooks/useMarkdown/useMarkdownContent.mjs.map +1 -1
  98. package/es/hooks/useMermaid.mjs.map +1 -1
  99. package/es/hooks/useNativeButton.mjs.map +1 -1
  100. package/es/hooks/useStreamHighlight.mjs.map +1 -1
  101. package/es/hooks/useStreamMermaid.mjs.map +1 -1
  102. package/es/i18n/useTranslation.mjs.map +1 -1
  103. package/es/mdx/mdxComponents/CodeBlock.mjs.map +1 -1
  104. package/es/mobile/TabBar/TabBar.mjs +2 -2
  105. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  106. package/es/styles/customTheme.mjs.map +1 -1
  107. package/es/styles/theme/customStylishStatic.mjs +15 -0
  108. package/es/styles/theme/customStylishStatic.mjs.map +1 -1
  109. package/es/styles/theme/token/base.mjs.map +1 -1
  110. package/es/utils/blobToPng.mjs.map +1 -1
  111. package/es/utils/placement.mjs.map +1 -1
  112. package/es/utils/smoothCorners.mjs.map +1 -1
  113. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"placement.mjs","names":[],"sources":["../../src/utils/placement.ts"],"sourcesContent":["import type { Placement as FloatingUIPlacement } from '@floating-ui/react';\n\n/**\n * Base UI uses a small set of string literal unions for alignment and side.\n * We re-declare them here to avoid importing internal/non-exported Base UI paths.\n */\nexport type Side = 'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start';\nexport type Align = 'start' | 'center' | 'end';\n\nexport type PlacementConfig = {\n align: Align;\n side: Side;\n};\n\n/**\n * All supported placement values\n * - Unified placement names for Tooltip, Popover, and DropdownMenu\n * - Ant Design style: topLeft, topCenter, topRight, etc.\n * - Additional aliases: top (same as topCenter), bottom (same as bottomCenter)\n */\nexport type Placement =\n | 'top'\n | 'topLeft'\n | 'topCenter'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomCenter'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom';\n\nconst top: PlacementConfig = { align: 'center', side: 'top' };\nconst topLeft: PlacementConfig = { align: 'start', side: 'top' };\nconst topRight: PlacementConfig = { align: 'end', side: 'top' };\nconst bottom: PlacementConfig = { align: 'center', side: 'bottom' };\nconst bottomLeft: PlacementConfig = { align: 'start', side: 'bottom' };\nconst bottomRight: PlacementConfig = { align: 'end', side: 'bottom' };\nconst left: PlacementConfig = { align: 'center', side: 'left' };\nconst leftTop: PlacementConfig = { align: 'start', side: 'left' };\nconst leftBottom: PlacementConfig = { align: 'end', side: 'left' };\nconst right: PlacementConfig = { align: 'center', side: 'right' };\nconst rightTop: PlacementConfig = { align: 'start', side: 'right' };\nconst rightBottom: PlacementConfig = { align: 'end', side: 'right' };\n\n/**\n * Map of placement values to Base UI placement config\n * Used by Popover and DropdownMenu components\n */\nexport const placementMap: Record<Placement, PlacementConfig> = {\n bottom,\n bottomCenter: bottom,\n bottomLeft,\n bottomRight,\n left,\n leftBottom,\n leftTop,\n right,\n rightBottom,\n rightTop,\n top,\n topCenter: top,\n topLeft,\n topRight,\n};\n\n/**\n * Convert unified Placement to Floating UI placement format\n * Used by Tooltip component which uses @floating-ui/react\n *\n * @param placement - Unified placement value\n * @returns Floating UI placement (e.g., 'top-start', 'bottom-end')\n */\nexport const toFloatingUIPlacement = (placement?: Placement): FloatingUIPlacement => {\n if (!placement) return 'top';\n\n switch (placement) {\n case 'topLeft': {\n return 'top-start';\n }\n case 'top':\n case 'topCenter': {\n return 'top';\n }\n case 'topRight': {\n return 'top-end';\n }\n case 'bottomLeft': {\n return 'bottom-start';\n }\n case 'bottom':\n case 'bottomCenter': {\n return 'bottom';\n }\n case 'bottomRight': {\n return 'bottom-end';\n }\n case 'leftTop': {\n return 'left-start';\n }\n case 'left': {\n return 'left';\n }\n case 'leftBottom': {\n return 'left-end';\n }\n case 'rightTop': {\n return 'right-start';\n }\n case 'right': {\n return 'right';\n }\n case 'rightBottom': {\n return 'right-end';\n }\n default: {\n return 'top';\n }\n }\n};\n"],"mappings":";AAoCA,MAAM,MAAuB;CAAE,OAAO;CAAU,MAAM;CAAO;AAC7D,MAAM,UAA2B;CAAE,OAAO;CAAS,MAAM;CAAO;AAChE,MAAM,WAA4B;CAAE,OAAO;CAAO,MAAM;CAAO;AAC/D,MAAM,SAA0B;CAAE,OAAO;CAAU,MAAM;CAAU;;;;;AAcnE,MAAa,eAAmD;CAC9D;CACA,cAAc;CACd,YAhBkC;EAAE,OAAO;EAAS,MAAM;EAAU;CAiBpE,aAhBmC;EAAE,OAAO;EAAO,MAAM;EAAU;CAiBnE,MAhB4B;EAAE,OAAO;EAAU,MAAM;EAAQ;CAiB7D,YAfkC;EAAE,OAAO;EAAO,MAAM;EAAQ;CAgBhE,SAjB+B;EAAE,OAAO;EAAS,MAAM;EAAQ;CAkB/D,OAhB6B;EAAE,OAAO;EAAU,MAAM;EAAS;CAiB/D,aAfmC;EAAE,OAAO;EAAO,MAAM;EAAS;CAgBlE,UAjBgC;EAAE,OAAO;EAAS,MAAM;EAAS;CAkBjE;CACA,WAAW;CACX;CACA;CACD;;;;;;;;AASD,MAAa,yBAAyB,cAA+C;AACnF,KAAI,CAAC,UAAW,QAAO;AAEvB,SAAQ,WAAR;EACE,KAAK,UACH,QAAO;EAET,KAAK;EACL,KAAK,YACH,QAAO;EAET,KAAK,WACH,QAAO;EAET,KAAK,aACH,QAAO;EAET,KAAK;EACL,KAAK,eACH,QAAO;EAET,KAAK,cACH,QAAO;EAET,KAAK,UACH,QAAO;EAET,KAAK,OACH,QAAO;EAET,KAAK,aACH,QAAO;EAET,KAAK,WACH,QAAO;EAET,KAAK,QACH,QAAO;EAET,KAAK,cACH,QAAO;EAET,QACE,QAAO"}
1
+ {"version":3,"file":"placement.mjs","names":[],"sources":["../../src/utils/placement.ts"],"sourcesContent":["import type { Placement as FloatingUIPlacement } from '@floating-ui/react';\n\n/**\n * Base UI uses a small set of string literal unions for alignment and side.\n * We re-declare them here to avoid importing internal/non-exported Base UI paths.\n */\nexport type Side = 'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start';\nexport type Align = 'start' | 'center' | 'end';\n\nexport type PlacementConfig = {\n align: Align;\n side: Side;\n};\n\n/**\n * All supported placement values\n * - Unified placement names for Tooltip, Popover, and DropdownMenu\n * - Ant Design style: topLeft, topCenter, topRight, etc.\n * - Additional aliases: top (same as topCenter), bottom (same as bottomCenter)\n */\nexport type Placement =\n | 'top'\n | 'topLeft'\n | 'topCenter'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomCenter'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom';\n\nconst top: PlacementConfig = { align: 'center', side: 'top' };\nconst topLeft: PlacementConfig = { align: 'start', side: 'top' };\nconst topRight: PlacementConfig = { align: 'end', side: 'top' };\nconst bottom: PlacementConfig = { align: 'center', side: 'bottom' };\nconst bottomLeft: PlacementConfig = { align: 'start', side: 'bottom' };\nconst bottomRight: PlacementConfig = { align: 'end', side: 'bottom' };\nconst left: PlacementConfig = { align: 'center', side: 'left' };\nconst leftTop: PlacementConfig = { align: 'start', side: 'left' };\nconst leftBottom: PlacementConfig = { align: 'end', side: 'left' };\nconst right: PlacementConfig = { align: 'center', side: 'right' };\nconst rightTop: PlacementConfig = { align: 'start', side: 'right' };\nconst rightBottom: PlacementConfig = { align: 'end', side: 'right' };\n\n/**\n * Map of placement values to Base UI placement config\n * Used by Popover and DropdownMenu components\n */\nexport const placementMap: Record<Placement, PlacementConfig> = {\n bottom,\n bottomCenter: bottom,\n bottomLeft,\n bottomRight,\n left,\n leftBottom,\n leftTop,\n right,\n rightBottom,\n rightTop,\n top,\n topCenter: top,\n topLeft,\n topRight,\n};\n\n/**\n * Convert unified Placement to Floating UI placement format\n * Used by Tooltip component which uses @floating-ui/react\n *\n * @param placement - Unified placement value\n * @returns Floating UI placement (e.g., 'top-start', 'bottom-end')\n */\nexport const toFloatingUIPlacement = (placement?: Placement): FloatingUIPlacement => {\n if (!placement) return 'top';\n\n switch (placement) {\n case 'topLeft': {\n return 'top-start';\n }\n case 'top':\n case 'topCenter': {\n return 'top';\n }\n case 'topRight': {\n return 'top-end';\n }\n case 'bottomLeft': {\n return 'bottom-start';\n }\n case 'bottom':\n case 'bottomCenter': {\n return 'bottom';\n }\n case 'bottomRight': {\n return 'bottom-end';\n }\n case 'leftTop': {\n return 'left-start';\n }\n case 'left': {\n return 'left';\n }\n case 'leftBottom': {\n return 'left-end';\n }\n case 'rightTop': {\n return 'right-start';\n }\n case 'right': {\n return 'right';\n }\n case 'rightBottom': {\n return 'right-end';\n }\n default: {\n return 'top';\n }\n }\n};\n"],"mappings":";AAoCA,MAAM,MAAuB;CAAE,OAAO;CAAU,MAAM;CAAO;AAC7D,MAAM,UAA2B;CAAE,OAAO;CAAS,MAAM;CAAO;AAChE,MAAM,WAA4B;CAAE,OAAO;CAAO,MAAM;CAAO;AAC/D,MAAM,SAA0B;CAAE,OAAO;CAAU,MAAM;CAAU;;;;;AAcnE,MAAa,eAAmD;CAC9D;CACA,cAAc;CACd;EAhBoC,OAAO;EAAS,MAAM;EAgB1D;CACA;EAhBqC,OAAO;EAAO,MAAM;EAgBzD;CACA;EAhB8B,OAAO;EAAU,MAAM;EAgBrD;CACA;EAfoC,OAAO;EAAO,MAAM;EAexD;CACA;EAjBiC,OAAO;EAAS,MAAM;EAiBvD;CACA;EAhB+B,OAAO;EAAU,MAAM;EAgBtD;CACA;EAfqC,OAAO;EAAO,MAAM;EAezD;CACA;EAjBkC,OAAO;EAAS,MAAM;EAiBxD;CACA;CACA,WAAW;CACX;CACA;CACD;;;;;;;;AASD,MAAa,yBAAyB,cAA+C;AACnF,KAAI,CAAC,UAAW,QAAO;AAEvB,SAAQ,WAAR;EACE,KAAK,UACH,QAAO;EAET,KAAK;EACL,KAAK,YACH,QAAO;EAET,KAAK,WACH,QAAO;EAET,KAAK,aACH,QAAO;EAET,KAAK;EACL,KAAK,eACH,QAAO;EAET,KAAK,cACH,QAAO;EAET,KAAK,UACH,QAAO;EAET,KAAK,OACH,QAAO;EAET,KAAK,aACH,QAAO;EAET,KAAK,WACH,QAAO;EAET,KAAK,QACH,QAAO;EAET,KAAK,cACH,QAAO;EAET,QACE,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"smoothCorners.mjs","names":[],"sources":["../../src/utils/smoothCorners.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * Smooth Corners utility using Base64 SVG mask\n * A simpler alternative to CSS Houdini Paint API\n */\n\n/**\n * Generate a smooth corners SVG path using superellipse formula\n * @param size - The size of the shape\n * @param n - The superellipse exponent (4 = squircle, 5 = iOS style)\n */\nconst generateSuperellipsePath = (size: number, n: number = 4): string => {\n const r = size / 2;\n const points: string[] = [];\n\n // Generate points for the superellipse\n for (let i = 0; i <= 360; i += 2) {\n const angle = (i * Math.PI) / 180;\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n\n // Superellipse formula\n const x = r * Math.sign(cosAngle) * Math.pow(Math.abs(cosAngle), 2 / n);\n const y = r * Math.sign(sinAngle) * Math.pow(Math.abs(sinAngle), 2 / n);\n\n points.push(`${r + x},${r + y}`);\n }\n\n return `M${points[0]}L${points.slice(1).join('L')}Z`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for smooth corners\n * @param options - Configuration options\n */\nexport const createSmoothCornersMask = (\n options: {\n cornerValue?: number;\n size?: number;\n } = {},\n): string => {\n const { size = 100, cornerValue = 4 } = options;\n\n const path = generateSuperellipsePath(size, cornerValue);\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${path}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for circle shape\n * @param options - Configuration options\n */\nexport const createCircleMask = (\n options: {\n size?: number;\n } = {},\n): string => {\n const { size = 100 } = options;\n const r = size / 2;\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for rounded rectangle\n * @param options - Configuration options\n */\nexport const createRoundedRectMask = (\n options: {\n borderRadius?: number;\n size?: number;\n } = {},\n): string => {\n const { size = 100, borderRadius = 15 } = options;\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0\" y=\"0\" width=\"${size}\" height=\"${size}\" rx=\"${borderRadius}\" ry=\"${borderRadius}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Predefined smooth corners masks for common corner values\n */\nexport const SMOOTH_CORNER_MASKS = {\n // Basic shapes\n circle: createCircleMask(),\n // Superellipse shapes\n ios: createSmoothCornersMask({ cornerValue: 5 }),\n\n sharp: createSmoothCornersMask({ cornerValue: 6 }),\n smooth: createSmoothCornersMask({ cornerValue: 3 }),\n square: createRoundedRectMask({ borderRadius: 15 }),\n squircle: createSmoothCornersMask({ cornerValue: 4 }),\n} as const;\n\n/**\n * CSS helper to apply smooth corners mask\n */\nexport const getSmoothCornersMaskStyle = (\n cornerType: keyof typeof SMOOTH_CORNER_MASKS = 'squircle',\n): CSSProperties => {\n return {\n // WebKit prefix for better browser support\n WebkitMaskImage: `url(\"${SMOOTH_CORNER_MASKS[cornerType]}\")`,\n\n WebkitMaskPosition: 'center',\n\n WebkitMaskRepeat: 'no-repeat',\n\n WebkitMaskSize: '100% 100%',\n\n maskImage: `url(\"${SMOOTH_CORNER_MASKS[cornerType]}\")`,\n maskPosition: 'center',\n maskRepeat: 'no-repeat',\n maskSize: '100% 100%',\n } as CSSProperties;\n};\n"],"mappings":";;;;;;;;;;AAYA,MAAM,4BAA4B,MAAc,IAAY,MAAc;CACxE,MAAM,IAAI,OAAO;CACjB,MAAM,SAAmB,EAAE;AAG3B,MAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,GAAG;EAChC,MAAM,QAAS,IAAI,KAAK,KAAM;EAC9B,MAAM,WAAW,KAAK,IAAI,MAAM;EAChC,MAAM,WAAW,KAAK,IAAI,MAAM;EAGhC,MAAM,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE;EACvE,MAAM,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE;AAEvE,SAAO,KAAK,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI;;AAGlC,QAAO,IAAI,OAAO,GAAG,GAAG,OAAO,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;;;;;;AAOpD,MAAa,2BACX,UAGI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,KAAK,cAAc,MAAM;CAIxC,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;iBAHvD,yBAAyB,MAAM,YAAY,CAIpC;;IAGjB,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;;AAO/C,MAAa,oBACX,UAEI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,QAAQ;CACvB,MAAM,IAAI,OAAO;CAEjB,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;oBAClD,EAAE,QAAQ,EAAE,OAAO,EAAE;;IAGpC,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;;AAO/C,MAAa,yBACX,UAGI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,KAAK,eAAe,OAAO;CAE1C,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;iCACrC,KAAK,YAAY,KAAK,QAAQ,aAAa,QAAQ,aAAa;;IAG5F,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;AAM/C,MAAa,sBAAsB;CAEjC,QAAQ,kBAAkB;CAE1B,KAAK,wBAAwB,EAAE,aAAa,GAAG,CAAC;CAEhD,OAAO,wBAAwB,EAAE,aAAa,GAAG,CAAC;CAClD,QAAQ,wBAAwB,EAAE,aAAa,GAAG,CAAC;CACnD,QAAQ,sBAAsB,EAAE,cAAc,IAAI,CAAC;CACnD,UAAU,wBAAwB,EAAE,aAAa,GAAG,CAAC;CACtD"}
1
+ {"version":3,"file":"smoothCorners.mjs","names":[],"sources":["../../src/utils/smoothCorners.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * Smooth Corners utility using Base64 SVG mask\n * A simpler alternative to CSS Houdini Paint API\n */\n\n/**\n * Generate a smooth corners SVG path using superellipse formula\n * @param size - The size of the shape\n * @param n - The superellipse exponent (4 = squircle, 5 = iOS style)\n */\nconst generateSuperellipsePath = (size: number, n: number = 4): string => {\n const r = size / 2;\n const points: string[] = [];\n\n // Generate points for the superellipse\n for (let i = 0; i <= 360; i += 2) {\n const angle = (i * Math.PI) / 180;\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n\n // Superellipse formula\n const x = r * Math.sign(cosAngle) * Math.pow(Math.abs(cosAngle), 2 / n);\n const y = r * Math.sign(sinAngle) * Math.pow(Math.abs(sinAngle), 2 / n);\n\n points.push(`${r + x},${r + y}`);\n }\n\n return `M${points[0]}L${points.slice(1).join('L')}Z`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for smooth corners\n * @param options - Configuration options\n */\nexport const createSmoothCornersMask = (\n options: {\n cornerValue?: number;\n size?: number;\n } = {},\n): string => {\n const { size = 100, cornerValue = 4 } = options;\n\n const path = generateSuperellipsePath(size, cornerValue);\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"${path}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for circle shape\n * @param options - Configuration options\n */\nexport const createCircleMask = (\n options: {\n size?: number;\n } = {},\n): string => {\n const { size = 100 } = options;\n const r = size / 2;\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Create a Base64 encoded SVG mask for rounded rectangle\n * @param options - Configuration options\n */\nexport const createRoundedRectMask = (\n options: {\n borderRadius?: number;\n size?: number;\n } = {},\n): string => {\n const { size = 100, borderRadius = 15 } = options;\n\n const svg = `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0\" y=\"0\" width=\"${size}\" height=\"${size}\" rx=\"${borderRadius}\" ry=\"${borderRadius}\" fill=\"white\"/>\n </svg>\n `\n .trim()\n .replaceAll(/\\s+/g, ' ');\n\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n};\n\n/**\n * Predefined smooth corners masks for common corner values\n */\nexport const SMOOTH_CORNER_MASKS = {\n // Basic shapes\n circle: createCircleMask(),\n // Superellipse shapes\n ios: createSmoothCornersMask({ cornerValue: 5 }),\n\n sharp: createSmoothCornersMask({ cornerValue: 6 }),\n smooth: createSmoothCornersMask({ cornerValue: 3 }),\n square: createRoundedRectMask({ borderRadius: 15 }),\n squircle: createSmoothCornersMask({ cornerValue: 4 }),\n} as const;\n\n/**\n * CSS helper to apply smooth corners mask\n */\nexport const getSmoothCornersMaskStyle = (\n cornerType: keyof typeof SMOOTH_CORNER_MASKS = 'squircle',\n): CSSProperties => {\n return {\n // WebKit prefix for better browser support\n WebkitMaskImage: `url(\"${SMOOTH_CORNER_MASKS[cornerType]}\")`,\n\n WebkitMaskPosition: 'center',\n\n WebkitMaskRepeat: 'no-repeat',\n\n WebkitMaskSize: '100% 100%',\n\n maskImage: `url(\"${SMOOTH_CORNER_MASKS[cornerType]}\")`,\n maskPosition: 'center',\n maskRepeat: 'no-repeat',\n maskSize: '100% 100%',\n } as CSSProperties;\n};\n"],"mappings":";;;;;;;;;;AAYA,MAAM,4BAA4B,MAAc,IAAY,MAAc;CACxE,MAAM,IAAI,OAAO;CACjB,MAAM,SAAmB,EAAE;AAG3B,MAAK,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,GAAG;EAChC,MAAM,QAAS,IAAI,KAAK,KAAM;EAC9B,MAAM,WAAW,KAAK,IAAI,MAAM;EAChC,MAAM,WAAW,KAAK,IAAI,MAAM;EAGhC,MAAM,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE;EACvE,MAAM,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE;AAEvE,SAAO,KAAK,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI;;AAGlC,QAAO,IAAI,OAAO,GAAG,GAAG,OAAO,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;;;;;;AAOpD,MAAa,2BACX,UAGI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,KAAK,cAAc,MAAM;CAIxC,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;iBAHvD,yBAAyB,MAAM,YAIzB,CAAC;;IAGjB,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;;AAO/C,MAAa,oBACX,UAEI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,QAAQ;CACvB,MAAM,IAAI,OAAO;CAEjB,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;oBAClD,EAAE,QAAQ,EAAE,OAAO,EAAE;;IAGpC,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;;AAO/C,MAAa,yBACX,UAGI,EAAE,KACK;CACX,MAAM,EAAE,OAAO,KAAK,eAAe,OAAO;CAE1C,MAAM,MAAM;kBACI,KAAK,YAAY,KAAK,iBAAiB,KAAK,GAAG,KAAK;iCACrC,KAAK,YAAY,KAAK,QAAQ,aAAa,QAAQ,aAAa;;IAG5F,MAAM,CACN,WAAW,QAAQ,IAAI;AAE1B,QAAO,6BAA6B,KAAK,IAAI;;;;;AAM/C,MAAa,sBAAsB;CAEjC,QAAQ,kBAAkB;CAE1B,KAAK,wBAAwB,EAAE,aAAa,GAAG,CAAC;CAEhD,OAAO,wBAAwB,EAAE,aAAa,GAAG,CAAC;CAClD,QAAQ,wBAAwB,EAAE,aAAa,GAAG,CAAC;CACnD,QAAQ,sBAAsB,EAAE,cAAc,IAAI,CAAC;CACnD,UAAU,wBAAwB,EAAE,aAAa,GAAG,CAAC;CACtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/ui",
3
- "version": "5.9.3",
3
+ "version": "5.9.5",
4
4
  "description": "Lobe UI is an open-source UI component library for building AIGC web apps",
5
5
  "keywords": [
6
6
  "lobehub",