@lobehub/ui 4.6.2 → 4.6.4

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 (151) hide show
  1. package/es/Accordion/Accordion.d.mts +2 -2
  2. package/es/Accordion/AccordionItem.d.mts +2 -2
  3. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  4. package/es/Alert/Alert.d.mts +2 -2
  5. package/es/AutoComplete/Select.d.mts +2 -2
  6. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  7. package/es/Burger/Burger.d.mts +2 -2
  8. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  9. package/es/Collapse/Collapse.d.mts +2 -2
  10. package/es/ConfigProvider/index.d.mts +2 -2
  11. package/es/ContextMenu/ContextMenuHost.d.mts +2 -2
  12. package/es/ContextMenu/ContextMenuHost.mjs +2 -1
  13. package/es/ContextMenu/ContextMenuHost.mjs.map +1 -1
  14. package/es/ContextMenu/ContextMenuTrigger.d.mts +21 -0
  15. package/es/ContextMenu/ContextMenuTrigger.mjs +40 -0
  16. package/es/ContextMenu/ContextMenuTrigger.mjs.map +1 -0
  17. package/es/ContextMenu/imperative.d.mts +1 -0
  18. package/es/ContextMenu/index.d.mts +2 -1
  19. package/es/ContextMenu/index.mjs +2 -1
  20. package/es/ContextMenu/renderItems.mjs +5 -2
  21. package/es/ContextMenu/renderItems.mjs.map +1 -1
  22. package/es/ContextMenu/store.mjs +9 -3
  23. package/es/ContextMenu/store.mjs.map +1 -1
  24. package/es/CopyButton/CopyButton.d.mts +2 -2
  25. package/es/DatePicker/DatePicker.d.mts +2 -2
  26. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  27. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  28. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  29. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  30. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  31. package/es/Drawer/Drawer.d.mts +2 -2
  32. package/es/Dropdown/Dropdown.d.mts +2 -2
  33. package/es/DropdownMenu/DropdownMenu.d.mts +8 -0
  34. package/es/DropdownMenu/DropdownMenu.mjs +101 -0
  35. package/es/DropdownMenu/DropdownMenu.mjs.map +1 -0
  36. package/es/DropdownMenu/index.d.mts +3 -0
  37. package/es/DropdownMenu/index.d.ts +1 -0
  38. package/es/DropdownMenu/index.js +1 -0
  39. package/es/DropdownMenu/index.mjs +3 -0
  40. package/es/DropdownMenu/renderItems.mjs +161 -0
  41. package/es/DropdownMenu/renderItems.mjs.map +1 -0
  42. package/es/DropdownMenu/type.d.mts +36 -0
  43. package/es/EditableText/EditableText.d.mts +2 -2
  44. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  45. package/es/Flex/FlexBasic.d.mts +2 -2
  46. package/es/FontLoader/index.d.mts +2 -2
  47. package/es/Footer/Footer.d.mts +2 -2
  48. package/es/Form/components/FormGroup.d.mts +2 -2
  49. package/es/Form/components/FormItem.d.mts +2 -2
  50. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  51. package/es/FormModal/FormModal.d.mts +2 -2
  52. package/es/GuideCard/GuideCard.d.mts +2 -2
  53. package/es/Header/Header.d.mts +2 -2
  54. package/es/Highlighter/Highlighter.d.mts +2 -2
  55. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  56. package/es/Hotkey/Hotkey.d.mts +2 -2
  57. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  58. package/es/Icon/Icon.d.mts +2 -2
  59. package/es/Icon/components/IconProvider.d.mts +3 -3
  60. package/es/Image/PreviewGroup.d.mts +2 -2
  61. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  62. package/es/Input/Input.d.mts +2 -2
  63. package/es/Input/InputNumber.d.mts +2 -2
  64. package/es/Input/InputOPT.d.mts +2 -2
  65. package/es/Input/InputPassword.d.mts +2 -2
  66. package/es/Input/TextArea.d.mts +2 -2
  67. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  68. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  69. package/es/Layout/components/LayoutMain.d.mts +2 -2
  70. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  71. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  72. package/es/Layout/components/LayoutToc.d.mts +2 -2
  73. package/es/List/ListItem/index.d.mts +2 -2
  74. package/es/Markdown/Markdown.d.mts +2 -2
  75. package/es/Markdown/Typography.d.mts +2 -2
  76. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  77. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  78. package/es/Menu/Menu.d.mts +2 -2
  79. package/es/{ContextMenu/style.mjs → Menu/sharedStyle.mjs} +7 -6
  80. package/es/Menu/sharedStyle.mjs.map +1 -0
  81. package/es/Mermaid/Mermaid.d.mts +2 -2
  82. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  83. package/es/Modal/Modal.d.mts +2 -2
  84. package/es/Modal/ModalProvider.d.mts +2 -2
  85. package/es/Modal/imperative.d.mts +1 -1
  86. package/es/Modal/imperative.mjs.map +1 -1
  87. package/es/Modal/type.d.mts +1 -1
  88. package/es/MotionProvider/index.d.mts +2 -2
  89. package/es/SearchBar/SearchBar.d.mts +2 -2
  90. package/es/Segmented/Segmented.d.mts +2 -2
  91. package/es/Select/Select.d.mts +2 -2
  92. package/es/SideNav/SideNav.d.mts +2 -2
  93. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  94. package/es/SortableList/components/DragHandle.d.mts +2 -2
  95. package/es/SortableList/components/SortableItem.d.mts +2 -2
  96. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  97. package/es/Toc/Toc.d.mts +2 -2
  98. package/es/Video/index.d.mts +2 -2
  99. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  100. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  101. package/es/awesome/Features/Features.d.mts +2 -2
  102. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  103. package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
  104. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  105. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  106. package/es/awesome/Hero/Hero.d.mts +2 -2
  107. package/es/awesome/Spline/Spine.d.mts +2 -2
  108. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  109. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  110. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  111. package/es/brand/LobeChat/index.d.mts +2 -2
  112. package/es/brand/LobeHub/index.d.mts +2 -2
  113. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  114. package/es/brand/LogoThree/index.d.mts +2 -2
  115. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  116. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  117. package/es/chat/ChatItem/ChatItem.d.mts +2 -2
  118. package/es/chat/ChatList/ChatList.d.mts +2 -2
  119. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  120. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  121. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  122. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  123. package/es/color/ColorScales/index.d.mts +2 -2
  124. package/es/color/CssVar/index.d.mts +2 -2
  125. package/es/i18n/context.d.mts +2 -2
  126. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  127. package/es/icons/lucideExtra/CreateBotIcon.d.mts +2 -2
  128. package/es/icons/lucideExtra/DiscordIcon.d.mts +3 -3
  129. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +2 -2
  130. package/es/icons/lucideExtra/GroupBotIcon.d.mts +2 -2
  131. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +2 -2
  132. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  133. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +2 -2
  134. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  135. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  136. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  137. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  138. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
  139. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  140. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  141. package/es/index.d.mts +5 -1
  142. package/es/index.mjs +3 -1
  143. package/es/mdx/Mdx/index.d.mts +2 -2
  144. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  145. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  146. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  147. package/es/storybook/StoryBook/index.d.mts +2 -2
  148. package/es/utils/dom.mjs +1 -0
  149. package/es/utils/dom.mjs.map +1 -1
  150. package/package.json +1 -1
  151. package/es/ContextMenu/style.mjs.map +0 -1
