@aloudata/aloudata-design 3.0.0-beta.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/AProgress/index.d.ts +1 -1
  2. package/dist/AProgress/index.js +19 -5
  3. package/dist/AProgress/index.js.map +1 -1
  4. package/dist/Alert/index.d.ts +1 -1
  5. package/dist/Alert/index.js +22 -8
  6. package/dist/Alert/index.js.map +1 -1
  7. package/dist/Avatar/component/Avatar/index.d.ts +1 -1
  8. package/dist/Avatar/component/Avatar/index.js +4 -4
  9. package/dist/Avatar/component/Avatar/index.js.map +1 -1
  10. package/dist/Avatar/component/Avatar/type.d.ts +1 -1
  11. package/dist/Avatar/component/Avatar/type.js +6 -1
  12. package/dist/Avatar/component/Avatar/type.js.map +1 -1
  13. package/dist/Avatar/index.js +67 -8
  14. package/dist/Avatar/index.js.map +1 -1
  15. package/dist/Badge/index.d.ts +1 -0
  16. package/dist/Badge/index.js +32 -9
  17. package/dist/Badge/index.js.map +1 -1
  18. package/dist/Breadcrumb/index.js +21 -12
  19. package/dist/Breadcrumb/index.js.map +1 -1
  20. package/dist/Button/index.d.ts +2 -0
  21. package/dist/Button/index.js +39 -32
  22. package/dist/Button/index.js.map +1 -1
  23. package/dist/Card/index.js +5 -5
  24. package/dist/Card/index.js.map +1 -1
  25. package/dist/Checkbox/index.js +5 -12
  26. package/dist/Checkbox/index.js.map +1 -1
  27. package/dist/Checkbox/type.d.ts +3 -1
  28. package/dist/Collapse/index.js +40 -24
  29. package/dist/Collapse/index.js.map +1 -1
  30. package/dist/DataPreviewTable/components/Body/Cell.js +5 -4
  31. package/dist/DataPreviewTable/components/Body/Cell.js.map +1 -1
  32. package/dist/DataPreviewTable/components/Body/Error.js +1 -1
  33. package/dist/DataPreviewTable/components/Body/Error.js.map +1 -1
  34. package/dist/DataPreviewTable/components/Body/index.js +2 -1
  35. package/dist/DataPreviewTable/components/Body/index.js.map +1 -1
  36. package/dist/DataPreviewTable/components/DragBar/index.js +1 -1
  37. package/dist/DataPreviewTable/components/DragBar/index.js.map +1 -1
  38. package/dist/DataPreviewTable/components/Header/index.js +14 -12
  39. package/dist/DataPreviewTable/components/Header/index.js.map +1 -1
  40. package/dist/DataPreviewTable/index.js +5 -6
  41. package/dist/DataPreviewTable/index.js.map +1 -1
  42. package/dist/DatePicker/index.d.ts +4 -0
  43. package/dist/DatePicker/index.js +8 -6
  44. package/dist/DatePicker/index.js.map +1 -1
  45. package/dist/Drawer/index.d.ts +1 -0
  46. package/dist/Drawer/index.js +102 -47
  47. package/dist/Drawer/index.js.map +1 -1
  48. package/dist/Dropdown/index.d.ts +5 -0
  49. package/dist/Dropdown/index.js +155 -34
  50. package/dist/Dropdown/index.js.map +1 -1
  51. package/dist/Form/index.d.ts +45 -5
  52. package/dist/Form/index.js +59 -34
  53. package/dist/Form/index.js.map +1 -1
  54. package/dist/HighlightText/index.js +1 -1
  55. package/dist/HighlightText/index.js.map +1 -1
  56. package/dist/Input/components/Input/index.d.ts +5 -2
  57. package/dist/Input/components/Input/index.js +18 -6
  58. package/dist/Input/components/Input/index.js.map +1 -1
  59. package/dist/InputNumber/type.d.ts +2 -2
  60. package/dist/InputSearch/index.js +0 -1
  61. package/dist/InputSearch/index.js.map +1 -1
  62. package/dist/Layout/index.js +1 -1
  63. package/dist/Layout/index.js.map +1 -1
  64. package/dist/LogicTree/DisplayLogicTree.d.ts +1 -1
  65. package/dist/LogicTree/DisplayLogicTree.js.map +1 -1
  66. package/dist/LogicTree/components/DisplayLogicItem/index.d.ts +1 -1
  67. package/dist/LogicTree/components/DisplayLogicItem/index.js +1 -1
  68. package/dist/LogicTree/components/DisplayLogicItem/index.js.map +1 -1
  69. package/dist/LogicTree/components/LogicItem/index.js +2 -3
  70. package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
  71. package/dist/LogicTree/index.d.ts +1 -1
  72. package/dist/LogicTree/index.js +26 -10
  73. package/dist/LogicTree/index.js.map +1 -1
  74. package/dist/MemberPicker/components/NickLabel.js +1 -1
  75. package/dist/MemberPicker/components/NickLabel.js.map +1 -1
  76. package/dist/MemberPicker/components/Panel.js +13 -14
  77. package/dist/MemberPicker/components/Panel.js.map +1 -1
  78. package/dist/MemberPicker/index.js +10 -5
  79. package/dist/MemberPicker/index.js.map +1 -1
  80. package/dist/Menu/index.d.ts +4 -0
  81. package/dist/Menu/index.js +35 -13
  82. package/dist/Menu/index.js.map +1 -1
  83. package/dist/Modal/index.d.ts +5 -2
  84. package/dist/Modal/index.js +119 -66
  85. package/dist/Modal/index.js.map +1 -1
  86. package/dist/Popconfirm/index.js +6 -1
  87. package/dist/Popconfirm/index.js.map +1 -1
  88. package/dist/Popover/index.js +5 -3
  89. package/dist/Popover/index.js.map +1 -1
  90. package/dist/Progress/index.d.ts +0 -3
  91. package/dist/Progress/index.js +0 -3
  92. package/dist/Progress/index.js.map +1 -1
  93. package/dist/Radio/components/Radio/index.js +14 -25
  94. package/dist/Radio/components/Radio/index.js.map +1 -1
  95. package/dist/RenameInput/index.js +0 -1
  96. package/dist/RenameInput/index.js.map +1 -1
  97. package/dist/Select/BaseSelect.js +12 -7
  98. package/dist/Select/BaseSelect.js.map +1 -1
  99. package/dist/Select/Selector/MultipleSelector.js +10 -6
  100. package/dist/Select/Selector/MultipleSelector.js.map +1 -1
  101. package/dist/Select/Selector/index.d.ts +2 -0
  102. package/dist/Select/Selector/index.js +1 -1
  103. package/dist/Select/Selector/index.js.map +1 -1
  104. package/dist/Select/components/Suffix.js +1 -1
  105. package/dist/Select/components/Suffix.js.map +1 -1
  106. package/dist/Select/interface.d.ts +4 -0
  107. package/dist/Select/utils/getWidthStyle.js.map +1 -1
  108. package/dist/Steps/index.js +6 -6
  109. package/dist/Steps/index.js.map +1 -1
  110. package/dist/Switch/index.js +21 -7
  111. package/dist/Switch/index.js.map +1 -1
  112. package/dist/Table/components/Footer/index.js +1 -1
  113. package/dist/Table/components/Footer/index.js.map +1 -1
  114. package/dist/Table/hooks/useRowDnd.js +2 -8
  115. package/dist/Table/hooks/useRowDnd.js.map +1 -1
  116. package/dist/Table/hooks/useRowSelection.d.ts +1 -1
  117. package/dist/Table/hooks/useRowSelection.js +7 -9
  118. package/dist/Table/hooks/useRowSelection.js.map +1 -1
  119. package/dist/Table/index.js +1 -1
  120. package/dist/Table/index.js.map +1 -1
  121. package/dist/Tabs/index.js +37 -30
  122. package/dist/Tabs/index.js.map +1 -1
  123. package/dist/Tooltip/index.js +5 -3
  124. package/dist/Tooltip/index.js.map +1 -1
  125. package/dist/Tour/index.js +48 -38
  126. package/dist/Tour/index.js.map +1 -1
  127. package/dist/Tree/DirectoryTree.d.ts +2 -2
  128. package/dist/Tree/DirectoryTree.js.map +1 -1
  129. package/dist/Tree/Tree.d.ts +2 -2
  130. package/dist/Tree/Tree2.js +2 -2
  131. package/dist/Tree/Tree2.js.map +1 -1
  132. package/dist/Upload/index.d.ts +15 -2
  133. package/dist/Upload/index.js +4 -2
  134. package/dist/Upload/index.js.map +1 -1
  135. package/dist/_utils/floatingLayer.d.ts +15 -0
  136. package/dist/_utils/floatingLayer.js +30 -0
  137. package/dist/_utils/floatingLayer.js.map +1 -0
  138. package/dist/_utils/storybookArgTypes.d.ts +11 -0
  139. package/dist/_utils/storybookArgTypes.js +2 -0
  140. package/dist/aloudata-design.css +1 -1
  141. package/dist/index.d.ts +15 -6
  142. package/dist/index.js +8 -3
  143. package/dist/theme/createTheme.d.ts +2 -0
  144. package/dist/theme/createTheme.js +46 -0
  145. package/dist/theme/createTheme.js.map +1 -0
  146. package/dist/theme/defaultTheme.d.ts +2 -0
  147. package/dist/theme/defaultTheme.js +19 -0
  148. package/dist/theme/defaultTheme.js.map +1 -0
  149. package/dist/theme/index.d.ts +5 -0
  150. package/dist/theme/index.js +4 -0
  151. package/dist/theme/initAldTheme.d.ts +2 -0
  152. package/dist/theme/initAldTheme.js +26 -0
  153. package/dist/theme/initAldTheme.js.map +1 -0
  154. package/dist/theme/themeToCssVars.d.ts +2 -0
  155. package/dist/theme/themeToCssVars.js +144 -0
  156. package/dist/theme/themeToCssVars.js.map +1 -0
  157. package/dist/theme/tokenMap.d.ts +5 -0
  158. package/dist/theme/tokenMap.js +12 -0
  159. package/dist/theme/tokenMap.js.map +1 -0
  160. package/dist/theme/types.d.ts +20 -0
  161. package/dist/theme/types.js +2 -0
  162. package/dist/theme.d.ts +2 -0
  163. package/package.json +8 -3
  164. package/dist/_utils/SimpleOverflow.d.ts +0 -14
  165. package/dist/_utils/SimpleOverflow.js +0 -61
  166. package/dist/_utils/SimpleOverflow.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Collapse/index.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ArrowDownLightLine, ArrowRightLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface CollapsePanelProps {\n key: string;\n header?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n disabled?: boolean;\n extra?: React.ReactNode;\n forceRender?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n showArrow?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nexport interface CollapseProps {\n activeKey?: string | string[];\n defaultActiveKey?: string | string[];\n accordion?: boolean;\n onChange?: (key: string | string[]) => void;\n className?: string;\n style?: React.CSSProperties;\n bordered?: boolean;\n expandIconPosition?: 'start' | 'end' | 'left' | 'right';\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n ghost?: boolean;\n size?: 'large' | 'middle' | 'small';\n collapsible?: 'header' | 'icon' | 'disabled';\n children?: React.ReactNode;\n items?: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }>;\n}\n\n/** Internal rendering component for a single panel */\nfunction CollapsePanelInternal(props: {\n panelKey: string;\n header: React.ReactNode;\n isActive: boolean;\n onToggle: () => void;\n disabled?: boolean;\n extra?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n forceRender?: boolean;\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n}) {\n const {\n header,\n isActive,\n onToggle,\n disabled,\n extra,\n className,\n style,\n children,\n forceRender,\n expandIcon,\n expandIconPosition = 'start',\n } = props;\n\n const iconNode = expandIcon ? (\n expandIcon({ isActive })\n ) : isActive ? (\n <ArrowDownLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n ) : (\n <ArrowRightLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n );\n\n const iconElement = (\n <span className=\"ald-collapse-expand-icon tw-flex tw-items-center\">\n {iconNode}\n </span>\n );\n\n return (\n <div\n className={cn(\n 'ald-collapse-item tw-border-b tw-border-solid tw-border-[var(--border-default)]',\n isActive && 'ald-collapse-item-active',\n disabled && 'tw-pointer-events-none tw-opacity-50',\n className,\n )}\n style={style}\n >\n <div\n className=\"ald-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-px-4 tw-py-3\"\n onClick={disabled ? undefined : onToggle}\n >\n {expandIconPosition === 'start' && iconElement}\n <span className=\"ald-collapse-header-text tw-flex-1\">{header}</span>\n {extra && <span className=\"ald-collapse-extra\">{extra}</span>}\n {expandIconPosition === 'end' && iconElement}\n </div>\n {(isActive || forceRender) && (\n <div\n className=\"ald-collapse-content tw-px-4 tw-pb-4\"\n style={!isActive && forceRender ? { display: 'none' } : undefined}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Checks whether a React element is a Collapse.Panel.\n * We tag the Panel component with a `__COLLAPSE_PANEL` flag\n * so we can detect it regardless of module wrapper differences.\n */\nfunction isPanelElement(\n child: React.ReactNode,\n): child is React.ReactElement<CollapsePanelProps> {\n if (!React.isValidElement(child)) return false;\n return (child.type as any)?.__COLLAPSE_PANEL === true;\n}\n\n/**\n * Convert Collapse.Panel children into the internal items format.\n */\nfunction panelChildrenToItems(children: React.ReactNode) {\n const items: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }> = [];\n\n React.Children.forEach(children, (child) => {\n if (!isPanelElement(child)) return;\n const {\n header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n } = child.props;\n\n // The `key` prop is not part of child.props in React — access it from child.key\n const panelKey =\n child.key !== null && child.key !== undefined ? String(child.key) : '';\n\n items.push({\n key: panelKey,\n label: header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n });\n });\n\n return items;\n}\n\nconst Collapse = (props: CollapseProps) => {\n const {\n defaultActiveKey = [],\n activeKey: controlledActiveKey,\n accordion,\n onChange,\n className,\n style,\n bordered = true,\n expandIconPosition,\n expandIcon,\n items: itemsProp,\n children,\n } = props;\n\n const resolvedPosition =\n expandIconPosition === 'left'\n ? 'start'\n : expandIconPosition === 'right'\n ? 'end'\n : expandIconPosition ?? 'start';\n\n const normalizeKeys = (keys: string | string[] | undefined): string[] => {\n if (!keys) return [];\n return Array.isArray(keys) ? keys : [keys];\n };\n\n const [internalActiveKey, setInternalActiveKey] = useState<string[]>(\n normalizeKeys(defaultActiveKey),\n );\n\n const activeKeys =\n controlledActiveKey !== undefined\n ? normalizeKeys(controlledActiveKey)\n : internalActiveKey;\n\n const toggleKey = (key: string) => {\n let newKeys: string[];\n if (accordion) {\n newKeys = activeKeys.includes(key) ? [] : [key];\n } else {\n newKeys = activeKeys.includes(key)\n ? activeKeys.filter((k) => k !== key)\n : [...activeKeys, key];\n }\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(newKeys);\n }\n onChange?.(accordion ? newKeys[0] || '' : newKeys);\n };\n\n // Resolve items: from `items` prop, or by converting Panel children\n const items =\n itemsProp || (children ? panelChildrenToItems(children) : undefined);\n\n const renderItems = () => {\n if (items && items.length > 0) {\n return items.map((item) => (\n <CollapsePanelInternal\n key={item.key}\n panelKey={item.key}\n header={item.label}\n isActive={activeKeys.includes(item.key)}\n onToggle={() => toggleKey(item.key)}\n disabled={item.disabled || item.collapsible === 'disabled'}\n extra={item.extra}\n className={item.className}\n style={item.style}\n forceRender={item.forceRender}\n expandIcon={expandIcon}\n expandIconPosition={resolvedPosition}\n >\n {item.children}\n </CollapsePanelInternal>\n ));\n }\n // If children are not Panel elements (rare fallback), render them as-is\n return children;\n };\n\n return (\n <div\n className={cn(\n 'ald-collapse',\n bordered &&\n 'tw-rounded-[6px] tw-border tw-border-solid tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtle)]',\n className,\n )}\n style={style}\n >\n {renderItems()}\n </div>\n );\n};\n\n/**\n * Collapse.Panel — legacy sub-component for backwards compatibility.\n * When used as a child of <Collapse>, the parent extracts its props\n * and renders the panels via the internal CollapsePanelInternal component.\n * Panel itself never renders directly; the parent handles rendering.\n */\nconst Panel: React.FC<CollapsePanelProps> = ({ children }) => {\n // This component should never render on its own — Collapse extracts\n // its props. But if used outside of Collapse, render children as fallback.\n return <>{children}</>;\n};\n\n// Tag for detection by isPanelElement\n(Panel as any).__COLLAPSE_PANEL = true;\n\nCollapse.Panel = Panel;\n\nexport default Collapse;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Collapse/index.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { ArrowRightLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface CollapsePanelProps {\n key: string;\n header?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n disabled?: boolean;\n extra?: React.ReactNode;\n forceRender?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n showArrow?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nexport interface CollapseProps {\n activeKey?: string | string[];\n defaultActiveKey?: string | string[];\n accordion?: boolean;\n onChange?: (key: string | string[]) => void;\n className?: string;\n style?: React.CSSProperties;\n bordered?: boolean;\n expandIconPosition?: 'start' | 'end' | 'left' | 'right';\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n ghost?: boolean;\n size?: 'large' | 'middle' | 'small';\n collapsible?: 'header' | 'icon' | 'disabled';\n children?: React.ReactNode;\n items?: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }>;\n}\n\n/** Internal rendering component for a single panel */\nfunction CollapsePanelInternal(props: {\n panelKey: string;\n header: React.ReactNode;\n isActive: boolean;\n onToggle: () => void;\n disabled?: boolean;\n extra?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n forceRender?: boolean;\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n bordered?: boolean;\n}) {\n const {\n header,\n isActive,\n onToggle,\n disabled,\n extra,\n className,\n style,\n children,\n forceRender,\n expandIcon,\n expandIconPosition = 'start',\n bordered,\n } = props;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [rendered, setRendered] = useState(isActive || !!forceRender);\n\n // Ensure content is in DOM before expanding so transition can play\n if (isActive && !rendered) {\n setRendered(true);\n }\n\n const handleTransitionEnd = () => {\n if (!isActive && !forceRender) {\n setRendered(false);\n }\n };\n\n const iconNode = expandIcon ? (\n expandIcon({ isActive })\n ) : (\n <ArrowRightLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n );\n\n // antd 兼容:保留 ant-collapse-expand-icon class,消费方 CSS 可能依赖该选择器\n const iconElement = (\n <span\n className=\"ald-collapse-expand-icon ant-collapse-expand-icon tw-flex tw-items-center\"\n style={{\n transform: isActive ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 200ms',\n }}\n >\n {iconNode}\n </span>\n );\n\n return (\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-collapse-item ant-collapse-item tw-w-full',\n isActive && 'ald-collapse-item-active',\n disabled && 'tw-pointer-events-none tw-opacity-50',\n className,\n )}\n style={style}\n >\n <div\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n className=\"ald-collapse-header ant-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-p-3\"\n onClick={disabled ? undefined : onToggle}\n >\n {expandIconPosition === 'start' && iconElement}\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n <span className=\"ald-collapse-header-text ant-collapse-header-text tw-flex-1 tw-text-sm tw-font-medium tw-leading-5 tw-text-[var(--content-primary)]\">\n {header}\n </span>\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n {extra && (\n <span className=\"ald-collapse-extra ant-collapse-extra\">{extra}</span>\n )}\n {expandIconPosition === 'end' && iconElement}\n </div>\n <div\n className=\"tw-grid tw-transition-[grid-template-rows] tw-duration-200\"\n style={{ gridTemplateRows: isActive ? '1fr' : '0fr' }}\n onTransitionEnd={handleTransitionEnd}\n >\n <div className=\"tw-overflow-hidden\">\n {rendered && (\n <div\n ref={contentRef}\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n className={cn(\n 'ald-collapse-content ant-collapse-content tw-flex tw-items-start tw-gap-2.5 tw-self-stretch',\n bordered\n ? 'tw-bg-[var(--background-default)] tw-p-4'\n : 'tw-pb-4 tw-pl-10 tw-pr-4 tw-pt-0',\n )}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Checks whether a React element is a Collapse.Panel.\n * We tag the Panel component with a `__COLLAPSE_PANEL` flag\n * so we can detect it regardless of module wrapper differences.\n */\nfunction isPanelElement(\n child: React.ReactNode,\n): child is React.ReactElement<CollapsePanelProps> {\n if (!React.isValidElement(child)) return false;\n return (child.type as any)?.__COLLAPSE_PANEL === true;\n}\n\n/**\n * Convert Collapse.Panel children into the internal items format.\n */\nfunction panelChildrenToItems(children: React.ReactNode) {\n const items: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }> = [];\n\n React.Children.forEach(children, (child) => {\n if (!isPanelElement(child)) return;\n const {\n header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n } = child.props;\n\n // The `key` prop is not part of child.props in React — access it from child.key\n const panelKey =\n child.key !== null && child.key !== undefined ? String(child.key) : '';\n\n items.push({\n key: panelKey,\n label: header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n });\n });\n\n return items;\n}\n\nconst Collapse = (props: CollapseProps) => {\n const {\n defaultActiveKey = [],\n activeKey: controlledActiveKey,\n accordion,\n onChange,\n className,\n style,\n bordered = true,\n ghost,\n expandIconPosition,\n expandIcon,\n items: itemsProp,\n children,\n } = props;\n\n const resolvedPosition =\n expandIconPosition === 'left'\n ? 'start'\n : expandIconPosition === 'right'\n ? 'end'\n : expandIconPosition ?? 'start';\n\n const normalizeKeys = (keys: string | string[] | undefined): string[] => {\n if (!keys) return [];\n return Array.isArray(keys) ? keys : [keys];\n };\n\n const [internalActiveKey, setInternalActiveKey] = useState<string[]>(\n normalizeKeys(defaultActiveKey),\n );\n\n const activeKeys =\n controlledActiveKey !== undefined\n ? normalizeKeys(controlledActiveKey)\n : internalActiveKey;\n\n const toggleKey = (key: string) => {\n let newKeys: string[];\n if (accordion) {\n newKeys = activeKeys.includes(key) ? [] : [key];\n } else {\n newKeys = activeKeys.includes(key)\n ? activeKeys.filter((k) => k !== key)\n : [...activeKeys, key];\n }\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(newKeys);\n }\n onChange?.(accordion ? newKeys[0] || '' : newKeys);\n };\n\n // Resolve items: from `items` prop, or by converting Panel children\n const items =\n itemsProp || (children ? panelChildrenToItems(children) : undefined);\n\n const renderItems = () => {\n if (items && items.length > 0) {\n return items.map((item, index) => (\n <React.Fragment key={item.key}>\n {index > 0 && <div className=\"ald-collapse-divider\" />}\n <CollapsePanelInternal\n panelKey={item.key}\n header={item.label}\n isActive={activeKeys.includes(item.key)}\n onToggle={() => toggleKey(item.key)}\n disabled={item.disabled || item.collapsible === 'disabled'}\n extra={item.extra}\n className={item.className}\n style={item.style}\n forceRender={item.forceRender}\n expandIcon={expandIcon}\n expandIconPosition={resolvedPosition}\n bordered={bordered}\n >\n {item.children}\n </CollapsePanelInternal>\n </React.Fragment>\n ));\n }\n // If children are not Panel elements (rare fallback), render them as-is\n return children;\n };\n\n return (\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-collapse ant-collapse tw-flex tw-flex-col tw-items-start tw-overflow-hidden tw-rounded-r-75 [&>.ald-collapse-divider]:tw-h-px [&>.ald-collapse-divider]:tw-w-full [&>.ald-collapse-divider]:tw-bg-[var(--border-default)]',\n !bordered && !ghost && 'tw-bg-[var(--background-neutral-subtle)]',\n bordered &&\n 'tw-border tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-neutral-subtle)]',\n className,\n )}\n style={style}\n >\n {renderItems()}\n </div>\n );\n};\n\n/**\n * Collapse.Panel — legacy sub-component for backwards compatibility.\n * When used as a child of <Collapse>, the parent extracts its props\n * and renders the panels via the internal CollapsePanelInternal component.\n * Panel itself never renders directly; the parent handles rendering.\n */\nconst Panel: React.FC<CollapsePanelProps> = ({ children }) => {\n // This component should never render on its own — Collapse extracts\n // its props. But if used outside of Collapse, render children as fallback.\n return <>{children}</>;\n};\n\n// Tag for detection by isPanelElement\n(Panel as any).__COLLAPSE_PANEL = true;\n\nCollapse.Panel = Panel;\n\nexport default Collapse;\n"],"mappings":"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"}
