@aloudata/aloudata-design 3.0.17 → 3.0.18-beta.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 (200) hide show
  1. package/README.md +63 -59
  2. package/dist/Alert/index.js +1 -1
  3. package/dist/Alert/index.js.map +1 -1
  4. package/dist/Avatar/component/Avatar/index.js +2 -2
  5. package/dist/Avatar/component/Avatar/index.js.map +1 -1
  6. package/dist/Avatar/component/Avatar/type.js +3 -3
  7. package/dist/Avatar/component/Avatar/type.js.map +1 -1
  8. package/dist/Badge/index.js +5 -5
  9. package/dist/Badge/index.js.map +1 -1
  10. package/dist/Breadcrumb/index.js +4 -4
  11. package/dist/Breadcrumb/index.js.map +1 -1
  12. package/dist/Button/index.js +8 -8
  13. package/dist/Button/index.js.map +1 -1
  14. package/dist/Card/index.js +1 -1
  15. package/dist/Card/index.js.map +1 -1
  16. package/dist/Checkbox/index.js +3 -3
  17. package/dist/Checkbox/index.js.map +1 -1
  18. package/dist/Collapse/index.js +1 -1
  19. package/dist/Collapse/index.js.map +1 -1
  20. package/dist/ColorPicker/ComplexColorPicker/ColorAlphaInput.js +1 -1
  21. package/dist/ColorPicker/ComplexColorPicker/ColorAlphaInput.js.map +1 -1
  22. package/dist/ColorPicker/ComplexColorPicker/ColorHsbInput.js +1 -1
  23. package/dist/ColorPicker/ComplexColorPicker/ColorHsbInput.js.map +1 -1
  24. package/dist/ColorPicker/ComplexColorPicker/ColorRgbInput.js +1 -1
  25. package/dist/ColorPicker/ComplexColorPicker/ColorRgbInput.js.map +1 -1
  26. package/dist/ColorPicker/ComplexColorPicker/index.js +2 -2
  27. package/dist/ColorPicker/ComplexColorPicker/index.js.map +1 -1
  28. package/dist/ColorPicker/index.js +11 -11
  29. package/dist/ColorPicker/index.js.map +1 -1
  30. package/dist/ColorPicker/util.d.ts +1 -1
  31. package/dist/ColorPicker/util.js.map +1 -1
  32. package/dist/DataPreviewTable/components/Body/Cell.js +2 -2
  33. package/dist/DataPreviewTable/components/Body/Cell.js.map +1 -1
  34. package/dist/DataPreviewTable/components/Body/index.js +1 -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 +3 -3
  39. package/dist/DataPreviewTable/components/Header/index.js.map +1 -1
  40. package/dist/DataPreviewTable/index.js +1 -1
  41. package/dist/DataPreviewTable/index.js.map +1 -1
  42. package/dist/Divider/index.js +1 -1
  43. package/dist/Divider/index.js.map +1 -1
  44. package/dist/Drawer/index.js +3 -3
  45. package/dist/Drawer/index.js.map +1 -1
  46. package/dist/Empty/image/Data.js +16 -16
  47. package/dist/Empty/image/Data.js.map +1 -1
  48. package/dist/Empty/image/User.js +16 -16
  49. package/dist/Empty/image/User.js.map +1 -1
  50. package/dist/Empty/image/WorkBook.js +17 -17
  51. package/dist/Empty/image/WorkBook.js.map +1 -1
  52. package/dist/Form/index.js +3 -3
  53. package/dist/Form/index.js.map +1 -1
  54. package/dist/Icon/components/SortAscendingOrderColor.js +1 -1
  55. package/dist/Icon/components/SortAscendingOrderColor.js.map +1 -1
  56. package/dist/Icon/components/SortDescendingOrderColor.js +1 -1
  57. package/dist/Icon/components/SortDescendingOrderColor.js.map +1 -1
  58. package/dist/Icon/components/User.js +2 -2
  59. package/dist/Icon/components/User.js.map +1 -1
  60. package/dist/Icon/components/UserGroup.js +2 -2
  61. package/dist/Icon/components/UserGroup.js.map +1 -1
  62. package/dist/Input/components/Input/index.js +3 -3
  63. package/dist/Input/components/Input/index.js.map +1 -1
  64. package/dist/Input/components/TextArea/index.js +3 -3
  65. package/dist/Input/components/TextArea/index.js.map +1 -1
  66. package/dist/InputNumber/index.js +4 -4
  67. package/dist/InputNumber/index.js.map +1 -1
  68. package/dist/LogicTree/components/LogicItem/index.js +2 -2
  69. package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
  70. package/dist/MemberPicker/components/SelectedMemberTags.js +1 -1
  71. package/dist/MemberPicker/components/SelectedMemberTags.js.map +1 -1
  72. package/dist/Modal/index.js +8 -8
  73. package/dist/Modal/index.js.map +1 -1
  74. package/dist/Popconfirm/index.js +1 -1
  75. package/dist/Popconfirm/index.js.map +1 -1
  76. package/dist/Popover/index.js +2 -2
  77. package/dist/Popover/index.js.map +1 -1
  78. package/dist/Progress/index.js +1 -1
  79. package/dist/Progress/index.js.map +1 -1
  80. package/dist/RenameInput/index.js +4 -4
  81. package/dist/RenameInput/index.js.map +1 -1
  82. package/dist/Result/index.js +4 -4
  83. package/dist/Result/index.js.map +1 -1
  84. package/dist/Select/components/Suffix.js +3 -3
  85. package/dist/Select/components/Suffix.js.map +1 -1
  86. package/dist/Slider/index.js +4 -4
  87. package/dist/Slider/index.js.map +1 -1
  88. package/dist/Spin/CustomIcon/index.js +2 -2
  89. package/dist/Spin/CustomIcon/index.js.map +1 -1
  90. package/dist/StatusLight/index.js +15 -15
  91. package/dist/StatusLight/index.js.map +1 -1
  92. package/dist/Steps/components/CustomDot/index.js +9 -2
  93. package/dist/Steps/components/CustomDot/index.js.map +1 -0
  94. package/dist/Steps/components/ProcessIcon/index.d.ts +2 -1
  95. package/dist/Steps/components/ProcessIcon/index.js +33 -12
  96. package/dist/Steps/components/ProcessIcon/index.js.map +1 -1
  97. package/dist/Steps/index.js +67 -49
  98. package/dist/Steps/index.js.map +1 -1
  99. package/dist/Switch/index.js +3 -3
  100. package/dist/Switch/index.js.map +1 -1
  101. package/dist/Table/components/Header.js +3 -3
  102. package/dist/Table/components/Header.js.map +1 -1
  103. package/dist/Tabs/index.js +9 -9
  104. package/dist/Tabs/index.js.map +1 -1
  105. package/dist/Tag/index.js +11 -11
  106. package/dist/Tag/index.js.map +1 -1
  107. package/dist/TextLink/index.js +2 -2
  108. package/dist/TextLink/index.js.map +1 -1
  109. package/dist/Tooltip/index.js +3 -3
  110. package/dist/Tooltip/index.js.map +1 -1
  111. package/dist/Tour/index.js +1 -1
  112. package/dist/Tour/index.js.map +1 -1
  113. package/dist/Tree/Tree2.js +2 -2
  114. package/dist/Tree/Tree2.js.map +1 -1
  115. package/dist/Typography/index.js +1 -1
  116. package/dist/Typography/index.js.map +1 -1
  117. package/dist/User/index.js +1 -1
  118. package/dist/User/index.js.map +1 -1
  119. package/dist/Watermark/index.js +2 -1
  120. package/dist/Watermark/index.js.map +1 -1
  121. package/dist/aloudata-design.css +1 -1
  122. package/dist/index.d.ts +2 -2
  123. package/dist/index.js +11 -5
  124. package/dist/message/index.js +1 -1
  125. package/dist/message/index.js.map +1 -1
  126. package/dist/notification/index.js +5 -5
  127. package/dist/notification/index.js.map +1 -1
  128. package/dist/theme/contract/shadowGeneratorSpecification.d.ts +37 -0
  129. package/dist/theme/contract/tokenCssBridge.d.ts +60 -0
  130. package/dist/theme/contract/tokenCssBridge.js +2 -0
  131. package/dist/theme/contract/tokenOutputContract.d.ts +35 -0
  132. package/dist/theme/contract/tokenOutputContract.js +198 -0
  133. package/dist/theme/contract/tokenOutputContract.js.map +1 -0
  134. package/dist/theme/generator/acceptedColorValues.d.ts +97 -0
  135. package/dist/theme/generator/acceptedColorValues.js +2 -0
  136. package/dist/theme/generator/cssArtifactEmitter.d.ts +62 -0
  137. package/dist/theme/generator/cssArtifactEmitter.js +2 -0
  138. package/dist/theme/generator/generator.d.ts +41 -0
  139. package/dist/theme/generator/generator.js +2 -0
  140. package/dist/theme/generator/generatorDiff.d.ts +53 -0
  141. package/dist/theme/generator/generatorDiff.js +2 -0
  142. package/dist/theme/generator/generatorEmitter.d.ts +73 -0
  143. package/dist/theme/generator/generatorEmitter.js +2 -0
  144. package/dist/theme/generator/generatorMappingStrategy.d.ts +43 -0
  145. package/dist/theme/generator/generatorMappingStrategy.js +2 -0
  146. package/dist/theme/generator/generatorOutputSchema.d.ts +80 -0
  147. package/dist/theme/generator/generatorOutputSchema.js +2 -0
  148. package/dist/theme/generator/minimalAcceptedColorValues.d.ts +27 -0
  149. package/dist/theme/generator/minimalAcceptedColorValues.js +2 -0
  150. package/dist/theme/generator/valueResolver.d.ts +64 -0
  151. package/dist/theme/generator/valueResolver.js +2 -0
  152. package/dist/theme/governance/migrationMappingRegistry.d.ts +22 -0
  153. package/dist/theme/governance/migrationMappingRegistry.js +459 -0
  154. package/dist/theme/governance/migrationMappingRegistry.js.map +1 -0
  155. package/dist/theme/governance/reviewGate.d.ts +33 -0
  156. package/dist/theme/governance/reviewGate.js +116 -0
  157. package/dist/theme/governance/reviewGate.js.map +1 -0
  158. package/dist/theme/governance/validateMigrationMapping.d.ts +50 -0
  159. package/dist/theme/governance/validateMigrationMapping.js +157 -0
  160. package/dist/theme/governance/validateMigrationMapping.js.map +1 -0
  161. package/dist/theme/index.d.ts +16 -5
  162. package/dist/theme/index.js +10 -4
  163. package/dist/theme/runtime/colorValueMode/index.d.ts +5 -0
  164. package/dist/theme/runtime/colorValueMode/index.js +49 -0
  165. package/dist/theme/runtime/colorValueMode/index.js.map +1 -0
  166. package/dist/theme/runtime/colorValueMode/registry.d.ts +29 -0
  167. package/dist/theme/runtime/colorValueMode/registry.js +39 -0
  168. package/dist/theme/runtime/colorValueMode/registry.js.map +1 -0
  169. package/dist/theme/runtime/colorValueMode/v3.d.ts +98 -0
  170. package/dist/theme/runtime/colorValueMode/v3.js +230 -0
  171. package/dist/theme/runtime/colorValueMode/v3.js.map +1 -0
  172. package/dist/theme/runtime/colorValueMode.d.ts +2 -0
  173. package/dist/theme/{createTheme.js → runtime/createTheme.js} +1 -1
  174. package/dist/theme/runtime/createTheme.js.map +1 -0
  175. package/dist/theme/{defaultTheme.js → runtime/defaultTheme.js} +1 -1
  176. package/dist/theme/runtime/defaultTheme.js.map +1 -0
  177. package/dist/theme/{initAldTheme.js → runtime/initAldTheme.js} +1 -1
  178. package/dist/theme/runtime/initAldTheme.js.map +1 -0
  179. package/dist/theme/runtime/integrationController.d.ts +26 -0
  180. package/dist/theme/runtime/integrationController.js +2 -0
  181. package/dist/theme/runtime/runtimeAdapter.d.ts +31 -0
  182. package/dist/theme/runtime/runtimeAdapter.js +2 -0
  183. package/dist/theme/{themeToCssVars.js → runtime/themeToCssVars.js} +1 -1
  184. package/dist/theme/runtime/themeToCssVars.js.map +1 -0
  185. package/dist/theme/{tokenMap.js → runtime/tokenMap.js} +1 -1
  186. package/dist/theme/runtime/tokenMap.js.map +1 -0
  187. package/dist/theme/runtime/types.js +2 -0
  188. package/package.json +1 -1
  189. package/dist/theme/createTheme.js.map +0 -1
  190. package/dist/theme/defaultTheme.js.map +0 -1
  191. package/dist/theme/initAldTheme.js.map +0 -1
  192. package/dist/theme/themeToCssVars.js.map +0 -1
  193. package/dist/theme/tokenMap.js.map +0 -1
  194. /package/dist/theme/{types.js → contract/shadowGeneratorSpecification.js} +0 -0
  195. /package/dist/theme/{createTheme.d.ts → runtime/createTheme.d.ts} +0 -0
  196. /package/dist/theme/{defaultTheme.d.ts → runtime/defaultTheme.d.ts} +0 -0
  197. /package/dist/theme/{initAldTheme.d.ts → runtime/initAldTheme.d.ts} +0 -0
  198. /package/dist/theme/{themeToCssVars.d.ts → runtime/themeToCssVars.d.ts} +0 -0
  199. /package/dist/theme/{tokenMap.d.ts → runtime/tokenMap.d.ts} +0 -0
  200. /package/dist/theme/{types.d.ts → runtime/types.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tag/index.tsx"],"sourcesContent":["import React, { MouseEventHandler, useCallback } from 'react';\nimport { CloseLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface TagProps {\n children: React.ReactNode;\n onClick?: MouseEventHandler;\n /**\n * 是否可关闭\n */\n closable?: boolean;\n /**\n * 关闭回调\n */\n onClose?: MouseEventHandler;\n status?: 'default' | 'info' | 'success' | 'warning' | 'error';\n /**\n * 自定义颜色\n */\n color?: string;\n /**\n * 前置 icon 图标\n */\n icon?: React.ReactNode;\n /**\n * 后置 icon 图标\n */\n suffixIcon?: React.ReactNode;\n /**\n * 大小\n */\n size?: 'large' | 'default' | 'middle' | 'small';\n /**\n * 风格,填充、默认、线框\n */\n mode?: 'fill' | 'default' | 'border';\n /**\n * 是否禁用\n */\n disabled?: boolean;\n /**\n * 最大宽度\n */\n maxWidth?: number;\n /**\n * hover 上去后显示的 title\n */\n title?: string;\n className?: string;\n}\n\nexport default function Tag(props: TagProps) {\n const {\n children,\n onClick,\n closable,\n onClose,\n color,\n icon,\n suffixIcon,\n size = 'middle',\n status,\n mode,\n disabled,\n maxWidth,\n className,\n title,\n } = props;\n const tokens = getStatusTokens(status);\n const providedIsHex = isHexColor(color);\n const providedColor = color;\n\n // background color\n const bgColor = (() => {\n if (mode === 'border') {\n return 'var(--background-default)';\n }\n if (providedColor) {\n if (providedIsHex)\n return convertHexToRGBA(\n providedColor as string,\n mode === 'fill' ? 0.16 : 0.06,\n );\n return `color-mix(in srgb, ${providedColor} ${\n mode === 'fill' ? 16 : 6\n }%, transparent)`;\n }\n return mode === 'fill' ? tokens.bgSubtle : tokens.bgOnSubtle;\n })();\n // text color\n const textColor = (() => {\n if (providedColor) {\n if (providedIsHex) return convertHexToRGBA(providedColor as string, 1);\n return providedColor;\n }\n return tokens.text;\n })();\n // border color\n const borderColor = (() => {\n if (mode === 'fill') return 'transparent';\n if (providedColor) {\n if (providedIsHex) return convertHexToRGBA(providedColor as string, 0.32);\n return `color-mix(in srgb, ${providedColor} 32%, transparent)`;\n }\n return tokens.borderSubtle;\n })();\n\n const onTagClick = useCallback<MouseEventHandler>(\n (e) => {\n if (disabled) {\n return;\n }\n onClick?.(e);\n },\n [disabled, onClick],\n );\n const onCloseBtnClick = useCallback<MouseEventHandler>(\n (e) => {\n if (disabled) {\n return;\n }\n onClose?.(e);\n },\n [disabled, onClose],\n );\n\n const DEFAULT_MAX_WIDTH = 400;\n\n const domTitle =\n title !== undefined ? title : typeof children === 'string' ? children : '';\n\n return (\n <span\n className={cn(\n prefixCls('container'),\n 'tw-inline-flex tw-cursor-default tw-items-center tw-overflow-hidden tw-border tw-border-solid',\n // Size variants\n size === 'small' &&\n `${prefixCls(\n 'small',\n )} tw-gap-sp-50 tw-rounded-[2px] tw-px-[3px] tw-py-px tw-text-xs tw-leading-4`,\n size === 'large' &&\n `${prefixCls(\n 'large',\n )} tw-gap-sp-50 tw-rounded-[6px] tw-px-[7px] tw-py-px tw-text-base tw-leading-6`,\n size !== 'small' &&\n size !== 'large' &&\n 'tw-gap-sp-50 tw-rounded-r-50 tw-px-[5px] tw-py-px tw-text-sm tw-leading-5',\n // Disabled\n disabled && `${prefixCls('disabled')} tw-cursor-default tw-opacity-40`,\n className || '',\n )}\n style={{\n backgroundColor: bgColor,\n color: textColor,\n borderColor: borderColor,\n maxWidth: maxWidth || DEFAULT_MAX_WIDTH,\n }}\n onClick={onTagClick}\n >\n {icon && (\n <span\n className={cn(\n prefixCls('icon'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n )}\n >\n {icon}\n </span>\n )}\n <span\n className={cn(prefixCls('content'), 'tw-flex-1 tw-truncate')}\n title={domTitle}\n >\n {children}\n </span>\n {suffixIcon && (\n <span\n className={cn(\n prefixCls('suffix-icon'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n )}\n >\n {suffixIcon}\n </span>\n )}\n {closable ? (\n <span\n className={cn(\n prefixCls('close-btn'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n disabled ? 'tw-cursor-default' : 'tw-cursor-pointer',\n )}\n onClick={onCloseBtnClick}\n >\n <CloseLightLine color={textColor} size={16} />\n </span>\n ) : null}\n </span>\n );\n}\n\nconst ALD_PREFIX = 'ald-tag';\nexport function prefixCls(className: string) {\n return `${ALD_PREFIX}-${className}`;\n}\n\nfunction convertHexToRGBA(hex: string, opacity: number) {\n const tempHex = hex.replace('#', '');\n const r = parseInt(tempHex.substring(0, 2), 16);\n const g = parseInt(tempHex.substring(2, 4), 16);\n const b = parseInt(tempHex.substring(4, 6), 16);\n\n return `rgba(${r},${g},${b},${opacity})`;\n}\n\nfunction isHexColor(value?: string): boolean {\n return (\n !!value && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value)\n );\n}\n\nfunction getStatusTokens(status?: TagProps['status']) {\n switch (status) {\n case 'success':\n return {\n text: 'var(--alias-colors-text-success)',\n bgSubtle: 'var(--background-positive-subtle)',\n bgOnSubtle: 'var(--background-positive-on-subtle)',\n borderSubtle: 'var(--border-positive-subtle)',\n } as const;\n case 'warning':\n return {\n text: 'var(--alias-colors-text-warning)',\n bgSubtle: 'var(--background-warning-subtle)',\n bgOnSubtle: 'var(--background-warning-on-subtle)',\n borderSubtle: 'var(--border-warning-subtle)',\n } as const;\n case 'error':\n return {\n text: 'var(--alias-colors-text-danger)',\n bgSubtle: 'var(--background-negative-subtle)',\n bgOnSubtle: 'var(--background-negative-on-subtle)',\n borderSubtle: 'var(--border-negative-subtle)',\n } as const;\n case 'default':\n return {\n text: 'var(--alias-colors-text-default)',\n bgSubtle: 'var(--background-neutral-subtle)',\n bgOnSubtle: 'var(--background-neutral-on-subtle)',\n borderSubtle: 'var(--border-neutral-subtle)',\n } as const;\n case 'info':\n default:\n return {\n text: 'var(--alias-colors-text-information)',\n bgSubtle: 'var(--background-informative-subtle)',\n bgOnSubtle: 'var(--background-informative-on-subtle)',\n borderSubtle: 'var(--border-informative-subtle)',\n } as const;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tag/index.tsx"],"sourcesContent":["import React, { MouseEventHandler, useCallback } from 'react';\nimport { CloseLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface TagProps {\n children: React.ReactNode;\n onClick?: MouseEventHandler;\n /**\n * 是否可关闭\n */\n closable?: boolean;\n /**\n * 关闭回调\n */\n onClose?: MouseEventHandler;\n status?: 'default' | 'info' | 'success' | 'warning' | 'error';\n /**\n * 自定义颜色\n */\n color?: string;\n /**\n * 前置 icon 图标\n */\n icon?: React.ReactNode;\n /**\n * 后置 icon 图标\n */\n suffixIcon?: React.ReactNode;\n /**\n * 大小\n */\n size?: 'large' | 'default' | 'middle' | 'small';\n /**\n * 风格,填充、默认、线框\n */\n mode?: 'fill' | 'default' | 'border';\n /**\n * 是否禁用\n */\n disabled?: boolean;\n /**\n * 最大宽度\n */\n maxWidth?: number;\n /**\n * hover 上去后显示的 title\n */\n title?: string;\n className?: string;\n}\n\nexport default function Tag(props: TagProps) {\n const {\n children,\n onClick,\n closable,\n onClose,\n color,\n icon,\n suffixIcon,\n size = 'middle',\n status,\n mode,\n disabled,\n maxWidth,\n className,\n title,\n } = props;\n const tokens = getStatusTokens(status);\n const providedIsHex = isHexColor(color);\n const providedColor = color;\n\n // background color\n const bgColor = (() => {\n if (mode === 'border') {\n return 'var(--background-default)';\n }\n if (providedColor) {\n if (providedIsHex)\n return addHexAlpha(\n providedColor as string,\n mode === 'fill' ? 0.16 : 0.06,\n );\n return `color-mix(in srgb, ${providedColor} ${\n mode === 'fill' ? 16 : 6\n }%, transparent)`;\n }\n return mode === 'fill' ? tokens.bgSubtle : tokens.bgOnSubtle;\n })();\n // text color\n const textColor = (() => {\n if (providedColor) {\n if (providedIsHex) return addHexAlpha(providedColor as string, 1);\n return providedColor;\n }\n return tokens.text;\n })();\n // border color\n const borderColor = (() => {\n if (mode === 'fill') return 'transparent';\n if (providedColor) {\n if (providedIsHex) return addHexAlpha(providedColor as string, 0.32);\n return `color-mix(in srgb, ${providedColor} 32%, transparent)`;\n }\n return tokens.borderSubtle;\n })();\n\n const onTagClick = useCallback<MouseEventHandler>(\n (e) => {\n if (disabled) {\n return;\n }\n onClick?.(e);\n },\n [disabled, onClick],\n );\n const onCloseBtnClick = useCallback<MouseEventHandler>(\n (e) => {\n if (disabled) {\n return;\n }\n onClose?.(e);\n },\n [disabled, onClose],\n );\n\n const DEFAULT_MAX_WIDTH = 400;\n\n const domTitle =\n title !== undefined ? title : typeof children === 'string' ? children : '';\n\n return (\n <span\n className={cn(\n prefixCls('container'),\n 'tw-inline-flex tw-cursor-default tw-items-center tw-overflow-hidden tw-border tw-border-solid',\n // Size variants\n size === 'small' &&\n `${prefixCls(\n 'small',\n )} tw-gap-sp-50 tw-rounded-[2px] tw-px-[3px] tw-py-px tw-text-xs tw-leading-4`,\n size === 'large' &&\n `${prefixCls(\n 'large',\n )} tw-gap-sp-50 tw-rounded-[6px] tw-px-[7px] tw-py-px tw-text-base tw-leading-6`,\n size !== 'small' &&\n size !== 'large' &&\n 'tw-gap-sp-50 tw-rounded-r-50 tw-px-[5px] tw-py-px tw-text-sm tw-leading-5',\n // Disabled\n disabled && `${prefixCls('disabled')} tw-cursor-default tw-opacity-40`,\n className || '',\n )}\n style={{\n backgroundColor: bgColor,\n color: textColor,\n borderColor: borderColor,\n maxWidth: maxWidth || DEFAULT_MAX_WIDTH,\n }}\n onClick={onTagClick}\n >\n {icon && (\n <span\n className={cn(\n prefixCls('icon'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n )}\n >\n {icon}\n </span>\n )}\n <span\n className={cn(prefixCls('content'), 'tw-flex-1 tw-truncate')}\n title={domTitle}\n >\n {children}\n </span>\n {suffixIcon && (\n <span\n className={cn(\n prefixCls('suffix-icon'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n )}\n >\n {suffixIcon}\n </span>\n )}\n {closable ? (\n <span\n className={cn(\n prefixCls('close-btn'),\n 'tw-inline-flex tw-flex-none tw-items-center',\n disabled ? 'tw-cursor-default' : 'tw-cursor-pointer',\n )}\n onClick={onCloseBtnClick}\n >\n <CloseLightLine color={textColor} size={16} />\n </span>\n ) : null}\n </span>\n );\n}\n\nconst ALD_PREFIX = 'ald-tag';\nexport function prefixCls(className: string) {\n return `${ALD_PREFIX}-${className}`;\n}\n\nfunction addHexAlpha(hex: string, opacity: number) {\n const rawHex = hex.startsWith('#') ? hex.slice(1) : hex;\n const normalizedHex =\n rawHex.length === 3\n ? rawHex\n .split('')\n .map((char) => `${char}${char}`)\n .join('')\n : rawHex.slice(0, 6);\n const alpha = Math.round(opacity * 255)\n .toString(16)\n .padStart(2, '0');\n\n return `#${normalizedHex}${alpha}`;\n}\n\nfunction isHexColor(value?: string): boolean {\n return (\n !!value && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value)\n );\n}\n\nfunction getStatusTokens(status?: TagProps['status']) {\n switch (status) {\n case 'success':\n return {\n text: 'var(--content-positive-secondary)',\n bgSubtle: 'var(--background-positive-subtle)',\n bgOnSubtle: 'var(--background-positive-on-subtle)',\n borderSubtle: 'var(--border-positive-subtle)',\n } as const;\n case 'warning':\n return {\n text: 'var(--content-warning-secondary)',\n bgSubtle: 'var(--background-warning-subtle)',\n bgOnSubtle: 'var(--background-warning-on-subtle)',\n borderSubtle: 'var(--border-warning-subtle)',\n } as const;\n case 'error':\n return {\n text: 'var(--content-negative-secondary)',\n bgSubtle: 'var(--background-negative-subtle)',\n bgOnSubtle: 'var(--background-negative-on-subtle)',\n borderSubtle: 'var(--border-negative-subtle)',\n } as const;\n case 'default':\n return {\n text: 'var(--content-primary)',\n bgSubtle: 'var(--background-neutral-subtle)',\n bgOnSubtle: 'var(--background-neutral-on-subtle)',\n borderSubtle: 'var(--border-neutral-subtle)',\n } as const;\n case 'info':\n default:\n return {\n text: 'var(--content-informative-secondary)',\n bgSubtle: 'var(--background-informative-subtle)',\n bgOnSubtle: 'var(--background-informative-on-subtle)',\n borderSubtle: 'var(--border-informative-subtle)',\n } as const;\n }\n}\n"],"mappings":"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"}
@@ -11,8 +11,8 @@ var textLinkVariants = cva("ald-text-link tw-inline-flex tw-cursor-pointer tw-it
11
11
  large: "ald-text-link-large tw-text-base tw-leading-6"
12
12
  },
13
13
  type: {
14
- primary: "ald-text-link-primary tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]",
15
- secondary: "ald-text-link-secondary tw-text-[var(--alias-colors-text-default)] hover:tw-text-[var(--alias-colors-text-selected)]"
14
+ primary: "ald-text-link-primary tw-text-[var(--action-primary-normal)] hover:tw-text-[var(--action-primary-hover)]",
15
+ secondary: "ald-text-link-secondary tw-text-[var(--content-primary)] hover:tw-text-[var(--content-brand-primary)]"
16
16
  },
17
17
  disabled: {
18
18
  true: "ald-text-link-disabled tw-pointer-events-none tw-cursor-default tw-opacity-50",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/TextLink/index.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport React from 'react';\nimport { SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\n\ntype TextLinkType = 'primary' | 'secondary';\ninterface TextLinkProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'type'> {\n className?: string;\n /**\n * @description 类型\n * @type 'primary' | 'secondary'\n * @default primary\n */\n type?: TextLinkType;\n /**\n * @description 显示下划线\n * @type boolean\n * @default false\n */\n underline?: boolean;\n /**\n * @description 尺寸\n * @type 'small' | 'middle' | 'large'| undefined\n * @default large\n */\n size?: SizeType;\n /**\n * @description 是否禁用\n * @default false\n */\n disabled?: boolean;\n /**\n * @description 设置按钮的图标组件\n */\n icon?: React.ReactNode;\n /**\n * @description 链接地址\n */\n href?: string;\n /**\n * @description 链接打开方式\n */\n target?: string;\n}\n\nconst textLinkVariants = cva(\n 'ald-text-link tw-inline-flex tw-cursor-pointer tw-items-center tw-gap-1',\n {\n variants: {\n size: {\n small: 'ald-text-link-small tw-text-xs tw-leading-4',\n middle: 'ald-text-link-middle tw-text-sm tw-leading-5',\n large: 'ald-text-link-large tw-text-base tw-leading-6',\n },\n type: {\n primary:\n 'ald-text-link-primary tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]',\n secondary:\n 'ald-text-link-secondary tw-text-[var(--alias-colors-text-default)] hover:tw-text-[var(--alias-colors-text-selected)]',\n },\n disabled: {\n true: 'ald-text-link-disabled tw-pointer-events-none tw-cursor-default tw-opacity-50',\n false: '',\n },\n underline: {\n true: 'ald-text-link-show-underline tw-font-normal hover:tw-underline active:tw-underline',\n false: 'tw-font-medium',\n },\n },\n defaultVariants: {\n size: 'middle',\n type: 'primary',\n disabled: false,\n underline: false,\n },\n },\n);\n\nconst TextLink = React.forwardRef<HTMLSpanElement, TextLinkProps>(\n (props, ref) => {\n const {\n size: propsSize,\n type = 'primary',\n underline,\n disabled,\n icon: propsIcon = null,\n children,\n className,\n ...restProps\n } = props;\n const size = propsSize || 'middle';\n const icon = underline ? null : propsIcon;\n return (\n <span\n ref={ref}\n className={cn(\n textLinkVariants({\n size,\n type,\n disabled: !!disabled,\n underline: !!underline,\n }),\n className,\n )}\n {...restProps}\n >\n {icon}\n {children}\n </span>\n );\n },\n);\n\nTextLink.displayName = 'TextLink';\n\nexport default TextLink;\n"],"mappings":";;;;;AA8CA,IAAM,mBAAmB,IACvB,2EACA;CACE,UAAU;EACR,MAAM;GACJ,OAAO;GACP,QAAQ;GACR,OAAO;GACR;EACD,MAAM;GACJ,SACE;GACF,WACE;GACH;EACD,UAAU;GACR,MAAM;GACN,OAAO;GACR;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACR;EACF;CACD,iBAAiB;EACf,MAAM;EACN,MAAM;EACN,UAAU;EACV,WAAW;EACZ;CACF,CACF;AAED,IAAM,WAAW,MAAM,YACpB,OAAO,QAAQ;CACd,MAAM,EACJ,MAAM,WACN,OAAO,WACP,WACA,UACA,MAAM,YAAY,MAClB,UACA,WACA,GAAG,cACD;CACJ,MAAM,OAAO,aAAa;CAC1B,MAAM,OAAO,YAAY,OAAO;AAChC,QACE,qBAAC,QAAD;EACO;EACL,WAAW,GACT,iBAAiB;GACf;GACA;GACA,UAAU,CAAC,CAAC;GACZ,WAAW,CAAC,CAAC;GACd,CAAC,EACF,UACD;EACD,GAAI;YAXN,CAaG,MACA,SACI;;EAGZ;AAED,SAAS,cAAc"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/TextLink/index.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport React from 'react';\nimport { SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\n\ntype TextLinkType = 'primary' | 'secondary';\ninterface TextLinkProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'type'> {\n className?: string;\n /**\n * @description 类型\n * @type 'primary' | 'secondary'\n * @default primary\n */\n type?: TextLinkType;\n /**\n * @description 显示下划线\n * @type boolean\n * @default false\n */\n underline?: boolean;\n /**\n * @description 尺寸\n * @type 'small' | 'middle' | 'large'| undefined\n * @default large\n */\n size?: SizeType;\n /**\n * @description 是否禁用\n * @default false\n */\n disabled?: boolean;\n /**\n * @description 设置按钮的图标组件\n */\n icon?: React.ReactNode;\n /**\n * @description 链接地址\n */\n href?: string;\n /**\n * @description 链接打开方式\n */\n target?: string;\n}\n\nconst textLinkVariants = cva(\n 'ald-text-link tw-inline-flex tw-cursor-pointer tw-items-center tw-gap-1',\n {\n variants: {\n size: {\n small: 'ald-text-link-small tw-text-xs tw-leading-4',\n middle: 'ald-text-link-middle tw-text-sm tw-leading-5',\n large: 'ald-text-link-large tw-text-base tw-leading-6',\n },\n type: {\n primary:\n 'ald-text-link-primary tw-text-[var(--action-primary-normal)] hover:tw-text-[var(--action-primary-hover)]',\n secondary:\n 'ald-text-link-secondary tw-text-[var(--content-primary)] hover:tw-text-[var(--content-brand-primary)]',\n },\n disabled: {\n true: 'ald-text-link-disabled tw-pointer-events-none tw-cursor-default tw-opacity-50',\n false: '',\n },\n underline: {\n true: 'ald-text-link-show-underline tw-font-normal hover:tw-underline active:tw-underline',\n false: 'tw-font-medium',\n },\n },\n defaultVariants: {\n size: 'middle',\n type: 'primary',\n disabled: false,\n underline: false,\n },\n },\n);\n\nconst TextLink = React.forwardRef<HTMLSpanElement, TextLinkProps>(\n (props, ref) => {\n const {\n size: propsSize,\n type = 'primary',\n underline,\n disabled,\n icon: propsIcon = null,\n children,\n className,\n ...restProps\n } = props;\n const size = propsSize || 'middle';\n const icon = underline ? null : propsIcon;\n return (\n <span\n ref={ref}\n className={cn(\n textLinkVariants({\n size,\n type,\n disabled: !!disabled,\n underline: !!underline,\n }),\n className,\n )}\n {...restProps}\n >\n {icon}\n {children}\n </span>\n );\n },\n);\n\nTextLink.displayName = 'TextLink';\n\nexport default TextLink;\n"],"mappings":";;;;;AA8CA,IAAM,mBAAmB,IACvB,2EACA;CACE,UAAU;EACR,MAAM;GACJ,OAAO;GACP,QAAQ;GACR,OAAO;GACR;EACD,MAAM;GACJ,SACE;GACF,WACE;GACH;EACD,UAAU;GACR,MAAM;GACN,OAAO;GACR;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACR;EACF;CACD,iBAAiB;EACf,MAAM;EACN,MAAM;EACN,UAAU;EACV,WAAW;EACZ;CACF,CACF;AAED,IAAM,WAAW,MAAM,YACpB,OAAO,QAAQ;CACd,MAAM,EACJ,MAAM,WACN,OAAO,WACP,WACA,UACA,MAAM,YAAY,MAClB,UACA,WACA,GAAG,cACD;CACJ,MAAM,OAAO,aAAa;CAC1B,MAAM,OAAO,YAAY,OAAO;AAChC,QACE,qBAAC,QAAD;EACO;EACL,WAAW,GACT,iBAAiB;GACf;GACA;GACA,UAAU,CAAC,CAAC;GACZ,WAAW,CAAC,CAAC;GACd,CAAC,EACF,UACD;EACD,GAAI;YAXN,CAaG,MACA,SACI;;EAGZ;AAED,SAAS,cAAc"}
@@ -37,7 +37,7 @@ function isClickTrigger(trigger) {
37
37
  function isTriggerDisabled(trigger) {
38
38
  return Array.isArray(trigger) && trigger.length === 0;
39
39
  }
40
- var contentClasses = "ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--alias-colors-bg-skeleton-inverse-subtler)] tw-text-[var(--alias-colors-text-inverse-strong)] tw-animate-in tw-fade-in-0 tw-zoom-in-95";
40
+ var contentClasses = "ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--background-inverted)] tw-text-[var(--content-inverted-primary)] tw-animate-in tw-fade-in-0 tw-zoom-in-95";
41
41
  function usePortalContainer(getPopupContainer, getTooltipContainer) {
42
42
  const triggerRef = React.useRef(null);
43
43
  const [container, setContainer] = React.useState(void 0);
@@ -70,7 +70,7 @@ function ClickTooltip({ children, title, open, onOpenChange, placement = "top",
70
70
  sideOffset: 4,
71
71
  className: cn(contentClasses, overlayClassName),
72
72
  style: { zIndex },
73
- children: [title, /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, { className: "tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]" })]
73
+ children: [title, /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, { className: "tw-fill-[var(--background-inverted)]" })]
74
74
  })
75
75
  })]