@@ -0,0 +1,101 @@
1
+ 'use client';
2
+
3
+ import { LOBE_THEME_APP_ID } from "../ThemeProvider/constants.mjs";
4
+ import { TOOLTIP_CONTAINER_ATTR } from "../Tooltip/TooltipPortal.mjs";
5
+ import { useIsClient } from "../hooks/useIsClient.mjs";
6
+ import { styles } from "../Menu/sharedStyle.mjs";
7
+ import { renderDropdownMenuItems } from "./renderItems.mjs";
8
+ import { cloneElement, isValidElement, memo, useCallback, useEffect, useMemo, useState } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { cx } from "antd-style";
11
+ import { mergeProps } from "@base-ui/react/merge-props";
12
+ import { Menu } from "@base-ui/react/menu";
13
+
14
+ //#region src/DropdownMenu/DropdownMenu.tsx
15
+ const placementMap = {
16
+ bottomCenter: {
17
+ align: "center",
18
+ side: "bottom"
19
+ },
20
+ bottomLeft: {
21
+ align: "start",
22
+ side: "bottom"
23
+ },
24
+ bottomRight: {
25
+ align: "end",
26
+ side: "bottom"
27
+ },
28
+ topCenter: {
29
+ align: "center",
30
+ side: "top"
31
+ },
32
+ topLeft: {
33
+ align: "start",
34
+ side: "top"
35
+ },
36
+ topRight: {
37
+ align: "end",
38
+ side: "top"
39
+ }
40
+ };
41
+ const DropdownMenu = memo(({ children, defaultOpen, items, onOpenChange, open, placement = "bottomLeft", popupProps, portalProps, positionerProps, triggerProps, ...rest }) => {
42
+ const isClient = useIsClient();
43
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));
44
+ useEffect(() => {
45
+ if (open === void 0) return;
46
+ setUncontrolledOpen(open);
47
+ }, [open]);
48
+ const handleOpenChange = useCallback((nextOpen, details) => {
49
+ onOpenChange?.(nextOpen, details);
50
+ if (open === void 0) setUncontrolledOpen(nextOpen);
51
+ }, [onOpenChange, open]);
52
+ const shouldRenderItems = open ?? uncontrolledOpen;
53
+ const menuItems = useMemo(() => {
54
+ if (!shouldRenderItems) return null;
55
+ return renderDropdownMenuItems(typeof items === "function" ? items() : items);
56
+ }, [items, shouldRenderItems]);
57
+ const portalContainer = useMemo(() => {
58
+ if (!isClient) return null;
59
+ const themeApp = document.querySelector(`#${LOBE_THEME_APP_ID}`);
60
+ if (themeApp) return themeApp;
61
+ const tooltipContainer = document.querySelector(`[${TOOLTIP_CONTAINER_ATTR}="true"]`);
62
+ if (tooltipContainer) return tooltipContainer;
63
+ return document.body;
64
+ }, [isClient]);
65
+ const placementConfig = placementMap[placement];
66
+ const trigger = isValidElement(children) ? /* @__PURE__ */ jsx(Menu.Trigger, {
67
+ ...triggerProps,
68
+ render: (props) => cloneElement(children, mergeProps(children.props, props))
69
+ }) : /* @__PURE__ */ jsx(Menu.Trigger, {
70
+ ...triggerProps,
71
+ children
72
+ });
73
+ return /* @__PURE__ */ jsxs(Menu.Root, {
74
+ ...rest,
75
+ defaultOpen,
76
+ onOpenChange: handleOpenChange,
77
+ open,
78
+ children: [trigger, /* @__PURE__ */ jsx(Menu.Portal, {
79
+ container: portalProps?.container ?? portalContainer,
80
+ ...portalProps,
81
+ children: /* @__PURE__ */ jsx(Menu.Positioner, {
82
+ ...positionerProps,
83
+ align: positionerProps?.align ?? placementConfig.align,
84
+ className: (state) => cx(styles.positioner, typeof positionerProps?.className === "function" ? positionerProps.className(state) : positionerProps?.className),
85
+ side: positionerProps?.side ?? placementConfig.side,
86
+ sideOffset: positionerProps?.sideOffset ?? 6,
87
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
88
+ ...popupProps,
89
+ className: (state) => cx(styles.popup, typeof popupProps?.className === "function" ? popupProps.className(state) : popupProps?.className),
90
+ children: menuItems
91
+ })
92
+ })
93
+ })]
94
+ });
95
+ });
96
+ DropdownMenu.displayName = "DropdownMenuV2";
97
+ var DropdownMenu_default = DropdownMenu;
98
+
99
+ //#endregion
100
+ export { DropdownMenu_default as default };
101
+ //# sourceMappingURL=DropdownMenu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.mjs","names":["placementMap: Record<\n DropdownMenuPlacement,\n { align: 'start' | 'center' | 'end'; side: 'top' | 'bottom' }\n>"],"sources":["../../src/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["'use client';\n\nimport { Menu } from '@base-ui/react/menu';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { cx } from 'antd-style';\nimport {\n cloneElement,\n isValidElement,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { styles } from '@/Menu/sharedStyle';\nimport { LOBE_THEME_APP_ID } from '@/ThemeProvider';\nimport { TOOLTIP_CONTAINER_ATTR } from '@/Tooltip/TooltipPortal';\nimport { useIsClient } from '@/hooks/useIsClient';\n\nimport { renderDropdownMenuItems } from './renderItems';\nimport type { DropdownMenuPlacement, DropdownMenuProps } from './type';\n\nconst placementMap: Record<\n DropdownMenuPlacement,\n { align: 'start' | 'center' | 'end'; side: 'top' | 'bottom' }\n> = {\n bottomCenter: { align: 'center', side: 'bottom' },\n bottomLeft: { align: 'start', side: 'bottom' },\n bottomRight: { align: 'end', side: 'bottom' },\n topCenter: { align: 'center', side: 'top' },\n topLeft: { align: 'start', side: 'top' },\n topRight: { align: 'end', side: 'top' },\n};\n\nconst DropdownMenu = memo<DropdownMenuProps>(\n ({\n children,\n defaultOpen,\n\n items,\n onOpenChange,\n open,\n placement = 'bottomLeft',\n popupProps,\n portalProps,\n positionerProps,\n triggerProps,\n ...rest\n }) => {\n const isClient = useIsClient();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n\n useEffect(() => {\n if (open === undefined) return;\n setUncontrolledOpen(open);\n }, [open]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean, details: Parameters<NonNullable<typeof onOpenChange>>[1]) => {\n onOpenChange?.(nextOpen, details);\n if (open === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [onOpenChange, open],\n );\n\n const shouldRenderItems = open ?? uncontrolledOpen;\n const menuItems = useMemo(() => {\n if (!shouldRenderItems) return null;\n const resolvedItems = typeof items === 'function' ? items() : items;\n return renderDropdownMenuItems(resolvedItems);\n }, [items, shouldRenderItems]);\n const portalContainer = useMemo(() => {\n if (!isClient) return null;\n\n const themeApp = document.querySelector<HTMLElement>(`#${LOBE_THEME_APP_ID}`);\n if (themeApp) return themeApp;\n\n const tooltipContainer = document.querySelector<HTMLElement>(\n `[${TOOLTIP_CONTAINER_ATTR}=\"true\"]`,\n );\n if (tooltipContainer) return tooltipContainer;\n\n return document.body;\n }, [isClient]);\n const placementConfig = placementMap[placement];\n const trigger = isValidElement(children) ? (\n <Menu.Trigger\n {...triggerProps}\n render={(props) => cloneElement(children, mergeProps(children.props as any, props))}\n />\n ) : (\n <Menu.Trigger {...triggerProps}>{children}</Menu.Trigger>\n );\n\n return (\n <Menu.Root {...rest} defaultOpen={defaultOpen} onOpenChange={handleOpenChange} open={open}>\n {trigger}\n <Menu.Portal container={portalProps?.container ?? portalContainer} {...portalProps}>\n <Menu.Positioner\n {...positionerProps}\n align={positionerProps?.align ?? placementConfig.align}\n className={(state) =>\n cx(\n styles.positioner,\n typeof positionerProps?.className === 'function'\n ? positionerProps.className(state)\n : positionerProps?.className,\n )\n }\n side={positionerProps?.side ?? placementConfig.side}\n sideOffset={positionerProps?.sideOffset ?? 6}\n >\n <Menu.Popup\n {...popupProps}\n className={(state) =>\n cx(\n styles.popup,\n typeof popupProps?.className === 'function'\n ? popupProps.className(state)\n : popupProps?.className,\n )\n }\n >\n {menuItems}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n },\n);\n\nDropdownMenu.displayName = 'DropdownMenuV2';\n\nexport default DropdownMenu;\n"],"mappings":";;;;;;;;;;;;;;AAuBA,MAAMA,eAGF;CACF,cAAc;EAAE,OAAO;EAAU,MAAM;EAAU;CACjD,YAAY;EAAE,OAAO;EAAS,MAAM;EAAU;CAC9C,aAAa;EAAE,OAAO;EAAO,MAAM;EAAU;CAC7C,WAAW;EAAE,OAAO;EAAU,MAAM;EAAO;CAC3C,SAAS;EAAE,OAAO;EAAS,MAAM;EAAO;CACxC,UAAU;EAAE,OAAO;EAAO,MAAM;EAAO;CACxC;AAED,MAAM,eAAe,MAClB,EACC,UACA,aAEA,OACA,cACA,MACA,YAAY,cACZ,YACA,aACA,iBACA,cACA,GAAG,WACC;CACJ,MAAM,WAAW,aAAa;CAC9B,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,QAAQ,YAAY,CAAC;AAE9E,iBAAgB;AACd,MAAI,SAAS,OAAW;AACxB,sBAAoB,KAAK;IACxB,CAAC,KAAK,CAAC;CAEV,MAAM,mBAAmB,aACtB,UAAmB,YAA6D;AAC/E,iBAAe,UAAU,QAAQ;AACjC,MAAI,SAAS,OACX,qBAAoB,SAAS;IAGjC,CAAC,cAAc,KAAK,CACrB;CAED,MAAM,oBAAoB,QAAQ;CAClC,MAAM,YAAY,cAAc;AAC9B,MAAI,CAAC,kBAAmB,QAAO;AAE/B,SAAO,wBADe,OAAO,UAAU,aAAa,OAAO,GAAG,MACjB;IAC5C,CAAC,OAAO,kBAAkB,CAAC;CAC9B,MAAM,kBAAkB,cAAc;AACpC,MAAI,CAAC,SAAU,QAAO;EAEtB,MAAM,WAAW,SAAS,cAA2B,IAAI,oBAAoB;AAC7E,MAAI,SAAU,QAAO;EAErB,MAAM,mBAAmB,SAAS,cAChC,IAAI,uBAAuB,UAC5B;AACD,MAAI,iBAAkB,QAAO;AAE7B,SAAO,SAAS;IACf,CAAC,SAAS,CAAC;CACd,MAAM,kBAAkB,aAAa;CACrC,MAAM,UAAU,eAAe,SAAS,GACtC,oBAAC,KAAK;EACJ,GAAI;EACJ,SAAS,UAAU,aAAa,UAAU,WAAW,SAAS,OAAc,MAAM,CAAC;GACnF,GAEF,oBAAC,KAAK;EAAQ,GAAI;EAAe;GAAwB;AAG3D,QACE,qBAAC,KAAK;EAAK,GAAI;EAAmB;EAAa,cAAc;EAAwB;aAClF,SACD,oBAAC,KAAK;GAAO,WAAW,aAAa,aAAa;GAAiB,GAAI;aACrE,oBAAC,KAAK;IACJ,GAAI;IACJ,OAAO,iBAAiB,SAAS,gBAAgB;IACjD,YAAY,UACV,GACE,OAAO,YACP,OAAO,iBAAiB,cAAc,aAClC,gBAAgB,UAAU,MAAM,GAChC,iBAAiB,UACtB;IAEH,MAAM,iBAAiB,QAAQ,gBAAgB;IAC/C,YAAY,iBAAiB,cAAc;cAE3C,oBAAC,KAAK;KACJ,GAAI;KACJ,YAAY,UACV,GACE,OAAO,OACP,OAAO,YAAY,cAAc,aAC7B,WAAW,UAAU,MAAM,GAC3B,YAAY,UACjB;eAGF;MACU;KACG;IACN;GACJ;EAGjB;AAED,aAAa,cAAc;AAE3B,2BAAe"}
@@ -0,0 +1,3 @@
1
+ import { DropdownItem, DropdownMenuCheckboxItem, DropdownMenuPlacement, DropdownMenuProps } from "./type.mjs";
2
+ import { DropdownMenu } from "./DropdownMenu.mjs";
3
+ export { type DropdownItem, type DropdownMenuCheckboxItem, type DropdownMenuPlacement, type DropdownMenuProps, DropdownMenu as default };
@@ -0,0 +1 @@
1
+ export * from './index.d.mts';
@@ -0,0 +1 @@
1
+ export * from './index.mjs';
@@ -0,0 +1,3 @@
1
+ import DropdownMenu_default from "./DropdownMenu.mjs";
2
+
3
+ export { DropdownMenu_default as default };
@@ -0,0 +1,161 @@
1
+ import Icon_default from "../Icon/Icon.mjs";
2
+ import { styles } from "../Menu/sharedStyle.mjs";
3
+ import { isValidElement } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { cx } from "antd-style";
6
+ import { Check, ChevronRight } from "lucide-react";
7
+ import { Menu } from "@base-ui/react/menu";
8
+
9
+ //#region src/DropdownMenu/renderItems.tsx
10
+ const getItemKey = (item, fallback) => {
11
+ if (item && "key" in item && item.key !== void 0) return item.key;
12
+ return fallback;
13
+ };
14
+ const getItemLabel = (item) => {
15
+ if (item.label !== void 0) return item.label;
16
+ if ("title" in item && item.title !== void 0) return item.title;
17
+ return item.key;
18
+ };
19
+ const renderIcon = (icon) => {
20
+ if (!icon) return null;
21
+ if (isValidElement(icon)) return icon;
22
+ return /* @__PURE__ */ jsx(Icon_default, { icon });
23
+ };
24
+ const getReserveIconSpaceMap = (items) => {
25
+ const flags = Array.from({ length: items.length }).fill(false);
26
+ let segmentIndices = [];
27
+ let segmentHasIcon = false;
28
+ const flush = () => {
29
+ if (segmentHasIcon) for (const index of segmentIndices) flags[index] = true;
30
+ segmentIndices = [];
31
+ segmentHasIcon = false;
32
+ };
33
+ items.forEach((item, index) => {
34
+ if (!item) return;
35
+ if (item.type === "divider" || item.type === "group") {
36
+ flush();
37
+ return;
38
+ }
39
+ segmentIndices.push(index);
40
+ if (item.type === "checkbox") {
41
+ segmentHasIcon = true;
42
+ return;
43
+ }
44
+ if ("icon" in item && item.icon) segmentHasIcon = true;
45
+ });
46
+ flush();
47
+ return flags;
48
+ };
49
+ const renderItemContent = (item, options, iconNode) => {
50
+ const label = getItemLabel(item);
51
+ const extra = "extra" in item ? item.extra : void 0;
52
+ const hasCustomIcon = iconNode !== void 0;
53
+ const hasIcon = hasCustomIcon ? Boolean(iconNode) : Boolean(item.icon);
54
+ const shouldRenderIcon = hasCustomIcon ? Boolean(options?.reserveIconSpace || iconNode) : Boolean(hasIcon || options?.reserveIconSpace);
55
+ return /* @__PURE__ */ jsxs("div", {
56
+ className: styles.itemContent,
57
+ children: [
58
+ shouldRenderIcon ? /* @__PURE__ */ jsx("span", {
59
+ "aria-hidden": !hasIcon,
60
+ className: styles.icon,
61
+ children: hasCustomIcon ? iconNode : hasIcon ? renderIcon(item.icon) : null
62
+ }) : null,
63
+ /* @__PURE__ */ jsx("span", {
64
+ className: styles.label,
65
+ children: label
66
+ }),
67
+ extra ? /* @__PURE__ */ jsx("span", {
68
+ className: styles.extra,
69
+ children: extra
70
+ }) : null,
71
+ options?.submenu ? /* @__PURE__ */ jsx("span", {
72
+ className: styles.submenuArrow,
73
+ children: /* @__PURE__ */ jsx(ChevronRight, { size: 16 })
74
+ }) : null
75
+ ]
76
+ });
77
+ };
78
+ const invokeItemClick = (item, keyPath, event) => {
79
+ if (!item.onClick) return;
80
+ const key = item.key ?? keyPath.at(-1) ?? "";
81
+ const info = {
82
+ domEvent: event,
83
+ item: event.currentTarget,
84
+ key: String(key),
85
+ keyPath
86
+ };
87
+ item.onClick(info);
88
+ };
89
+ const renderDropdownMenuItems = (items, keyPath = [], options) => {
90
+ const reserveIconSpaceMap = options?.reserveIconSpace === void 0 ? getReserveIconSpaceMap(items) : null;
91
+ return items.map((item, index) => {
92
+ if (!item) return null;
93
+ const itemKey = getItemKey(item, `${keyPath.join("-") || "root"}-${index}`);
94
+ const nextKeyPath = [...keyPath, String(itemKey)];
95
+ const reserveIconSpace = options?.reserveIconSpace ?? Boolean(reserveIconSpaceMap?.[index]);
96
+ if (item.type === "checkbox") {
97
+ const checkboxItem = item;
98
+ const label$1 = getItemLabel(checkboxItem);
99
+ const labelText$1 = typeof label$1 === "string" ? label$1 : void 0;
100
+ const isDanger$1 = Boolean(checkboxItem.danger);
101
+ const indicator = /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(Icon_default, { icon: Check }) });
102
+ return /* @__PURE__ */ jsx(Menu.CheckboxItem, {
103
+ checked: checkboxItem.checked,
104
+ className: cx(styles.item, isDanger$1 && styles.danger),
105
+ closeOnClick: checkboxItem.closeOnClick,
106
+ defaultChecked: checkboxItem.defaultChecked,
107
+ disabled: checkboxItem.disabled,
108
+ label: labelText$1,
109
+ onCheckedChange: (checked) => checkboxItem.onCheckedChange?.(checked),
110
+ children: renderItemContent(checkboxItem, { reserveIconSpace }, indicator)
111
+ }, itemKey);
112
+ }
113
+ if (item.type === "divider") return /* @__PURE__ */ jsx(Menu.Separator, { className: styles.separator }, itemKey);
114
+ if (item.type === "group") {
115
+ const group = item;
116
+ const groupReserveIconSpace = Boolean(group.children?.some((child) => Boolean(child && "icon" in child && child.icon)));
117
+ return /* @__PURE__ */ jsxs(Menu.Group, { children: [group.label ? /* @__PURE__ */ jsx(Menu.GroupLabel, {
118
+ className: styles.groupLabel,
119
+ children: group.label
120
+ }) : null, group.children ? renderDropdownMenuItems(group.children, nextKeyPath, { reserveIconSpace: groupReserveIconSpace }) : null] }, itemKey);
121
+ }
122
+ if (item.type === "submenu" || "children" in item) {
123
+ const submenu = item;
124
+ const label$1 = getItemLabel(submenu);
125
+ const labelText$1 = typeof label$1 === "string" ? label$1 : void 0;
126
+ const isDanger$1 = "danger" in submenu && Boolean(submenu.danger);
127
+ return /* @__PURE__ */ jsxs(Menu.SubmenuRoot, { children: [/* @__PURE__ */ jsx(Menu.SubmenuTrigger, {
128
+ className: cx(styles.item, isDanger$1 && styles.danger),
129
+ disabled: submenu.disabled,
130
+ label: labelText$1,
131
+ children: renderItemContent(submenu, {
132
+ reserveIconSpace,
133
+ submenu: true
134
+ })
135
+ }), /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
136
+ alignOffset: -4,
137
+ className: styles.positioner,
138
+ sideOffset: -1,
139
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
140
+ className: styles.popup,
141
+ children: submenu.children ? renderDropdownMenuItems(submenu.children, nextKeyPath) : null
142
+ })
143
+ }) })] }, itemKey);
144
+ }
145
+ const menuItem = item;
146
+ const label = getItemLabel(menuItem);
147
+ const labelText = typeof label === "string" ? label : void 0;
148
+ const isDanger = "danger" in menuItem && Boolean(menuItem.danger);
149
+ return /* @__PURE__ */ jsx(Menu.Item, {
150
+ className: cx(styles.item, isDanger && styles.danger),
151
+ disabled: menuItem.disabled,
152
+ label: labelText,
153
+ onClick: (event) => invokeItemClick(menuItem, nextKeyPath, event),
154
+ children: renderItemContent(menuItem, { reserveIconSpace })
155
+ }, itemKey);
156
+ });
157
+ };
158
+
159
+ //#endregion
160
+ export { renderDropdownMenuItems };
161
+ //# sourceMappingURL=renderItems.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderItems.mjs","names":["Icon","segmentIndices: number[]","info: MenuInfo","label","labelText","isDanger"],"sources":["../../src/DropdownMenu/renderItems.tsx"],"sourcesContent":["import { Menu } from '@base-ui/react/menu';\nimport { cx } from 'antd-style';\nimport { Check, ChevronRight } from 'lucide-react';\nimport type { MenuInfo } from 'rc-menu/es/interface';\nimport type {\n Key,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n} from 'react';\nimport { isValidElement } from 'react';\n\nimport Icon from '@/Icon';\nimport type {\n ItemType,\n MenuDividerType,\n MenuItemGroupType,\n MenuItemType,\n SubMenuType,\n} from '@/Menu';\nimport { styles } from '@/Menu/sharedStyle';\n\nimport type { DropdownItem, DropdownMenuCheckboxItem } from './type';\n\nconst getItemKey = (item: ItemType | DropdownItem, fallback: string): Key => {\n if (item && 'key' in item && item.key !== undefined) return item.key;\n return fallback;\n};\n\ntype LabelableItem = {\n key?: Key;\n label?: ReactNode;\n title?: ReactNode;\n};\n\nconst getItemLabel = (item: MenuItemType | SubMenuType | LabelableItem): ReactNode => {\n if (item.label !== undefined) return item.label;\n if ('title' in item && item.title !== undefined) return item.title;\n return item.key;\n};\n\nconst renderIcon = (icon: MenuItemType['icon']) => {\n if (!icon) return null;\n if (isValidElement(icon)) return icon;\n return <Icon icon={icon} />;\n};\n\nconst getReserveIconSpaceMap = (items: DropdownItem[]) => {\n const flags = Array.from({ length: items.length }).fill(false);\n let segmentIndices: number[] = [];\n let segmentHasIcon = false;\n\n const flush = () => {\n if (segmentHasIcon) {\n for (const index of segmentIndices) flags[index] = true;\n }\n segmentIndices = [];\n segmentHasIcon = false;\n };\n\n items.forEach((item, index) => {\n if (!item) return;\n if (\n (item as MenuDividerType).type === 'divider' ||\n (item as MenuItemGroupType).type === 'group'\n ) {\n flush();\n return;\n }\n\n segmentIndices.push(index);\n if ((item as DropdownMenuCheckboxItem).type === 'checkbox') {\n segmentHasIcon = true;\n return;\n }\n if ('icon' in item && item.icon) segmentHasIcon = true;\n });\n\n flush();\n return flags;\n};\n\nconst renderItemContent = (\n item: MenuItemType | SubMenuType | DropdownMenuCheckboxItem,\n options?: { reserveIconSpace?: boolean; submenu?: boolean },\n iconNode?: ReactNode,\n) => {\n const label = getItemLabel(item);\n const extra = 'extra' in item ? item.extra : undefined;\n const hasCustomIcon = iconNode !== undefined;\n const hasIcon = hasCustomIcon ? Boolean(iconNode) : Boolean(item.icon);\n const shouldRenderIcon = hasCustomIcon\n ? Boolean(options?.reserveIconSpace || iconNode)\n : Boolean(hasIcon || options?.reserveIconSpace);\n\n return (\n <div className={styles.itemContent}>\n {shouldRenderIcon ? (\n <span aria-hidden={!hasIcon} className={styles.icon}>\n {hasCustomIcon ? iconNode : hasIcon ? renderIcon(item.icon) : null}\n </span>\n ) : null}\n <span className={styles.label}>{label}</span>\n {extra ? <span className={styles.extra}>{extra}</span> : null}\n {options?.submenu ? (\n <span className={styles.submenuArrow}>\n <ChevronRight size={16} />\n </span>\n ) : null}\n </div>\n );\n};\n\nconst invokeItemClick = (\n item: MenuItemType,\n keyPath: string[],\n event: ReactMouseEvent<HTMLElement> | ReactKeyboardEvent<HTMLElement>,\n) => {\n if (!item.onClick) return;\n const key = item.key ?? keyPath.at(-1) ?? '';\n const info: MenuInfo = {\n domEvent: event,\n item: event.currentTarget as MenuInfo['item'],\n key: String(key),\n keyPath,\n };\n item.onClick(info);\n};\n\nexport const renderDropdownMenuItems = (\n items: DropdownItem[],\n keyPath: string[] = [],\n options?: { reserveIconSpace?: boolean },\n): ReactNode[] => {\n const reserveIconSpaceMap =\n options?.reserveIconSpace === undefined ? getReserveIconSpaceMap(items) : null;\n\n return items.map((item, index) => {\n if (!item) return null;\n\n const fallbackKey = `${keyPath.join('-') || 'root'}-${index}`;\n const itemKey = getItemKey(item, fallbackKey);\n const nextKeyPath = [...keyPath, String(itemKey)];\n const reserveIconSpace = options?.reserveIconSpace ?? Boolean(reserveIconSpaceMap?.[index]);\n\n if ((item as DropdownMenuCheckboxItem).type === 'checkbox') {\n const checkboxItem = item as DropdownMenuCheckboxItem;\n const label = getItemLabel(checkboxItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = Boolean(checkboxItem.danger);\n const indicator = (\n <Menu.CheckboxItemIndicator>\n <Icon icon={Check} />\n </Menu.CheckboxItemIndicator>\n );\n\n return (\n <Menu.CheckboxItem\n checked={checkboxItem.checked}\n className={cx(styles.item, isDanger && styles.danger)}\n closeOnClick={checkboxItem.closeOnClick}\n defaultChecked={checkboxItem.defaultChecked}\n disabled={checkboxItem.disabled}\n key={itemKey}\n label={labelText}\n onCheckedChange={(checked) => checkboxItem.onCheckedChange?.(checked)}\n >\n {renderItemContent(checkboxItem, { reserveIconSpace }, indicator)}\n </Menu.CheckboxItem>\n );\n }\n\n if ((item as MenuDividerType).type === 'divider') {\n return <Menu.Separator className={styles.separator} key={itemKey} />;\n }\n\n if ((item as MenuItemGroupType).type === 'group') {\n const group = item as MenuItemGroupType;\n const groupReserveIconSpace = Boolean(\n group.children?.some((child) => Boolean(child && 'icon' in child && child.icon)),\n );\n return (\n <Menu.Group key={itemKey}>\n {group.label ? (\n <Menu.GroupLabel className={styles.groupLabel}>{group.label}</Menu.GroupLabel>\n ) : null}\n {group.children\n ? renderDropdownMenuItems(group.children, nextKeyPath, {\n reserveIconSpace: groupReserveIconSpace,\n })\n : null}\n </Menu.Group>\n );\n }\n\n if ((item as SubMenuType).type === 'submenu' || 'children' in item) {\n const submenu = item as SubMenuType;\n const label = getItemLabel(submenu);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in submenu && Boolean(submenu.danger);\n\n return (\n <Menu.SubmenuRoot key={itemKey}>\n <Menu.SubmenuTrigger\n className={cx(styles.item, isDanger && styles.danger)}\n disabled={submenu.disabled}\n label={labelText}\n >\n {renderItemContent(submenu, {\n reserveIconSpace,\n submenu: true,\n })}\n </Menu.SubmenuTrigger>\n <Menu.Portal>\n <Menu.Positioner alignOffset={-4} className={styles.positioner} sideOffset={-1}>\n <Menu.Popup className={styles.popup}>\n {submenu.children ? renderDropdownMenuItems(submenu.children, nextKeyPath) : null}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.SubmenuRoot>\n );\n }\n\n const menuItem = item as MenuItemType;\n const label = getItemLabel(menuItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in menuItem && Boolean(menuItem.danger);\n\n return (\n <Menu.Item\n className={cx(styles.item, isDanger && styles.danger)}\n disabled={menuItem.disabled}\n key={itemKey}\n label={labelText}\n onClick={(event) => invokeItemClick(menuItem, nextKeyPath, event)}\n >\n {renderItemContent(menuItem, { reserveIconSpace })}\n </Menu.Item>\n );\n });\n};\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { IconProps } from "../Icon/type.mjs";
2
+ import "../Icon/index.mjs";
3
+ import { GenericItemType } from "../Menu/type.mjs";
4
+ import "../Menu/index.mjs";
5
+ import { Key, ReactNode } from "react";
6
+ import { MenuPopupProps, MenuPortalProps, MenuPositionerProps, MenuRootProps, MenuTriggerProps } from "@base-ui/react/menu";
7
+
8
+ //#region src/DropdownMenu/type.d.ts
9
+ type DropdownMenuPlacement = 'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight';
10
+ interface DropdownMenuCheckboxItem {
11
+ checked?: boolean;
12
+ closeOnClick?: boolean;
13
+ danger?: boolean;
14
+ defaultChecked?: boolean;
15
+ disabled?: boolean;
16
+ extra?: ReactNode;
17
+ icon?: IconProps['icon'];
18
+ key: Key;
19
+ label?: ReactNode;
20
+ onCheckedChange?: (checked: boolean) => void;
21
+ title?: ReactNode;
22
+ type: 'checkbox';
23
+ }
24
+ type DropdownItem = GenericItemType | DropdownMenuCheckboxItem;
25
+ interface DropdownMenuProps<Payload = unknown> extends Omit<MenuRootProps<Payload>, 'children'> {
26
+ children: ReactNode;
27
+ items: DropdownItem[] | (() => DropdownItem[]);
28
+ placement?: DropdownMenuPlacement;
29
+ popupProps?: MenuPopupProps;
30
+ portalProps?: MenuPortalProps;
31
+ positionerProps?: MenuPositionerProps;
32
+ triggerProps?: Omit<MenuTriggerProps<Payload>, 'children'>;
33
+ }
34
+ //#endregion
35
+ export { DropdownItem, DropdownMenuCheckboxItem, DropdownMenuPlacement, DropdownMenuProps };
36
+ //# sourceMappingURL=type.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { EditableTextProps } from "./type.mjs";
2
- import * as react56 from "react";
2
+ import * as react26 from "react";
3
3
 