@@ -2,16 +2,17 @@ import { cn } from "../../../lib/utils.js";
2
2
  import "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/DataPreviewTable/components/Body/Cell.tsx
5
+ var bodyCellClassName = "ald-data-preview-body-cell tw-overflow-hidden tw-whitespace-nowrap tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-subtle)] tw-px-1 tw-py-0.5 tw-text-xs tw-leading-4 tw-text-[var(--alias-colors-text-default)]";
5
6
  function Cell(props) {
6
7
  const { style, value } = props;
7
8
  if (typeof value === "string") return /* @__PURE__ */ jsx("div", {
8
9
  style,
9
- className: "ald-data-preview-body-cell",
10
+ className: bodyCellClassName,
10
11
  children: value
11
12
  });
12
13
  if (typeof value === "number" || typeof value === "boolean") return /* @__PURE__ */ jsx("div", {
13
14
  style,
14
- className: "ald-data-preview-body-cell",
15
+ className: bodyCellClassName,
15
16
  children: JSON.stringify(value)
16
17
  });
17
18
  if (typeof value === "object" && value === null) return /* @__PURE__ */ jsx("div", {
@@ -20,12 +21,12 @@ function Cell(props) {
20
21
  color: "var(--alias-colors-text-subtle)",
21
22
  ...style
22
23
  },
23
- className: cn("ald-data-preview-body-cell", "ald-data-preview-body-cell-null"),
24
+ className: cn(bodyCellClassName, "ald-data-preview-body-cell-null"),
24
25
  children: "null"
25
26
  });
26
27
  return /* @__PURE__ */ jsx("div", {
27
28
  style,
28
- className: "ald-data-preview-body-cell",
29
+ className: bodyCellClassName,
29
30
  children: value
30
31
  });
31
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/Cell.tsx"],"sourcesContent":["interface ICell {\n value: TValue;\n style?: React.CSSProperties;\n}\nimport { cn } from '../../../lib/utils';\nimport React from 'react';\nimport { TValue } from '../../interface';\nexport default function Cell(props: ICell) {\n const { style, value } = props;\n if (typeof value === 'string') {\n return (\n <div style={style} className=\"ald-data-preview-body-cell\">\n {value}\n </div>\n );\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return (\n <div style={style} className=\"ald-data-preview-body-cell\">\n {JSON.stringify(value)}\n </div>\n );\n }\n if (typeof value === 'object' && value === null) {\n return (\n <div\n style={{\n fontStyle: 'italic',\n color: 'var(--alias-colors-text-subtle)',\n ...style,\n }}\n className={cn(\n 'ald-data-preview-body-cell',\n 'ald-data-preview-body-cell-null',\n )}\n >\n null\n </div>\n );\n }\n return (\n <div style={style} className=\"ald-data-preview-body-cell\">\n {value}\n </div>\n );\n}\n"],"mappings":";;;;AAOA,SAAwB,KAAK,OAAc;CACzC,MAAM,EAAE,OAAO,UAAU;AACzB,KAAI,OAAO,UAAU,SACnB,QACE,oBAAC,OAAD;EAAY;EAAO,WAAU;YAC1B;EACG,CAAA;AAGV,KAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAChD,QACE,oBAAC,OAAD;EAAY;EAAO,WAAU;YAC1B,KAAK,UAAU,MAAM;EAClB,CAAA;AAGV,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QACE,oBAAC,OAAD;EACE,OAAO;GACL,WAAW;GACX,OAAO;GACP,GAAG;GACJ;EACD,WAAW,GACT,8BACA,kCACD;YACF;EAEK,CAAA;AAGV,QACE,oBAAC,OAAD;EAAY;EAAO,WAAU;YAC1B;EACG,CAAA"}
1
+ {"version":3,"file":"Cell.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/Cell.tsx"],"sourcesContent":["interface ICell {\n value: TValue;\n style?: React.CSSProperties;\n}\nimport { cn } from '../../../lib/utils';\nimport React from 'react';\nimport { TValue } from '../../interface';\n\nconst bodyCellClassName =\n 'ald-data-preview-body-cell tw-overflow-hidden tw-whitespace-nowrap tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-subtle)] tw-px-1 tw-py-0.5 tw-text-xs tw-leading-4 tw-text-[var(--alias-colors-text-default)]';\n\nexport default function Cell(props: ICell) {\n const { style, value } = props;\n if (typeof value === 'string') {\n return (\n <div style={style} className={bodyCellClassName}>\n {value}\n </div>\n );\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return (\n <div style={style} className={bodyCellClassName}>\n {JSON.stringify(value)}\n </div>\n );\n }\n if (typeof value === 'object' && value === null) {\n return (\n <div\n style={{\n fontStyle: 'italic',\n color: 'var(--alias-colors-text-subtle)',\n ...style,\n }}\n className={cn(bodyCellClassName, 'ald-data-preview-body-cell-null')}\n >\n null\n </div>\n );\n }\n return (\n <div style={style} className={bodyCellClassName}>\n {value}\n </div>\n );\n}\n"],"mappings":";;;;AAQA,IAAM,oBACJ;AAEF,SAAwB,KAAK,OAAc;CACzC,MAAM,EAAE,OAAO,UAAU;AACzB,KAAI,OAAO,UAAU,SACnB,QACE,oBAAC,OAAD;EAAY;EAAO,WAAW;YAC3B;EACG,CAAA;AAGV,KAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAChD,QACE,oBAAC,OAAD;EAAY;EAAO,WAAW;YAC3B,KAAK,UAAU,MAAM;EAClB,CAAA;AAGV,KAAI,OAAO,UAAU,YAAY,UAAU,KACzC,QACE,oBAAC,OAAD;EACE,OAAO;GACL,WAAW;GACX,OAAO;GACP,GAAG;GACJ;EACD,WAAW,GAAG,mBAAmB,kCAAkC;YACpE;EAEK,CAAA;AAGV,QACE,oBAAC,OAAD;EAAY;EAAO,WAAW;YAC3B;EACG,CAAA"}
@@ -8,7 +8,7 @@ function ErrorBody(props) {
8
8
  const t = getTranslator(locale);
9
9
  const { wrapWidth, errorMsg = t.DataPreviewTable.loadFailed } = props;
10
10
  return /* @__PURE__ */ jsx("div", {
11
- className: "ald-data-preview-table-error",
11
+ className: "ald-data-preview-table-error tw-flex tw-h-full tw-items-center tw-justify-center",
12
12
  style: { width: wrapWidth },
13
13
  children: typeof errorMsg === "string" ? /* @__PURE__ */ jsx(Result, {
14
14
  status: "warning",
@@ -1 +1 @@
1
- {"version":3,"file":"Error.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/Error.tsx"],"sourcesContent":["import React, { memo, useContext } from 'react';\nimport Result from '../../../Result';\nimport { LocaleContext, getTranslator } from '../../../locale/default';\n\ninterface IErrorProps {\n wrapWidth: number;\n errorMsg?: string | React.ReactNode;\n}\nfunction ErrorBody(props: IErrorProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { wrapWidth, errorMsg = t.DataPreviewTable.loadFailed } = props;\n return (\n <div className=\"ald-data-preview-table-error\" style={{ width: wrapWidth }}>\n {typeof errorMsg === 'string' ? (\n <Result status=\"warning\" subTitle={errorMsg} />\n ) : (\n errorMsg\n )}\n </div>\n );\n}\nexport default memo(ErrorBody);\n"],"mappings":";;;;;AAQA,SAAS,UAAU,OAAoB;CACrC,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EAAE,WAAW,WAAW,EAAE,iBAAiB,eAAe;AAChE,QACE,oBAAC,OAAD;EAAK,WAAU;EAA+B,OAAO,EAAE,OAAO,WAAW;YACtE,OAAO,aAAa,WACnB,oBAAC,QAAD;GAAQ,QAAO;GAAU,UAAU;GAAY,CAAA,GAE/C;EAEE,CAAA;;AAGV,IAAA,gBAAe,KAAK,UAAU"}
1
+ {"version":3,"file":"Error.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/Error.tsx"],"sourcesContent":["import React, { memo, useContext } from 'react';\nimport Result from '../../../Result';\nimport { LocaleContext, getTranslator } from '../../../locale/default';\n\ninterface IErrorProps {\n wrapWidth: number;\n errorMsg?: string | React.ReactNode;\n}\nfunction ErrorBody(props: IErrorProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { wrapWidth, errorMsg = t.DataPreviewTable.loadFailed } = props;\n return (\n <div\n className=\"ald-data-preview-table-error tw-flex tw-h-full tw-items-center tw-justify-center\"\n style={{ width: wrapWidth }}\n >\n {typeof errorMsg === 'string' ? (\n <Result status=\"warning\" subTitle={errorMsg} />\n ) : (\n errorMsg\n )}\n </div>\n );\n}\nexport default memo(ErrorBody);\n"],"mappings":";;;;;AAQA,SAAS,UAAU,OAAoB;CACrC,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EAAE,WAAW,WAAW,EAAE,iBAAiB,eAAe;AAChE,QACE,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,OAAO,WAAW;YAE1B,OAAO,aAAa,WACnB,oBAAC,QAAD;GAAQ,QAAO;GAAU,UAAU;GAAY,CAAA,GAE/C;EAEE,CAAA;;AAGV,IAAA,gBAAe,KAAK,UAAU"}
@@ -1,3 +1,4 @@
1
+ import { cn } from "../../../lib/utils.js";
1
2
  import Cell from "./Cell.js";
2
3
  import React, { memo } from "react";
3
4
  import { jsx } from "react/jsx-runtime";
@@ -20,7 +21,7 @@ function Body(props) {
20
21
  };
21
22
  const render = columns[columnIndex].render;
22
23
  if (render) return /* @__PURE__ */ jsx("div", {
23
- className: "ald-data-preview-body-cell ald-data-preview-body-cell-custom",
24
+ className: cn("ald-data-preview-body-cell ald-data-preview-body-cell-custom", "tw-overflow-hidden tw-whitespace-nowrap tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-subtle)] tw-text-xs tw-leading-4 tw-text-[var(--alias-colors-text-default)]"),
24
25
  style,
25
26
  children: render(cell)
26
27
  }, columnIndex);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/index.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport { CELL_HEIGHT } from '../../constant';\nimport { IColumnLayout, PreviewColumn, TValue } from '../../interface';\nimport Cell from './Cell';\ninterface IHeader {\n columns: PreviewColumn[];\n columnLayout: IColumnLayout;\n columnRange: [number, number];\n datasource: TValue[][];\n rowRange: [number, number];\n headerHeight: number;\n}\nfunction Body(props: IHeader) {\n const {\n columns,\n columnLayout,\n datasource,\n columnRange: [startIndex, endIndex],\n rowRange: [startRowIndex, endRowIndex],\n headerHeight,\n } = props;\n\n return (\n <div className=\"ald-data-preview-table-body\">\n {datasource.slice(startRowIndex, endRowIndex).map((row, rowIndex) => {\n const currentRowIndex = startRowIndex + rowIndex;\n\n return (\n <React.Fragment key={currentRowIndex}>\n {row.slice(startIndex, endIndex + 1).map((cell, index) => {\n const columnIndex = startIndex + index;\n const style: React.CSSProperties = {\n height: CELL_HEIGHT,\n width: columnLayout[columns[columnIndex].id].width,\n top: currentRowIndex * CELL_HEIGHT + headerHeight,\n left: columnLayout[columns[columnIndex].id].left,\n position: 'absolute',\n textAlign: columns[columnIndex].align || 'left',\n };\n const render = columns[columnIndex].render;\n if (render) {\n return (\n <div\n className=\"ald-data-preview-body-cell ald-data-preview-body-cell-custom\"\n style={style}\n key={columnIndex}\n >\n {render(cell)}\n </div>\n );\n }\n return <Cell key={columnIndex} style={style} value={cell} />;\n })}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\nexport default memo(Body);\n"],"mappings":";;;;AAYA,SAAS,KAAK,OAAgB;CAC5B,MAAM,EACJ,SACA,cACA,YACA,aAAa,CAAC,YAAY,WAC1B,UAAU,CAAC,eAAe,cAC1B,iBACE;AAEJ,QACE,oBAAC,OAAD;EAAK,WAAU;YACZ,WAAW,MAAM,eAAe,YAAY,CAAC,KAAK,KAAK,aAAa;GACnE,MAAM,kBAAkB,gBAAgB;AAExC,UACE,oBAAC,MAAM,UAAP,EAAA,UACG,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC,KAAK,MAAM,UAAU;IACxD,MAAM,cAAc,aAAa;IACjC,MAAM,QAA6B;KACjC,QAAA;KACA,OAAO,aAAa,QAAQ,aAAa,IAAI;KAC7C,KAAK,kBAAA,KAAgC;KACrC,MAAM,aAAa,QAAQ,aAAa,IAAI;KAC5C,UAAU;KACV,WAAW,QAAQ,aAAa,SAAS;KAC1C;IACD,MAAM,SAAS,QAAQ,aAAa;AACpC,QAAI,OACF,QACE,oBAAC,OAAD;KACE,WAAU;KACH;eAGN,OAAO,KAAK;KACT,EAHC,YAGD;AAGV,WAAO,oBAAC,MAAD;KAA+B;KAAO,OAAO;KAAQ,EAA1C,YAA0C;KAC5D,EACa,EAzBI,gBAyBJ;IAEnB;EACE,CAAA;;AAGV,IAAA,eAAe,KAAK,KAAK"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Body/index.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport { cn } from '../../../lib/utils';\nimport { CELL_HEIGHT } from '../../constant';\nimport { IColumnLayout, PreviewColumn, TValue } from '../../interface';\nimport Cell from './Cell';\ninterface IHeader {\n columns: PreviewColumn[];\n columnLayout: IColumnLayout;\n columnRange: [number, number];\n datasource: TValue[][];\n rowRange: [number, number];\n headerHeight: number;\n}\nfunction Body(props: IHeader) {\n const {\n columns,\n columnLayout,\n datasource,\n columnRange: [startIndex, endIndex],\n rowRange: [startRowIndex, endRowIndex],\n headerHeight,\n } = props;\n\n return (\n <div className=\"ald-data-preview-table-body\">\n {datasource.slice(startRowIndex, endRowIndex).map((row, rowIndex) => {\n const currentRowIndex = startRowIndex + rowIndex;\n\n return (\n <React.Fragment key={currentRowIndex}>\n {row.slice(startIndex, endIndex + 1).map((cell, index) => {\n const columnIndex = startIndex + index;\n const style: React.CSSProperties = {\n height: CELL_HEIGHT,\n width: columnLayout[columns[columnIndex].id].width,\n top: currentRowIndex * CELL_HEIGHT + headerHeight,\n left: columnLayout[columns[columnIndex].id].left,\n position: 'absolute',\n textAlign: columns[columnIndex].align || 'left',\n };\n const render = columns[columnIndex].render;\n if (render) {\n return (\n <div\n className={cn(\n 'ald-data-preview-body-cell ald-data-preview-body-cell-custom',\n 'tw-overflow-hidden tw-whitespace-nowrap tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-subtle)] tw-text-xs tw-leading-4 tw-text-[var(--alias-colors-text-default)]',\n )}\n style={style}\n key={columnIndex}\n >\n {render(cell)}\n </div>\n );\n }\n return <Cell key={columnIndex} style={style} value={cell} />;\n })}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\nexport default memo(Body);\n"],"mappings":";;;;;AAaA,SAAS,KAAK,OAAgB;CAC5B,MAAM,EACJ,SACA,cACA,YACA,aAAa,CAAC,YAAY,WAC1B,UAAU,CAAC,eAAe,cAC1B,iBACE;AAEJ,QACE,oBAAC,OAAD;EAAK,WAAU;YACZ,WAAW,MAAM,eAAe,YAAY,CAAC,KAAK,KAAK,aAAa;GACnE,MAAM,kBAAkB,gBAAgB;AAExC,UACE,oBAAC,MAAM,UAAP,EAAA,UACG,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC,KAAK,MAAM,UAAU;IACxD,MAAM,cAAc,aAAa;IACjC,MAAM,QAA6B;KACjC,QAAA;KACA,OAAO,aAAa,QAAQ,aAAa,IAAI;KAC7C,KAAK,kBAAA,KAAgC;KACrC,MAAM,aAAa,QAAQ,aAAa,IAAI;KAC5C,UAAU;KACV,WAAW,QAAQ,aAAa,SAAS;KAC1C;IACD,MAAM,SAAS,QAAQ,aAAa;AACpC,QAAI,OACF,QACE,oBAAC,OAAD;KACE,WAAW,GACT,gEACA,iNACD;KACM;eAGN,OAAO,KAAK;KACT,EAHC,YAGD;AAGV,WAAO,oBAAC,MAAD;KAA+B;KAAO,OAAO;KAAQ,EAA1C,YAA0C;KAC5D,EACa,EA5BI,gBA4BJ;IAEnB;EACE,CAAA;;AAGV,IAAA,eAAe,KAAK,KAAK"}
@@ -34,7 +34,7 @@ function DragBar(props) {
34
34
  right: dragBarLeft,
35
35
  height: headerHeight
36
36
  },
37
- className: cn("ald-data-preview-header-drag-bar", { ["ald-data-preview-header-drag-bar-active"]: show }),
37
+ className: cn("ald-data-preview-header-drag-bar tw-absolute tw-right-0 tw-top-0 tw-z-[2] tw-w-[3px] hover:tw-cursor-col-resize hover:tw-bg-[var(--semantic-brand-500)]", { "ald-data-preview-header-drag-bar-active tw-bg-[var(--semantic-brand-500)]": show }),
38
38
  children: show ? createPortal(/* @__PURE__ */ jsx(Mask, {
39
39
  onMouseMove: (event) => {
40
40
  if (mouseDownRef.current.down === false) return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/DragBar/index.tsx"],"sourcesContent":["import { cn } from '../../../lib/utils';\nimport React, { memo, useCallback, useRef, useState } from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { COLUMN_MIN_WIDTH } from '../../constant';\nimport Mask from './Mask';\nfunction DragBar(props: {\n wrapWidth: number;\n columnId: string;\n onChange: (columnId: string, width: number) => void;\n headerHeight: number;\n}) {\n const { wrapWidth, columnId, onChange, headerHeight } = props;\n const [show, setShow] = useState(false);\n const [dragBarLeft, setDragBarLeft] = useState(0);\n const dragElRef = useRef<HTMLDivElement>(null);\n const mouseDownRef = useRef({\n down: false,\n clientX: 0,\n });\n const getBarLeft = useCallback(\n (currentClientX: number) => {\n const startClientX = mouseDownRef.current.clientX;\n const offset = startClientX - currentClientX;\n if (offset >= wrapWidth - COLUMN_MIN_WIDTH) {\n return wrapWidth - COLUMN_MIN_WIDTH;\n } else {\n return offset;\n }\n },\n [wrapWidth],\n );\n\n return (\n <div\n ref={dragElRef}\n onMouseDown={(event) => {\n mouseDownRef.current = {\n clientX: event.clientX,\n down: true,\n };\n setShow(true);\n }}\n onClick={(e) => {\n e.stopPropagation();\n }}\n style={{ right: dragBarLeft, height: headerHeight }}\n className={cn('ald-data-preview-header-drag-bar', {\n ['ald-data-preview-header-drag-bar-active']: show,\n })}\n >\n {show\n ? createPortal(\n <Mask\n onMouseMove={(event) => {\n const mouseDownState = mouseDownRef.current;\n if (mouseDownState.down === false) return;\n const currentClientX = event.clientX;\n flushSync(() => {\n setDragBarLeft(getBarLeft(currentClientX));\n });\n }}\n onMouseUp={(event) => {\n mouseDownRef.current.down = false;\n setShow(false);\n const currentClientX = event.clientX;\n onChange(columnId, wrapWidth - getBarLeft(currentClientX));\n setDragBarLeft(0);\n }}\n ></Mask>,\n document.body,\n )\n : null}\n </div>\n );\n}\nexport default memo(DragBar);\n"],"mappings":";;;;;;AAKA,SAAS,QAAQ,OAKd;CACD,MAAM,EAAE,WAAW,UAAU,UAAU,iBAAiB;CACxD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CACjD,MAAM,YAAY,OAAuB,KAAK;CAC9C,MAAM,eAAe,OAAO;EAC1B,MAAM;EACN,SAAS;EACV,CAAC;CACF,MAAM,aAAa,aAChB,mBAA2B;EAE1B,MAAM,SADe,aAAa,QAAQ,UACZ;AAC9B,MAAI,UAAU,YAAA,GACZ,QAAO,YAAA;MAEP,QAAO;IAGX,CAAC,UAAU,CACZ;AAED,QACE,oBAAC,OAAD;EACE,KAAK;EACL,cAAc,UAAU;AACtB,gBAAa,UAAU;IACrB,SAAS,MAAM;IACf,MAAM;IACP;AACD,WAAQ,KAAK;;EAEf,UAAU,MAAM;AACd,KAAE,iBAAiB;;EAErB,OAAO;GAAE,OAAO;GAAa,QAAQ;GAAc;EACnD,WAAW,GAAG,oCAAoC,GAC/C,4CAA4C,MAC9C,CAAC;YAED,OACG,aACE,oBAAC,MAAD;GACE,cAAc,UAAU;AAEtB,QADuB,aAAa,QACjB,SAAS,MAAO;IACnC,MAAM,iBAAiB,MAAM;AAC7B,oBAAgB;AACd,oBAAe,WAAW,eAAe,CAAC;MAC1C;;GAEJ,YAAY,UAAU;AACpB,iBAAa,QAAQ,OAAO;AAC5B,YAAQ,MAAM;IACd,MAAM,iBAAiB,MAAM;AAC7B,aAAS,UAAU,YAAY,WAAW,eAAe,CAAC;AAC1D,mBAAe,EAAE;;GAEb,CAAA,EACR,SAAS,KACV,GACD;EACA,CAAA;;AAGV,IAAA,kBAAe,KAAK,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/DragBar/index.tsx"],"sourcesContent":["import { cn } from '../../../lib/utils';\nimport React, { memo, useCallback, useRef, useState } from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport { COLUMN_MIN_WIDTH } from '../../constant';\nimport Mask from './Mask';\nfunction DragBar(props: {\n wrapWidth: number;\n columnId: string;\n onChange: (columnId: string, width: number) => void;\n headerHeight: number;\n}) {\n const { wrapWidth, columnId, onChange, headerHeight } = props;\n const [show, setShow] = useState(false);\n const [dragBarLeft, setDragBarLeft] = useState(0);\n const dragElRef = useRef<HTMLDivElement>(null);\n const mouseDownRef = useRef({\n down: false,\n clientX: 0,\n });\n const getBarLeft = useCallback(\n (currentClientX: number) => {\n const startClientX = mouseDownRef.current.clientX;\n const offset = startClientX - currentClientX;\n if (offset >= wrapWidth - COLUMN_MIN_WIDTH) {\n return wrapWidth - COLUMN_MIN_WIDTH;\n } else {\n return offset;\n }\n },\n [wrapWidth],\n );\n\n return (\n <div\n ref={dragElRef}\n onMouseDown={(event) => {\n mouseDownRef.current = {\n clientX: event.clientX,\n down: true,\n };\n setShow(true);\n }}\n onClick={(e) => {\n e.stopPropagation();\n }}\n style={{ right: dragBarLeft, height: headerHeight }}\n className={cn(\n 'ald-data-preview-header-drag-bar tw-absolute tw-right-0 tw-top-0 tw-z-[2] tw-w-[3px] hover:tw-cursor-col-resize hover:tw-bg-[var(--semantic-brand-500)]',\n {\n 'ald-data-preview-header-drag-bar-active tw-bg-[var(--semantic-brand-500)]':\n show,\n },\n )}\n >\n {show\n ? createPortal(\n <Mask\n onMouseMove={(event) => {\n const mouseDownState = mouseDownRef.current;\n if (mouseDownState.down === false) return;\n const currentClientX = event.clientX;\n flushSync(() => {\n setDragBarLeft(getBarLeft(currentClientX));\n });\n }}\n onMouseUp={(event) => {\n mouseDownRef.current.down = false;\n setShow(false);\n const currentClientX = event.clientX;\n onChange(columnId, wrapWidth - getBarLeft(currentClientX));\n setDragBarLeft(0);\n }}\n ></Mask>,\n document.body,\n )\n : null}\n </div>\n );\n}\nexport default memo(DragBar);\n"],"mappings":";;;;;;AAKA,SAAS,QAAQ,OAKd;CACD,MAAM,EAAE,WAAW,UAAU,UAAU,iBAAiB;CACxD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CACvC,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE;CACjD,MAAM,YAAY,OAAuB,KAAK;CAC9C,MAAM,eAAe,OAAO;EAC1B,MAAM;EACN,SAAS;EACV,CAAC;CACF,MAAM,aAAa,aAChB,mBAA2B;EAE1B,MAAM,SADe,aAAa,QAAQ,UACZ;AAC9B,MAAI,UAAU,YAAA,GACZ,QAAO,YAAA;MAEP,QAAO;IAGX,CAAC,UAAU,CACZ;AAED,QACE,oBAAC,OAAD;EACE,KAAK;EACL,cAAc,UAAU;AACtB,gBAAa,UAAU;IACrB,SAAS,MAAM;IACf,MAAM;IACP;AACD,WAAQ,KAAK;;EAEf,UAAU,MAAM;AACd,KAAE,iBAAiB;;EAErB,OAAO;GAAE,OAAO;GAAa,QAAQ;GAAc;EACnD,WAAW,GACT,2JACA,EACE,6EACE,MACH,CACF;YAEA,OACG,aACE,oBAAC,MAAD;GACE,cAAc,UAAU;AAEtB,QADuB,aAAa,QACjB,SAAS,MAAO;IACnC,MAAM,iBAAiB,MAAM;AAC7B,oBAAgB;AACd,oBAAe,WAAW,eAAe,CAAC;MAC1C;;GAEJ,YAAY,UAAU;AACpB,iBAAa,QAAQ,OAAO;AAC5B,YAAQ,MAAM;IACd,MAAM,iBAAiB,MAAM;AAC7B,aAAS,UAAU,YAAY,WAAW,eAAe,CAAC;AAC1D,mBAAe,EAAE;;GAEb,CAAA,EACR,SAAS,KACV,GACD;EACA,CAAA;;AAGV,IAAA,kBAAe,KAAK,QAAQ"}
@@ -1,3 +1,4 @@
1
+ import { cn } from "../../../lib/utils.js";
1
2
  import DragBar_default from "../DragBar/index.js";
2
3
  import "react";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -5,26 +6,27 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
6
  function Header(props) {
6
7
  const { contentWidth, columns, columnLayout, setWidth, columnRange: [startIndex, endIndex], headerHeight } = props;
7
8
  return /* @__PURE__ */ jsx("div", {
8
- className: "ald-data-preview-header",
9
+ className: "ald-data-preview-header tw-z-[2] tw-w-full",
9
10
  style: { width: contentWidth },
10
11
  children: columns.slice(startIndex, endIndex + 1).map((column) => {
11
12
  const innerCell = column.renderHeader?.(column);
13
+ const style = {
14
+ height: headerHeight,
15
+ width: columnLayout[column.id].width,
16
+ top: 0,
17
+ left: columnLayout[column.id].left,
18
+ position: "absolute"
19
+ };
12
20
  return /* @__PURE__ */ jsxs("div", {
13
- className: "ald-data-preview-header-cell",
14
- style: {
15
- height: headerHeight,
16
- width: columnLayout[column.id].width,
17
- top: 0,
18
- left: columnLayout[column.id].left,
19
- position: "absolute"
20
- },
21
+ className: cn("ald-data-preview-header-cell", "tw-flex tw-items-center tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-default)]", "tw-bg-[var(--alias-colors-bg-skeleton-subtle)] tw-font-medium tw-text-[var(--alias-colors-text-strong)]"),
22
+ style,
21
23
  children: [innerCell ? innerCell : /* @__PURE__ */ jsxs("div", {
22
- className: "ald-data-preview-header-default",
24
+ className: "ald-data-preview-header-default tw-flex tw-size-full tw-items-center tw-bg-[var(--alias-colors-bg-skeleton-subtle)] tw-p-1 tw-leading-6",
23
25
  children: [/* @__PURE__ */ jsx("div", {
24
- className: "ald-data-preview-header-left",
26
+ className: "ald-data-preview-header-left tw-mr-1 tw-flex tw-h-full tw-items-center tw-justify-center tw-text-xs tw-text-[var(--alias-colors-icon-subtle)]",
25
27
  children: column.icon !== void 0 ? column.icon : /* @__PURE__ */ jsx("span", {})
26
28
  }), /* @__PURE__ */ jsx("div", {
27
- className: "ald-data-preview-header-name",
29
+ className: "ald-data-preview-header-name tw-m-auto tw-truncate tw-text-left",
28
30
  children: column.name
29
31
  })]
30
32
  }), /* @__PURE__ */ jsx(DragBar_default, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Header/index.tsx"],"sourcesContent":["import React from 'react';\nimport { IColumnLayout, PreviewColumn } from '../../interface';\nimport DragBar from '../DragBar';\ninterface IHeader {\n contentWidth: number;\n columns: PreviewColumn[];\n columnLayout: IColumnLayout;\n setWidth: (columnId: string, width: number) => void;\n columnRange: [number, number];\n headerHeight: number;\n}\nexport default function Header(props: IHeader) {\n const {\n contentWidth,\n columns,\n columnLayout,\n setWidth,\n columnRange: [startIndex, endIndex],\n headerHeight,\n } = props;\n return (\n <div className=\"ald-data-preview-header\" style={{ width: contentWidth }}>\n {columns.slice(startIndex, endIndex + 1).map((column) => {\n const innerCell = column.renderHeader?.(column);\n const style: React.CSSProperties = {\n height: headerHeight,\n width: columnLayout[column.id].width,\n top: 0,\n left: columnLayout[column.id].left,\n position: 'absolute',\n };\n\n return (\n <div\n className=\"ald-data-preview-header-cell\"\n key={column.id}\n style={style}\n >\n {innerCell ? (\n innerCell\n ) : (\n <div className=\"ald-data-preview-header-default\">\n <div className=\"ald-data-preview-header-left\">\n {column.icon !== undefined ? column.icon : <span></span>}\n </div>\n <div className=\"ald-data-preview-header-name\">\n {column.name}\n </div>\n </div>\n )}\n <DragBar\n columnId={column.id}\n wrapWidth={columnLayout[column.id].width}\n onChange={setWidth}\n headerHeight={headerHeight}\n ></DragBar>\n </div>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AAWA,SAAwB,OAAO,OAAgB;CAC7C,MAAM,EACJ,cACA,SACA,cACA,UACA,aAAa,CAAC,YAAY,WAC1B,iBACE;AACJ,QACE,oBAAC,OAAD;EAAK,WAAU;EAA0B,OAAO,EAAE,OAAO,cAAc;YACpE,QAAQ,MAAM,YAAY,WAAW,EAAE,CAAC,KAAK,WAAW;GACvD,MAAM,YAAY,OAAO,eAAe,OAAO;AAS/C,UACE,qBAAC,OAAD;IACE,WAAU;IAEH,OAZwB;KACjC,QAAQ;KACR,OAAO,aAAa,OAAO,IAAI;KAC/B,KAAK;KACL,MAAM,aAAa,OAAO,IAAI;KAC9B,UAAU;KACX;cAGC,CAKG,YACC,YAEA,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAK,WAAU;gBACZ,OAAO,SAAS,SAAY,OAAO,OAAO,oBAAC,QAAD,EAAa,CAAA;MACpD,CAAA,EACN,oBAAC,OAAD;MAAK,WAAU;gBACZ,OAAO;MACJ,CAAA,CACF;QAER,oBAAC,iBAAD;KACE,UAAU,OAAO;KACjB,WAAW,aAAa,OAAO,IAAI;KACnC,UAAU;KACI;KACL,CAAA,CACP;MArBC,OAAO,GAqBR;IAER;EACE,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/DataPreviewTable/components/Header/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { IColumnLayout, PreviewColumn } from '../../interface';\nimport DragBar from '../DragBar';\ninterface IHeader {\n contentWidth: number;\n columns: PreviewColumn[];\n columnLayout: IColumnLayout;\n setWidth: (columnId: string, width: number) => void;\n columnRange: [number, number];\n headerHeight: number;\n}\nexport default function Header(props: IHeader) {\n const {\n contentWidth,\n columns,\n columnLayout,\n setWidth,\n columnRange: [startIndex, endIndex],\n headerHeight,\n } = props;\n return (\n <div\n className=\"ald-data-preview-header tw-z-[2] tw-w-full\"\n style={{ width: contentWidth }}\n >\n {columns.slice(startIndex, endIndex + 1).map((column) => {\n const innerCell = column.renderHeader?.(column);\n const style: React.CSSProperties = {\n height: headerHeight,\n width: columnLayout[column.id].width,\n top: 0,\n left: columnLayout[column.id].left,\n position: 'absolute',\n };\n\n return (\n <div\n className={cn(\n 'ald-data-preview-header-cell',\n 'tw-flex tw-items-center tw-border tw-border-l-0 tw-border-t-0 tw-border-solid tw-border-[var(--alias-colors-border-default)]',\n 'tw-bg-[var(--alias-colors-bg-skeleton-subtle)] tw-font-medium tw-text-[var(--alias-colors-text-strong)]',\n )}\n key={column.id}\n style={style}\n >\n {innerCell ? (\n innerCell\n ) : (\n <div className=\"ald-data-preview-header-default tw-flex tw-size-full tw-items-center tw-bg-[var(--alias-colors-bg-skeleton-subtle)] tw-p-1 tw-leading-6\">\n <div className=\"ald-data-preview-header-left tw-mr-1 tw-flex tw-h-full tw-items-center tw-justify-center tw-text-xs tw-text-[var(--alias-colors-icon-subtle)]\">\n {column.icon !== undefined ? column.icon : <span></span>}\n </div>\n <div className=\"ald-data-preview-header-name tw-m-auto tw-truncate tw-text-left\">\n {column.name}\n </div>\n </div>\n )}\n <DragBar\n columnId={column.id}\n wrapWidth={columnLayout[column.id].width}\n onChange={setWidth}\n headerHeight={headerHeight}\n ></DragBar>\n </div>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAwB,OAAO,OAAgB;CAC7C,MAAM,EACJ,cACA,SACA,cACA,UACA,aAAa,CAAC,YAAY,WAC1B,iBACE;AACJ,QACE,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,OAAO,cAAc;YAE7B,QAAQ,MAAM,YAAY,WAAW,EAAE,CAAC,KAAK,WAAW;GACvD,MAAM,YAAY,OAAO,eAAe,OAAO;GAC/C,MAAM,QAA6B;IACjC,QAAQ;IACR,OAAO,aAAa,OAAO,IAAI;IAC/B,KAAK;IACL,MAAM,aAAa,OAAO,IAAI;IAC9B,UAAU;IACX;AAED,UACE,qBAAC,OAAD;IACE,WAAW,GACT,gCACA,gIACA,0GACD;IAEM;cAPT,CASG,YACC,YAEA,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAK,WAAU;gBACZ,OAAO,SAAS,SAAY,OAAO,OAAO,oBAAC,QAAD,EAAa,CAAA;MACpD,CAAA,EACN,oBAAC,OAAD;MAAK,WAAU;gBACZ,OAAO;MACJ,CAAA,CACF;QAER,oBAAC,iBAAD;KACE,UAAU,OAAO;KACjB,WAAW,aAAa,OAAO,IAAI;KACnC,UAAU;KACI;KACL,CAAA,CACP;MArBC,OAAO,GAqBR;IAER;EACE,CAAA"}
@@ -1,8 +1,7 @@
1
1
  import { cn } from "../lib/utils.js";
2
+ import Progress_default from "../Progress/index.js";
2
3
  import { LocaleContext, getTranslator } from "../locale/default.js";
3
4
  import ScrollArea_default from "../ScrollArea/index.js";
4
- /* empty css */
5
- import Progress_default from "../Progress/index.js";
6
5
  import CustomSpin from "../Spin/index.js";
7
6
  import Body_default from "./components/Body/index.js";
8
7
  import Error_default from "./components/Body/Error.js";
@@ -56,7 +55,7 @@ var DataPreviewTable_default = memo(forwardRef(function(props, ref) {
56
55
  onViewportScroll: () => {
57
56
  onScroll();
58
57
  },
59
- className: cn(props.className, "ald-data-preview-table", { "ald-data-preview-table-show-skeleton": dataStatus === "pending" }),
58
+ className: cn(props.className, "ald-data-preview-table tw-box-border tw-border tw-border-solid tw-border-[var(--alias-colors-border-default)] tw-text-xs tw-tabular-nums [&_*]:tw-box-border", { "ald-data-preview-table-show-skeleton": dataStatus === "pending" }),
60
59
  children: /* @__PURE__ */ jsxs("div", {
61
60
  style: {
62
61
  height: dataStatus === "pending" ? skeletonRows * 20 + realHeaderHeight : contentHeight,
@@ -65,9 +64,9 @@ var DataPreviewTable_default = memo(forwardRef(function(props, ref) {
65
64
  },
66
65
  children: [
67
66
  /* @__PURE__ */ jsxs("div", {
68
- className: "ald-data-preview-sticky",
67
+ className: "ald-data-preview-sticky tw-sticky tw-top-0 tw-z-[1]",
69
68
  children: [/* @__PURE__ */ jsx(Progress_default, {
70
- className: "ald-data-preview-progress",
69
+ className: "ald-data-preview-progress tw-fixed tw-left-0 tw-top-0 tw-z-[3] tw-w-full",
71
70
  loading: !!loading,
72
71
  ref: progressRef
73
72
  }), /* @__PURE__ */ jsx(Header, {
@@ -80,7 +79,7 @@ var DataPreviewTable_default = memo(forwardRef(function(props, ref) {
80
79
  })]
81
80
  }),
82
81
  dataStatus === "pending" && tableColumns.length > 0 && /* @__PURE__ */ jsx("div", {
83
- className: "ald-data-preview-loading",
82
+ className: "ald-data-preview-loading tw-fixed tw-flex tw-size-full tw-items-center tw-justify-center",
84
83
  children: /* @__PURE__ */ jsx(CustomSpin, {})
85
84
  }),
86
85
  dataStatus === "success" && /* @__PURE__ */ jsx(Body_default, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/DataPreviewTable/index.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport './data-preview-table.css';\nimport React, {\n forwardRef,\n memo,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport Progress, { IProgressRef } from '../Progress';\nimport ScrollArea from '../ScrollArea';\nimport Spin from '../Spin';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport Body from './components/Body';\nimport Error from './components/Body/Error';\nimport Header from './components/Header';\nimport { CELL_HEIGHT, DEFAULT_HEADER_HEIGHT } from './constant';\nimport useDirection from './hooks/useDirection';\nimport { DataPreviewTableRef, ITableProps } from './interface';\n\nconst DataPreviewTable = forwardRef(function (\n props: ITableProps,\n ref: React.Ref<DataPreviewTableRef>,\n) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n columns = [],\n datasource = [],\n width,\n height,\n headerHeight = 0,\n loading,\n dataStatus,\n errorMsg = t.DataPreviewTable.dataLoadFailed,\n } = props;\n\n const realHeaderHeight = Math.max(headerHeight, DEFAULT_HEADER_HEIGHT);\n const contentHeight = useMemo(() => {\n return datasource.length * CELL_HEIGHT + realHeaderHeight;\n }, [datasource, realHeaderHeight]);\n const wrapRef = useRef<HTMLDivElement>(null);\n const progressRef = useRef<IProgressRef>(null);\n const {\n columnRange,\n rowRange,\n onScroll,\n columnLayout,\n setColumnsWidth,\n tableColumns,\n contentWidth,\n } = useDirection(columns, wrapRef);\n\n useImperativeHandle(ref, () => ({\n scrollToColumnInView: (columnId: string) => {\n // 实现scrollTo方法\n const columnPos = columnLayout[columnId];\n if (!columnPos) return;\n // 根据容器的宽度,容器的scrollLeft,columnPos,判断当前列是否在可视区域内\n const { scrollLeft } = wrapRef.current as HTMLDivElement;\n const { left, width } = columnPos;\n const containerWidth = wrapRef.current?.clientWidth || 0;\n if (left < scrollLeft) {\n // 左边不可见\n wrapRef.current?.scrollTo({\n left,\n behavior: 'smooth',\n });\n } else if (left + width > scrollLeft + containerWidth) {\n // 右边不可见\n wrapRef.current?.scrollTo({\n left: left + width - containerWidth,\n behavior: 'smooth',\n });\n }\n },\n progressRestart: () => {\n progressRef.current?.restart();\n },\n }));\n\n const skeletonRows = useMemo(() => {\n if (!wrapRef.current) return 0;\n const rows = Math.ceil(\n ((wrapRef.current?.clientHeight || 0) - realHeaderHeight) / CELL_HEIGHT,\n );\n return rows - 1 < 0 ? 0 : rows - 1;\n }, [realHeaderHeight]);\n\n return (\n <ScrollArea\n ref={wrapRef}\n style={{ width, height, willChange: 'transform' }}\n onViewportScroll={() => {\n // const { scrollTop, scrollLeft } = e.target as HTMLDivElement;\n onScroll();\n }}\n className={cn(props.className, 'ald-data-preview-table', {\n 'ald-data-preview-table-show-skeleton': dataStatus === 'pending',\n })}\n >\n <div\n style={{\n height:\n dataStatus === 'pending'\n ? skeletonRows * CELL_HEIGHT + realHeaderHeight\n : contentHeight,\n position: 'relative',\n width: 'fit-content',\n }}\n >\n <div className=\"ald-data-preview-sticky\">\n <Progress\n className=\"ald-data-preview-progress\"\n loading={!!loading}\n ref={progressRef}\n ></Progress>\n <Header\n contentWidth={contentWidth}\n headerHeight={realHeaderHeight}\n columns={tableColumns}\n columnLayout={columnLayout}\n setWidth={setColumnsWidth}\n columnRange={columnRange}\n />\n </div>\n {dataStatus === 'pending' && tableColumns.length > 0 && (\n <div className=\"ald-data-preview-loading\">\n <Spin />\n </div>\n )}\n {dataStatus === 'success' && (\n <Body\n columns={tableColumns}\n columnRange={columnRange}\n columnLayout={columnLayout}\n datasource={datasource}\n rowRange={rowRange}\n headerHeight={realHeaderHeight}\n />\n )}\n {dataStatus === 'error' && (\n <Error\n errorMsg={errorMsg}\n wrapWidth={wrapRef.current?.clientWidth || 0}\n />\n )}\n </div>\n </ScrollArea>\n );\n});\n\nexport default memo(DataPreviewTable);\n"],"mappings":";;;;;;;;;;;;AA0JA,IAAA,2BAAe,KArIU,WAAW,SAClC,OACA,KACA;CACA,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UAAU,EAAE,EACZ,aAAa,EAAE,EACf,OACA,QACA,eAAe,GACf,SACA,YACA,WAAW,EAAE,iBAAiB,mBAC5B;CAEJ,MAAM,mBAAmB,KAAK,IAAI,cAAA,GAAoC;CACtE,MAAM,gBAAgB,cAAc;AAClC,SAAO,WAAW,SAAA,KAAuB;IACxC,CAAC,YAAY,iBAAiB,CAAC;CAClC,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,cAAc,OAAqB,KAAK;CAC9C,MAAM,EACJ,aACA,UACA,UACA,cACA,iBACA,cACA,iBACE,aAAa,SAAS,QAAQ;AAElC,qBAAoB,YAAY;EAC9B,uBAAuB,aAAqB;GAE1C,MAAM,YAAY,aAAa;AAC/B,OAAI,CAAC,UAAW;GAEhB,MAAM,EAAE,eAAe,QAAQ;GAC/B,MAAM,EAAE,MAAM,UAAU;GACxB,MAAM,iBAAiB,QAAQ,SAAS,eAAe;AACvD,OAAI,OAAO,WAET,SAAQ,SAAS,SAAS;IACxB;IACA,UAAU;IACX,CAAC;YACO,OAAO,QAAQ,aAAa,eAErC,SAAQ,SAAS,SAAS;IACxB,MAAM,OAAO,QAAQ;IACrB,UAAU;IACX,CAAC;;EAGN,uBAAuB;AACrB,eAAY,SAAS,SAAS;;EAEjC,EAAE;CAEH,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,QAAQ,QAAS,QAAO;EAC7B,MAAM,OAAO,KAAK,OACd,QAAQ,SAAS,gBAAgB,KAAK,oBAAA,GACzC;AACD,SAAO,OAAO,IAAI,IAAI,IAAI,OAAO;IAChC,CAAC,iBAAiB,CAAC;AAEtB,QACE,oBAAC,oBAAD;EACE,KAAK;EACL,OAAO;GAAE;GAAO;GAAQ,YAAY;GAAa;EACjD,wBAAwB;AAEtB,aAAU;;EAEZ,WAAW,GAAG,MAAM,WAAW,0BAA0B,EACvD,wCAAwC,eAAe,WACxD,CAAC;YAEF,qBAAC,OAAD;GACE,OAAO;IACL,QACE,eAAe,YACX,eAAA,KAA6B,mBAC7B;IACN,UAAU;IACV,OAAO;IACR;aARH;IAUE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,kBAAD;MACE,WAAU;MACV,SAAS,CAAC,CAAC;MACX,KAAK;MACK,CAAA,EACZ,oBAAC,QAAD;MACgB;MACd,cAAc;MACd,SAAS;MACK;MACd,UAAU;MACG;MACb,CAAA,CACE;;IACL,eAAe,aAAa,aAAa,SAAS,KACjD,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,YAAD,EAAQ,CAAA;KACJ,CAAA;IAEP,eAAe,aACd,oBAAC,cAAD;KACE,SAAS;KACI;KACC;KACF;KACF;KACV,cAAc;KACd,CAAA;IAEH,eAAe,WACd,oBAAC,eAAD;KACY;KACV,WAAW,QAAQ,SAAS,eAAe;KAC3C,CAAA;IAEA;;EACK,CAAA;EAEf,CAEmC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/DataPreviewTable/index.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport React, {\n forwardRef,\n memo,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport Progress, { IProgressRef } from '../Progress';\nimport ScrollArea from '../ScrollArea';\nimport Spin from '../Spin';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport Body from './components/Body';\nimport Error from './components/Body/Error';\nimport Header from './components/Header';\nimport { CELL_HEIGHT, DEFAULT_HEADER_HEIGHT } from './constant';\nimport useDirection from './hooks/useDirection';\nimport { DataPreviewTableRef, ITableProps } from './interface';\n\nconst DataPreviewTable = forwardRef(function (\n props: ITableProps,\n ref: React.Ref<DataPreviewTableRef>,\n) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n columns = [],\n datasource = [],\n width,\n height,\n headerHeight = 0,\n loading,\n dataStatus,\n errorMsg = t.DataPreviewTable.dataLoadFailed,\n } = props;\n\n const realHeaderHeight = Math.max(headerHeight, DEFAULT_HEADER_HEIGHT);\n const contentHeight = useMemo(() => {\n return datasource.length * CELL_HEIGHT + realHeaderHeight;\n }, [datasource, realHeaderHeight]);\n const wrapRef = useRef<HTMLDivElement>(null);\n const progressRef = useRef<IProgressRef>(null);\n const {\n columnRange,\n rowRange,\n onScroll,\n columnLayout,\n setColumnsWidth,\n tableColumns,\n contentWidth,\n } = useDirection(columns, wrapRef);\n\n useImperativeHandle(ref, () => ({\n scrollToColumnInView: (columnId: string) => {\n // 实现scrollTo方法\n const columnPos = columnLayout[columnId];\n if (!columnPos) return;\n // 根据容器的宽度,容器的scrollLeft,columnPos,判断当前列是否在可视区域内\n const { scrollLeft } = wrapRef.current as HTMLDivElement;\n const { left, width } = columnPos;\n const containerWidth = wrapRef.current?.clientWidth || 0;\n if (left < scrollLeft) {\n // 左边不可见\n wrapRef.current?.scrollTo({\n left,\n behavior: 'smooth',\n });\n } else if (left + width > scrollLeft + containerWidth) {\n // 右边不可见\n wrapRef.current?.scrollTo({\n left: left + width - containerWidth,\n behavior: 'smooth',\n });\n }\n },\n progressRestart: () => {\n progressRef.current?.restart();\n },\n }));\n\n const skeletonRows = useMemo(() => {\n if (!wrapRef.current) return 0;\n const rows = Math.ceil(\n ((wrapRef.current?.clientHeight || 0) - realHeaderHeight) / CELL_HEIGHT,\n );\n return rows - 1 < 0 ? 0 : rows - 1;\n }, [realHeaderHeight]);\n\n return (\n <ScrollArea\n ref={wrapRef}\n style={{ width, height, willChange: 'transform' }}\n onViewportScroll={() => {\n // const { scrollTop, scrollLeft } = e.target as HTMLDivElement;\n onScroll();\n }}\n className={cn(\n props.className,\n 'ald-data-preview-table tw-box-border tw-border tw-border-solid tw-border-[var(--alias-colors-border-default)] tw-text-xs tw-tabular-nums [&_*]:tw-box-border',\n {\n 'ald-data-preview-table-show-skeleton': dataStatus === 'pending',\n },\n )}\n >\n <div\n style={{\n height:\n dataStatus === 'pending'\n ? skeletonRows * CELL_HEIGHT + realHeaderHeight\n : contentHeight,\n position: 'relative',\n width: 'fit-content',\n }}\n >\n <div className=\"ald-data-preview-sticky tw-sticky tw-top-0 tw-z-[1]\">\n <Progress\n className=\"ald-data-preview-progress tw-fixed tw-left-0 tw-top-0 tw-z-[3] tw-w-full\"\n loading={!!loading}\n ref={progressRef}\n />\n <Header\n contentWidth={contentWidth}\n headerHeight={realHeaderHeight}\n columns={tableColumns}\n columnLayout={columnLayout}\n setWidth={setColumnsWidth}\n columnRange={columnRange}\n />\n </div>\n {dataStatus === 'pending' && tableColumns.length > 0 && (\n <div className=\"ald-data-preview-loading tw-fixed tw-flex tw-size-full tw-items-center tw-justify-center\">\n <Spin />\n </div>\n )}\n {dataStatus === 'success' && (\n <Body\n columns={tableColumns}\n columnRange={columnRange}\n columnLayout={columnLayout}\n datasource={datasource}\n rowRange={rowRange}\n headerHeight={realHeaderHeight}\n />\n )}\n {dataStatus === 'error' && (\n <Error\n errorMsg={errorMsg}\n wrapWidth={wrapRef.current?.clientWidth || 0}\n />\n )}\n </div>\n </ScrollArea>\n );\n});\n\nexport default memo(DataPreviewTable);\n"],"mappings":";;;;;;;;;;;AA6JA,IAAA,2BAAe,KAzIU,WAAW,SAClC,OACA,KACA;CACA,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UAAU,EAAE,EACZ,aAAa,EAAE,EACf,OACA,QACA,eAAe,GACf,SACA,YACA,WAAW,EAAE,iBAAiB,mBAC5B;CAEJ,MAAM,mBAAmB,KAAK,IAAI,cAAA,GAAoC;CACtE,MAAM,gBAAgB,cAAc;AAClC,SAAO,WAAW,SAAA,KAAuB;IACxC,CAAC,YAAY,iBAAiB,CAAC;CAClC,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,cAAc,OAAqB,KAAK;CAC9C,MAAM,EACJ,aACA,UACA,UACA,cACA,iBACA,cACA,iBACE,aAAa,SAAS,QAAQ;AAElC,qBAAoB,YAAY;EAC9B,uBAAuB,aAAqB;GAE1C,MAAM,YAAY,aAAa;AAC/B,OAAI,CAAC,UAAW;GAEhB,MAAM,EAAE,eAAe,QAAQ;GAC/B,MAAM,EAAE,MAAM,UAAU;GACxB,MAAM,iBAAiB,QAAQ,SAAS,eAAe;AACvD,OAAI,OAAO,WAET,SAAQ,SAAS,SAAS;IACxB;IACA,UAAU;IACX,CAAC;YACO,OAAO,QAAQ,aAAa,eAErC,SAAQ,SAAS,SAAS;IACxB,MAAM,OAAO,QAAQ;IACrB,UAAU;IACX,CAAC;;EAGN,uBAAuB;AACrB,eAAY,SAAS,SAAS;;EAEjC,EAAE;CAEH,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,QAAQ,QAAS,QAAO;EAC7B,MAAM,OAAO,KAAK,OACd,QAAQ,SAAS,gBAAgB,KAAK,oBAAA,GACzC;AACD,SAAO,OAAO,IAAI,IAAI,IAAI,OAAO;IAChC,CAAC,iBAAiB,CAAC;AAEtB,QACE,oBAAC,oBAAD;EACE,KAAK;EACL,OAAO;GAAE;GAAO;GAAQ,YAAY;GAAa;EACjD,wBAAwB;AAEtB,aAAU;;EAEZ,WAAW,GACT,MAAM,WACN,gKACA,EACE,wCAAwC,eAAe,WACxD,CACF;YAED,qBAAC,OAAD;GACE,OAAO;IACL,QACE,eAAe,YACX,eAAA,KAA6B,mBAC7B;IACN,UAAU;IACV,OAAO;IACR;aARH;IAUE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,kBAAD;MACE,WAAU;MACV,SAAS,CAAC,CAAC;MACX,KAAK;MACL,CAAA,EACF,oBAAC,QAAD;MACgB;MACd,cAAc;MACd,SAAS;MACK;MACd,UAAU;MACG;MACb,CAAA,CACE;;IACL,eAAe,aAAa,aAAa,SAAS,KACjD,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,YAAD,EAAQ,CAAA;KACJ,CAAA;IAEP,eAAe,aACd,oBAAC,cAAD;KACE,SAAS;KACI;KACC;KACF;KACF;KACV,cAAc;KACd,CAAA;IAEH,eAAe,WACd,oBAAC,eAAD;KACY;KACV,WAAW,QAAQ,SAAS,eAAe;KAC3C,CAAA;IAEA;;EACK,CAAA;EAEf,CAEmC"}
@@ -35,6 +35,8 @@ export interface DatePickerProps extends Omit<PickerProps<Dayjs>, 'generateConfi
35
35
  onSelect?: (date: Dayjs) => void;
36
36
  /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */
37
37
  popupClassName?: string;
38
+ /** Override locale for this picker instance. Defaults to ConfigProvider locale. */
39
+ locale?: Record<string, any>;
38
40
  }
39
41
  export interface RangePickerProps extends Omit<RcRangePickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'> {
40
42
  size?: SizeType;
@@ -50,6 +52,8 @@ export interface RangePickerProps extends Omit<RcRangePickerProps<Dayjs>, 'gener
50
52
  disabledDate?: DisabledDateCompat;
51
53
  /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */
52
54
  popupClassName?: string;
55
+ /** Override locale for this picker instance. Defaults to ConfigProvider locale. */
56
+ locale?: Record<string, any>;
53
57
  }
54
58
  export type YearPickerProps = DatePickerProps;
55
59
  export type QuarterPickerProps = DatePickerProps;
@@ -14,12 +14,13 @@ var SIZE_CLS = {
14
14
  large: "ald-picker-lg"
15
15
  };
16
16
  var InternalDatePicker = forwardRef((props, ref) => {
17
- const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, onSelect: _onSelect, popupClassName, ...restProps } = props;
17
+ const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, onSelect: _onSelect, popupClassName, locale: localeProp, ...restProps } = props;
18
18
  const ctxSize = useContext(SizeContext);
19
19
  const size = customSize || ctxSize || "middle";
20
20
  const ctxDisabled = useContext(DisabledContext);
21
21
  const mergedDisabled = customDisabled ?? ctxDisabled;
22
- const pickerLocale = useContext(LocaleContext)?.DatePicker || enUSDatePicker;
22
+ const ctxLocale = useContext(LocaleContext);
23
+ const pickerLocale = localeProp || ctxLocale?.DatePicker || enUSDatePicker;
23
24
  const sizeCls = SIZE_CLS[size] || "";
24
25
  const rcOnChange = React.useMemo(() => {
25
26
  if (!onChange) return void 0;
@@ -44,7 +45,7 @@ var InternalDatePicker = forwardRef((props, ref) => {
44
45
  locale: pickerLocale,
45
46
  prefixCls,
46
47
  disabled: mergedDisabled,
47
- className: cn(sizeCls, !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
48
+ className: cn(sizeCls, "ant-picker", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
48
49
  ...restProps,
49
50
  classNames: mergedClassNames,
50
51
  onChange: rcOnChange,
@@ -52,12 +53,13 @@ var InternalDatePicker = forwardRef((props, ref) => {
52
53
  });
53
54
  });
54
55
  var InternalRangePicker = forwardRef((props, ref) => {
55
- const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, popupClassName, ...restProps } = props;
56
+ const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, popupClassName, locale: localeProp, ...restProps } = props;
56
57
  const ctxSize = useContext(SizeContext);
57
58
  const size = customSize || ctxSize || "middle";
58
59
  const ctxDisabled = useContext(DisabledContext);
59
60
  const mergedDisabled = customDisabled ?? ctxDisabled;
60
- const pickerLocale = useContext(LocaleContext)?.DatePicker || enUSDatePicker;
61
+ const ctxLocale = useContext(LocaleContext);
62
+ const pickerLocale = localeProp || ctxLocale?.DatePicker || enUSDatePicker;
61
63
  const sizeCls = SIZE_CLS[size] || "";
62
64
  const rcOnChange = React.useMemo(() => {
63
65
  if (!onChange) return void 0;
@@ -82,7 +84,7 @@ var InternalRangePicker = forwardRef((props, ref) => {
82
84
  locale: pickerLocale,
83
85
  prefixCls,
84
86
  disabled: mergedDisabled,
85
- className: cn(sizeCls, !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
87
+ className: cn(sizeCls, "ant-picker", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
86
88
  ...restProps,
87
89
  classNames: mergedClassNames,
88
90
  onChange: rcOnChange,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/DatePicker/index.tsx"],"sourcesContent":["import type { Dayjs } from 'dayjs';\nimport React, { forwardRef, useContext } from 'react';\nimport { Picker, RangePicker as RcRangePicker } from 'rc-picker';\nimport type {\n PickerProps,\n RangePickerProps as RcRangePickerProps,\n PickerRef,\n} from 'rc-picker';\nimport type { PanelMode, RangePickerRef } from 'rc-picker/es/interface';\nimport dayjsGenerateConfig from 'rc-picker/es/generate/dayjs';\nimport enUS from 'rc-picker/es/locale/en_US';\nimport { LocaleContext } from '../locale/default';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext, { type SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport './date-picker.css';\n\n// ---- Types ----\n// Re-export compatible types\nexport type RangeValue<T = Dayjs> = [T | null, T | null] | null;\n\n/**\n * disabledDate compat: rc-picker v4 requires (date, info) => boolean,\n * but antd v4 consumers pass (current) => boolean. We accept both.\n */\ntype DisabledDateCompat = (\n current: Dayjs,\n info?: { type: PanelMode; from?: Dayjs },\n) => boolean;\n\nexport interface DatePickerProps\n extends Omit<\n PickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n /** Override size from ConfigProvider */\n size?: SizeType;\n /** Validation status */\n status?: 'error' | 'warning';\n /** @deprecated Use `variant` or className instead */\n bordered?: boolean;\n /** Custom prefixCls */\n prefixCls?: string;\n /**\n * Narrowed onChange — single picker uses Dayjs | null, not Dayjs | Dayjs[].\n * Uses import('dayjs').Dayjs to avoid duplicate-dayjs type conflicts.\n */\n onChange?: (date: import('dayjs').Dayjs | null, dateString: string) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** Callback when a date is selected on the panel */\n onSelect?: (date: Dayjs) => void;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n}\n\nexport interface RangePickerProps\n extends Omit<\n RcRangePickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n size?: SizeType;\n status?: 'error' | 'warning';\n bordered?: boolean;\n prefixCls?: string;\n /** Narrowed onChange for RangePicker */\n onChange?: (\n dates: [import('dayjs').Dayjs | null, import('dayjs').Dayjs | null] | null,\n dateStrings: [string, string],\n ) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n}\n\nexport type YearPickerProps = DatePickerProps;\nexport type QuarterPickerProps = DatePickerProps;\nexport type MonthPickerProps = DatePickerProps;\nexport type WeekPickerProps = DatePickerProps;\nexport type TimePickerProps = DatePickerProps;\n\n// ---- Size mapping ----\nconst SIZE_CLS: Record<string, string> = {\n small: 'ald-picker-sm',\n large: 'ald-picker-lg',\n};\n\n// ---- DatePicker ----\nconst InternalDatePicker = forwardRef<PickerRef, DatePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n onSelect: _onSelect,\n popupClassName,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n // antd locale 对象包含 DatePicker 字段(即 rc-picker 格式的 locale)\n const pickerLocale = ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (date: Dayjs | Dayjs[], dateString: string | string[]) => {\n onChange(\n (Array.isArray(date) ? date[0] : date) as Dayjs | null,\n Array.isArray(dateString) ? dateString[0] : dateString,\n );\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <Picker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n) as React.ForwardRefExoticComponent<\n DatePickerProps & React.RefAttributes<PickerRef>\n> & {\n RangePicker: typeof InternalRangePicker;\n WeekPicker: typeof WeekPicker;\n MonthPicker: typeof MonthPicker;\n YearPicker: typeof YearPicker;\n TimePicker: typeof TimePicker;\n QuarterPicker: typeof QuarterPicker;\n};\n\n// ---- RangePicker ----\nconst InternalRangePicker = forwardRef<RangePickerRef, RangePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n popupClassName,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n const pickerLocale = ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (\n dates: [Dayjs | null, Dayjs | null] | null,\n dateStrings: [string, string],\n ) => {\n onChange(dates, dateStrings);\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <RcRangePicker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n);\n\n// ---- Picker variants ----\nfunction createPickerVariant(\n pickerMode: DatePickerProps['picker'],\n defaultPlaceholder: string,\n) {\n const PickerVariant = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker={pickerMode}\n placeholder={props.placeholder ?? defaultPlaceholder}\n {...props}\n />\n ));\n PickerVariant.displayName = `DatePicker.${pickerMode}Picker`;\n return PickerVariant;\n}\n\nconst WeekPicker = createPickerVariant('week', 'Select week');\nconst MonthPicker = createPickerVariant('month', 'Select month');\nconst YearPicker = createPickerVariant('year', 'Select year');\nconst QuarterPicker = createPickerVariant('quarter', 'Select quarter');\n\nconst TimePicker = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker=\"time\"\n placeholder={props.placeholder ?? 'Select time'}\n {...props}\n />\n));\nTimePicker.displayName = 'DatePicker.TimePicker';\n\n// ---- Attach sub-components ----\nInternalDatePicker.RangePicker = InternalRangePicker;\nInternalDatePicker.WeekPicker = WeekPicker;\nInternalDatePicker.MonthPicker = MonthPicker;\nInternalDatePicker.YearPicker = YearPicker;\nInternalDatePicker.TimePicker = TimePicker;\nInternalDatePicker.QuarterPicker = QuarterPicker;\n\nconst DatePicker = InternalDatePicker;\nexport default DatePicker;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/DatePicker/index.tsx"],"sourcesContent":["import type { Dayjs } from 'dayjs';\nimport React, { forwardRef, useContext } from 'react';\nimport { Picker, RangePicker as RcRangePicker } from 'rc-picker';\nimport type {\n PickerProps,\n RangePickerProps as RcRangePickerProps,\n PickerRef,\n} from 'rc-picker';\nimport type { PanelMode, RangePickerRef } from 'rc-picker/es/interface';\nimport dayjsGenerateConfig from 'rc-picker/es/generate/dayjs';\nimport enUS from 'rc-picker/es/locale/en_US';\nimport { LocaleContext } from '../locale/default';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext, { type SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport './date-picker.css';\n\n// ---- Types ----\n// Re-export compatible types\nexport type RangeValue<T = Dayjs> = [T | null, T | null] | null;\n\n/**\n * disabledDate compat: rc-picker v4 requires (date, info) => boolean,\n * but antd v4 consumers pass (current) => boolean. We accept both.\n */\ntype DisabledDateCompat = (\n current: Dayjs,\n info?: { type: PanelMode; from?: Dayjs },\n) => boolean;\n\nexport interface DatePickerProps\n extends Omit<\n PickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n /** Override size from ConfigProvider */\n size?: SizeType;\n /** Validation status */\n status?: 'error' | 'warning';\n /** @deprecated Use `variant` or className instead */\n bordered?: boolean;\n /** Custom prefixCls */\n prefixCls?: string;\n /**\n * Narrowed onChange — single picker uses Dayjs | null, not Dayjs | Dayjs[].\n * Uses import('dayjs').Dayjs to avoid duplicate-dayjs type conflicts.\n */\n onChange?: (date: import('dayjs').Dayjs | null, dateString: string) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** Callback when a date is selected on the panel */\n onSelect?: (date: Dayjs) => void;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n /** Override locale for this picker instance. Defaults to ConfigProvider locale. */\n locale?: Record<string, any>;\n}\n\nexport interface RangePickerProps\n extends Omit<\n RcRangePickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n size?: SizeType;\n status?: 'error' | 'warning';\n bordered?: boolean;\n prefixCls?: string;\n /** Narrowed onChange for RangePicker */\n onChange?: (\n dates: [import('dayjs').Dayjs | null, import('dayjs').Dayjs | null] | null,\n dateStrings: [string, string],\n ) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n /** Override locale for this picker instance. Defaults to ConfigProvider locale. */\n locale?: Record<string, any>;\n}\n\nexport type YearPickerProps = DatePickerProps;\nexport type QuarterPickerProps = DatePickerProps;\nexport type MonthPickerProps = DatePickerProps;\nexport type WeekPickerProps = DatePickerProps;\nexport type TimePickerProps = DatePickerProps;\n\n// ---- Size mapping ----\nconst SIZE_CLS: Record<string, string> = {\n small: 'ald-picker-sm',\n large: 'ald-picker-lg',\n};\n\n// ---- DatePicker ----\nconst InternalDatePicker = forwardRef<PickerRef, DatePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n onSelect: _onSelect, // exclude from restProps\n popupClassName,\n locale: localeProp,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n // antd locale 对象包含 DatePicker 字段(即 rc-picker 格式的 locale)\n const pickerLocale = localeProp || ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (date: Dayjs | Dayjs[], dateString: string | string[]) => {\n onChange(\n (Array.isArray(date) ? date[0] : date) as Dayjs | null,\n Array.isArray(dateString) ? dateString[0] : dateString,\n );\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <Picker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-picker',\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n) as React.ForwardRefExoticComponent<\n DatePickerProps & React.RefAttributes<PickerRef>\n> & {\n RangePicker: typeof InternalRangePicker;\n WeekPicker: typeof WeekPicker;\n MonthPicker: typeof MonthPicker;\n YearPicker: typeof YearPicker;\n TimePicker: typeof TimePicker;\n QuarterPicker: typeof QuarterPicker;\n};\n\n// ---- RangePicker ----\nconst InternalRangePicker = forwardRef<RangePickerRef, RangePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n popupClassName,\n locale: localeProp,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n const pickerLocale = localeProp || ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (\n dates: [Dayjs | null, Dayjs | null] | null,\n dateStrings: [string, string],\n ) => {\n onChange(dates, dateStrings);\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <RcRangePicker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-picker',\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n);\n\n// ---- Picker variants ----\nfunction createPickerVariant(\n pickerMode: DatePickerProps['picker'],\n defaultPlaceholder: string,\n) {\n const PickerVariant = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker={pickerMode}\n placeholder={props.placeholder ?? defaultPlaceholder}\n {...props}\n />\n ));\n PickerVariant.displayName = `DatePicker.${pickerMode}Picker`;\n return PickerVariant;\n}\n\nconst WeekPicker = createPickerVariant('week', 'Select week');\nconst MonthPicker = createPickerVariant('month', 'Select month');\nconst YearPicker = createPickerVariant('year', 'Select year');\nconst QuarterPicker = createPickerVariant('quarter', 'Select quarter');\n\nconst TimePicker = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker=\"time\"\n placeholder={props.placeholder ?? 'Select time'}\n {...props}\n />\n));\nTimePicker.displayName = 'DatePicker.TimePicker';\n\n// ---- Attach sub-components ----\nInternalDatePicker.RangePicker = InternalRangePicker;\nInternalDatePicker.WeekPicker = WeekPicker;\nInternalDatePicker.MonthPicker = MonthPicker;\nInternalDatePicker.YearPicker = YearPicker;\nInternalDatePicker.TimePicker = TimePicker;\nInternalDatePicker.QuarterPicker = QuarterPicker;\n\nconst DatePicker = InternalDatePicker;\nexport default DatePicker;\n"],"mappings":"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"}
@@ -3,6 +3,7 @@ export interface DrawerProps {
3
3
  open?: boolean;
4
4
  onClose?: (e?: React.MouseEvent | React.KeyboardEvent) => void;
5
5
  title?: React.ReactNode;
6
+ description?: React.ReactNode;
6
7
  placement?: 'top' | 'right' | 'bottom' | 'left';
7
8
  width?: number | string;
8
9
  height?: number | string;