76
76
  });
@@ -115,7 +115,7 @@ function Tooltip(props) {
115
115
  sideOffset: 4,
116
116
  className: cn(contentClasses, overlayClassName),
117
117
  style: { zIndex: resolvedZIndex },
118
- children: [mergedTitle, /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]" })]
118
+ children: [mergedTitle, /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "tw-fill-[var(--background-inverted)]" })]
119
119
  })
120
120
  })]
121
121
  })
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tooltip/index.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React from 'react';\nimport { useFloatingPopupZIndex } from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport type ActionType = 'hover' | 'focus' | 'click' | 'contextMenu';\n\nexport interface ITooltipProps {\n title?: React.ReactNode;\n /** Alias for title, for Popover-style usage */\n content?: React.ReactNode;\n destroyTooltipOnHide?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n mouseEnterDelay?: number;\n mouseLeaveDelay?: number;\n placement?:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n trigger?: ActionType | ActionType[];\n zIndex?: number;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n overlayClassName?: string;\n /** Custom class for the root element */\n rootClassName?: string;\n getTooltipContainer?: (node: HTMLElement) => HTMLElement;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst sideMap: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n topLeft: 'top',\n topRight: 'top',\n bottomLeft: 'bottom',\n bottomRight: 'bottom',\n leftTop: 'left',\n leftBottom: 'left',\n rightTop: 'right',\n rightBottom: 'right',\n};\n\nconst alignMap: Record<string, 'start' | 'end' | 'center'> = {\n topLeft: 'start',\n topRight: 'end',\n bottomLeft: 'start',\n bottomRight: 'end',\n leftTop: 'start',\n leftBottom: 'end',\n rightTop: 'start',\n rightBottom: 'end',\n};\n\nfunction isClickTrigger(trigger?: ActionType | ActionType[]): boolean {\n if (!trigger) return false;\n if (Array.isArray(trigger)) return trigger.includes('click');\n return trigger === 'click';\n}\n\nfunction isTriggerDisabled(trigger?: ActionType | ActionType[]): boolean {\n return Array.isArray(trigger) && trigger.length === 0;\n}\n\nconst contentClasses =\n 'ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--alias-colors-bg-skeleton-inverse-subtler)] tw-text-[var(--alias-colors-text-inverse-strong)] tw-animate-in tw-fade-in-0 tw-zoom-in-95';\n\nfunction usePortalContainer(\n getPopupContainer?: (node: HTMLElement) => HTMLElement,\n getTooltipContainer?: (node: HTMLElement) => HTMLElement,\n) {\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const [container, setContainer] = React.useState<HTMLElement | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const getter = getPopupContainer || getTooltipContainer;\n if (getter && triggerRef.current) {\n setContainer(getter(triggerRef.current));\n }\n }, [getPopupContainer, getTooltipContainer]);\n\n return { triggerRef, container };\n}\n\nfunction ClickTooltip({\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n overlayClassName,\n zIndex,\n container,\n triggerRef,\n}: Pick<\n ITooltipProps,\n | 'children'\n | 'title'\n | 'open'\n | 'onOpenChange'\n | 'placement'\n | 'overlayClassName'\n | 'zIndex'\n> & {\n container?: HTMLElement;\n triggerRef: React.RefObject<HTMLElement | null>;\n}) {\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex }}\n >\n {title}\n <PopoverPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nexport default function Tooltip(props: ITooltipProps) {\n const {\n children,\n title,\n content,\n open,\n onOpenChange,\n placement = 'top',\n mouseEnterDelay = 0,\n mouseLeaveDelay = 0,\n overlayClassName,\n trigger,\n getPopupContainer,\n getTooltipContainer,\n zIndex,\n } = props;\n\n const { triggerRef, container } = usePortalContainer(\n getPopupContainer,\n getTooltipContainer,\n );\n const resolvedZIndex = useFloatingPopupZIndex(zIndex);\n const mergedTitle = title ?? content;\n\n if (!mergedTitle && mergedTitle !== 0) {\n return <>{children}</>;\n }\n\n if (isTriggerDisabled(trigger)) {\n return <>{children}</>;\n }\n\n if (isClickTrigger(trigger)) {\n return (\n <ClickTooltip\n title={mergedTitle}\n open={open}\n onOpenChange={onOpenChange}\n placement={placement}\n overlayClassName={overlayClassName}\n zIndex={resolvedZIndex}\n container={container}\n triggerRef={triggerRef}\n >\n {children}\n </ClickTooltip>\n );\n }\n\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <TooltipPrimitive.Provider\n delayDuration={mouseEnterDelay * 1000}\n skipDelayDuration={mouseLeaveDelay * 1000}\n >\n <TooltipPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal container={container}>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex: resolvedZIndex }}\n >\n {mergedTitle}\n <TooltipPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tooltip/index.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React from 'react';\nimport { useFloatingPopupZIndex } from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport type ActionType = 'hover' | 'focus' | 'click' | 'contextMenu';\n\nexport interface ITooltipProps {\n title?: React.ReactNode;\n /** Alias for title, for Popover-style usage */\n content?: React.ReactNode;\n destroyTooltipOnHide?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n mouseEnterDelay?: number;\n mouseLeaveDelay?: number;\n placement?:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n trigger?: ActionType | ActionType[];\n zIndex?: number;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n overlayClassName?: string;\n /** Custom class for the root element */\n rootClassName?: string;\n getTooltipContainer?: (node: HTMLElement) => HTMLElement;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst sideMap: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n topLeft: 'top',\n topRight: 'top',\n bottomLeft: 'bottom',\n bottomRight: 'bottom',\n leftTop: 'left',\n leftBottom: 'left',\n rightTop: 'right',\n rightBottom: 'right',\n};\n\nconst alignMap: Record<string, 'start' | 'end' | 'center'> = {\n topLeft: 'start',\n topRight: 'end',\n bottomLeft: 'start',\n bottomRight: 'end',\n leftTop: 'start',\n leftBottom: 'end',\n rightTop: 'start',\n rightBottom: 'end',\n};\n\nfunction isClickTrigger(trigger?: ActionType | ActionType[]): boolean {\n if (!trigger) return false;\n if (Array.isArray(trigger)) return trigger.includes('click');\n return trigger === 'click';\n}\n\nfunction isTriggerDisabled(trigger?: ActionType | ActionType[]): boolean {\n return Array.isArray(trigger) && trigger.length === 0;\n}\n\nconst contentClasses =\n 'ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--background-inverted)] tw-text-[var(--content-inverted-primary)] tw-animate-in tw-fade-in-0 tw-zoom-in-95';\n\nfunction usePortalContainer(\n getPopupContainer?: (node: HTMLElement) => HTMLElement,\n getTooltipContainer?: (node: HTMLElement) => HTMLElement,\n) {\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const [container, setContainer] = React.useState<HTMLElement | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const getter = getPopupContainer || getTooltipContainer;\n if (getter && triggerRef.current) {\n setContainer(getter(triggerRef.current));\n }\n }, [getPopupContainer, getTooltipContainer]);\n\n return { triggerRef, container };\n}\n\nfunction ClickTooltip({\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n overlayClassName,\n zIndex,\n container,\n triggerRef,\n}: Pick<\n ITooltipProps,\n | 'children'\n | 'title'\n | 'open'\n | 'onOpenChange'\n | 'placement'\n | 'overlayClassName'\n | 'zIndex'\n> & {\n container?: HTMLElement;\n triggerRef: React.RefObject<HTMLElement | null>;\n}) {\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex }}\n >\n {title}\n <PopoverPrimitive.Arrow className=\"tw-fill-[var(--background-inverted)]\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nexport default function Tooltip(props: ITooltipProps) {\n const {\n children,\n title,\n content,\n open,\n onOpenChange,\n placement = 'top',\n mouseEnterDelay = 0,\n mouseLeaveDelay = 0,\n overlayClassName,\n trigger,\n getPopupContainer,\n getTooltipContainer,\n zIndex,\n } = props;\n\n const { triggerRef, container } = usePortalContainer(\n getPopupContainer,\n getTooltipContainer,\n );\n const resolvedZIndex = useFloatingPopupZIndex(zIndex);\n const mergedTitle = title ?? content;\n\n if (!mergedTitle && mergedTitle !== 0) {\n return <>{children}</>;\n }\n\n if (isTriggerDisabled(trigger)) {\n return <>{children}</>;\n }\n\n if (isClickTrigger(trigger)) {\n return (\n <ClickTooltip\n title={mergedTitle}\n open={open}\n onOpenChange={onOpenChange}\n placement={placement}\n overlayClassName={overlayClassName}\n zIndex={resolvedZIndex}\n container={container}\n triggerRef={triggerRef}\n >\n {children}\n </ClickTooltip>\n );\n }\n\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <TooltipPrimitive.Provider\n delayDuration={mouseEnterDelay * 1000}\n skipDelayDuration={mouseLeaveDelay * 1000}\n >\n <TooltipPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal container={container}>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex: resolvedZIndex }}\n >\n {mergedTitle}\n <TooltipPrimitive.Arrow className=\"tw-fill-[var(--background-inverted)]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n"],"mappings":"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"}
@@ -31,7 +31,7 @@ function Tour(props) {
31
31
  onChange?.(prev);
32
32
  };