4
4
  //#region src/EditableText/EditableText.d.ts
5
- declare const EditableText: react56.NamedExoticComponent<EditableTextProps>;
5
+ declare const EditableText: react26.NamedExoticComponent<EditableTextProps>;
6
6
  //#endregion
7
7
  export { EditableText };
8
8
  //# sourceMappingURL=EditableText.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { EmojiPickerProps } from "./type.mjs";
2
- import * as react59 from "react";
2
+ import * as react25 from "react";
3
3
 
4
4
  //#region src/EmojiPicker/EmojiPicker.d.ts
5
- declare const EmojiPicker: react59.NamedExoticComponent<EmojiPickerProps>;
5
+ declare const EmojiPicker: react25.NamedExoticComponent<EmojiPickerProps>;
6
6
  //#endregion
7
7
  export { EmojiPicker };
8
8
  //# sourceMappingURL=EmojiPicker.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FlexBasicProps } from "./type.mjs";
2
- import * as react54 from "react";
2
+ import * as react22 from "react";
3
3
 
4
4
  //#region src/Flex/FlexBasic.d.ts
5
- declare const _default: react54.NamedExoticComponent<FlexBasicProps>;
5
+ declare const _default: react22.NamedExoticComponent<FlexBasicProps>;
6
6
  //#endregion
7
7
  export { _default };
8
8
  //# sourceMappingURL=FlexBasic.d.mts.map
@@ -1,10 +1,10 @@
1
- import * as react0 from "react";
1
+ import * as react58 from "react";
2
2
 
3
3
  //#region src/FontLoader/index.d.ts
4
4
  interface FontLoaderProps {
5
5
  url: string;
6
6
  }
7
- declare const FontLoader: react0.NamedExoticComponent<FontLoaderProps>;
7
+ declare const FontLoader: react58.NamedExoticComponent<FontLoaderProps>;
8
8
  //#endregion
9
9
  export { FontLoader, FontLoaderProps };
10
10
  //# sourceMappingURL=index.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FooterProps } from "./type.mjs";
2
- import * as react53 from "react";
2
+ import * as react23 from "react";
3
3
 
4
4
  //#region src/Footer/Footer.d.ts
5
- declare const Footer: react53.NamedExoticComponent<FooterProps>;
5
+ declare const Footer: react23.NamedExoticComponent<FooterProps>;
6
6
  //#endregion
7
7
  export { Footer };
8
8
  //# sourceMappingURL=Footer.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FormGroupProps } from "../type.mjs";
2
- import * as react50 from "react";
2
+ import * as react21 from "react";
3
3
 
4
4
  //#region src/Form/components/FormGroup.d.ts