33
33
  return /* @__PURE__ */ jsxs(Fragment, { children: [mask && /* @__PURE__ */ jsx("div", {
34
- className: "ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-black/45",
34
+ className: "ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-[var(--background-inverted)] tw-opacity-45",
35
35
  style: { zIndex: maskZIndex },
36
36
  onClick: onClose
37
37
  }), /* @__PURE__ */ jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tour/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport Button from '../Button';\nimport {\n FloatingLayerProvider,\n useFloatingLayer,\n} from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport interface TourStepProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n cover?: React.ReactNode;\n target?: (() => HTMLElement | null) | null;\n placement?:\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight';\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n nextButtonProps?: { children?: React.ReactNode };\n prevButtonProps?: { children?: React.ReactNode };\n}\n\nexport interface TourProps {\n open?: boolean;\n onClose?: () => void;\n steps?: TourStepProps[];\n current?: number;\n onChange?: (current: number) => void;\n mask?: boolean;\n type?: 'default' | 'primary';\n className?: string;\n onFinish?: () => void;\n}\n\nfunction Tour(props: TourProps) {\n const {\n open = false,\n onClose,\n steps = [],\n current: controlledCurrent,\n onChange,\n mask = true,\n className,\n onFinish,\n } = props;\n\n const [innerCurrent, setInnerCurrent] = useState(0);\n const current = controlledCurrent ?? innerCurrent;\n\n useEffect(() => {\n if (!open) setInnerCurrent(0);\n }, [open]);\n\n const { maskZIndex, contentZIndex, nextLevel } = useFloatingLayer();\n\n if (!open || steps.length === 0) return null;\n\n const step = steps[current];\n const isLast = current === steps.length - 1;\n\n const goNext = () => {\n if (isLast) {\n onFinish?.();\n onClose?.();\n } else {\n const next = current + 1;\n if (controlledCurrent === undefined) setInnerCurrent(next);\n onChange?.(next);\n }\n };\n\n const goPrev = () => {\n const prev = Math.max(0, current - 1);\n if (controlledCurrent === undefined) setInnerCurrent(prev);\n onChange?.(prev);\n };\n\n return (\n <>\n {mask && (\n <div\n className=\"ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-black/45\"\n style={{ zIndex: maskZIndex }}\n onClick={onClose}\n />\n )}\n <div\n className={cn(\n 'ald-tour tw-fixed tw-z-[1001] tw-max-w-sm tw-rounded-r-100 tw-bg-[var(--background-default)] tw-p-6 tw-shadow-xl',\n 'tw-left-1/2 tw-top-1/2 tw--translate-x-1/2 tw--translate-y-1/2',\n className,\n )}\n style={{ zIndex: contentZIndex, ...step?.style }}\n >\n <FloatingLayerProvider value={nextLevel}>\n {step?.cover && (\n <div className=\"ald-tour-cover tw-mb-4\">{step.cover}</div>\n )}\n {step?.title && (\n <div className=\"ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]\">\n {step.title}\n </div>\n )}\n {step?.description && (\n <div className=\"ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]\">\n {step.description}\n </div>\n )}\n <div className=\"ald-tour-footer tw-flex tw-items-center tw-justify-between\">\n <span className=\"tw-text-xs tw-text-[var(--content-tertiary)]\">\n {current + 1}/{steps.length}\n </span>\n <div className=\"tw-flex tw-gap-2\">\n {current > 0 && (\n <Button type=\"secondary\" size=\"small\" onClick={goPrev}>\n {step?.prevButtonProps?.children || 'Prev'}\n </Button>\n )}\n <Button type=\"primary\" size=\"small\" onClick={goNext}>\n {step?.nextButtonProps?.children ||\n (isLast ? 'Finish' : 'Next')}\n </Button>\n </div>\n </div>\n </FloatingLayerProvider>\n </div>\n </>\n );\n}\n\nexport default Tour;\n"],"mappings":";;;;;;AAyCA,SAAS,KAAK,OAAkB;CAC9B,MAAM,EACJ,OAAO,OACP,SACA,QAAQ,EAAE,EACV,SAAS,mBACT,UACA,OAAO,MACP,WACA,aACE;CAEJ,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,UAAU,qBAAqB;AAErC,iBAAgB;AACd,MAAI,CAAC,KAAM,iBAAgB,EAAE;IAC5B,CAAC,KAAK,CAAC;CAEV,MAAM,EAAE,YAAY,eAAe,cAAc,kBAAkB;AAEnE,KAAI,CAAC,QAAQ,MAAM,WAAW,EAAG,QAAO;CAExC,MAAM,OAAO,MAAM;CACnB,MAAM,SAAS,YAAY,MAAM,SAAS;CAE1C,MAAM,eAAe;AACnB,MAAI,QAAQ;AACV,eAAY;AACZ,cAAW;SACN;GACL,MAAM,OAAO,UAAU;AACvB,OAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,cAAW,KAAK;;;CAIpB,MAAM,eAAe;EACnB,MAAM,OAAO,KAAK,IAAI,GAAG,UAAU,EAAE;AACrC,MAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,aAAW,KAAK;;AAGlB,QACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,QAAQ,YAAY;EAC7B,SAAS;EACT,CAAA,EAEJ,oBAAC,OAAD;EACE,WAAW,GACT,oHACA,kEACA,UACD;EACD,OAAO;GAAE,QAAQ;GAAe,GAAG,MAAM;GAAO;YAEhD,qBAAC,uBAAD;GAAuB,OAAO;aAA9B;IACG,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eAA0B,KAAK;KAAY,CAAA;IAE3D,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAEP,MAAM,eACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAER,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,UAAU;OAAE;OAAE,MAAM;OAChB;SACP,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,UAAU,KACT,oBAAC,gBAAD;OAAQ,MAAK;OAAY,MAAK;OAAQ,SAAS;iBAC5C,MAAM,iBAAiB,YAAY;OAC7B,CAAA,EAEX,oBAAC,gBAAD;OAAQ,MAAK;OAAU,MAAK;OAAQ,SAAS;iBAC1C,MAAM,iBAAiB,aACrB,SAAS,WAAW;OAChB,CAAA,CACL;QACF;;IACgB;;EACpB,CAAA,CACL,EAAA,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tour/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport Button from '../Button';\nimport {\n FloatingLayerProvider,\n useFloatingLayer,\n} from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport interface TourStepProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n cover?: React.ReactNode;\n target?: (() => HTMLElement | null) | null;\n placement?:\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight';\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n nextButtonProps?: { children?: React.ReactNode };\n prevButtonProps?: { children?: React.ReactNode };\n}\n\nexport interface TourProps {\n open?: boolean;\n onClose?: () => void;\n steps?: TourStepProps[];\n current?: number;\n onChange?: (current: number) => void;\n mask?: boolean;\n type?: 'default' | 'primary';\n className?: string;\n onFinish?: () => void;\n}\n\nfunction Tour(props: TourProps) {\n const {\n open = false,\n onClose,\n steps = [],\n current: controlledCurrent,\n onChange,\n mask = true,\n className,\n onFinish,\n } = props;\n\n const [innerCurrent, setInnerCurrent] = useState(0);\n const current = controlledCurrent ?? innerCurrent;\n\n useEffect(() => {\n if (!open) setInnerCurrent(0);\n }, [open]);\n\n const { maskZIndex, contentZIndex, nextLevel } = useFloatingLayer();\n\n if (!open || steps.length === 0) return null;\n\n const step = steps[current];\n const isLast = current === steps.length - 1;\n\n const goNext = () => {\n if (isLast) {\n onFinish?.();\n onClose?.();\n } else {\n const next = current + 1;\n if (controlledCurrent === undefined) setInnerCurrent(next);\n onChange?.(next);\n }\n };\n\n const goPrev = () => {\n const prev = Math.max(0, current - 1);\n if (controlledCurrent === undefined) setInnerCurrent(prev);\n onChange?.(prev);\n };\n\n return (\n <>\n {mask && (\n <div\n className=\"ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-[var(--background-inverted)] tw-opacity-45\"\n style={{ zIndex: maskZIndex }}\n onClick={onClose}\n />\n )}\n <div\n className={cn(\n 'ald-tour tw-fixed tw-z-[1001] tw-max-w-sm tw-rounded-r-100 tw-bg-[var(--background-default)] tw-p-6 tw-shadow-xl',\n 'tw-left-1/2 tw-top-1/2 tw--translate-x-1/2 tw--translate-y-1/2',\n className,\n )}\n style={{ zIndex: contentZIndex, ...step?.style }}\n >\n <FloatingLayerProvider value={nextLevel}>\n {step?.cover && (\n <div className=\"ald-tour-cover tw-mb-4\">{step.cover}</div>\n )}\n {step?.title && (\n <div className=\"ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]\">\n {step.title}\n </div>\n )}\n {step?.description && (\n <div className=\"ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]\">\n {step.description}\n </div>\n )}\n <div className=\"ald-tour-footer tw-flex tw-items-center tw-justify-between\">\n <span className=\"tw-text-xs tw-text-[var(--content-tertiary)]\">\n {current + 1}/{steps.length}\n </span>\n <div className=\"tw-flex tw-gap-2\">\n {current > 0 && (\n <Button type=\"secondary\" size=\"small\" onClick={goPrev}>\n {step?.prevButtonProps?.children || 'Prev'}\n </Button>\n )}\n <Button type=\"primary\" size=\"small\" onClick={goNext}>\n {step?.nextButtonProps?.children ||\n (isLast ? 'Finish' : 'Next')}\n </Button>\n </div>\n </div>\n </FloatingLayerProvider>\n </div>\n </>\n );\n}\n\nexport default Tour;\n"],"mappings":";;;;;;AAyCA,SAAS,KAAK,OAAkB;CAC9B,MAAM,EACJ,OAAO,OACP,SACA,QAAQ,EAAE,EACV,SAAS,mBACT,UACA,OAAO,MACP,WACA,aACE;CAEJ,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,UAAU,qBAAqB;AAErC,iBAAgB;AACd,MAAI,CAAC,KAAM,iBAAgB,EAAE;IAC5B,CAAC,KAAK,CAAC;CAEV,MAAM,EAAE,YAAY,eAAe,cAAc,kBAAkB;AAEnE,KAAI,CAAC,QAAQ,MAAM,WAAW,EAAG,QAAO;CAExC,MAAM,OAAO,MAAM;CACnB,MAAM,SAAS,YAAY,MAAM,SAAS;CAE1C,MAAM,eAAe;AACnB,MAAI,QAAQ;AACV,eAAY;AACZ,cAAW;SACN;GACL,MAAM,OAAO,UAAU;AACvB,OAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,cAAW,KAAK;;;CAIpB,MAAM,eAAe;EACnB,MAAM,OAAO,KAAK,IAAI,GAAG,UAAU,EAAE;AACrC,MAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,aAAW,KAAK;;AAGlB,QACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,QAAQ,YAAY;EAC7B,SAAS;EACT,CAAA,EAEJ,oBAAC,OAAD;EACE,WAAW,GACT,oHACA,kEACA,UACD;EACD,OAAO;GAAE,QAAQ;GAAe,GAAG,MAAM;GAAO;YAEhD,qBAAC,uBAAD;GAAuB,OAAO;aAA9B;IACG,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eAA0B,KAAK;KAAY,CAAA;IAE3D,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAEP,MAAM,eACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAER,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,UAAU;OAAE;OAAE,MAAM;OAChB;SACP,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,UAAU,KACT,oBAAC,gBAAD;OAAQ,MAAK;OAAY,MAAK;OAAQ,SAAS;iBAC5C,MAAM,iBAAiB,YAAY;OAC7B,CAAA,EAEX,oBAAC,gBAAD;OAAQ,MAAK;OAAU,MAAK;OAAQ,SAAS;iBAC1C,MAAM,iBAAiB,aACrB,SAAS,WAAW;OAChB,CAAA,CACL;QACF;;IACgB;;EACpB,CAAA,CACL,EAAA,CAAA"}
@@ -68,7 +68,7 @@ var Tree = React$1.forwardRef((props, ref) => {
68
68
  };
69
69
  const newIcon = /* @__PURE__ */ jsx(Memo$1, {
70
70
  size: TREE_SWITCH_CION_SIZE,
71
- color: "var(--alias-colors-icon-subtle)"
71
+ color: "var(--content-secondary)"
72
72
  });
73
73
  let mergedDraggable = { icon: newIcon };
74
74
  switch (typeof draggable) {
@@ -220,7 +220,7 @@ var Tree = React$1.forwardRef((props, ref) => {
220
220
  switcherIcon: (nodeProps) => {
221
221
  return /* @__PURE__ */ jsxs(Fragment, { children: [renderIndent(nodeProps), renderSwitcherIcon(prefixCls, /* @__PURE__ */ jsx(Memo, {
222
222
  size: TREE_SWITCH_CION_SIZE,
223
- color: "var(--alias-colors-icon-subtle)",
223
+ color: "var(--content-secondary)",
224
224
  children: t.Tree.expand
225
225
  }), showLine, nodeProps, TREE_SWITCH_CION_SIZE)] });
226
226
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Tree2.js","names":[],"sources":["../../src/Tree/Tree.tsx"],"sourcesContent":["import './tree.css';\nimport { cn } from '../lib/utils';\nimport { produce } from 'immer';\nimport { noop } from 'lodash';\nimport type { BasicDataNode, TreeProps as RcTreeProps } from 'rc-tree';\nimport RcTree from 'rc-tree';\nimport type { DataNode, Key } from 'rc-tree/es/interface';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\nimport HighlightText from '../HighlightText';\nimport { ArrowRightLightLine, DragLine } from '../Icon';\nimport collapseMotion from '../_utils/motion';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport { composeAllowDrop } from './utils/composeAllowDrop';\nimport dropIndicatorRender from './utils/dropIndicator';\nimport renderSwitcherIcon from './utils/iconUtil';\nconst TREE_SWITCH_CION_SIZE = 16;\nconst NODE_DISABLE_CLASS_NAME = 'ald-tree-node-disabled';\nexport type SwitcherIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\nexport type TreeLeafIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\n\nexport interface AldTreeNodeAttribute {\n eventKey: string;\n prefixCls: string;\n className: string;\n expanded: boolean;\n selected: boolean;\n checked: boolean;\n halfChecked: boolean;\n children: React.ReactNode;\n title: React.ReactNode;\n pos: string;\n dragOver: boolean;\n dragOverGapTop: boolean;\n dragOverGapBottom: boolean;\n isLeaf: boolean;\n selectable: boolean;\n disabled: boolean;\n disableCheckbox: boolean;\n}\n\nexport interface AldTreeNodeProps {\n className?: string;\n checkable?: boolean;\n disabled?: boolean;\n disableCheckbox?: boolean;\n title?: string | React.ReactNode;\n key?: Key;\n eventKey?: string;\n isLeaf?: boolean;\n checked?: boolean;\n expanded?: boolean;\n loading?: boolean;\n selected?: boolean;\n selectable?: boolean;\n icon?:\n | ((treeNode: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode;\n children?: React.ReactNode;\n [customProp: string]: any;\n}\n\nexport type AldTreeNode = React.Component<AldTreeNodeProps, object>;\n\nexport interface AldTreeNodeBaseEvent {\n node: AldTreeNode;\n nativeEvent: MouseEvent;\n}\n\nexport interface AldTreeNodeCheckedEvent extends AldTreeNodeBaseEvent {\n event: 'check';\n checked?: boolean;\n checkedNodes?: AldTreeNode[];\n}\n\nexport interface AldTreeNodeSelectedEvent extends AldTreeNodeBaseEvent {\n event: 'select';\n selected?: boolean;\n selectedNodes?: DataNode[];\n}\n\nexport interface AldTreeNodeExpandedEvent extends AldTreeNodeBaseEvent {\n expanded?: boolean;\n}\n\nexport interface AldTreeNodeMouseEvent {\n node: AldTreeNode;\n event: React.DragEvent<HTMLElement>;\n}\n\nexport interface AldTreeNodeDragEnterEvent extends AldTreeNodeMouseEvent {\n expandedKeys: Key[];\n}\n\nexport interface AldTreeNodeAttribute {\n node: AldTreeNode;\n dragNode: AldTreeNode;\n dragNodesKeys: Key[];\n dropPosition: number;\n dropToGap?: boolean;\n event: React.MouseEvent<HTMLElement>;\n}\n\n// [Legacy] Compatible for v3\nexport type TreeNodeNormal = DataNode;\n\ntype DraggableFn = (node: DataNode) => boolean;\n\ninterface DropOnlyResolvers {\n nodeDraggable: DraggableFn | undefined;\n nodeDroppable: DraggableFn;\n}\n\ninterface DraggableConfig {\n icon?: React.ReactNode | false;\n /** 节点是否可作为 drag source(拖起来)。返回 false:不显示 drag handle、不能起拖。 */\n nodeDraggable?: DraggableFn;\n /**\n * 节点是否可作为 drop target(接收落入)。返回 true:即使 nodeDraggable=false 仍注册\n * onDragOver/onDrop 等 listener,浏览器才会真正派发 drop 事件。\n *\n * 解决 rc-tree 5.x 把\"可拖\"与\"可放\"绑到同一个 nodeDraggable 的限制——之前要让\"类目可接收\n * 资源拖入但本身不可拖\"只能让 nodeDraggable 全返回 true,再用业务侧 CSS hack 隐藏 drag icon。\n *\n * 默认不传 = 沿用 nodeDraggable 行为(向后兼容)。\n */\n nodeDroppable?: DraggableFn;\n}\n\nexport interface TreeProps<T extends BasicDataNode = DataNode>\n extends Omit<\n RcTreeProps<T>,\n | 'prefixCls'\n | 'showLine'\n | 'direction'\n | 'draggable'\n | 'icon'\n | 'switcherIcon'\n | 'filterTreeNode'\n > {\n showLine?: boolean | { showLeafIcon: boolean | TreeLeafIcon };\n className?: string;\n /** 是否支持多选 */\n multiple?: boolean;\n /** 是否自动展开父节点 */\n autoExpandParent?: boolean;\n /** Checkable状态下节点选择完全受控(父子节点选中状态不再关联) */\n checkStrictly?: boolean;\n /** 是否支持选中 */\n checkable?: boolean;\n /** 是否禁用树 */\n disabled?: boolean;\n /** 默认展开所有树节点 */\n defaultExpandAll?: boolean;\n /** 默认展开对应树节点 */\n defaultExpandParent?: boolean;\n /** 默认展开指定的树节点 */\n defaultExpandedKeys?: Key[];\n /** (受控)展开指定的树节点 */\n expandedKeys?: Key[];\n /** (受控)选中复选框的树节点 */\n checkedKeys?: Key[] | { checked: Key[]; halfChecked: Key[] };\n /** 默认选中复选框的树节点 */\n defaultCheckedKeys?: Key[];\n /** (受控)设置选中的树节点 */\n selectedKeys?: Key[];\n /** 默认选中的树节点 */\n defaultSelectedKeys?: Key[];\n selectable?: boolean;\n /** 点击树节点触发 */\n filterTreeNode?: (node: DataNode) => boolean;\n loadedKeys?: Key[];\n /** 设置节点可拖拽(IE>8) */\n draggable?: DraggableFn | boolean | DraggableConfig;\n style?: React.CSSProperties;\n showIcon?: boolean;\n icon?:\n | ((nodeProps: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode\n | RcTreeProps<T>['icon'];\n switcherIcon?: SwitcherIcon | RcTreeProps<T>['switcherIcon'];\n prefixCls?: string;\n children?: React.ReactNode;\n blockNode?: boolean;\n size?: 'large' | 'small';\n titleRender?: (node: T) => React.ReactNode;\n showTabLeader?: boolean;\n handlerRender?: (node: T) => React.ReactNode;\n highlightKeywords?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Tree = React.forwardRef<any, TreeProps>((props, ref) => {\n const { locale } = React.useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getPrefixCls, direction, virtual } = React.useContext(ConfigContext);\n const size = props.size || 'large';\n const {\n className,\n showIcon = false,\n showLine,\n blockNode = false,\n children,\n checkable = false,\n selectable = true,\n draggable,\n titleRender,\n showTabLeader,\n handlerRender = noop,\n filterTreeNode,\n treeData,\n highlightKeywords,\n motion = { ...collapseMotion, motionAppear: false },\n ...rest\n } = props;\n const prefixCls = getPrefixCls('tree', 'ald-tree');\n\n const customTitleRender = React.useCallback(\n (node: DataNode) => {\n const renderedTitle = titleRender\n ? titleRender(node)\n : typeof node.title === 'function'\n ? node.title(node)\n : node.title;\n const renderedHandler = handlerRender(node) as React.ReactNode;\n const hasHandler =\n renderedHandler !== null &&\n renderedHandler !== undefined &&\n renderedHandler !== false;\n return (\n <span\n className={cn(\n 'ald-tree-title-layout',\n hasHandler && 'ald-tree-title-layout-with-handler',\n )}\n >\n <span className=\"ald-tree-title-content\">{renderedTitle}</span>\n {showTabLeader && hasHandler && (\n <div className=\"ald-tree-tab-leader\"></div>\n )}\n {hasHandler && (\n <span className=\"ald-tree-title-handler\">{renderedHandler}</span>\n )}\n </span>\n );\n },\n [titleRender, showTabLeader, handlerRender],\n );\n const newProps = {\n ...rest,\n checkable,\n selectable,\n showIcon,\n motion,\n blockNode,\n showLine: Boolean(showLine),\n dropIndicatorRender,\n titleRender: customTitleRender,\n };\n\n // 一次性吃掉 draggable 的归一化:rc-tree 看到的 mergedDraggable + 我们内部用的\n // dropOnlyResolvers(原样保留用户 nodeDraggable/nodeDroppable)。集中一处避免两处 useMemo\n // 的判断散开导致字段扩展时遗漏。\n const { draggableConfig, dropOnlyResolvers } = React.useMemo(() => {\n if (!draggable) {\n return {\n draggableConfig: false as const,\n dropOnlyResolvers: null as DropOnlyResolvers | null,\n };\n }\n const newIcon = (\n <DragLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n ></DragLine>\n );\n let mergedDraggable: DraggableConfig = { icon: newIcon };\n switch (typeof draggable) {\n case 'function':\n mergedDraggable.nodeDraggable = draggable;\n break;\n case 'object':\n mergedDraggable = {\n ...draggable,\n icon: draggable.icon === undefined ? newIcon : draggable.icon,\n };\n break;\n default:\n break;\n }\n\n // rc-tree 5.x 把\"可拖(drag source)\"与\"可放(drop target)\"绑到同一个 nodeDraggable:\n // 该返回 false 时 onDragOver/onDrop 也连带不注册,浏览器认为该节点 not droppable\n // → drop 事件根本不派发。为了让\"类目可接收资源拖入但本身不可拖\",把 rc-tree 看到的\n // nodeDraggable 改成 nodeDraggable || nodeDroppable,从而保证 drop listener 仍注册。\n // 真正的 drag-source 阻断由 document 级 dragstart capture handler 负责(见下方 effect)。\n let resolvers: DropOnlyResolvers | null = null;\n if (mergedDraggable.nodeDroppable) {\n const userNodeDraggable = mergedDraggable.nodeDraggable;\n const userNodeDroppable = mergedDraggable.nodeDroppable;\n resolvers = {\n nodeDraggable: userNodeDraggable,\n nodeDroppable: userNodeDroppable,\n };\n mergedDraggable = {\n ...mergedDraggable,\n nodeDraggable: (node: DataNode) =>\n (userNodeDraggable ? userNodeDraggable(node) : true) ||\n userNodeDroppable(node),\n };\n }\n\n return { draggableConfig: mergedDraggable, dropOnlyResolvers: resolvers };\n }, [draggable]);\n\n /**\n * drop-only 节点不能真的起拖。\n *\n * 历史教训:以前在 props.onDragStart 里调 preventDefault。问题是 rc-tree 内部\n * onNodeDragStart(Tree.js:88-99)会在调用 user onDragStart **之前**把\n * draggingNodeKey/dragNodeProps 写进 state;TreeNode(TreeNode.js:112)也已经先\n * setDragNodeHighlight(true)。然后 preventDefault 让浏览器取消拖拽,dragend 不再派发\n * → onWindowDragEnd 永远不触发 → state 卡在\"正在拖类目\",外层 .ald-tree-treenode\n * 卡着 `dragging`、内层 .ald-tree-node-content-wrapper 卡着 `ald-tree-node-selected`\n * 高亮,直到下一次合法 dragstart 才被覆盖。\n *\n * 修复手段:document 级 dragstart capture handler,在 rc-tree 的 React 监听器之前\n * stopPropagation+preventDefault,让 TreeNode 的 onDragStart 整段都不执行,rc-tree\n * 内部 state 彻底不写入。document 是 React root 容器的祖先,capture 阶段先于 React\n * delegation 监听器,因此 stopPropagation 能彻底拦截。\n */\n React.useLayoutEffect(() => {\n if (!dropOnlyResolvers) return;\n const handler = (e: DragEvent) => {\n const target = e.target as HTMLElement | null;\n if (!target?.closest) return;\n if (target.closest('.ald-tree-treenode-drop-only')) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n document.addEventListener('dragstart', handler, true);\n return () => document.removeEventListener('dragstart', handler, true);\n }, [dropOnlyResolvers]);\n\n /**\n * nodeDroppable 同时收口到 rc-tree 的 allowDrop:避免出现\"nodeDroppable=false 但 rc-tree\n * 默认 allowDrop=()=>true 仍然接收 drop\"的语义裂缝。用户自传的 allowDrop 与 nodeDroppable\n * 取 AND(任一拒绝即拒绝)。\n */\n const composedAllowDrop = React.useMemo(\n () => composeAllowDrop(rest.allowDrop, dropOnlyResolvers?.nodeDroppable),\n [rest.allowDrop, dropOnlyResolvers],\n );\n const renderIndent = (nodeProps: AldTreeNodeProps) => {\n const { pos, isLeaf } = nodeProps as AldTreeNodeProps & { pos?: string };\n // rc-tree `pos` 格式:\"0\" 是虚拟根,\"0-0\" 是首层节点,\"0-0-1\" 是 leaf。\n // 顶层节点 level=0 不缩进;每层 +1 unit(switcher 宽度),与 antd Tree 行为一致。\n // leaf 在未开启 showLine 时 renderSwitcherIcon 返回 null,没有真实 switcher 占位;\n // 需要补一个 switcher 宽度,保证业务图标和同级可展开节点对齐。\n // `?? 2` 兜底:当 pos 缺失时按\"首层节点 `0-0` 长度 = 2\"处理,结果 level=0 不缩进;\n // 切勿改成 1 或 0,否则缺 pos 的节点会被错误右移。\n const level = Math.max(0, (pos?.split('-').length ?? 2) - 2);\n const leafSwitcherWidth = isLeaf && !showLine ? TREE_SWITCH_CION_SIZE : 0;\n return (\n <span\n style={{\n width: level * TREE_SWITCH_CION_SIZE + leafSwitcherWidth,\n flexShrink: 0,\n }}\n ></span>\n );\n };\n const newTreeData = React.useMemo(() => {\n if (!filterTreeNode || !treeData) return treeData;\n\n const shouldNodeDisabled = (node: DataNode): boolean => {\n // 初始化一个标志来表示是否需要为当前节点添加className\n let shouldAddDisabled = true;\n if (filterTreeNode(node)) {\n shouldAddDisabled = false;\n }\n\n if (node.children) {\n // 遍历当前节点的子节点,只要有一个子节点不disable,则该不需要添加className\n const allChildrenShouldAddDisabled = node.children.reduce(\n (pre, child) => {\n return shouldNodeDisabled(child) && pre;\n },\n shouldAddDisabled,\n );\n shouldAddDisabled = allChildrenShouldAddDisabled;\n }\n\n // 如果shouldAddDisabled为true,就为当前节点添加className\n if (shouldAddDisabled) {\n node.className = node.className?.includes(NODE_DISABLE_CLASS_NAME)\n ? node.className\n : cn(node.className, NODE_DISABLE_CLASS_NAME);\n } else {\n const reg = /ald-tree-node-disabled/g;\n node.className?.replace(reg, ' ');\n }\n if (highlightKeywords && typeof node.title !== 'function') {\n node.title = (\n <HighlightText keyword={highlightKeywords}>\n {node.title}\n </HighlightText>\n );\n }\n return shouldAddDisabled;\n };\n const newTreeData = produce(treeData, (draft) => {\n for (const rootNode of draft) {\n shouldNodeDisabled(rootNode);\n }\n });\n return newTreeData;\n }, [filterTreeNode, treeData, highlightKeywords]);\n\n /** 给 drop-only 节点的 wrapper 加 'ald-tree-treenode-drop-only' className(rc-tree 5.x\n * 会把 DataNode.className 透传到 .ald-tree-treenode 上)。css 据此隐藏 drag handle icon\n * 并提供 not-allowed cursor,区分纯 drop target 与真正可拖节点。 */\n const finalTreeData = React.useMemo(() => {\n if (!dropOnlyResolvers || !newTreeData) return newTreeData;\n const { nodeDraggable, nodeDroppable } = dropOnlyResolvers;\n return produce(newTreeData, (draft) => {\n const visit = (nodes: DataNode[] | undefined) => {\n if (!nodes) return;\n for (const node of nodes) {\n const isDraggable = nodeDraggable ? nodeDraggable(node) : true;\n const isDroppable = nodeDroppable(node);\n if (!isDraggable && isDroppable) {\n const existing = node.className ?? '';\n if (!existing.includes('ald-tree-treenode-drop-only')) {\n node.className = cn(existing, 'ald-tree-treenode-drop-only');\n }\n }\n visit(node.children as DataNode[] | undefined);\n }\n };\n visit(draft as DataNode[]);\n });\n }, [newTreeData, dropOnlyResolvers]);\n\n const noChildren = React.useMemo(() => {\n if (finalTreeData?.length) {\n return finalTreeData.every((node) => {\n return !node.children?.length && node.isLeaf !== false;\n });\n }\n return true;\n }, [finalTreeData]);\n\n return (\n <RcTree\n itemHeight={20}\n ref={ref}\n virtual={virtual}\n {...newProps}\n allowDrop={composedAllowDrop}\n prefixCls={prefixCls}\n treeData={finalTreeData}\n className={cn(\n {\n [`${prefixCls}-icon-hide`]: !showIcon,\n [`${prefixCls}-block-node`]: blockNode,\n [`${prefixCls}-unselectable`]: !selectable,\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n ['ald-draggable-tree']: draggable,\n [`${prefixCls}-no-children`]: noChildren,\n },\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-tree',\n className,\n )}\n direction={direction as any}\n checkable={\n checkable ? (\n <span className={`${prefixCls}-checkbox-inner`} />\n ) : (\n checkable\n )\n }\n selectable={selectable}\n // @ts-ignore\n switcherIcon={(nodeProps: AldTreeNodeProps) => {\n return (\n <>\n {renderIndent(nodeProps)}\n {renderSwitcherIcon(\n prefixCls,\n <ArrowRightLightLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n >\n {t.Tree.expand}\n </ArrowRightLightLine>,\n showLine,\n nodeProps,\n TREE_SWITCH_CION_SIZE,\n )}\n </>\n );\n }}\n draggable={draggableConfig}\n >\n {children}\n </RcTree>\n );\n});\n\nexport default Tree;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tree2.js","names":[],"sources":["../../src/Tree/Tree.tsx"],"sourcesContent":["import './tree.css';\nimport { cn } from '../lib/utils';\nimport { produce } from 'immer';\nimport { noop } from 'lodash';\nimport type { BasicDataNode, TreeProps as RcTreeProps } from 'rc-tree';\nimport RcTree from 'rc-tree';\nimport type { DataNode, Key } from 'rc-tree/es/interface';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\nimport HighlightText from '../HighlightText';\nimport { ArrowRightLightLine, DragLine } from '../Icon';\nimport collapseMotion from '../_utils/motion';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport { composeAllowDrop } from './utils/composeAllowDrop';\nimport dropIndicatorRender from './utils/dropIndicator';\nimport renderSwitcherIcon from './utils/iconUtil';\nconst TREE_SWITCH_CION_SIZE = 16;\nconst NODE_DISABLE_CLASS_NAME = 'ald-tree-node-disabled';\nexport type SwitcherIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\nexport type TreeLeafIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\n\nexport interface AldTreeNodeAttribute {\n eventKey: string;\n prefixCls: string;\n className: string;\n expanded: boolean;\n selected: boolean;\n checked: boolean;\n halfChecked: boolean;\n children: React.ReactNode;\n title: React.ReactNode;\n pos: string;\n dragOver: boolean;\n dragOverGapTop: boolean;\n dragOverGapBottom: boolean;\n isLeaf: boolean;\n selectable: boolean;\n disabled: boolean;\n disableCheckbox: boolean;\n}\n\nexport interface AldTreeNodeProps {\n className?: string;\n checkable?: boolean;\n disabled?: boolean;\n disableCheckbox?: boolean;\n title?: string | React.ReactNode;\n key?: Key;\n eventKey?: string;\n isLeaf?: boolean;\n checked?: boolean;\n expanded?: boolean;\n loading?: boolean;\n selected?: boolean;\n selectable?: boolean;\n icon?:\n | ((treeNode: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode;\n children?: React.ReactNode;\n [customProp: string]: any;\n}\n\nexport type AldTreeNode = React.Component<AldTreeNodeProps, object>;\n\nexport interface AldTreeNodeBaseEvent {\n node: AldTreeNode;\n nativeEvent: MouseEvent;\n}\n\nexport interface AldTreeNodeCheckedEvent extends AldTreeNodeBaseEvent {\n event: 'check';\n checked?: boolean;\n checkedNodes?: AldTreeNode[];\n}\n\nexport interface AldTreeNodeSelectedEvent extends AldTreeNodeBaseEvent {\n event: 'select';\n selected?: boolean;\n selectedNodes?: DataNode[];\n}\n\nexport interface AldTreeNodeExpandedEvent extends AldTreeNodeBaseEvent {\n expanded?: boolean;\n}\n\nexport interface AldTreeNodeMouseEvent {\n node: AldTreeNode;\n event: React.DragEvent<HTMLElement>;\n}\n\nexport interface AldTreeNodeDragEnterEvent extends AldTreeNodeMouseEvent {\n expandedKeys: Key[];\n}\n\nexport interface AldTreeNodeAttribute {\n node: AldTreeNode;\n dragNode: AldTreeNode;\n dragNodesKeys: Key[];\n dropPosition: number;\n dropToGap?: boolean;\n event: React.MouseEvent<HTMLElement>;\n}\n\n// [Legacy] Compatible for v3\nexport type TreeNodeNormal = DataNode;\n\ntype DraggableFn = (node: DataNode) => boolean;\n\ninterface DropOnlyResolvers {\n nodeDraggable: DraggableFn | undefined;\n nodeDroppable: DraggableFn;\n}\n\ninterface DraggableConfig {\n icon?: React.ReactNode | false;\n /** 节点是否可作为 drag source(拖起来)。返回 false:不显示 drag handle、不能起拖。 */\n nodeDraggable?: DraggableFn;\n /**\n * 节点是否可作为 drop target(接收落入)。返回 true:即使 nodeDraggable=false 仍注册\n * onDragOver/onDrop 等 listener,浏览器才会真正派发 drop 事件。\n *\n * 解决 rc-tree 5.x 把\"可拖\"与\"可放\"绑到同一个 nodeDraggable 的限制——之前要让\"类目可接收\n * 资源拖入但本身不可拖\"只能让 nodeDraggable 全返回 true,再用业务侧 CSS hack 隐藏 drag icon。\n *\n * 默认不传 = 沿用 nodeDraggable 行为(向后兼容)。\n */\n nodeDroppable?: DraggableFn;\n}\n\nexport interface TreeProps<T extends BasicDataNode = DataNode>\n extends Omit<\n RcTreeProps<T>,\n | 'prefixCls'\n | 'showLine'\n | 'direction'\n | 'draggable'\n | 'icon'\n | 'switcherIcon'\n | 'filterTreeNode'\n > {\n showLine?: boolean | { showLeafIcon: boolean | TreeLeafIcon };\n className?: string;\n /** 是否支持多选 */\n multiple?: boolean;\n /** 是否自动展开父节点 */\n autoExpandParent?: boolean;\n /** Checkable状态下节点选择完全受控(父子节点选中状态不再关联) */\n checkStrictly?: boolean;\n /** 是否支持选中 */\n checkable?: boolean;\n /** 是否禁用树 */\n disabled?: boolean;\n /** 默认展开所有树节点 */\n defaultExpandAll?: boolean;\n /** 默认展开对应树节点 */\n defaultExpandParent?: boolean;\n /** 默认展开指定的树节点 */\n defaultExpandedKeys?: Key[];\n /** (受控)展开指定的树节点 */\n expandedKeys?: Key[];\n /** (受控)选中复选框的树节点 */\n checkedKeys?: Key[] | { checked: Key[]; halfChecked: Key[] };\n /** 默认选中复选框的树节点 */\n defaultCheckedKeys?: Key[];\n /** (受控)设置选中的树节点 */\n selectedKeys?: Key[];\n /** 默认选中的树节点 */\n defaultSelectedKeys?: Key[];\n selectable?: boolean;\n /** 点击树节点触发 */\n filterTreeNode?: (node: DataNode) => boolean;\n loadedKeys?: Key[];\n /** 设置节点可拖拽(IE>8) */\n draggable?: DraggableFn | boolean | DraggableConfig;\n style?: React.CSSProperties;\n showIcon?: boolean;\n icon?:\n | ((nodeProps: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode\n | RcTreeProps<T>['icon'];\n switcherIcon?: SwitcherIcon | RcTreeProps<T>['switcherIcon'];\n prefixCls?: string;\n children?: React.ReactNode;\n blockNode?: boolean;\n size?: 'large' | 'small';\n titleRender?: (node: T) => React.ReactNode;\n showTabLeader?: boolean;\n handlerRender?: (node: T) => React.ReactNode;\n highlightKeywords?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Tree = React.forwardRef<any, TreeProps>((props, ref) => {\n const { locale } = React.useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getPrefixCls, direction, virtual } = React.useContext(ConfigContext);\n const size = props.size || 'large';\n const {\n className,\n showIcon = false,\n showLine,\n blockNode = false,\n children,\n checkable = false,\n selectable = true,\n draggable,\n titleRender,\n showTabLeader,\n handlerRender = noop,\n filterTreeNode,\n treeData,\n highlightKeywords,\n motion = { ...collapseMotion, motionAppear: false },\n ...rest\n } = props;\n const prefixCls = getPrefixCls('tree', 'ald-tree');\n\n const customTitleRender = React.useCallback(\n (node: DataNode) => {\n const renderedTitle = titleRender\n ? titleRender(node)\n : typeof node.title === 'function'\n ? node.title(node)\n : node.title;\n const renderedHandler = handlerRender(node) as React.ReactNode;\n const hasHandler =\n renderedHandler !== null &&\n renderedHandler !== undefined &&\n renderedHandler !== false;\n return (\n <span\n className={cn(\n 'ald-tree-title-layout',\n hasHandler && 'ald-tree-title-layout-with-handler',\n )}\n >\n <span className=\"ald-tree-title-content\">{renderedTitle}</span>\n {showTabLeader && hasHandler && (\n <div className=\"ald-tree-tab-leader\"></div>\n )}\n {hasHandler && (\n <span className=\"ald-tree-title-handler\">{renderedHandler}</span>\n )}\n </span>\n );\n },\n [titleRender, showTabLeader, handlerRender],\n );\n const newProps = {\n ...rest,\n checkable,\n selectable,\n showIcon,\n motion,\n blockNode,\n showLine: Boolean(showLine),\n dropIndicatorRender,\n titleRender: customTitleRender,\n };\n\n // 一次性吃掉 draggable 的归一化:rc-tree 看到的 mergedDraggable + 我们内部用的\n // dropOnlyResolvers(原样保留用户 nodeDraggable/nodeDroppable)。集中一处避免两处 useMemo\n // 的判断散开导致字段扩展时遗漏。\n const { draggableConfig, dropOnlyResolvers } = React.useMemo(() => {\n if (!draggable) {\n return {\n draggableConfig: false as const,\n dropOnlyResolvers: null as DropOnlyResolvers | null,\n };\n }\n const newIcon = (\n <DragLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--content-secondary)'}\n ></DragLine>\n );\n let mergedDraggable: DraggableConfig = { icon: newIcon };\n switch (typeof draggable) {\n case 'function':\n mergedDraggable.nodeDraggable = draggable;\n break;\n case 'object':\n mergedDraggable = {\n ...draggable,\n icon: draggable.icon === undefined ? newIcon : draggable.icon,\n };\n break;\n default:\n break;\n }\n\n // rc-tree 5.x 把\"可拖(drag source)\"与\"可放(drop target)\"绑到同一个 nodeDraggable:\n // 该返回 false 时 onDragOver/onDrop 也连带不注册,浏览器认为该节点 not droppable\n // → drop 事件根本不派发。为了让\"类目可接收资源拖入但本身不可拖\",把 rc-tree 看到的\n // nodeDraggable 改成 nodeDraggable || nodeDroppable,从而保证 drop listener 仍注册。\n // 真正的 drag-source 阻断由 document 级 dragstart capture handler 负责(见下方 effect)。\n let resolvers: DropOnlyResolvers | null = null;\n if (mergedDraggable.nodeDroppable) {\n const userNodeDraggable = mergedDraggable.nodeDraggable;\n const userNodeDroppable = mergedDraggable.nodeDroppable;\n resolvers = {\n nodeDraggable: userNodeDraggable,\n nodeDroppable: userNodeDroppable,\n };\n mergedDraggable = {\n ...mergedDraggable,\n nodeDraggable: (node: DataNode) =>\n (userNodeDraggable ? userNodeDraggable(node) : true) ||\n userNodeDroppable(node),\n };\n }\n\n return { draggableConfig: mergedDraggable, dropOnlyResolvers: resolvers };\n }, [draggable]);\n\n /**\n * drop-only 节点不能真的起拖。\n *\n * 历史教训:以前在 props.onDragStart 里调 preventDefault。问题是 rc-tree 内部\n * onNodeDragStart(Tree.js:88-99)会在调用 user onDragStart **之前**把\n * draggingNodeKey/dragNodeProps 写进 state;TreeNode(TreeNode.js:112)也已经先\n * setDragNodeHighlight(true)。然后 preventDefault 让浏览器取消拖拽,dragend 不再派发\n * → onWindowDragEnd 永远不触发 → state 卡在\"正在拖类目\",外层 .ald-tree-treenode\n * 卡着 `dragging`、内层 .ald-tree-node-content-wrapper 卡着 `ald-tree-node-selected`\n * 高亮,直到下一次合法 dragstart 才被覆盖。\n *\n * 修复手段:document 级 dragstart capture handler,在 rc-tree 的 React 监听器之前\n * stopPropagation+preventDefault,让 TreeNode 的 onDragStart 整段都不执行,rc-tree\n * 内部 state 彻底不写入。document 是 React root 容器的祖先,capture 阶段先于 React\n * delegation 监听器,因此 stopPropagation 能彻底拦截。\n */\n React.useLayoutEffect(() => {\n if (!dropOnlyResolvers) return;\n const handler = (e: DragEvent) => {\n const target = e.target as HTMLElement | null;\n if (!target?.closest) return;\n if (target.closest('.ald-tree-treenode-drop-only')) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n document.addEventListener('dragstart', handler, true);\n return () => document.removeEventListener('dragstart', handler, true);\n }, [dropOnlyResolvers]);\n\n /**\n * nodeDroppable 同时收口到 rc-tree 的 allowDrop:避免出现\"nodeDroppable=false 但 rc-tree\n * 默认 allowDrop=()=>true 仍然接收 drop\"的语义裂缝。用户自传的 allowDrop 与 nodeDroppable\n * 取 AND(任一拒绝即拒绝)。\n */\n const composedAllowDrop = React.useMemo(\n () => composeAllowDrop(rest.allowDrop, dropOnlyResolvers?.nodeDroppable),\n [rest.allowDrop, dropOnlyResolvers],\n );\n const renderIndent = (nodeProps: AldTreeNodeProps) => {\n const { pos, isLeaf } = nodeProps as AldTreeNodeProps & { pos?: string };\n // rc-tree `pos` 格式:\"0\" 是虚拟根,\"0-0\" 是首层节点,\"0-0-1\" 是 leaf。\n // 顶层节点 level=0 不缩进;每层 +1 unit(switcher 宽度),与 antd Tree 行为一致。\n // leaf 在未开启 showLine 时 renderSwitcherIcon 返回 null,没有真实 switcher 占位;\n // 需要补一个 switcher 宽度,保证业务图标和同级可展开节点对齐。\n // `?? 2` 兜底:当 pos 缺失时按\"首层节点 `0-0` 长度 = 2\"处理,结果 level=0 不缩进;\n // 切勿改成 1 或 0,否则缺 pos 的节点会被错误右移。\n const level = Math.max(0, (pos?.split('-').length ?? 2) - 2);\n const leafSwitcherWidth = isLeaf && !showLine ? TREE_SWITCH_CION_SIZE : 0;\n return (\n <span\n style={{\n width: level * TREE_SWITCH_CION_SIZE + leafSwitcherWidth,\n flexShrink: 0,\n }}\n ></span>\n );\n };\n const newTreeData = React.useMemo(() => {\n if (!filterTreeNode || !treeData) return treeData;\n\n const shouldNodeDisabled = (node: DataNode): boolean => {\n // 初始化一个标志来表示是否需要为当前节点添加className\n let shouldAddDisabled = true;\n if (filterTreeNode(node)) {\n shouldAddDisabled = false;\n }\n\n if (node.children) {\n // 遍历当前节点的子节点,只要有一个子节点不disable,则该不需要添加className\n const allChildrenShouldAddDisabled = node.children.reduce(\n (pre, child) => {\n return shouldNodeDisabled(child) && pre;\n },\n shouldAddDisabled,\n );\n shouldAddDisabled = allChildrenShouldAddDisabled;\n }\n\n // 如果shouldAddDisabled为true,就为当前节点添加className\n if (shouldAddDisabled) {\n node.className = node.className?.includes(NODE_DISABLE_CLASS_NAME)\n ? node.className\n : cn(node.className, NODE_DISABLE_CLASS_NAME);\n } else {\n const reg = /ald-tree-node-disabled/g;\n node.className?.replace(reg, ' ');\n }\n if (highlightKeywords && typeof node.title !== 'function') {\n node.title = (\n <HighlightText keyword={highlightKeywords}>\n {node.title}\n </HighlightText>\n );\n }\n return shouldAddDisabled;\n };\n const newTreeData = produce(treeData, (draft) => {\n for (const rootNode of draft) {\n shouldNodeDisabled(rootNode);\n }\n });\n return newTreeData;\n }, [filterTreeNode, treeData, highlightKeywords]);\n\n /** 给 drop-only 节点的 wrapper 加 'ald-tree-treenode-drop-only' className(rc-tree 5.x\n * 会把 DataNode.className 透传到 .ald-tree-treenode 上)。css 据此隐藏 drag handle icon\n * 并提供 not-allowed cursor,区分纯 drop target 与真正可拖节点。 */\n const finalTreeData = React.useMemo(() => {\n if (!dropOnlyResolvers || !newTreeData) return newTreeData;\n const { nodeDraggable, nodeDroppable } = dropOnlyResolvers;\n return produce(newTreeData, (draft) => {\n const visit = (nodes: DataNode[] | undefined) => {\n if (!nodes) return;\n for (const node of nodes) {\n const isDraggable = nodeDraggable ? nodeDraggable(node) : true;\n const isDroppable = nodeDroppable(node);\n if (!isDraggable && isDroppable) {\n const existing = node.className ?? '';\n if (!existing.includes('ald-tree-treenode-drop-only')) {\n node.className = cn(existing, 'ald-tree-treenode-drop-only');\n }\n }\n visit(node.children as DataNode[] | undefined);\n }\n };\n visit(draft as DataNode[]);\n });\n }, [newTreeData, dropOnlyResolvers]);\n\n const noChildren = React.useMemo(() => {\n if (finalTreeData?.length) {\n return finalTreeData.every((node) => {\n return !node.children?.length && node.isLeaf !== false;\n });\n }\n return true;\n }, [finalTreeData]);\n\n return (\n <RcTree\n itemHeight={20}\n ref={ref}\n virtual={virtual}\n {...newProps}\n allowDrop={composedAllowDrop}\n prefixCls={prefixCls}\n treeData={finalTreeData}\n className={cn(\n {\n [`${prefixCls}-icon-hide`]: !showIcon,\n [`${prefixCls}-block-node`]: blockNode,\n [`${prefixCls}-unselectable`]: !selectable,\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n ['ald-draggable-tree']: draggable,\n [`${prefixCls}-no-children`]: noChildren,\n },\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-tree',\n className,\n )}\n direction={direction as any}\n checkable={\n checkable ? (\n <span className={`${prefixCls}-checkbox-inner`} />\n ) : (\n checkable\n )\n }\n selectable={selectable}\n // @ts-ignore\n switcherIcon={(nodeProps: AldTreeNodeProps) => {\n return (\n <>\n {renderIndent(nodeProps)}\n {renderSwitcherIcon(\n prefixCls,\n <ArrowRightLightLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--content-secondary)'}\n >\n {t.Tree.expand}\n </ArrowRightLightLine>,\n showLine,\n nodeProps,\n TREE_SWITCH_CION_SIZE,\n )}\n </>\n );\n }}\n draggable={draggableConfig}\n >\n {children}\n </RcTree>\n );\n});\n\nexport default Tree;\n"],"mappings":"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"}
@@ -95,7 +95,7 @@ Typography.Paragraph = ({ className, style, children, ellipsis, copyable, ...res
95
95
  });
96
96
  };
97
97
  Typography.Link = ({ className, style, children, href, target, ...rest }) => /* @__PURE__ */ jsx("a", {
98
- className: cn("ald-typography-link tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]", className),
98
+ className: cn("ald-typography-link tw-text-[var(--content-brand-secondary)] hover:tw-text-[var(--content-brand-primary)]", className),
99
99
  style,
100
100
  href,
101
101
  target,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Typography/index.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface TypographyProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent extends React.FC<TypographyProps> {\n Text: React.FC<TextProps>;\n Title: React.FC<TitleProps>;\n Paragraph: React.FC<ParagraphProps>;\n Link: React.FC<LinkProps>;\n}\n\ninterface CopyableConfig {\n text?: string;\n onCopy?: () => void;\n tooltips?: [React.ReactNode, React.ReactNode];\n}\n\ntype EllipsisConfig = boolean | { rows?: number };\n\ninterface TextProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'type'> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n strong?: boolean;\n italic?: boolean;\n underline?: boolean;\n delete?: boolean;\n code?: boolean;\n disabled?: boolean;\n type?: 'secondary' | 'success' | 'warning' | 'danger';\n ellipsis?: EllipsisConfig;\n copyable?: boolean | CopyableConfig;\n}\n\ninterface TitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n level?: 1 | 2 | 3 | 4 | 5;\n ellipsis?: EllipsisConfig;\n}\n\ninterface ParagraphProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n ellipsis?: EllipsisConfig;\n copyable?: boolean | CopyableConfig;\n}\n\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n href?: string;\n target?: string;\n}\n\nfunction CopyButton({\n copyable,\n children,\n}: {\n copyable: boolean | CopyableConfig;\n children: React.ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const config =\n typeof copyable === 'object' ? copyable : ({} as CopyableConfig);\n const textToCopy =\n config.text ?? (typeof children === 'string' ? children : '');\n navigator.clipboard.writeText(String(textToCopy)).then(() => {\n setCopied(true);\n config.onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n });\n }, [copyable, children]);\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n className=\"ald-typography-copy tw-ml-1 tw-inline-flex tw-cursor-pointer tw-align-middle tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]\"\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleCopy();\n }}\n aria-label=\"Copy\"\n >\n {copied ? (\n <span className=\"tw-text-xs tw-text-[var(--content-positive-primary)]\">\n Copied!\n </span>\n ) : (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H6z\" />\n <path d=\"M2 4a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h1v1H2z\" />\n </svg>\n )}\n </span>\n );\n}\n\nconst Typography: TypographyComponent = ({ className, style, children }) => (\n <article className={cn('ald-typography', className)} style={style}>\n {children}\n </article>\n);\n\nTypography.Text = ({\n className,\n style,\n children,\n strong,\n italic,\n underline,\n code,\n disabled,\n type,\n ellipsis,\n copyable,\n delete: del,\n ...rest\n}) => {\n const isEllipsis = Boolean(ellipsis);\n const ellipsisRows = typeof ellipsis === 'object' ? ellipsis.rows : undefined;\n let content: React.ReactNode = children;\n if (code) content = <code>{content}</code>;\n if (del) content = <del>{content}</del>;\n if (underline) content = <u>{content}</u>;\n if (italic) content = <i>{content}</i>;\n if (strong) content = <strong>{content}</strong>;\n\n return (\n <span\n className={cn(\n 'ald-typography-text',\n disabled && 'tw-cursor-not-allowed tw-opacity-50',\n type === 'secondary' && 'tw-text-[var(--content-secondary)]',\n type === 'success' && 'tw-text-[var(--content-positive-primary)]',\n type === 'warning' && 'tw-text-[var(--content-warning-primary)]',\n type === 'danger' && 'tw-text-[var(--content-negative-primary)]',\n isEllipsis && (ellipsisRows ? 'tw-overflow-hidden' : 'tw-truncate'),\n className,\n )}\n style={{\n ...style,\n ...(ellipsisRows\n ? {\n display: '-webkit-box',\n WebkitLineClamp: ellipsisRows,\n WebkitBoxOrient: 'vertical',\n }\n : {}),\n }}\n {...rest}\n >\n {content}\n {copyable && <CopyButton copyable={copyable}>{children}</CopyButton>}\n </span>\n );\n};\n\nTypography.Title = ({\n className,\n style,\n children,\n level = 1,\n ellipsis,\n ...rest\n}) => {\n const Tag = `h${level}` as React.ElementType;\n const isEllipsis = Boolean(ellipsis);\n return (\n <Tag\n className={cn(\n 'ald-typography-title tw-font-semibold tw-text-[var(--content-primary)]',\n isEllipsis && 'tw-truncate',\n className,\n )}\n style={style}\n {...rest}\n >\n {children}\n </Tag>\n );\n};\n\nTypography.Paragraph = ({\n className,\n style,\n children,\n ellipsis,\n copyable,\n ...rest\n}) => {\n const isEllipsis = Boolean(ellipsis);\n const ellipsisRows = typeof ellipsis === 'object' ? ellipsis.rows : undefined;\n\n return (\n <div\n className={cn(\n 'ald-typography-paragraph',\n isEllipsis && (ellipsisRows ? 'tw-overflow-hidden' : 'tw-truncate'),\n className,\n )}\n style={{\n ...style,\n ...(ellipsisRows\n ? {\n display: '-webkit-box',\n WebkitLineClamp: ellipsisRows,\n WebkitBoxOrient: 'vertical',\n }\n : {}),\n }}\n {...rest}\n >\n {children}\n {copyable && <CopyButton copyable={copyable}>{children}</CopyButton>}\n </div>\n );\n};\n\nTypography.Link = ({ className, style, children, href, target, ...rest }) => (\n <a\n className={cn(\n 'ald-typography-link tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]',\n className,\n )}\n style={style}\n href={href}\n target={target}\n {...rest}\n >\n {children}\n </a>\n);\n\nexport default Typography;\n"],"mappings":";;;;AAgEA,SAAS,WAAW,EAClB,UACA,YAIC;CACD,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAE3C,MAAM,aAAa,kBAAkB;EACnC,MAAM,SACJ,OAAO,aAAa,WAAW,WAAY,EAAE;EAC/C,MAAM,aACJ,OAAO,SAAS,OAAO,aAAa,WAAW,WAAW;AAC5D,YAAU,UAAU,UAAU,OAAO,WAAW,CAAC,CAAC,WAAW;AAC3D,aAAU,KAAK;AACf,UAAO,UAAU;AACjB,oBAAiB,UAAU,MAAM,EAAE,IAAK;IACxC;IACD,CAAC,UAAU,SAAS,CAAC;AAExB,QACE,oBAAC,QAAD;EACE,MAAK;EACL,UAAU;EACV,WAAU;EACV,SAAS;EACT,YAAY,MAAM;AAChB,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,IAAK,aAAY;;EAEtD,cAAW;YAEV,SACC,oBAAC,QAAD;GAAM,WAAU;aAAuD;GAEhE,CAAA,GAEP,qBAAC,OAAD;GACE,SAAQ;GACR,OAAM;GACN,QAAO;GACP,MAAK;GACL,eAAY;aALd,CAOE,oBAAC,QAAD,EAAM,GAAE,8IAA+I,CAAA,EACvJ,oBAAC,QAAD,EAAM,GAAE,kHAAmH,CAAA,CACvH;;EAEH,CAAA;;AAIX,IAAM,cAAmC,EAAE,WAAW,OAAO,eAC3D,oBAAC,WAAD;CAAS,WAAW,GAAG,kBAAkB,UAAU;CAAS;CACzD;CACO,CAAA;AAGZ,WAAW,QAAQ,EACjB,WACA,OACA,UACA,QACA,QACA,WACA,MACA,UACA,MACA,UACA,UACA,QAAQ,KACR,GAAG,WACC;CACJ,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,eAAe,OAAO,aAAa,WAAW,SAAS,OAAO;CACpE,IAAI,UAA2B;AAC/B,KAAI,KAAM,WAAU,oBAAC,QAAD,EAAA,UAAO,SAAe,CAAA;AAC1C,KAAI,IAAK,WAAU,oBAAC,OAAD,EAAA,UAAM,SAAc,CAAA;AACvC,KAAI,UAAW,WAAU,oBAAC,KAAD,EAAA,UAAI,SAAY,CAAA;AACzC,KAAI,OAAQ,WAAU,oBAAC,KAAD,EAAA,UAAI,SAAY,CAAA;AACtC,KAAI,OAAQ,WAAU,oBAAC,UAAD,EAAA,UAAS,SAAiB,CAAA;AAEhD,QACE,qBAAC,QAAD;EACE,WAAW,GACT,uBACA,YAAY,uCACZ,SAAS,eAAe,sCACxB,SAAS,aAAa,6CACtB,SAAS,aAAa,4CACtB,SAAS,YAAY,6CACrB,eAAe,eAAe,uBAAuB,gBACrD,UACD;EACD,OAAO;GACL,GAAG;GACH,GAAI,eACA;IACE,SAAS;IACT,iBAAiB;IACjB,iBAAiB;IAClB,GACD,EAAE;GACP;EACD,GAAI;YArBN,CAuBG,SACA,YAAY,oBAAC,YAAD;GAAsB;GAAW;GAAsB,CAAA,CAC/D;;;AAIX,WAAW,SAAS,EAClB,WACA,OACA,UACA,QAAQ,GACR,UACA,GAAG,WACC;AAGJ,QACE,oBAHU,IAAI,SAGd;EACE,WAAW,GACT,0EAJa,QAAQ,SAAS,IAKhB,eACd,UACD;EACM;EACP,GAAI;EAEH;EACG,CAAA;;AAIV,WAAW,aAAa,EACtB,WACA,OACA,UACA,UACA,UACA,GAAG,WACC;CACJ,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,eAAe,OAAO,aAAa,WAAW,SAAS,OAAO;AAEpE,QACE,qBAAC,OAAD;EACE,WAAW,GACT,4BACA,eAAe,eAAe,uBAAuB,gBACrD,UACD;EACD,OAAO;GACL,GAAG;GACH,GAAI,eACA;IACE,SAAS;IACT,iBAAiB;IACjB,iBAAiB;IAClB,GACD,EAAE;GACP;EACD,GAAI;YAhBN,CAkBG,UACA,YAAY,oBAAC,YAAD;GAAsB;GAAW;GAAsB,CAAA,CAChE;;;AAIV,WAAW,QAAQ,EAAE,WAAW,OAAO,UAAU,MAAM,QAAQ,GAAG,WAChE,oBAAC,KAAD;CACE,WAAW,GACT,iHACA,UACD;CACM;CACD;CACE;CACR,GAAI;CAEH;CACC,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Typography/index.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface TypographyProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent extends React.FC<TypographyProps> {\n Text: React.FC<TextProps>;\n Title: React.FC<TitleProps>;\n Paragraph: React.FC<ParagraphProps>;\n Link: React.FC<LinkProps>;\n}\n\ninterface CopyableConfig {\n text?: string;\n onCopy?: () => void;\n tooltips?: [React.ReactNode, React.ReactNode];\n}\n\ntype EllipsisConfig = boolean | { rows?: number };\n\ninterface TextProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'type'> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n strong?: boolean;\n italic?: boolean;\n underline?: boolean;\n delete?: boolean;\n code?: boolean;\n disabled?: boolean;\n type?: 'secondary' | 'success' | 'warning' | 'danger';\n ellipsis?: EllipsisConfig;\n copyable?: boolean | CopyableConfig;\n}\n\ninterface TitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n level?: 1 | 2 | 3 | 4 | 5;\n ellipsis?: EllipsisConfig;\n}\n\ninterface ParagraphProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n ellipsis?: EllipsisConfig;\n copyable?: boolean | CopyableConfig;\n}\n\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n href?: string;\n target?: string;\n}\n\nfunction CopyButton({\n copyable,\n children,\n}: {\n copyable: boolean | CopyableConfig;\n children: React.ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const config =\n typeof copyable === 'object' ? copyable : ({} as CopyableConfig);\n const textToCopy =\n config.text ?? (typeof children === 'string' ? children : '');\n navigator.clipboard.writeText(String(textToCopy)).then(() => {\n setCopied(true);\n config.onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n });\n }, [copyable, children]);\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n className=\"ald-typography-copy tw-ml-1 tw-inline-flex tw-cursor-pointer tw-align-middle tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]\"\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleCopy();\n }}\n aria-label=\"Copy\"\n >\n {copied ? (\n <span className=\"tw-text-xs tw-text-[var(--content-positive-primary)]\">\n Copied!\n </span>\n ) : (\n <svg\n viewBox=\"0 0 16 16\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H6z\" />\n <path d=\"M2 4a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h1v1H2z\" />\n </svg>\n )}\n </span>\n );\n}\n\nconst Typography: TypographyComponent = ({ className, style, children }) => (\n <article className={cn('ald-typography', className)} style={style}>\n {children}\n </article>\n);\n\nTypography.Text = ({\n className,\n style,\n children,\n strong,\n italic,\n underline,\n code,\n disabled,\n type,\n ellipsis,\n copyable,\n delete: del,\n ...rest\n}) => {\n const isEllipsis = Boolean(ellipsis);\n const ellipsisRows = typeof ellipsis === 'object' ? ellipsis.rows : undefined;\n let content: React.ReactNode = children;\n if (code) content = <code>{content}</code>;\n if (del) content = <del>{content}</del>;\n if (underline) content = <u>{content}</u>;\n if (italic) content = <i>{content}</i>;\n if (strong) content = <strong>{content}</strong>;\n\n return (\n <span\n className={cn(\n 'ald-typography-text',\n disabled && 'tw-cursor-not-allowed tw-opacity-50',\n type === 'secondary' && 'tw-text-[var(--content-secondary)]',\n type === 'success' && 'tw-text-[var(--content-positive-primary)]',\n type === 'warning' && 'tw-text-[var(--content-warning-primary)]',\n type === 'danger' && 'tw-text-[var(--content-negative-primary)]',\n isEllipsis && (ellipsisRows ? 'tw-overflow-hidden' : 'tw-truncate'),\n className,\n )}\n style={{\n ...style,\n ...(ellipsisRows\n ? {\n display: '-webkit-box',\n WebkitLineClamp: ellipsisRows,\n WebkitBoxOrient: 'vertical',\n }\n : {}),\n }}\n {...rest}\n >\n {content}\n {copyable && <CopyButton copyable={copyable}>{children}</CopyButton>}\n </span>\n );\n};\n\nTypography.Title = ({\n className,\n style,\n children,\n level = 1,\n ellipsis,\n ...rest\n}) => {\n const Tag = `h${level}` as React.ElementType;\n const isEllipsis = Boolean(ellipsis);\n return (\n <Tag\n className={cn(\n 'ald-typography-title tw-font-semibold tw-text-[var(--content-primary)]',\n isEllipsis && 'tw-truncate',\n className,\n )}\n style={style}\n {...rest}\n >\n {children}\n </Tag>\n );\n};\n\nTypography.Paragraph = ({\n className,\n style,\n children,\n ellipsis,\n copyable,\n ...rest\n}) => {\n const isEllipsis = Boolean(ellipsis);\n const ellipsisRows = typeof ellipsis === 'object' ? ellipsis.rows : undefined;\n\n return (\n <div\n className={cn(\n 'ald-typography-paragraph',\n isEllipsis && (ellipsisRows ? 'tw-overflow-hidden' : 'tw-truncate'),\n className,\n )}\n style={{\n ...style,\n ...(ellipsisRows\n ? {\n display: '-webkit-box',\n WebkitLineClamp: ellipsisRows,\n WebkitBoxOrient: 'vertical',\n }\n : {}),\n }}\n {...rest}\n >\n {children}\n {copyable && <CopyButton copyable={copyable}>{children}</CopyButton>}\n </div>\n );\n};\n\nTypography.Link = ({ className, style, children, href, target, ...rest }) => (\n <a\n className={cn(\n 'ald-typography-link tw-text-[var(--content-brand-secondary)] hover:tw-text-[var(--content-brand-primary)]',\n className,\n )}\n style={style}\n href={href}\n target={target}\n {...rest}\n >\n {children}\n </a>\n);\n\nexport default Typography;\n"],"mappings":"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"}
@@ -21,7 +21,7 @@ function User({ src, nickname, size = "middle", nicknameClassName, className, st
21
21
  size: getAvatarSize(size || "middle"),
22
22
  children: nickname
23
23
  }), /* @__PURE__ */ jsx("div", {
24
- className: cn("ald-user-text tw-min-w-0 tw-truncate tw-text-[var(--alias-colors-text-default)]", size === "small" && "tw-text-xs tw-leading-4", size === "middle" && "tw-text-sm tw-leading-5", size === "large" && "tw-text-sm tw-font-medium tw-leading-5", nicknameClassName),
24
+ className: cn("ald-user-text tw-min-w-0 tw-truncate tw-text-[var(--content-primary)]", size === "small" && "tw-text-xs tw-leading-4", size === "middle" && "tw-text-sm tw-leading-5", size === "large" && "tw-text-sm tw-font-medium tw-leading-5", nicknameClassName),
25
25
  style: { width: "calc(100% - 20px - 6px)" },
26
26
  children: nickname
27
27
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/User/index.tsx"],"sourcesContent":["import React from 'react';\nimport Avatar from '../Avatar';\nimport { cn } from '../lib/utils';\n\nexport interface IUserProps {\n src: React.ReactNode | string;\n nickname: string;\n size?: 'small' | 'middle' | 'large';\n nicknameClassName?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst getAvatarSize = (size: 'small' | 'middle' | 'large') => {\n return {\n small: 16,\n middle: 20,\n large: 24,\n }[size];\n};\n\nfunction User({\n src,\n nickname,\n size = 'middle',\n nicknameClassName,\n className,\n style,\n}: IUserProps) {\n return (\n <div\n className={cn(\n 'ald-user tw-flex tw-items-center',\n `ald-user-${size}`,\n size === 'small' && 'tw-gap-1',\n size === 'middle' && 'tw-gap-[6px]',\n size === 'large' && 'tw-gap-2',\n className,\n )}\n style={style}\n title={nickname}\n >\n <Avatar\n className=\"ald-user-avatar tw-shrink-0\"\n src={src}\n size={getAvatarSize(size || 'middle')}\n >\n {nickname}\n </Avatar>\n <div\n className={cn(\n 'ald-user-text tw-min-w-0 tw-truncate tw-text-[var(--alias-colors-text-default)]',\n size === 'small' && 'tw-text-xs tw-leading-4',\n size === 'middle' && 'tw-text-sm tw-leading-5',\n size === 'large' && 'tw-text-sm tw-font-medium tw-leading-5',\n nicknameClassName,\n )}\n style={{ width: 'calc(100% - 20px - 6px)' }}\n >\n {nickname}\n </div>\n </div>\n );\n}\n\nexport default User;\n"],"mappings":";;;;;AAaA,IAAM,iBAAiB,SAAuC;AAC5D,QAAO;EACL,OAAO;EACP,QAAQ;EACR,OAAO;EACR,CAAC;;AAGJ,SAAS,KAAK,EACZ,KACA,UACA,OAAO,UACP,mBACA,WACA,SACa;AACb,QACE,qBAAC,OAAD;EACE,WAAW,GACT,oCACA,YAAY,QACZ,SAAS,WAAW,YACpB,SAAS,YAAY,gBACrB,SAAS,WAAW,YACpB,UACD;EACM;EACP,OAAO;YAVT,CAYE,oBAAC,QAAD;GACE,WAAU;GACL;GACL,MAAM,cAAc,QAAQ,SAAS;aAEpC;GACM,CAAA,EACT,oBAAC,OAAD;GACE,WAAW,GACT,mFACA,SAAS,WAAW,2BACpB,SAAS,YAAY,2BACrB,SAAS,WAAW,0CACpB,kBACD;GACD,OAAO,EAAE,OAAO,2BAA2B;aAE1C;GACG,CAAA,CACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/User/index.tsx"],"sourcesContent":["import React from 'react';\nimport Avatar from '../Avatar';\nimport { cn } from '../lib/utils';\n\nexport interface IUserProps {\n src: React.ReactNode | string;\n nickname: string;\n size?: 'small' | 'middle' | 'large';\n nicknameClassName?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst getAvatarSize = (size: 'small' | 'middle' | 'large') => {\n return {\n small: 16,\n middle: 20,\n large: 24,\n }[size];\n};\n\nfunction User({\n src,\n nickname,\n size = 'middle',\n nicknameClassName,\n className,\n style,\n}: IUserProps) {\n return (\n <div\n className={cn(\n 'ald-user tw-flex tw-items-center',\n `ald-user-${size}`,\n size === 'small' && 'tw-gap-1',\n size === 'middle' && 'tw-gap-[6px]',\n size === 'large' && 'tw-gap-2',\n className,\n )}\n style={style}\n title={nickname}\n >\n <Avatar\n className=\"ald-user-avatar tw-shrink-0\"\n src={src}\n size={getAvatarSize(size || 'middle')}\n >\n {nickname}\n </Avatar>\n <div\n className={cn(\n 'ald-user-text tw-min-w-0 tw-truncate tw-text-[var(--content-primary)]',\n size === 'small' && 'tw-text-xs tw-leading-4',\n size === 'middle' && 'tw-text-sm tw-leading-5',\n size === 'large' && 'tw-text-sm tw-font-medium tw-leading-5',\n nicknameClassName,\n )}\n style={{ width: 'calc(100% - 20px - 6px)' }}\n >\n {nickname}\n </div>\n </div>\n );\n}\n\nexport default User;\n"],"mappings":";;;;;AAaA,IAAM,iBAAiB,SAAuC;AAC5D,QAAO;EACL,OAAO;EACP,QAAQ;EACR,OAAO;EACR,CAAC;;AAGJ,SAAS,KAAK,EACZ,KACA,UACA,OAAO,UACP,mBACA,WACA,SACa;AACb,QACE,qBAAC,OAAD;EACE,WAAW,GACT,oCACA,YAAY,QACZ,SAAS,WAAW,YACpB,SAAS,YAAY,gBACrB,SAAS,WAAW,YACpB,UACD;EACM;EACP,OAAO;YAVT,CAYE,oBAAC,QAAD;GACE,WAAU;GACL;GACL,MAAM,cAAc,QAAQ,SAAS;aAEpC;GACM,CAAA,EACT,oBAAC,OAAD;GACE,WAAW,GACT,yEACA,SAAS,WAAW,2BACpB,SAAS,YAAY,2BACrB,SAAS,WAAW,0CACpB,kBACD;GACD,OAAO,EAAE,OAAO,2BAA2B;aAE1C;GACG,CAAA,CACF"}
@@ -21,7 +21,8 @@ function Watermark(props) {
21
21
  const fontSize = font?.fontSize || 14;
22
22
  const fontFamily = font?.fontFamily || "sans-serif";
23
23
  const fontWeight = font?.fontWeight || "normal";
24
- const fontColor = font?.color || "rgba(0, 0, 0, 0.1)";
24
+ const defaultFontColor = getComputedStyle(watermarkRef.current).getPropertyValue("--content-tertiary");
25
+ const fontColor = font?.color || defaultFontColor;
25
26
  ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;
26
27
  ctx.fillStyle = fontColor;
27
28
  ctx.textAlign = "center";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Watermark/index.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface IFont {\n color?: string;\n fontSize?: number | string;\n fontWeight?: 'normal' | 'light' | 'weight' | number;\n fontStyle?: 'none' | 'normal' | 'italic' | 'oblique';\n fontFamily?: string;\n}\n\nexport interface IWatermarkProps {\n zIndex?: number;\n rotate?: number;\n width?: number;\n height?: number;\n image?: string;\n content?: string | string[];\n font?: IFont;\n style?: React.CSSProperties;\n className?: string;\n rootClassName?: string;\n gap?: [number, number];\n offset?: [number, number];\n children?: React.ReactNode;\n}\n\nfunction Watermark(props: IWatermarkProps) {\n const {\n zIndex = 9,\n rotate = -22,\n width = 120,\n height = 64,\n content,\n font,\n style,\n className,\n gap = [100, 100],\n offset,\n children,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const watermarkRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!content || !watermarkRef.current) return;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const ratio = window.devicePixelRatio || 1;\n const canvasWidth = (width + gap[0]) * ratio;\n const canvasHeight = (height + gap[1]) * ratio;\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n\n ctx.translate(canvasWidth / 2, canvasHeight / 2);\n ctx.rotate((rotate * Math.PI) / 180);\n\n const fontSize = font?.fontSize || 14;\n const fontFamily = font?.fontFamily || 'sans-serif';\n const fontWeight = font?.fontWeight || 'normal';\n const fontColor = font?.color || 'rgba(0, 0, 0, 0.1)';\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = fontColor;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n const lines = Array.isArray(content) ? content : [content];\n const lineHeight = typeof fontSize === 'number' ? fontSize * 1.5 : 21;\n lines.forEach((line, i) => {\n const y = (i - (lines.length - 1) / 2) * lineHeight;\n ctx.fillText(line, 0, y);\n });\n\n const base64Url = canvas.toDataURL();\n watermarkRef.current.style.backgroundImage = `url(${base64Url})`;\n watermarkRef.current.style.backgroundSize = `${width + gap[0]}px`;\n }, [content, width, height, rotate, gap, font]);\n\n return (\n <div\n ref={containerRef}\n className={cn('ald-watermark tw-relative', className)}\n style={style}\n >\n {children}\n <div\n ref={watermarkRef}\n className=\"tw-pointer-events-none tw-absolute tw-inset-0 tw-bg-repeat\"\n style={{\n zIndex,\n backgroundPosition: offset\n ? `${offset[0]}px ${offset[1]}px`\n : undefined,\n }}\n />\n </div>\n );\n}\n\nexport default Watermark;\n"],"mappings":";;;;AA2BA,SAAS,UAAU,OAAwB;CACzC,MAAM,EACJ,SAAS,GACT,SAAS,KACT,QAAQ,KACR,SAAS,IACT,SACA,MACA,OACA,WACA,MAAM,CAAC,KAAK,IAAI,EAChB,QACA,aACE;CAEJ,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,eAAe,OAAuB,KAAK;AAEjD,iBAAgB;AACd,MAAI,CAAC,WAAW,CAAC,aAAa,QAAS;EAEvC,MAAM,SAAS,SAAS,cAAc,SAAS;EAC/C,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,MAAI,CAAC,IAAK;EAEV,MAAM,QAAQ,OAAO,oBAAoB;EACzC,MAAM,eAAe,QAAQ,IAAI,MAAM;EACvC,MAAM,gBAAgB,SAAS,IAAI,MAAM;AACzC,SAAO,QAAQ;AACf,SAAO,SAAS;AAEhB,MAAI,UAAU,cAAc,GAAG,eAAe,EAAE;AAChD,MAAI,OAAQ,SAAS,KAAK,KAAM,IAAI;EAEpC,MAAM,WAAW,MAAM,YAAY;EACnC,MAAM,aAAa,MAAM,cAAc;EACvC,MAAM,aAAa,MAAM,cAAc;EACvC,MAAM,YAAY,MAAM,SAAS;AAEjC,MAAI,OAAO,GAAG,WAAW,GAAG,SAAS,KAAK;AAC1C,MAAI,YAAY;AAChB,MAAI,YAAY;AAChB,MAAI,eAAe;EAEnB,MAAM,QAAQ,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;EAC1D,MAAM,aAAa,OAAO,aAAa,WAAW,WAAW,MAAM;AACnE,QAAM,SAAS,MAAM,MAAM;GACzB,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK;AACzC,OAAI,SAAS,MAAM,GAAG,EAAE;IACxB;EAEF,MAAM,YAAY,OAAO,WAAW;AACpC,eAAa,QAAQ,MAAM,kBAAkB,OAAO,UAAU;AAC9D,eAAa,QAAQ,MAAM,iBAAiB,GAAG,QAAQ,IAAI,GAAG;IAC7D;EAAC;EAAS;EAAO;EAAQ;EAAQ;EAAK;EAAK,CAAC;AAE/C,QACE,qBAAC,OAAD;EACE,KAAK;EACL,WAAW,GAAG,6BAA6B,UAAU;EAC9C;YAHT,CAKG,UACD,oBAAC,OAAD;GACE,KAAK;GACL,WAAU;GACV,OAAO;IACL;IACA,oBAAoB,SAChB,GAAG,OAAO,GAAG,KAAK,OAAO,GAAG,MAC5B;IACL;GACD,CAAA,CACE"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Watermark/index.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface IFont {\n color?: string;\n fontSize?: number | string;\n fontWeight?: 'normal' | 'light' | 'weight' | number;\n fontStyle?: 'none' | 'normal' | 'italic' | 'oblique';\n fontFamily?: string;\n}\n\nexport interface IWatermarkProps {\n zIndex?: number;\n rotate?: number;\n width?: number;\n height?: number;\n image?: string;\n content?: string | string[];\n font?: IFont;\n style?: React.CSSProperties;\n className?: string;\n rootClassName?: string;\n gap?: [number, number];\n offset?: [number, number];\n children?: React.ReactNode;\n}\n\nfunction Watermark(props: IWatermarkProps) {\n const {\n zIndex = 9,\n rotate = -22,\n width = 120,\n height = 64,\n content,\n font,\n style,\n className,\n gap = [100, 100],\n offset,\n children,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const watermarkRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!content || !watermarkRef.current) return;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const ratio = window.devicePixelRatio || 1;\n const canvasWidth = (width + gap[0]) * ratio;\n const canvasHeight = (height + gap[1]) * ratio;\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n\n ctx.translate(canvasWidth / 2, canvasHeight / 2);\n ctx.rotate((rotate * Math.PI) / 180);\n\n const fontSize = font?.fontSize || 14;\n const fontFamily = font?.fontFamily || 'sans-serif';\n const fontWeight = font?.fontWeight || 'normal';\n const defaultFontColor = getComputedStyle(\n watermarkRef.current,\n ).getPropertyValue('--content-tertiary');\n const fontColor = font?.color || defaultFontColor;\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;\n ctx.fillStyle = fontColor;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n const lines = Array.isArray(content) ? content : [content];\n const lineHeight = typeof fontSize === 'number' ? fontSize * 1.5 : 21;\n lines.forEach((line, i) => {\n const y = (i - (lines.length - 1) / 2) * lineHeight;\n ctx.fillText(line, 0, y);\n });\n\n const base64Url = canvas.toDataURL();\n watermarkRef.current.style.backgroundImage = `url(${base64Url})`;\n watermarkRef.current.style.backgroundSize = `${width + gap[0]}px`;\n }, [content, width, height, rotate, gap, font]);\n\n return (\n <div\n ref={containerRef}\n className={cn('ald-watermark tw-relative', className)}\n style={style}\n >\n {children}\n <div\n ref={watermarkRef}\n className=\"tw-pointer-events-none tw-absolute tw-inset-0 tw-bg-repeat\"\n style={{\n zIndex,\n backgroundPosition: offset\n ? `${offset[0]}px ${offset[1]}px`\n : undefined,\n }}\n />\n </div>\n );\n}\n\nexport default Watermark;\n"],"mappings":";;;;AA2BA,SAAS,UAAU,OAAwB;CACzC,MAAM,EACJ,SAAS,GACT,SAAS,KACT,QAAQ,KACR,SAAS,IACT,SACA,MACA,OACA,WACA,MAAM,CAAC,KAAK,IAAI,EAChB,QACA,aACE;CAEJ,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,eAAe,OAAuB,KAAK;AAEjD,iBAAgB;AACd,MAAI,CAAC,WAAW,CAAC,aAAa,QAAS;EAEvC,MAAM,SAAS,SAAS,cAAc,SAAS;EAC/C,MAAM,MAAM,OAAO,WAAW,KAAK;AACnC,MAAI,CAAC,IAAK;EAEV,MAAM,QAAQ,OAAO,oBAAoB;EACzC,MAAM,eAAe,QAAQ,IAAI,MAAM;EACvC,MAAM,gBAAgB,SAAS,IAAI,MAAM;AACzC,SAAO,QAAQ;AACf,SAAO,SAAS;AAEhB,MAAI,UAAU,cAAc,GAAG,eAAe,EAAE;AAChD,MAAI,OAAQ,SAAS,KAAK,KAAM,IAAI;EAEpC,MAAM,WAAW,MAAM,YAAY;EACnC,MAAM,aAAa,MAAM,cAAc;EACvC,MAAM,aAAa,MAAM,cAAc;EACvC,MAAM,mBAAmB,iBACvB,aAAa,QACd,CAAC,iBAAiB,qBAAqB;EACxC,MAAM,YAAY,MAAM,SAAS;AAEjC,MAAI,OAAO,GAAG,WAAW,GAAG,SAAS,KAAK;AAC1C,MAAI,YAAY;AAChB,MAAI,YAAY;AAChB,MAAI,eAAe;EAEnB,MAAM,QAAQ,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;EAC1D,MAAM,aAAa,OAAO,aAAa,WAAW,WAAW,MAAM;AACnE,QAAM,SAAS,MAAM,MAAM;GACzB,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK;AACzC,OAAI,SAAS,MAAM,GAAG,EAAE;IACxB;EAEF,MAAM,YAAY,OAAO,WAAW;AACpC,eAAa,QAAQ,MAAM,kBAAkB,OAAO,UAAU;AAC9D,eAAa,QAAQ,MAAM,iBAAiB,GAAG,QAAQ,IAAI,GAAG;IAC7D;EAAC;EAAS;EAAO;EAAQ;EAAQ;EAAK;EAAK,CAAC;AAE/C,QACE,qBAAC,OAAD;EACE,KAAK;EACL,WAAW,GAAG,6BAA6B,UAAU;EAC9C;YAHT,CAKG,UACD,oBAAC,OAAD;GACE,KAAK;GACL,WAAU;GACV,OAAO;IACL;IACA,oBAAoB,SAChB,GAAG,OAAO,GAAG,KAAK,OAAO,GAAG,MAC5B;IACL;GACD,CAAA,CACE"}