5
- declare const FormGroup: react50.NamedExoticComponent<FormGroupProps>;
5
+ declare const FormGroup: react21.NamedExoticComponent<FormGroupProps>;
6
6
  //#endregion
7
7
  export { FormGroup };
8
8
  //# sourceMappingURL=FormGroup.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FormItemProps } from "../type.mjs";
2
- import * as react51 from "react";
2
+ import * as react20 from "react";
3
3
 
4
4
  //#region src/Form/components/FormItem.d.ts
5
- declare const FormItem: react51.NamedExoticComponent<FormItemProps>;
5
+ declare const FormItem: react20.NamedExoticComponent<FormItemProps>;
6
6
  //#endregion
7
7
  export { FormItem };
8
8
  //# sourceMappingURL=FormItem.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FormSubmitFooterProps } from "../type.mjs";
2
- import * as react52 from "react";
2
+ import * as react19 from "react";
3
3
 
4
4
  //#region src/Form/components/FormSubmitFooter.d.ts
5
- declare const FormSubmitFooter: react52.NamedExoticComponent<FormSubmitFooterProps>;
5
+ declare const FormSubmitFooter: react19.NamedExoticComponent<FormSubmitFooterProps>;
6
6
  //#endregion
7
7
  export { FormSubmitFooter };
8
8
  //# sourceMappingURL=FormSubmitFooter.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { FormModalProps } from "./type.mjs";
2
- import * as react31 from "react";
2
+ import * as react24 from "react";
3
3
 
4
4
  //#region src/FormModal/FormModal.d.ts
5
- declare const FormModal: react31.NamedExoticComponent<FormModalProps>;
5
+ declare const FormModal: react24.NamedExoticComponent<FormModalProps>;
6
6
  //#endregion
7
7
  export { FormModal };
8
8
  //# sourceMappingURL=FormModal.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { GuideCardProps } from "./type.mjs";
2
- import * as react109 from "react";
2
+ import * as react133 from "react";
3
3
 
4
4
  //#region src/GuideCard/GuideCard.d.ts
5
- declare const GuideCard: react109.NamedExoticComponent<GuideCardProps>;
5
+ declare const GuideCard: react133.NamedExoticComponent<GuideCardProps>;
6
6
  //#endregion
7
7
  export { GuideCard };
8
8
  //# sourceMappingURL=GuideCard.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { HeaderProps } from "./type.mjs";
2
- import * as react49 from "react";
2
+ import * as react18 from "react";
3
3
 
4
4
  //#region src/Header/Header.d.ts
5
- declare const Header: react49.NamedExoticComponent<HeaderProps>;
5
+ declare const Header: react18.NamedExoticComponent<HeaderProps>;
6
6
  //#endregion
7
7
  export { Header };
8
8
  //# sourceMappingURL=Header.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { HighlighterProps } from "./type.mjs";
2
- import * as react47 from "react";
2
+ import * as react16 from "react";
3
3
 
4
4
  //#region src/Highlighter/Highlighter.d.ts
5
- declare const Highlighter: react47.NamedExoticComponent<HighlighterProps>;
5
+ declare const Highlighter: react16.NamedExoticComponent<HighlighterProps>;
6
6
  //#endregion
7
7
  export { Highlighter };
8
8
  //# sourceMappingURL=Highlighter.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { SyntaxHighlighterProps } from "../type.mjs";
2
- import * as react48 from "react";
2
+ import * as react17 from "react";
3
3
 
4
4
  //#region src/Highlighter/SyntaxHighlighter/index.d.ts
5
- declare const SyntaxHighlighter: react48.NamedExoticComponent<SyntaxHighlighterProps>;
5
+ declare const SyntaxHighlighter: react17.NamedExoticComponent<SyntaxHighlighterProps>;
6
6
  //#endregion
7
7
  export { SyntaxHighlighter };
8
8
  //# sourceMappingURL=index.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { HotkeyProps } from "./type.mjs";
2
- import * as react46 from "react";
2
+ import * as react15 from "react";
3
3
 
4
4
  //#region src/Hotkey/Hotkey.d.ts
5
- declare const Hotkey: react46.NamedExoticComponent<HotkeyProps>;
5
+ declare const Hotkey: react15.NamedExoticComponent<HotkeyProps>;
6
6
  //#endregion
7
7
  export { Hotkey };
8
8
  //# sourceMappingURL=Hotkey.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { HotkeyInputProps } from "./type.mjs";
2
- import * as react5 from "react";
2
+ import * as react13 from "react";
3
3
 
4
4
  //#region src/HotkeyInput/HotkeyInput.d.ts
5
- declare const HotkeyInput: react5.NamedExoticComponent<HotkeyInputProps>;
5
+ declare const HotkeyInput: react13.NamedExoticComponent<HotkeyInputProps>;
6
6
  //#endregion
7
7
  export { HotkeyInput };
8
8
  //# sourceMappingURL=HotkeyInput.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { IconProps } from "./type.mjs";
2
- import * as react45 from "react";
2
+ import * as react12 from "react";
3
3
 
4
4
  //#region src/Icon/Icon.d.ts
5
- declare const Icon: react45.NamedExoticComponent<IconProps>;
5
+ declare const Icon: react12.NamedExoticComponent<IconProps>;
6
6
  //#endregion
7
7
  export { Icon };
8
8
  //# sourceMappingURL=Icon.d.mts.map
@@ -1,11 +1,11 @@
1
1
  import { IconProps } from "../type.mjs";
2
- import * as react43 from "react";
2
+ import * as react10 from "react";
3
3
  import { ReactNode } from "react";
4
4
 
5
5
  //#region src/Icon/components/IconProvider.d.ts
6
6
  type IconContentConfig = Omit<IconProps, 'icon' | 'ref'>;
7
- declare const IconContext: react43.Context<IconContentConfig>;
8
- declare const IconProvider: react43.NamedExoticComponent<{
7
+ declare const IconContext: react10.Context<IconContentConfig>;
8
+ declare const IconProvider: react10.NamedExoticComponent<{
9
9
  children: ReactNode;
10
10
  config?: IconContentConfig;
11
11
  }>;
@@ -1,8 +1,8 @@
1
1
  import { PreviewGroupProps } from "./type.mjs";
2
- import * as react42 from "react";
2
+ import * as react73 from "react";
3
3
 
4
4
  //#region src/Image/PreviewGroup.d.ts
5
- declare const PreviewGroup: react42.NamedExoticComponent<PreviewGroupProps>;
5
+ declare const PreviewGroup: react73.NamedExoticComponent<PreviewGroupProps>;
6
6
  //#endregion
7
7
  export { PreviewGroup };
8
8
  //# sourceMappingURL=PreviewGroup.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { ImageSelectProps } from "./type.mjs";
2
- import * as react71 from "react";
2
+ import * as react109 from "react";
3
3
 
4
4
  //#region src/ImageSelect/ImageSelect.d.ts
5
- declare const ImageSelect: react71.NamedExoticComponent<ImageSelectProps>;
5
+ declare const ImageSelect: react109.NamedExoticComponent<ImageSelectProps>;
6
6
  //#endregion
7
7
  export { ImageSelect };
8
8
  //# sourceMappingURL=ImageSelect.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { InputProps } from "./type.mjs";
2
- import * as react110 from "react";
2
+ import * as react134 from "react";
3
3
 
4
4
  //#region src/Input/Input.d.ts
5
- declare const Input: react110.NamedExoticComponent<InputProps>;
5
+ declare const Input: react134.NamedExoticComponent<InputProps>;
6
6
  //#endregion
7
7
  export { Input };
8
8
  //# sourceMappingURL=Input.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { InputNumberProps } from "./type.mjs";
2
- import * as react111 from "react";
2
+ import * as react135 from "react";
3
3
 
4
4
  //#region src/Input/InputNumber.d.ts
5
- declare const InputNumber: react111.NamedExoticComponent<InputNumberProps>;
5
+ declare const InputNumber: react135.NamedExoticComponent<InputNumberProps>;
6
6
  //#endregion
7
7
  export { InputNumber };
8
8
  //# sourceMappingURL=InputNumber.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { InputOPTProps } from "./type.mjs";
2
- import * as react112 from "react";
2
+ import * as react136 from "react";
3
3
 
4
4
  //#region src/Input/InputOPT.d.ts
5
- declare const InputOPT: react112.NamedExoticComponent<InputOPTProps>;
5
+ declare const InputOPT: react136.NamedExoticComponent<InputOPTProps>;
6
6
  //#endregion
7
7
  export { InputOPT };
8
8
  //# sourceMappingURL=InputOPT.d.mts.map