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

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 (172) hide show
  1. package/dist/AProgress/index.d.ts +1 -1
  2. package/dist/AProgress/index.js +19 -5
  3. package/dist/AProgress/index.js.map +1 -1
  4. package/dist/Alert/index.d.ts +1 -1
  5. package/dist/Alert/index.js +22 -8
  6. package/dist/Alert/index.js.map +1 -1
  7. package/dist/Avatar/component/Avatar/index.d.ts +1 -1
  8. package/dist/Avatar/component/Avatar/index.js +4 -4
  9. package/dist/Avatar/component/Avatar/index.js.map +1 -1
  10. package/dist/Avatar/component/Avatar/type.d.ts +1 -1
  11. package/dist/Avatar/component/Avatar/type.js +6 -1
  12. package/dist/Avatar/component/Avatar/type.js.map +1 -1
  13. package/dist/Avatar/index.js +67 -8
  14. package/dist/Avatar/index.js.map +1 -1
  15. package/dist/Badge/index.d.ts +1 -0
  16. package/dist/Badge/index.js +32 -9
  17. package/dist/Badge/index.js.map +1 -1
  18. package/dist/Breadcrumb/index.js +21 -12
  19. package/dist/Breadcrumb/index.js.map +1 -1
  20. package/dist/Button/index.d.ts +2 -0
  21. package/dist/Button/index.js +39 -32
  22. package/dist/Button/index.js.map +1 -1
  23. package/dist/Card/index.js +5 -5
  24. package/dist/Card/index.js.map +1 -1
  25. package/dist/Checkbox/index.js +5 -12
  26. package/dist/Checkbox/index.js.map +1 -1
  27. package/dist/Checkbox/type.d.ts +3 -1
  28. package/dist/Collapse/index.js +40 -24
  29. package/dist/Collapse/index.js.map +1 -1
  30. package/dist/DataPreviewTable/components/Body/Cell.js +5 -4
  31. package/dist/DataPreviewTable/components/Body/Cell.js.map +1 -1
  32. package/dist/DataPreviewTable/components/Body/Error.js +1 -1
  33. package/dist/DataPreviewTable/components/Body/Error.js.map +1 -1
  34. package/dist/DataPreviewTable/components/Body/index.js +2 -1
  35. package/dist/DataPreviewTable/components/Body/index.js.map +1 -1
  36. package/dist/DataPreviewTable/components/DragBar/index.js +1 -1
  37. package/dist/DataPreviewTable/components/DragBar/index.js.map +1 -1
  38. package/dist/DataPreviewTable/components/Header/index.js +14 -12
  39. package/dist/DataPreviewTable/components/Header/index.js.map +1 -1
  40. package/dist/DataPreviewTable/index.js +5 -6
  41. package/dist/DataPreviewTable/index.js.map +1 -1
  42. package/dist/DatePicker/index.d.ts +4 -0
  43. package/dist/DatePicker/index.js +8 -6
  44. package/dist/DatePicker/index.js.map +1 -1
  45. package/dist/Drawer/index.d.ts +1 -0
  46. package/dist/Drawer/index.js +102 -47
  47. package/dist/Drawer/index.js.map +1 -1
  48. package/dist/Dropdown/index.d.ts +5 -0
  49. package/dist/Dropdown/index.js +155 -34
  50. package/dist/Dropdown/index.js.map +1 -1
  51. package/dist/Form/index.d.ts +45 -5
  52. package/dist/Form/index.js +59 -34
  53. package/dist/Form/index.js.map +1 -1
  54. package/dist/HighlightText/index.js +1 -1
  55. package/dist/HighlightText/index.js.map +1 -1
  56. package/dist/Input/components/Input/index.d.ts +5 -2
  57. package/dist/Input/components/Input/index.js +18 -6
  58. package/dist/Input/components/Input/index.js.map +1 -1
  59. package/dist/InputNumber/index.js +1 -0
  60. package/dist/InputNumber/index.js.map +1 -1
  61. package/dist/InputNumber/type.d.ts +2 -2
  62. package/dist/InputSearch/index.d.ts +3 -0
  63. package/dist/InputSearch/index.js +3 -2
  64. package/dist/InputSearch/index.js.map +1 -1
  65. package/dist/Layout/index.js +1 -1
  66. package/dist/Layout/index.js.map +1 -1
  67. package/dist/LogicTree/DisplayLogicTree.d.ts +1 -1
  68. package/dist/LogicTree/DisplayLogicTree.js.map +1 -1
  69. package/dist/LogicTree/components/DisplayLogicItem/index.d.ts +1 -1
  70. package/dist/LogicTree/components/DisplayLogicItem/index.js +1 -1
  71. package/dist/LogicTree/components/DisplayLogicItem/index.js.map +1 -1
  72. package/dist/LogicTree/components/LogicItem/index.js +2 -3
  73. package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
  74. package/dist/LogicTree/index.d.ts +1 -1
  75. package/dist/LogicTree/index.js +26 -10
  76. package/dist/LogicTree/index.js.map +1 -1
  77. package/dist/MemberPicker/components/NickLabel.js +1 -1
  78. package/dist/MemberPicker/components/NickLabel.js.map +1 -1
  79. package/dist/MemberPicker/components/Panel.js +13 -14
  80. package/dist/MemberPicker/components/Panel.js.map +1 -1
  81. package/dist/MemberPicker/index.js +10 -5
  82. package/dist/MemberPicker/index.js.map +1 -1
  83. package/dist/Menu/index.d.ts +4 -0
  84. package/dist/Menu/index.js +35 -13
  85. package/dist/Menu/index.js.map +1 -1
  86. package/dist/Modal/index.d.ts +5 -2
  87. package/dist/Modal/index.js +119 -66
  88. package/dist/Modal/index.js.map +1 -1
  89. package/dist/Popconfirm/index.js +6 -1
  90. package/dist/Popconfirm/index.js.map +1 -1
  91. package/dist/Popover/index.js +5 -3
  92. package/dist/Popover/index.js.map +1 -1
  93. package/dist/Progress/index.d.ts +0 -3
  94. package/dist/Progress/index.js +0 -3
  95. package/dist/Progress/index.js.map +1 -1
  96. package/dist/Radio/components/Radio/index.js +14 -25
  97. package/dist/Radio/components/Radio/index.js.map +1 -1
  98. package/dist/RenameInput/index.js +0 -1
  99. package/dist/RenameInput/index.js.map +1 -1
  100. package/dist/Select/BaseSelect.js +12 -7
  101. package/dist/Select/BaseSelect.js.map +1 -1
  102. package/dist/Select/Selector/MultipleSelector.js +10 -6
  103. package/dist/Select/Selector/MultipleSelector.js.map +1 -1
  104. package/dist/Select/Selector/index.d.ts +2 -0
  105. package/dist/Select/Selector/index.js +1 -1
  106. package/dist/Select/Selector/index.js.map +1 -1
  107. package/dist/Select/components/Suffix.js +1 -1
  108. package/dist/Select/components/Suffix.js.map +1 -1
  109. package/dist/Select/interface.d.ts +4 -0
  110. package/dist/Select/utils/getWidthStyle.js.map +1 -1
  111. package/dist/Steps/index.js +6 -6
  112. package/dist/Steps/index.js.map +1 -1
  113. package/dist/Switch/index.js +21 -7
  114. package/dist/Switch/index.js.map +1 -1
  115. package/dist/Table/components/Footer/index.js +1 -1
  116. package/dist/Table/components/Footer/index.js.map +1 -1
  117. package/dist/Table/hooks/useRowDnd.js +2 -8
  118. package/dist/Table/hooks/useRowDnd.js.map +1 -1
  119. package/dist/Table/hooks/useRowSelection.d.ts +1 -1
  120. package/dist/Table/hooks/useRowSelection.js +7 -9
  121. package/dist/Table/hooks/useRowSelection.js.map +1 -1
  122. package/dist/Table/index.js +1 -1
  123. package/dist/Table/index.js.map +1 -1
  124. package/dist/Tabs/index.js +37 -30
  125. package/dist/Tabs/index.js.map +1 -1
  126. package/dist/Tooltip/index.js +5 -3
  127. package/dist/Tooltip/index.js.map +1 -1
  128. package/dist/Tour/index.js +48 -38
  129. package/dist/Tour/index.js.map +1 -1
  130. package/dist/Tree/DirectoryTree.d.ts +2 -2
  131. package/dist/Tree/DirectoryTree.js.map +1 -1
  132. package/dist/Tree/Tree.d.ts +13 -2
  133. package/dist/Tree/Tree2.js +86 -8
  134. package/dist/Tree/Tree2.js.map +1 -1
  135. package/dist/Tree/utils/composeAllowDrop.d.ts +14 -0
  136. package/dist/Tree/utils/composeAllowDrop.js +20 -0
  137. package/dist/Tree/utils/composeAllowDrop.js.map +1 -0
  138. package/dist/Upload/index.d.ts +15 -2
  139. package/dist/Upload/index.js +4 -2
  140. package/dist/Upload/index.js.map +1 -1
  141. package/dist/_utils/floatingLayer.d.ts +15 -0
  142. package/dist/_utils/floatingLayer.js +30 -0
  143. package/dist/_utils/floatingLayer.js.map +1 -0
  144. package/dist/_utils/storybookArgTypes.d.ts +11 -0
  145. package/dist/_utils/storybookArgTypes.js +2 -0
  146. package/dist/aloudata-design.css +1 -1
  147. package/dist/index.d.ts +15 -6
  148. package/dist/index.js +8 -3
  149. package/dist/theme/createTheme.d.ts +2 -0
  150. package/dist/theme/createTheme.js +46 -0
  151. package/dist/theme/createTheme.js.map +1 -0
  152. package/dist/theme/defaultTheme.d.ts +2 -0
  153. package/dist/theme/defaultTheme.js +19 -0
  154. package/dist/theme/defaultTheme.js.map +1 -0
  155. package/dist/theme/index.d.ts +5 -0
  156. package/dist/theme/index.js +4 -0
  157. package/dist/theme/initAldTheme.d.ts +2 -0
  158. package/dist/theme/initAldTheme.js +26 -0
  159. package/dist/theme/initAldTheme.js.map +1 -0
  160. package/dist/theme/themeToCssVars.d.ts +2 -0
  161. package/dist/theme/themeToCssVars.js +144 -0
  162. package/dist/theme/themeToCssVars.js.map +1 -0
  163. package/dist/theme/tokenMap.d.ts +5 -0
  164. package/dist/theme/tokenMap.js +12 -0
  165. package/dist/theme/tokenMap.js.map +1 -0
  166. package/dist/theme/types.d.ts +20 -0
  167. package/dist/theme/types.js +2 -0
  168. package/dist/theme.d.ts +2 -0
  169. package/package.json +9 -4
  170. package/dist/_utils/SimpleOverflow.d.ts +0 -14
  171. package/dist/_utils/SimpleOverflow.js +0 -61
  172. package/dist/_utils/SimpleOverflow.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/InputNumber/index.tsx"],"sourcesContent":["import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport { IInputNumberProps } from './type';\n\nexport default function InputNumber(props: IInputNumberProps) {\n const {\n className,\n disabled: customDisabled,\n size: customSize,\n status,\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n onChange,\n onPressEnter,\n onBlur,\n onFocus,\n formatter,\n parser,\n prefix,\n addonBefore,\n addonAfter,\n placeholder,\n autoFocus,\n bordered = true,\n keyboard = true,\n readonly: readOnly,\n style,\n id,\n } = props;\n\n const contentSize = useContext(SizeContext);\n const size = customSize || contentSize || 'middle';\n const disabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? disabled;\n\n const isControlled = 'value' in props;\n const [innerValue, setInnerValue] = useState<number | null | undefined>(\n defaultValue ?? null,\n );\n const currentValue = isControlled ? controlledValue : innerValue;\n\n const [inputStr, setInputStr] = useState(\n currentValue !== null && currentValue !== undefined\n ? String(currentValue)\n : '',\n );\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (currentValue !== null && currentValue !== undefined) {\n setInputStr(String(currentValue));\n } else {\n setInputStr('');\n }\n }, [currentValue]);\n\n const clamp = useCallback(\n (val: number) => {\n let v = Math.max(min, Math.min(max, val));\n if (precision !== undefined) {\n v = Number(v.toFixed(precision));\n }\n return v;\n },\n [min, max, precision],\n );\n\n const updateValue = useCallback(\n (newVal: number | null) => {\n const clamped = newVal !== null ? clamp(newVal) : null;\n if (!isControlled) setInnerValue(clamped);\n onChange?.(clamped);\n },\n [clamp, isControlled, onChange],\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n setInputStr(raw);\n if (raw === '' || raw === '-') return;\n const parsed = parser ? parser(raw) : Number(raw);\n if (!isNaN(parsed)) {\n updateValue(parsed);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (inputStr === '' || inputStr === '-') {\n updateValue(null);\n setInputStr('');\n } else {\n const parsed = parser ? parser(inputStr) : Number(inputStr);\n if (!isNaN(parsed)) {\n const clamped = clamp(parsed);\n updateValue(clamped);\n setInputStr(String(clamped));\n }\n }\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onPressEnter?.(e);\n }\n if (!keyboard) return;\n const numStep = typeof step === 'string' ? Number(step) : step;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n updateValue(clamp((currentValue ?? 0) + numStep));\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n updateValue(clamp((currentValue ?? 0) - numStep));\n }\n };\n\n const displayValue = formatter\n ? formatter(currentValue ?? undefined, {\n userTyping: document.activeElement === inputRef.current,\n input: inputStr,\n })\n : inputStr;\n\n const hasAddon = addonBefore || addonAfter;\n\n const sizeClasses = cn(\n size === 'large' && 'ald-input-number-large tw-h-9 tw-text-base',\n size === 'small' && 'ald-input-number-small tw-h-7 tw-text-xs',\n size !== 'large' &&\n size !== 'small' &&\n 'ald-input-number-middle tw-h-8 tw-text-sm',\n );\n\n const radiusClasses = cn(\n size === 'large' && 'tw-rounded-[8px]',\n size === 'small' && 'tw-rounded-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-[6px]',\n );\n\n const inputBox = (\n <div\n className={cn(\n 'ald-input-number tw-inline-flex tw-min-w-0 tw-items-center tw-overflow-hidden',\n bordered &&\n 'tw-border tw-border-solid tw-border-[var(--interaction-border-neutral-normal)]',\n mergedDisabled\n ? 'ald-input-number-disabled tw-cursor-not-allowed tw-bg-[var(--global-cool-gray-alpha-50)] tw-text-[var(--content-secondary)]'\n : 'tw-bg-[var(--interaction-background-form-field)] tw-text-[var(--content-primary)] hover:tw-border-[var(--interaction-border-hover)]',\n !hasAddon && sizeClasses,\n hasAddon\n ? 'tw-h-auto tw-flex-1 tw-self-stretch tw-rounded-none'\n : radiusClasses,\n status === 'error' && 'tw-border-[var(--border-negative-strong)]',\n status === 'warning' && 'tw-border-[var(--border-warning-subtle)]',\n 'focus-within:tw-border-[var(--interaction-border-hover)] focus-within:tw-outline focus-within:tw-outline-1 focus-within:tw-outline-[var(--global-blue-500)]',\n !hasAddon && className,\n )}\n style={!hasAddon ? style : undefined}\n >\n {prefix && (\n <span className=\"tw-px-2 tw-text-[var(--content-secondary)]\">\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n inputMode=\"numeric\"\n className={cn(\n 'tw-min-w-0 tw-flex-1 tw-border-0 tw-bg-transparent tw-px-[7px] tw-text-inherit tw-outline-none',\n mergedDisabled &&\n 'tw-cursor-not-allowed tw-text-[var(--content-secondary)]',\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n disabled={mergedDisabled}\n readOnly={readOnly}\n autoFocus={autoFocus}\n placeholder={placeholder}\n />\n </div>\n );\n\n if (!hasAddon) return inputBox;\n\n return (\n <div\n className={cn(\n 'ald-input-number-group tw-inline-flex tw-w-full tw-items-stretch',\n sizeClasses,\n radiusClasses,\n mergedDisabled && 'ald-input-number-disabled',\n className,\n )}\n style={style}\n >\n {addonBefore && (\n <span\n className={cn(\n 'ald-input-number-addon tw-flex tw-shrink-0 tw-items-center tw-border tw-border-r-0 tw-border-solid tw-border-[var(--interaction-border-neutral-normal)] tw-bg-[var(--background-neutral-subtle)] tw-px-3 tw-text-[var(--content-secondary)]',\n size === 'large' && 'tw-rounded-l-[8px]',\n size === 'small' && 'tw-rounded-l-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-l-[6px]',\n )}\n >\n {addonBefore}\n </span>\n )}\n {inputBox}\n {addonAfter && (\n <span\n className={cn(\n 'ald-input-number-addon tw-flex tw-shrink-0 tw-items-center tw-border tw-border-l-0 tw-border-solid tw-border-[var(--interaction-border-neutral-normal)] tw-bg-[var(--background-neutral-subtle)] tw-px-3 tw-text-[var(--content-secondary)]',\n size === 'large' && 'tw-rounded-r-[8px]',\n size === 'small' && 'tw-rounded-r-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-r-[6px]',\n )}\n >\n {addonAfter}\n </span>\n )}\n </div>\n );\n}\n\nexport type { IInputNumberProps };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/InputNumber/index.tsx"],"sourcesContent":["import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport { IInputNumberProps } from './type';\n\nexport default function InputNumber(props: IInputNumberProps) {\n const {\n className,\n disabled: customDisabled,\n size: customSize,\n status,\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n onChange,\n onPressEnter,\n onBlur,\n onFocus,\n formatter,\n parser,\n prefix,\n addonBefore,\n addonAfter,\n placeholder,\n autoFocus,\n bordered = true,\n keyboard = true,\n readonly: readOnly,\n style,\n id,\n } = props;\n\n const contentSize = useContext(SizeContext);\n const size = customSize || contentSize || 'middle';\n const disabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? disabled;\n\n const isControlled = 'value' in props;\n const [innerValue, setInnerValue] = useState<number | null | undefined>(\n defaultValue ?? null,\n );\n const currentValue = isControlled ? controlledValue : innerValue;\n\n const [inputStr, setInputStr] = useState(\n currentValue !== null && currentValue !== undefined\n ? String(currentValue)\n : '',\n );\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (currentValue !== null && currentValue !== undefined) {\n setInputStr(String(currentValue));\n } else {\n setInputStr('');\n }\n }, [currentValue]);\n\n const clamp = useCallback(\n (val: number) => {\n let v = Math.max(min, Math.min(max, val));\n if (precision !== undefined) {\n v = Number(v.toFixed(precision));\n }\n return v;\n },\n [min, max, precision],\n );\n\n const updateValue = useCallback(\n (newVal: number | null) => {\n const clamped = newVal !== null ? clamp(newVal) : null;\n if (!isControlled) setInnerValue(clamped);\n onChange?.(clamped);\n },\n [clamp, isControlled, onChange],\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n setInputStr(raw);\n if (raw === '' || raw === '-') return;\n const parsed = parser ? parser(raw) : Number(raw);\n if (!isNaN(parsed)) {\n updateValue(parsed);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (inputStr === '' || inputStr === '-') {\n updateValue(null);\n setInputStr('');\n } else {\n const parsed = parser ? parser(inputStr) : Number(inputStr);\n if (!isNaN(parsed)) {\n const clamped = clamp(parsed);\n updateValue(clamped);\n setInputStr(String(clamped));\n }\n }\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onPressEnter?.(e);\n }\n if (!keyboard) return;\n const numStep = typeof step === 'string' ? Number(step) : step;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n updateValue(clamp((currentValue ?? 0) + numStep));\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n updateValue(clamp((currentValue ?? 0) - numStep));\n }\n };\n\n const displayValue = formatter\n ? formatter(currentValue ?? undefined, {\n userTyping: document.activeElement === inputRef.current,\n input: inputStr,\n })\n : inputStr;\n\n const hasAddon = addonBefore || addonAfter;\n\n const sizeClasses = cn(\n size === 'large' && 'ald-input-number-large tw-h-9 tw-text-base',\n size === 'small' && 'ald-input-number-small tw-h-7 tw-text-xs',\n size !== 'large' &&\n size !== 'small' &&\n 'ald-input-number-middle tw-h-8 tw-text-sm',\n );\n\n const radiusClasses = cn(\n size === 'large' && 'tw-rounded-[8px]',\n size === 'small' && 'tw-rounded-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-[6px]',\n );\n\n const inputBox = (\n <div\n className={cn(\n 'ald-input-number tw-inline-flex tw-min-w-0 tw-items-center tw-overflow-hidden',\n bordered &&\n 'tw-border tw-border-solid tw-border-[var(--interaction-border-neutral-normal)]',\n mergedDisabled\n ? 'ald-input-number-disabled tw-cursor-not-allowed tw-bg-[var(--global-cool-gray-alpha-50)] tw-text-[var(--content-secondary)]'\n : 'tw-bg-[var(--interaction-background-form-field)] tw-text-[var(--content-primary)] hover:tw-border-[var(--interaction-border-hover)]',\n !hasAddon && sizeClasses,\n hasAddon\n ? 'tw-h-auto tw-flex-1 tw-self-stretch tw-rounded-none'\n : radiusClasses,\n status === 'error' && 'tw-border-[var(--border-negative-strong)]',\n status === 'warning' && 'tw-border-[var(--border-warning-subtle)]',\n 'focus-within:tw-border-[var(--interaction-border-hover)] focus-within:tw-outline focus-within:tw-outline-1 focus-within:tw-outline-[var(--global-blue-500)]',\n !hasAddon && className,\n )}\n style={!hasAddon ? style : undefined}\n >\n {prefix && (\n <span className=\"tw-px-2 tw-text-[var(--content-secondary)]\">\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n id={id}\n type=\"text\"\n inputMode=\"numeric\"\n // size=1 让 <input> 的 intrinsic 宽度坍缩到 1 个字符,\n // 在 flex 父容器中按 width / flex-1 受控,避免默认 size=20 把 inline-flex 外层撑出 ~150px 内容宽度。\n size={1}\n className={cn(\n 'tw-min-w-0 tw-flex-1 tw-border-0 tw-bg-transparent tw-px-[7px] tw-text-inherit tw-outline-none',\n mergedDisabled &&\n 'tw-cursor-not-allowed tw-text-[var(--content-secondary)]',\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={onFocus}\n onKeyDown={handleKeyDown}\n disabled={mergedDisabled}\n readOnly={readOnly}\n autoFocus={autoFocus}\n placeholder={placeholder}\n />\n </div>\n );\n\n if (!hasAddon) return inputBox;\n\n return (\n <div\n className={cn(\n 'ald-input-number-group tw-inline-flex tw-w-full tw-items-stretch',\n sizeClasses,\n radiusClasses,\n mergedDisabled && 'ald-input-number-disabled',\n className,\n )}\n style={style}\n >\n {addonBefore && (\n <span\n className={cn(\n 'ald-input-number-addon tw-flex tw-shrink-0 tw-items-center tw-border tw-border-r-0 tw-border-solid tw-border-[var(--interaction-border-neutral-normal)] tw-bg-[var(--background-neutral-subtle)] tw-px-3 tw-text-[var(--content-secondary)]',\n size === 'large' && 'tw-rounded-l-[8px]',\n size === 'small' && 'tw-rounded-l-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-l-[6px]',\n )}\n >\n {addonBefore}\n </span>\n )}\n {inputBox}\n {addonAfter && (\n <span\n className={cn(\n 'ald-input-number-addon tw-flex tw-shrink-0 tw-items-center tw-border tw-border-l-0 tw-border-solid tw-border-[var(--interaction-border-neutral-normal)] tw-bg-[var(--background-neutral-subtle)] tw-px-3 tw-text-[var(--content-secondary)]',\n size === 'large' && 'tw-rounded-r-[8px]',\n size === 'small' && 'tw-rounded-r-[4px]',\n size !== 'large' && size !== 'small' && 'tw-rounded-r-[6px]',\n )}\n >\n {addonAfter}\n </span>\n )}\n </div>\n );\n}\n\nexport type { IInputNumberProps };\n"],"mappings":"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"}
@@ -38,6 +38,6 @@ export interface IInputNumberProps {
38
38
  placeholder?: string;
39
39
  id?: string;
40
40
  width?: number | string;
41
- onBlur?: (e: React.FocusEvent) => void;
42
- onFocus?: (e: React.FocusEvent) => void;
41
+ onBlur?: React.FocusEventHandler<HTMLInputElement>;
42
+ onFocus?: React.FocusEventHandler<HTMLInputElement>;
43
43
  }
@@ -11,6 +11,9 @@ interface IProps {
11
11
  placeholder?: string;
12
12
  size?: 'small' | 'middle' | 'large';
13
13
  initWidth?: number;
14
+ /** 展开态(hover / focus / 有值)宽度,默认 200px。
15
+ * 收起态宽度仍由 initWidth 控制;inputMode 始终 100%,不受本参数影响。 */
16
+ expandedWidth?: number;
14
17
  defaultValue?: string;
15
18
  value?: string;
16
19
  inputMode?: boolean;
@@ -8,6 +8,7 @@ import { jsx } from "react/jsx-runtime";
8
8
  import _ from "lodash";
9
9
  import { useDebounceFn } from "ahooks";
10
10
  //#region src/InputSearch/index.tsx
11
+ var DEFAULT_EXPANDED_WIDTH = 200;
11
12
  var DEFAULT_SMALL_WIDTH = 68;
12
13
  var DEFAULT_WIDTH = 78;
13
14
  var DEFAULT_EN_SMALL_WIDTH = 88;
@@ -83,7 +84,8 @@ function InputSearch(props) {
83
84
  }),
84
85
  style: {
85
86
  ...style,
86
- "--init-width": (props.initWidth || defaultWidth) + "px"
87
+ "--init-width": (props.initWidth || defaultWidth) + "px",
88
+ "--expanded-width": (props.expandedWidth || DEFAULT_EXPANDED_WIDTH) + "px"
87
89
  },
88
90
  children: /* @__PURE__ */ jsx(Input, {
89
91
  className: cn({
@@ -92,7 +94,6 @@ function InputSearch(props) {
92
94
  ["inputMode"]: inputMode
93
95
  }),
94
96
  size,
95
- status: "success",
96
97
  onChange: onChangeValue,
97
98
  onPressEnter,
98
99
  onCompositionStart: handleCompositionStart,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/InputSearch/index.tsx"],"sourcesContent":["import { useDebounceFn } from 'ahooks';\nimport { cn } from '../lib/utils';\nimport _ from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { SearchLine } from '../Icon';\nimport Input from '../Input';\nimport { ELangType, LocaleContext, getTranslator } from '../locale/default';\nimport './input-search.css';\n\ninterface ICustomCSSProperties extends React.CSSProperties {\n '--init-width'?: string;\n}\n\nconst DEFAULT_SMALL_WIDTH = 68;\nconst DEFAULT_WIDTH = 78;\nconst DEFAULT_EN_SMALL_WIDTH = 88;\nconst DEFAULT_EN_WIDTH = 98;\nconst DEFAULT_LARGE_WIDTH = 88;\nconst DEFAULT_EN_LARGE_WIDTH = 108;\n\nexport default function InputSearch(props: IProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n onSearch,\n onChange,\n className,\n debounce = true,\n placeholder,\n size = 'small',\n defaultValue,\n value,\n inputMode = false,\n style,\n onBlur,\n disabled,\n } = props;\n\n const defaultWidth = useMemo(() => {\n if (size === 'small') {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_SMALL_WIDTH;\n }\n return DEFAULT_SMALL_WIDTH;\n } else if (size === 'middle') {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_WIDTH;\n }\n return DEFAULT_WIDTH;\n } else {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_LARGE_WIDTH;\n }\n return DEFAULT_LARGE_WIDTH;\n }\n }, [locale, size]);\n\n // 判断是否为受控模式\n const isControlled = 'value' in props;\n const [searchValue, setSearchValue] = useState(defaultValue || '');\n\n // 获取当前值:受控模式使用 value,非受控模式使用内部状态\n const currentValue = isControlled ? value ?? '' : searchValue;\n\n const isComposing = useRef(false);\n\n const onPressEnter = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isComposing.current) {\n onSearch(_.trim((e.target as HTMLInputElement).value));\n }\n },\n [onSearch],\n );\n\n const DEFAULT_DEBOUNCE_TIME = 500;\n const { run: debounceSearch } = useDebounceFn<(val: string) => void>(\n (val) => {\n if (!isComposing.current) {\n onSearch(val);\n }\n },\n {\n wait: DEFAULT_DEBOUNCE_TIME,\n },\n );\n\n const onChangeValue = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n // 非受控模式才更新内部状态\n if (!isControlled) {\n setSearchValue(newValue);\n } else {\n onChange?.(newValue);\n return;\n }\n\n if (!isComposing.current) {\n // 受控的时候debounce不生效\n if (debounce && !isControlled) {\n debounceSearch(newValue);\n } else {\n onSearch(newValue);\n }\n }\n },\n [debounce, debounceSearch, onSearch, isControlled, onChange],\n );\n\n const handleCompositionStart = useCallback(() => {\n isComposing.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent<HTMLInputElement>) => {\n if (isControlled) {\n return;\n }\n isComposing.current = false;\n // 在输入法结束后触发一次搜索\n const value = (e.target as HTMLInputElement).value;\n if (debounce) {\n debounceSearch(value);\n } else {\n onSearch(value);\n }\n },\n [debounce, debounceSearch, isControlled, onSearch],\n );\n\n const iconSize = useMemo(() => {\n if (size === 'middle' || size === 'large') {\n return 20;\n }\n return 16;\n }, [size]);\n\n return (\n <div\n className={cn('ald-input-search', className, {\n ['input-search-size-small']: size === 'small',\n ['input-search-size-middle']: size === 'middle',\n ['input-search-size-large']: size === 'large',\n })}\n style={\n {\n ...style,\n '--init-width': (props.initWidth || defaultWidth) + 'px',\n } as ICustomCSSProperties\n }\n >\n <Input\n className={cn({\n ['input-search-has-value']: currentValue.length !== 0 || inputMode,\n ['input-search-has-content']: currentValue.length !== 0,\n ['inputMode']: inputMode,\n })}\n size={size}\n // @ts-ignore\n status={'success'}\n onChange={onChangeValue}\n onPressEnter={onPressEnter}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n prefix={<SearchLine size={iconSize} />}\n placeholder={placeholder || t.InputSearch.search}\n allowClear\n disabled={disabled}\n {...(isControlled\n ? { value: currentValue }\n : { defaultValue: defaultValue })}\n onBlur={(e) => {\n if (onBlur) {\n onBlur(currentValue, e);\n }\n }}\n />\n </div>\n );\n}\n\ninterface IProps {\n /** 搜索回调,在输入完成时触发(回车、输入法结束、非输入法输入时) */\n onSearch: (value: string) => void;\n /** 值变化回调(受控模式时推荐使用,每次输入都触发,包括输入法期间) */\n onChange?: (value: string) => void;\n onBlur?: (value: string, e: React.FocusEvent<HTMLInputElement>) => void;\n className?: string;\n // 是否开启防抖\n debounce?: boolean;\n placeholder?: string;\n size?: 'small' | 'middle' | 'large';\n initWidth?: number;\n defaultValue?: string;\n // 受控模式的值\n value?: string;\n inputMode?: boolean;\n style?: React.CSSProperties;\n disabled?: boolean;\n}\n"],"mappings":";;;;;;;;;;AAmBA,IAAM,sBAAsB;AAC5B,IAAM,gBAAgB;AACtB,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAE/B,SAAwB,YAAY,OAAe;CACjD,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UACA,UACA,WACA,WAAW,MACX,aACA,OAAO,SACP,cACA,OACA,YAAY,OACZ,OACA,QACA,aACE;CAEJ,MAAM,eAAe,cAAc;AACjC,MAAI,SAAS,SAAS;AACpB,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;aACE,SAAS,UAAU;AAC5B,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;SACF;AACL,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;;IAER,CAAC,QAAQ,KAAK,CAAC;CAGlB,MAAM,eAAe,WAAW;CAChC,MAAM,CAAC,aAAa,kBAAkB,SAAS,gBAAgB,GAAG;CAGlE,MAAM,eAAe,eAAe,SAAS,KAAK;CAElD,MAAM,cAAc,OAAO,MAAM;CAEjC,MAAM,eAAe,aAClB,MAA6C;AAC5C,MAAI,CAAC,YAAY,QACf,UAAS,EAAE,KAAM,EAAE,OAA4B,MAAM,CAAC;IAG1D,CAAC,SAAS,CACX;CAGD,MAAM,EAAE,KAAK,mBAAmB,eAC7B,QAAQ;AACP,MAAI,CAAC,YAAY,QACf,UAAS,IAAI;IAGjB,EACE,MAR0B,KAS3B,CACF;CAED,MAAM,gBAAgB,aACnB,MAA2C;EAC1C,MAAM,WAAW,EAAE,OAAO;AAG1B,MAAI,CAAC,aACH,gBAAe,SAAS;OACnB;AACL,cAAW,SAAS;AACpB;;AAGF,MAAI,CAAC,YAAY,QAEf,KAAI,YAAY,CAAC,aACf,gBAAe,SAAS;MAExB,UAAS,SAAS;IAIxB;EAAC;EAAU;EAAgB;EAAU;EAAc;EAAS,CAC7D;CAED,MAAM,yBAAyB,kBAAkB;AAC/C,cAAY,UAAU;IACrB,EAAE,CAAC;CAEN,MAAM,uBAAuB,aAC1B,MAAgD;AAC/C,MAAI,aACF;AAEF,cAAY,UAAU;EAEtB,MAAM,QAAS,EAAE,OAA4B;AAC7C,MAAI,SACF,gBAAe,MAAM;MAErB,UAAS,MAAM;IAGnB;EAAC;EAAU;EAAgB;EAAc;EAAS,CACnD;CAED,MAAM,WAAW,cAAc;AAC7B,MAAI,SAAS,YAAY,SAAS,QAChC,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC;AAEV,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,oBAAoB,WAAW;IAC1C,4BAA4B,SAAS;IACrC,6BAA6B,SAAS;IACtC,4BAA4B,SAAS;GACvC,CAAC;EACF,OACE;GACE,GAAG;GACH,iBAAiB,MAAM,aAAa,gBAAgB;GACrD;YAGH,oBAAC,OAAD;GACE,WAAW,GAAG;KACX,2BAA2B,aAAa,WAAW,KAAK;KACxD,6BAA6B,aAAa,WAAW;KACrD,cAAc;IAChB,CAAC;GACI;GAEN,QAAQ;GACR,UAAU;GACI;GACd,oBAAoB;GACpB,kBAAkB;GAClB,QAAQ,oBAAC,MAAD,EAAY,MAAM,UAAY,CAAA;GACtC,aAAa,eAAe,EAAE,YAAY;GAC1C,YAAA;GACU;GACV,GAAK,eACD,EAAE,OAAO,cAAc,GACvB,EAAgB,cAAc;GAClC,SAAS,MAAM;AACb,QAAI,OACF,QAAO,cAAc,EAAE;;GAG3B,CAAA;EACE,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/InputSearch/index.tsx"],"sourcesContent":["import { useDebounceFn } from 'ahooks';\nimport { cn } from '../lib/utils';\nimport _ from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { SearchLine } from '../Icon';\nimport Input from '../Input';\nimport { ELangType, LocaleContext, getTranslator } from '../locale/default';\nimport './input-search.css';\n\ninterface ICustomCSSProperties extends React.CSSProperties {\n '--init-width'?: string;\n '--expanded-width'?: string;\n}\n\nconst DEFAULT_EXPANDED_WIDTH = 200;\n\nconst DEFAULT_SMALL_WIDTH = 68;\nconst DEFAULT_WIDTH = 78;\nconst DEFAULT_EN_SMALL_WIDTH = 88;\nconst DEFAULT_EN_WIDTH = 98;\nconst DEFAULT_LARGE_WIDTH = 88;\nconst DEFAULT_EN_LARGE_WIDTH = 108;\n\nexport default function InputSearch(props: IProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n onSearch,\n onChange,\n className,\n debounce = true,\n placeholder,\n size = 'small',\n defaultValue,\n value,\n inputMode = false,\n style,\n onBlur,\n disabled,\n } = props;\n\n const defaultWidth = useMemo(() => {\n if (size === 'small') {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_SMALL_WIDTH;\n }\n return DEFAULT_SMALL_WIDTH;\n } else if (size === 'middle') {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_WIDTH;\n }\n return DEFAULT_WIDTH;\n } else {\n if (locale === ELangType.EN) {\n return DEFAULT_EN_LARGE_WIDTH;\n }\n return DEFAULT_LARGE_WIDTH;\n }\n }, [locale, size]);\n\n // 判断是否为受控模式\n const isControlled = 'value' in props;\n const [searchValue, setSearchValue] = useState(defaultValue || '');\n\n // 获取当前值:受控模式使用 value,非受控模式使用内部状态\n const currentValue = isControlled ? value ?? '' : searchValue;\n\n const isComposing = useRef(false);\n\n const onPressEnter = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isComposing.current) {\n onSearch(_.trim((e.target as HTMLInputElement).value));\n }\n },\n [onSearch],\n );\n\n const DEFAULT_DEBOUNCE_TIME = 500;\n const { run: debounceSearch } = useDebounceFn<(val: string) => void>(\n (val) => {\n if (!isComposing.current) {\n onSearch(val);\n }\n },\n {\n wait: DEFAULT_DEBOUNCE_TIME,\n },\n );\n\n const onChangeValue = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n // 非受控模式才更新内部状态\n if (!isControlled) {\n setSearchValue(newValue);\n } else {\n onChange?.(newValue);\n return;\n }\n\n if (!isComposing.current) {\n // 受控的时候debounce不生效\n if (debounce && !isControlled) {\n debounceSearch(newValue);\n } else {\n onSearch(newValue);\n }\n }\n },\n [debounce, debounceSearch, onSearch, isControlled, onChange],\n );\n\n const handleCompositionStart = useCallback(() => {\n isComposing.current = true;\n }, []);\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent<HTMLInputElement>) => {\n if (isControlled) {\n return;\n }\n isComposing.current = false;\n // 在输入法结束后触发一次搜索\n const value = (e.target as HTMLInputElement).value;\n if (debounce) {\n debounceSearch(value);\n } else {\n onSearch(value);\n }\n },\n [debounce, debounceSearch, isControlled, onSearch],\n );\n\n const iconSize = useMemo(() => {\n if (size === 'middle' || size === 'large') {\n return 20;\n }\n return 16;\n }, [size]);\n\n return (\n <div\n className={cn('ald-input-search', className, {\n ['input-search-size-small']: size === 'small',\n ['input-search-size-middle']: size === 'middle',\n ['input-search-size-large']: size === 'large',\n })}\n style={\n {\n ...style,\n '--init-width': (props.initWidth || defaultWidth) + 'px',\n '--expanded-width':\n (props.expandedWidth || DEFAULT_EXPANDED_WIDTH) + 'px',\n } as ICustomCSSProperties\n }\n >\n <Input\n className={cn({\n ['input-search-has-value']: currentValue.length !== 0 || inputMode,\n ['input-search-has-content']: currentValue.length !== 0,\n ['inputMode']: inputMode,\n })}\n size={size}\n onChange={onChangeValue}\n onPressEnter={onPressEnter}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n prefix={<SearchLine size={iconSize} />}\n placeholder={placeholder || t.InputSearch.search}\n allowClear\n disabled={disabled}\n {...(isControlled\n ? { value: currentValue }\n : { defaultValue: defaultValue })}\n onBlur={(e) => {\n if (onBlur) {\n onBlur(currentValue, e);\n }\n }}\n />\n </div>\n );\n}\n\ninterface IProps {\n /** 搜索回调,在输入完成时触发(回车、输入法结束、非输入法输入时) */\n onSearch: (value: string) => void;\n /** 值变化回调(受控模式时推荐使用,每次输入都触发,包括输入法期间) */\n onChange?: (value: string) => void;\n onBlur?: (value: string, e: React.FocusEvent<HTMLInputElement>) => void;\n className?: string;\n // 是否开启防抖\n debounce?: boolean;\n placeholder?: string;\n size?: 'small' | 'middle' | 'large';\n initWidth?: number;\n /** 展开态(hover / focus / 有值)宽度,默认 200px。\n * 收起态宽度仍由 initWidth 控制;inputMode 始终 100%,不受本参数影响。 */\n expandedWidth?: number;\n defaultValue?: string;\n // 受控模式的值\n value?: string;\n inputMode?: boolean;\n style?: React.CSSProperties;\n disabled?: boolean;\n}\n"],"mappings":";;;;;;;;;;AAoBA,IAAM,yBAAyB;AAE/B,IAAM,sBAAsB;AAC5B,IAAM,gBAAgB;AACtB,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAE/B,SAAwB,YAAY,OAAe;CACjD,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UACA,UACA,WACA,WAAW,MACX,aACA,OAAO,SACP,cACA,OACA,YAAY,OACZ,OACA,QACA,aACE;CAEJ,MAAM,eAAe,cAAc;AACjC,MAAI,SAAS,SAAS;AACpB,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;aACE,SAAS,UAAU;AAC5B,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;SACF;AACL,OAAI,WAAW,UAAU,GACvB,QAAO;AAET,UAAO;;IAER,CAAC,QAAQ,KAAK,CAAC;CAGlB,MAAM,eAAe,WAAW;CAChC,MAAM,CAAC,aAAa,kBAAkB,SAAS,gBAAgB,GAAG;CAGlE,MAAM,eAAe,eAAe,SAAS,KAAK;CAElD,MAAM,cAAc,OAAO,MAAM;CAEjC,MAAM,eAAe,aAClB,MAA6C;AAC5C,MAAI,CAAC,YAAY,QACf,UAAS,EAAE,KAAM,EAAE,OAA4B,MAAM,CAAC;IAG1D,CAAC,SAAS,CACX;CAGD,MAAM,EAAE,KAAK,mBAAmB,eAC7B,QAAQ;AACP,MAAI,CAAC,YAAY,QACf,UAAS,IAAI;IAGjB,EACE,MAR0B,KAS3B,CACF;CAED,MAAM,gBAAgB,aACnB,MAA2C;EAC1C,MAAM,WAAW,EAAE,OAAO;AAG1B,MAAI,CAAC,aACH,gBAAe,SAAS;OACnB;AACL,cAAW,SAAS;AACpB;;AAGF,MAAI,CAAC,YAAY,QAEf,KAAI,YAAY,CAAC,aACf,gBAAe,SAAS;MAExB,UAAS,SAAS;IAIxB;EAAC;EAAU;EAAgB;EAAU;EAAc;EAAS,CAC7D;CAED,MAAM,yBAAyB,kBAAkB;AAC/C,cAAY,UAAU;IACrB,EAAE,CAAC;CAEN,MAAM,uBAAuB,aAC1B,MAAgD;AAC/C,MAAI,aACF;AAEF,cAAY,UAAU;EAEtB,MAAM,QAAS,EAAE,OAA4B;AAC7C,MAAI,SACF,gBAAe,MAAM;MAErB,UAAS,MAAM;IAGnB;EAAC;EAAU;EAAgB;EAAc;EAAS,CACnD;CAED,MAAM,WAAW,cAAc;AAC7B,MAAI,SAAS,YAAY,SAAS,QAChC,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC;AAEV,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,oBAAoB,WAAW;IAC1C,4BAA4B,SAAS;IACrC,6BAA6B,SAAS;IACtC,4BAA4B,SAAS;GACvC,CAAC;EACF,OACE;GACE,GAAG;GACH,iBAAiB,MAAM,aAAa,gBAAgB;GACpD,qBACG,MAAM,iBAAiB,0BAA0B;GACrD;YAGH,oBAAC,OAAD;GACE,WAAW,GAAG;KACX,2BAA2B,aAAa,WAAW,KAAK;KACxD,6BAA6B,aAAa,WAAW;KACrD,cAAc;IAChB,CAAC;GACI;GACN,UAAU;GACI;GACd,oBAAoB;GACpB,kBAAkB;GAClB,QAAQ,oBAAC,MAAD,EAAY,MAAM,UAAY,CAAA;GACtC,aAAa,eAAe,EAAE,YAAY;GAC1C,YAAA;GACU;GACV,GAAK,eACD,EAAE,OAAO,cAAc,GACvB,EAAgB,cAAc;GAClC,SAAS,MAAM;AACb,QAAI,OACF,QAAO,cAAc,EAAE;;GAG3B,CAAA;EACE,CAAA"}
@@ -48,7 +48,7 @@ function Sider({ className, style, children, width = 200, collapsed: controlledC
48
48
  };
49
49
  const showTrigger = collapsible && trigger !== null;
50
50
  return /* @__PURE__ */ jsxs("aside", {
51
- className: cn("ald-layout-sider tw-relative tw-flex tw-flex-none tw-flex-col tw-transition-all", theme === "dark" && "tw-bg-[#001529] tw-text-white", className),
51
+ className: cn("ald-layout-sider tw-relative tw-flex tw-flex-none tw-flex-col tw-transition-all", theme === "dark" && "tw-bg-[var(--background-inverted)] tw-text-[var(--content-inverted-primary)]", className),
52
52
  style: {
53
53
  width: isCollapsed ? collapsedWidth : width,
54
54
  ...style
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Layout/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface LayoutProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n hasSider?: boolean;\n}\n\nexport interface SiderProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n width?: number | string;\n collapsed?: boolean;\n collapsedWidth?: number | string;\n collapsible?: boolean;\n trigger?: React.ReactNode;\n onCollapse?: (collapsed: boolean) => void;\n breakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n onBreakpoint?: (broken: boolean) => void;\n theme?: 'light' | 'dark';\n}\n\ninterface LayoutComponent extends React.FC<LayoutProps> {\n Header: React.FC<LayoutProps>;\n Footer: React.FC<LayoutProps>;\n Content: React.FC<LayoutProps>;\n Sider: React.FC<SiderProps>;\n}\n\nconst Layout: LayoutComponent = ({ className, style, children, hasSider }) => (\n <section\n className={cn(\n 'ald-layout tw-flex tw-flex-auto',\n hasSider ? 'tw-flex-row' : 'tw-flex-col',\n className,\n )}\n style={style}\n >\n {children}\n </section>\n);\n\nLayout.Header = ({ className, style, children }) => (\n <header\n className={cn('ald-layout-header tw-flex-none', className)}\n style={style}\n >\n {children}\n </header>\n);\n\nLayout.Footer = ({ className, style, children }) => (\n <footer\n className={cn('ald-layout-footer tw-flex-none', className)}\n style={style}\n >\n {children}\n </footer>\n);\n\nLayout.Content = ({ className, style, children }) => (\n <main\n className={cn('ald-layout-content tw-flex-auto', className)}\n style={style}\n >\n {children}\n </main>\n);\n\nconst breakpointWidths: Record<string, number> = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction Sider({\n className,\n style,\n children,\n width = 200,\n collapsed: controlledCollapsed,\n collapsedWidth = 80,\n collapsible = false,\n trigger,\n onCollapse,\n breakpoint,\n onBreakpoint,\n theme,\n}: SiderProps) {\n const [internalCollapsed, setInternalCollapsed] = React.useState(false);\n\n React.useEffect(() => {\n if (!breakpoint) return;\n const mq = window.matchMedia(\n `(max-width: ${breakpointWidths[breakpoint]}px)`,\n );\n const handler = (e: MediaQueryListEvent) => onBreakpoint?.(e.matches);\n mq.addEventListener('change', handler);\n onBreakpoint?.(mq.matches);\n return () => mq.removeEventListener('change', handler);\n }, [breakpoint, onBreakpoint]);\n const isCollapsed =\n controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n\n const handleToggle = () => {\n const next = !isCollapsed;\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(next);\n }\n onCollapse?.(next);\n };\n\n const showTrigger = collapsible && trigger !== null;\n\n return (\n <aside\n className={cn(\n 'ald-layout-sider tw-relative tw-flex tw-flex-none tw-flex-col tw-transition-all',\n theme === 'dark' && 'tw-bg-[#001529] tw-text-white',\n className,\n )}\n style={{\n width: isCollapsed ? collapsedWidth : width,\n ...style,\n }}\n >\n <div className=\"tw-flex-1 tw-overflow-hidden\">{children}</div>\n {showTrigger && (\n <div\n className=\"ald-layout-sider-trigger tw-flex tw-h-12 tw-cursor-pointer tw-items-center tw-justify-center tw-border-t tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-neutral-subtle)] tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]\"\n onClick={handleToggle}\n >\n {trigger !== undefined ? (\n trigger\n ) : (\n <span\n className=\"tw-inline-block tw-text-xs tw-transition-transform\"\n style={{\n transform: isCollapsed ? 'rotate(0deg)' : 'rotate(180deg)',\n }}\n >\n {'\\u25C0'}\n </span>\n )}\n </div>\n )}\n </aside>\n );\n}\n\nLayout.Sider = Sider;\n\nexport default Layout;\n"],"mappings":";;;;AAgCA,IAAM,UAA2B,EAAE,WAAW,OAAO,UAAU,eAC7D,oBAAC,WAAD;CACE,WAAW,GACT,mCACA,WAAW,gBAAgB,eAC3B,UACD;CACM;CAEN;CACO,CAAA;AAGZ,OAAO,UAAU,EAAE,WAAW,OAAO,eACnC,oBAAC,UAAD;CACE,WAAW,GAAG,kCAAkC,UAAU;CACnD;CAEN;CACM,CAAA;AAGX,OAAO,UAAU,EAAE,WAAW,OAAO,eACnC,oBAAC,UAAD;CACE,WAAW,GAAG,kCAAkC,UAAU;CACnD;CAEN;CACM,CAAA;AAGX,OAAO,WAAW,EAAE,WAAW,OAAO,eACpC,oBAAC,QAAD;CACE,WAAW,GAAG,mCAAmC,UAAU;CACpD;CAEN;CACI,CAAA;AAGT,IAAM,mBAA2C;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK;CACN;AAED,SAAS,MAAM,EACb,WACA,OACA,UACA,QAAQ,KACR,WAAW,qBACX,iBAAiB,IACjB,cAAc,OACd,SACA,YACA,YACA,cACA,SACa;CACb,MAAM,CAAC,mBAAmB,wBAAwB,MAAM,SAAS,MAAM;AAEvE,OAAM,gBAAgB;AACpB,MAAI,CAAC,WAAY;EACjB,MAAM,KAAK,OAAO,WAChB,eAAe,iBAAiB,YAAY,KAC7C;EACD,MAAM,WAAW,MAA2B,eAAe,EAAE,QAAQ;AACrE,KAAG,iBAAiB,UAAU,QAAQ;AACtC,iBAAe,GAAG,QAAQ;AAC1B,eAAa,GAAG,oBAAoB,UAAU,QAAQ;IACrD,CAAC,YAAY,aAAa,CAAC;CAC9B,MAAM,cACJ,wBAAwB,SAAY,sBAAsB;CAE5D,MAAM,qBAAqB;EACzB,MAAM,OAAO,CAAC;AACd,MAAI,wBAAwB,OAC1B,sBAAqB,KAAK;AAE5B,eAAa,KAAK;;CAGpB,MAAM,cAAc,eAAe,YAAY;AAE/C,QACE,qBAAC,SAAD;EACE,WAAW,GACT,mFACA,UAAU,UAAU,iCACpB,UACD;EACD,OAAO;GACL,OAAO,cAAc,iBAAiB;GACtC,GAAG;GACJ;YATH,CAWE,oBAAC,OAAD;GAAK,WAAU;GAAgC;GAAe,CAAA,EAC7D,eACC,oBAAC,OAAD;GACE,WAAU;GACV,SAAS;aAER,YAAY,SACX,UAEA,oBAAC,QAAD;IACE,WAAU;IACV,OAAO,EACL,WAAW,cAAc,iBAAiB,kBAC3C;cAEA;IACI,CAAA;GAEL,CAAA,CAEF;;;AAIZ,OAAO,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Layout/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface LayoutProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n hasSider?: boolean;\n}\n\nexport interface SiderProps {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n width?: number | string;\n collapsed?: boolean;\n collapsedWidth?: number | string;\n collapsible?: boolean;\n trigger?: React.ReactNode;\n onCollapse?: (collapsed: boolean) => void;\n breakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n onBreakpoint?: (broken: boolean) => void;\n theme?: 'light' | 'dark';\n}\n\ninterface LayoutComponent extends React.FC<LayoutProps> {\n Header: React.FC<LayoutProps>;\n Footer: React.FC<LayoutProps>;\n Content: React.FC<LayoutProps>;\n Sider: React.FC<SiderProps>;\n}\n\nconst Layout: LayoutComponent = ({ className, style, children, hasSider }) => (\n <section\n className={cn(\n 'ald-layout tw-flex tw-flex-auto',\n hasSider ? 'tw-flex-row' : 'tw-flex-col',\n className,\n )}\n style={style}\n >\n {children}\n </section>\n);\n\nLayout.Header = ({ className, style, children }) => (\n <header\n className={cn('ald-layout-header tw-flex-none', className)}\n style={style}\n >\n {children}\n </header>\n);\n\nLayout.Footer = ({ className, style, children }) => (\n <footer\n className={cn('ald-layout-footer tw-flex-none', className)}\n style={style}\n >\n {children}\n </footer>\n);\n\nLayout.Content = ({ className, style, children }) => (\n <main\n className={cn('ald-layout-content tw-flex-auto', className)}\n style={style}\n >\n {children}\n </main>\n);\n\nconst breakpointWidths: Record<string, number> = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction Sider({\n className,\n style,\n children,\n width = 200,\n collapsed: controlledCollapsed,\n collapsedWidth = 80,\n collapsible = false,\n trigger,\n onCollapse,\n breakpoint,\n onBreakpoint,\n theme,\n}: SiderProps) {\n const [internalCollapsed, setInternalCollapsed] = React.useState(false);\n\n React.useEffect(() => {\n if (!breakpoint) return;\n const mq = window.matchMedia(\n `(max-width: ${breakpointWidths[breakpoint]}px)`,\n );\n const handler = (e: MediaQueryListEvent) => onBreakpoint?.(e.matches);\n mq.addEventListener('change', handler);\n onBreakpoint?.(mq.matches);\n return () => mq.removeEventListener('change', handler);\n }, [breakpoint, onBreakpoint]);\n const isCollapsed =\n controlledCollapsed !== undefined ? controlledCollapsed : internalCollapsed;\n\n const handleToggle = () => {\n const next = !isCollapsed;\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(next);\n }\n onCollapse?.(next);\n };\n\n const showTrigger = collapsible && trigger !== null;\n\n return (\n <aside\n className={cn(\n 'ald-layout-sider tw-relative tw-flex tw-flex-none tw-flex-col tw-transition-all',\n theme === 'dark' &&\n 'tw-bg-[var(--background-inverted)] tw-text-[var(--content-inverted-primary)]',\n className,\n )}\n style={{\n width: isCollapsed ? collapsedWidth : width,\n ...style,\n }}\n >\n <div className=\"tw-flex-1 tw-overflow-hidden\">{children}</div>\n {showTrigger && (\n <div\n className=\"ald-layout-sider-trigger tw-flex tw-h-12 tw-cursor-pointer tw-items-center tw-justify-center tw-border-t tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-neutral-subtle)] tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]\"\n onClick={handleToggle}\n >\n {trigger !== undefined ? (\n trigger\n ) : (\n <span\n className=\"tw-inline-block tw-text-xs tw-transition-transform\"\n style={{\n transform: isCollapsed ? 'rotate(0deg)' : 'rotate(180deg)',\n }}\n >\n {'\\u25C0'}\n </span>\n )}\n </div>\n )}\n </aside>\n );\n}\n\nLayout.Sider = Sider;\n\nexport default Layout;\n"],"mappings":";;;;AAgCA,IAAM,UAA2B,EAAE,WAAW,OAAO,UAAU,eAC7D,oBAAC,WAAD;CACE,WAAW,GACT,mCACA,WAAW,gBAAgB,eAC3B,UACD;CACM;CAEN;CACO,CAAA;AAGZ,OAAO,UAAU,EAAE,WAAW,OAAO,eACnC,oBAAC,UAAD;CACE,WAAW,GAAG,kCAAkC,UAAU;CACnD;CAEN;CACM,CAAA;AAGX,OAAO,UAAU,EAAE,WAAW,OAAO,eACnC,oBAAC,UAAD;CACE,WAAW,GAAG,kCAAkC,UAAU;CACnD;CAEN;CACM,CAAA;AAGX,OAAO,WAAW,EAAE,WAAW,OAAO,eACpC,oBAAC,QAAD;CACE,WAAW,GAAG,mCAAmC,UAAU;CACpD;CAEN;CACI,CAAA;AAGT,IAAM,mBAA2C;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK;CACN;AAED,SAAS,MAAM,EACb,WACA,OACA,UACA,QAAQ,KACR,WAAW,qBACX,iBAAiB,IACjB,cAAc,OACd,SACA,YACA,YACA,cACA,SACa;CACb,MAAM,CAAC,mBAAmB,wBAAwB,MAAM,SAAS,MAAM;AAEvE,OAAM,gBAAgB;AACpB,MAAI,CAAC,WAAY;EACjB,MAAM,KAAK,OAAO,WAChB,eAAe,iBAAiB,YAAY,KAC7C;EACD,MAAM,WAAW,MAA2B,eAAe,EAAE,QAAQ;AACrE,KAAG,iBAAiB,UAAU,QAAQ;AACtC,iBAAe,GAAG,QAAQ;AAC1B,eAAa,GAAG,oBAAoB,UAAU,QAAQ;IACrD,CAAC,YAAY,aAAa,CAAC;CAC9B,MAAM,cACJ,wBAAwB,SAAY,sBAAsB;CAE5D,MAAM,qBAAqB;EACzB,MAAM,OAAO,CAAC;AACd,MAAI,wBAAwB,OAC1B,sBAAqB,KAAK;AAE5B,eAAa,KAAK;;CAGpB,MAAM,cAAc,eAAe,YAAY;AAE/C,QACE,qBAAC,SAAD;EACE,WAAW,GACT,mFACA,UAAU,UACR,gFACF,UACD;EACD,OAAO;GACL,OAAO,cAAc,iBAAiB;GACtC,GAAG;GACJ;YAVH,CAYE,oBAAC,OAAD;GAAK,WAAU;GAAgC;GAAe,CAAA,EAC7D,eACC,oBAAC,OAAD;GACE,WAAU;GACV,SAAS;aAER,YAAY,SACX,UAEA,oBAAC,QAAD;IACE,WAAU;IACV,OAAO,EACL,WAAW,cAAc,iBAAiB,kBAC3C;cAEA;IACI,CAAA;GAEL,CAAA,CAEF;;;AAIZ,OAAO,QAAQ"}
@@ -2,7 +2,7 @@ import { default as React } from 'react';
2
2
  import { TNode } from './type.js';
3
3
  interface IProps<T> {
4
4
  value?: TNode<T>;
5
- renderCondition: (data: T) => React.ReactNode;
5
+ renderCondition: (data: T, nodeId: string) => React.ReactNode;
6
6
  backgroundColor?: string;
7
7
  }
8
8
  export default function DisplayLogicTree<T>({ value, renderCondition, backgroundColor, }: IProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayLogicTree.js","names":[],"sources":["../../src/LogicTree/DisplayLogicTree.tsx"],"sourcesContent":["import React from 'react';\nimport { DisplayLogicItem } from './components/DisplayLogicItem';\nimport { TNode } from './type';\n\ninterface IProps<T> {\n value?: TNode<T>;\n renderCondition: (data: T) => React.ReactNode;\n backgroundColor?: string;\n}\nexport default function DisplayLogicTree<T>({\n value,\n renderCondition,\n backgroundColor,\n}: IProps<T>) {\n if (!value) return null;\n return (\n <DisplayLogicItem\n key={value.id}\n value={value}\n renderCondition={renderCondition}\n backgroundColor={backgroundColor}\n />\n );\n}\n"],"mappings":";;;;AASA,SAAwB,iBAAoB,EAC1C,OACA,iBACA,mBACY;AACZ,KAAI,CAAC,MAAO,QAAO;AACnB,QACE,oBAAC,kBAAD;EAES;EACU;EACA;EACjB,EAJK,MAAM,GAIX"}
1
+ {"version":3,"file":"DisplayLogicTree.js","names":[],"sources":["../../src/LogicTree/DisplayLogicTree.tsx"],"sourcesContent":["import React from 'react';\nimport { DisplayLogicItem } from './components/DisplayLogicItem';\nimport { TNode } from './type';\n\ninterface IProps<T> {\n value?: TNode<T>;\n renderCondition: (data: T, nodeId: string) => React.ReactNode;\n backgroundColor?: string;\n}\nexport default function DisplayLogicTree<T>({\n value,\n renderCondition,\n backgroundColor,\n}: IProps<T>) {\n if (!value) return null;\n return (\n <DisplayLogicItem\n key={value.id}\n value={value}\n renderCondition={renderCondition}\n backgroundColor={backgroundColor}\n />\n );\n}\n"],"mappings":";;;;AASA,SAAwB,iBAAoB,EAC1C,OACA,iBACA,mBACY;AACZ,KAAI,CAAC,MAAO,QAAO;AACnB,QACE,oBAAC,kBAAD;EAES;EACU;EACA;EACjB,EAJK,MAAM,GAIX"}
@@ -2,7 +2,7 @@ import { default as React } from 'react';
2
2
  import { TNode } from '../../type';
3
3
  interface IProps<T> {
4
4
  value: TNode<T>;
5
- renderCondition: (value: T) => React.ReactNode;
5
+ renderCondition: (value: T, nodeId: string) => React.ReactNode;
6
6
  backgroundColor?: string;
7
7
  }
8
8
  export declare function DisplayLogicItem<T>({ value, renderCondition, backgroundColor, }: IProps<T>): import("react/jsx-runtime").JSX.Element | null;
@@ -60,7 +60,7 @@ function DisplayLogicItem({ value, renderCondition, backgroundColor }) {
60
60
  className: "ald-logic-tree-display-record-node",
61
61
  children: /* @__PURE__ */ jsx("div", {
62
62
  className: "ald-logic-tree-render-condition-wrap",
63
- children: renderCondition(value.data)
63
+ children: renderCondition(value.data, value.id)
64
64
  })
65
65
  });
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/LogicTree/components/DisplayLogicItem/index.tsx"],"sourcesContent":["import _ from 'lodash';\nimport React, { useContext, useState } from 'react';\nimport { LocaleContext, getTranslator } from '../../../locale/default';\nimport { ELogicType, ENodeType, TNode } from '../../type';\n\ninterface IProps<T> {\n value: TNode<T>;\n renderCondition: (value: T) => React.ReactNode;\n backgroundColor?: string;\n}\n\nconst TWO = 2;\n\nexport function DisplayLogicItem<T>({\n value,\n renderCondition,\n backgroundColor,\n}: IProps<T>) {\n const [firstNodeHight, setFirstNodeHight] = useState(0);\n const [lastNodeHight, setLastNodeHight] = useState(0);\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const logicTypeTextMap = {\n [ELogicType.AND]: t.LogicTree.select.and,\n [ELogicType.OR]: t.LogicTree.select.or,\n };\n\n const { type } = value;\n\n const firstRefCallback = (e: HTMLDivElement) => {\n if (e) {\n setFirstNodeHight(e.clientHeight);\n }\n };\n\n const lastRefCallback = (e: HTMLDivElement) => {\n if (e) {\n setLastNodeHight(e.clientHeight);\n }\n };\n\n if (type === ENodeType.LOGIC) {\n const { nodes } = value;\n if (!_.size(nodes)) return null;\n return (\n <div className=\"ald-logic-tree-display-logic-node\">\n {_.map(nodes, (node, index) => {\n let ref = null;\n if (index === 0) {\n ref = firstRefCallback;\n } else if (index === nodes.length - 1) {\n ref = lastRefCallback;\n }\n\n return (\n <div className=\"ald-logic-tree-node-wrap\" ref={ref} key={node.id}>\n <div className=\"ald-logic-tree-horizontal-line\" />\n <DisplayLogicItem\n key={node.id}\n value={node}\n renderCondition={renderCondition}\n backgroundColor={backgroundColor}\n />\n </div>\n );\n })}\n <div className=\"ald-logic-tree-logic-type\" style={{ backgroundColor }}>\n {logicTypeTextMap[value.logicType]}\n </div>\n {nodes.length > 1 && (\n <div\n className=\"ald-logic-tree-logic-vertical-line\"\n style={{\n height: `calc(100% - ${firstNodeHight / TWO}px - ${\n lastNodeHight / TWO\n }px`,\n top: `${firstNodeHight / TWO}px`,\n }}\n />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"ald-logic-tree-display-record-node\">\n <div className=\"ald-logic-tree-render-condition-wrap\">\n {renderCondition(value.data)}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAWA,IAAM,MAAM;AAEZ,SAAgB,iBAAoB,EAClC,OACA,iBACA,mBACY;CACZ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,EAAE;CACvD,MAAM,CAAC,eAAe,oBAAoB,SAAS,EAAE;CACrD,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,mBAAmB;GACtB,WAAW,MAAM,EAAE,UAAU,OAAO;GACpC,WAAW,KAAK,EAAE,UAAU,OAAO;EACrC;CAED,MAAM,EAAE,SAAS;CAEjB,MAAM,oBAAoB,MAAsB;AAC9C,MAAI,EACF,mBAAkB,EAAE,aAAa;;CAIrC,MAAM,mBAAmB,MAAsB;AAC7C,MAAI,EACF,kBAAiB,EAAE,aAAa;;AAIpC,KAAI,SAAS,UAAU,OAAO;EAC5B,MAAM,EAAE,UAAU;AAClB,MAAI,CAAC,EAAE,KAAK,MAAM,CAAE,QAAO;AAC3B,SACE,qBAAC,OAAD;GAAK,WAAU;aAAf;IACG,EAAE,IAAI,QAAQ,MAAM,UAAU;KAC7B,IAAI,MAAM;AACV,SAAI,UAAU,EACZ,OAAM;cACG,UAAU,MAAM,SAAS,EAClC,OAAM;AAGR,YACE,qBAAC,OAAD;MAAK,WAAU;MAAgC;gBAA/C,CACE,oBAAC,OAAD,EAAK,WAAU,kCAAmC,CAAA,EAClD,oBAAC,kBAAD;OAEE,OAAO;OACU;OACA;OACjB,EAJK,KAAK,GAIV,CACE;QARmD,KAAK,GAQxD;MAER;IACF,oBAAC,OAAD;KAAK,WAAU;KAA4B,OAAO,EAAE,iBAAiB;eAClE,iBAAiB,MAAM;KACpB,CAAA;IACL,MAAM,SAAS,KACd,oBAAC,OAAD;KACE,WAAU;KACV,OAAO;MACL,QAAQ,eAAe,iBAAiB,IAAI,OAC1C,gBAAgB,IACjB;MACD,KAAK,GAAG,iBAAiB,IAAI;MAC9B;KACD,CAAA;IAEA;;;AAIV,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,OAAD;GAAK,WAAU;aACZ,gBAAgB,MAAM,KAAK;GACxB,CAAA;EACF,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/LogicTree/components/DisplayLogicItem/index.tsx"],"sourcesContent":["import _ from 'lodash';\nimport React, { useContext, useState } from 'react';\nimport { LocaleContext, getTranslator } from '../../../locale/default';\nimport { ELogicType, ENodeType, TNode } from '../../type';\n\ninterface IProps<T> {\n value: TNode<T>;\n renderCondition: (value: T, nodeId: string) => React.ReactNode;\n backgroundColor?: string;\n}\n\nconst TWO = 2;\n\nexport function DisplayLogicItem<T>({\n value,\n renderCondition,\n backgroundColor,\n}: IProps<T>) {\n const [firstNodeHight, setFirstNodeHight] = useState(0);\n const [lastNodeHight, setLastNodeHight] = useState(0);\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const logicTypeTextMap = {\n [ELogicType.AND]: t.LogicTree.select.and,\n [ELogicType.OR]: t.LogicTree.select.or,\n };\n\n const { type } = value;\n\n const firstRefCallback = (e: HTMLDivElement) => {\n if (e) {\n setFirstNodeHight(e.clientHeight);\n }\n };\n\n const lastRefCallback = (e: HTMLDivElement) => {\n if (e) {\n setLastNodeHight(e.clientHeight);\n }\n };\n\n if (type === ENodeType.LOGIC) {\n const { nodes } = value;\n if (!_.size(nodes)) return null;\n return (\n <div className=\"ald-logic-tree-display-logic-node\">\n {_.map(nodes, (node, index) => {\n let ref = null;\n if (index === 0) {\n ref = firstRefCallback;\n } else if (index === nodes.length - 1) {\n ref = lastRefCallback;\n }\n\n return (\n <div className=\"ald-logic-tree-node-wrap\" ref={ref} key={node.id}>\n <div className=\"ald-logic-tree-horizontal-line\" />\n <DisplayLogicItem\n key={node.id}\n value={node}\n renderCondition={renderCondition}\n backgroundColor={backgroundColor}\n />\n </div>\n );\n })}\n <div className=\"ald-logic-tree-logic-type\" style={{ backgroundColor }}>\n {logicTypeTextMap[value.logicType]}\n </div>\n {nodes.length > 1 && (\n <div\n className=\"ald-logic-tree-logic-vertical-line\"\n style={{\n height: `calc(100% - ${firstNodeHight / TWO}px - ${\n lastNodeHight / TWO\n }px`,\n top: `${firstNodeHight / TWO}px`,\n }}\n />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"ald-logic-tree-display-record-node\">\n <div className=\"ald-logic-tree-render-condition-wrap\">\n {renderCondition(value.data, value.id)}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAWA,IAAM,MAAM;AAEZ,SAAgB,iBAAoB,EAClC,OACA,iBACA,mBACY;CACZ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,EAAE;CACvD,MAAM,CAAC,eAAe,oBAAoB,SAAS,EAAE;CACrD,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,mBAAmB;GACtB,WAAW,MAAM,EAAE,UAAU,OAAO;GACpC,WAAW,KAAK,EAAE,UAAU,OAAO;EACrC;CAED,MAAM,EAAE,SAAS;CAEjB,MAAM,oBAAoB,MAAsB;AAC9C,MAAI,EACF,mBAAkB,EAAE,aAAa;;CAIrC,MAAM,mBAAmB,MAAsB;AAC7C,MAAI,EACF,kBAAiB,EAAE,aAAa;;AAIpC,KAAI,SAAS,UAAU,OAAO;EAC5B,MAAM,EAAE,UAAU;AAClB,MAAI,CAAC,EAAE,KAAK,MAAM,CAAE,QAAO;AAC3B,SACE,qBAAC,OAAD;GAAK,WAAU;aAAf;IACG,EAAE,IAAI,QAAQ,MAAM,UAAU;KAC7B,IAAI,MAAM;AACV,SAAI,UAAU,EACZ,OAAM;cACG,UAAU,MAAM,SAAS,EAClC,OAAM;AAGR,YACE,qBAAC,OAAD;MAAK,WAAU;MAAgC;gBAA/C,CACE,oBAAC,OAAD,EAAK,WAAU,kCAAmC,CAAA,EAClD,oBAAC,kBAAD;OAEE,OAAO;OACU;OACA;OACjB,EAJK,KAAK,GAIV,CACE;QARmD,KAAK,GAQxD;MAER;IACF,oBAAC,OAAD;KAAK,WAAU;KAA4B,OAAO,EAAE,iBAAiB;eAClE,iBAAiB,MAAM;KACpB,CAAA;IACL,MAAM,SAAS,KACd,oBAAC,OAAD;KACE,WAAU;KACV,OAAO;MACL,QAAQ,eAAe,iBAAiB,IAAI,OAC1C,gBAAgB,IACjB;MACD,KAAK,GAAG,iBAAiB,IAAI;MAC9B;KACD,CAAA;IAEA;;;AAIV,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,OAAD;GAAK,WAAU;aACZ,gBAAgB,MAAM,MAAM,MAAM,GAAG;GAClC,CAAA;EACF,CAAA"}
@@ -224,8 +224,7 @@ function LogicItem({ value, addCondition, addRelation, changeRecordData, remove,
224
224
  size: "small",
225
225
  popupMatchSelectWidth: false,
226
226
  value: logicType,
227
- onChange: onChangeRelation,
228
- disabled: nodes.length <= 1
227
+ onChange: onChangeRelation
229
228
  }),
230
229
  /* @__PURE__ */ jsx(DragPreviewImage, {
231
230
  connect: preview,
@@ -282,7 +281,7 @@ function LogicItem({ value, addCondition, addRelation, changeRecordData, remove,
282
281
  }),
283
282
  /* @__PURE__ */ jsx("div", {
284
283
  className: "ald-logic-tree-render-condition-wrap",
285
- children: renderCondition(value.data, { changeData: onChangeRecordData })
284
+ children: renderCondition(value.data, { changeData: onChangeRecordData }, value.id)
286
285
  }),
287
286
  /* @__PURE__ */ jsx(IconButton, {
288
287
  icon: /* @__PURE__ */ jsx(Memo$2, { size: 16 }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/LogicTree/components/LogicItem/index.tsx"],"sourcesContent":["import { cn } from '../../../lib/utils';\nimport _ from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { DragPreviewImage, useDrag, useDrop } from 'react-dnd';\nimport { EPutPosition, TRenderCondition } from '../..';\nimport DragLightLine from '../../../Icon/components/DragLightLine';\nimport PlusIcon from '../../../Icon/components/SignLightLine';\nimport TrashLightLine from '../../../Icon/components/TrashLightLine';\nimport IconButton from '../../../IconButton';\nimport Select from '../../../Select';\nimport TextLink from '../../../TextLink';\nimport {\n ELangType,\n LocaleContext,\n getTranslator,\n} from '../../../locale/default';\nimport { ELogicType, ENodeType, TNode } from '../../type';\n\nconst dargPreviewImg =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAYSURBVHgB7cAxAQAAAMKg9U9tCU8oAPgYBlQAAX19SpgAAAAASUVORK5CYII=';\n\ninterface IProps<T> {\n value: TNode<T>;\n addCondition: (id: string) => void;\n addRelation: (id: string) => void;\n remove: (id: string) => void;\n changeRecordData: (id: string, data: T) => void;\n changeRelation: (id: string, logicType: ELogicType) => void;\n renderCondition: TRenderCondition<T>;\n onDragEnd: (\n dragId: string,\n hoverId: string,\n dropPosition: EPutPosition,\n ) => void;\n hoverId: string;\n setHoverId: (id: string) => void;\n isRoot?: boolean;\n hideBottomBtn?: {\n addRelation?: boolean;\n };\n}\n\nconst TWO = 2;\n\nexport default function LogicItem<T>({\n value,\n addCondition,\n addRelation,\n changeRecordData,\n remove,\n changeRelation,\n renderCondition,\n onDragEnd,\n hoverId,\n setHoverId,\n isRoot = false,\n hideBottomBtn,\n}: IProps<T>) {\n const [isHoverDragBox, setIsHoverDragBox] = useState(false);\n const [firstNodeHight, setFirstNodeHight] = useState(0);\n const [lastNodeHight, setLastNodeHight] = useState(0);\n const [dropPosition, setDropPosition] = useState<EPutPosition>();\n\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const logicOptions = [\n {\n value: ELogicType.AND,\n label: t.LogicTree.select.and,\n },\n {\n value: ELogicType.OR,\n label: t.LogicTree.select.or,\n },\n ];\n\n const { type } = value;\n\n const ref = useRef<HTMLDivElement>(null);\n const firstResizeObserverRef = useRef<ResizeObserver | null>(null);\n const lastResizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'LOGIC_ITEM',\n item: { id: value.id },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n canDrag: !isRoot && isHoverDragBox,\n });\n\n const [{ isOver, canDrop }, drop] = useDrop({\n accept: 'LOGIC_ITEM',\n hover(item: { id: string }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragId = item.id;\n const hoverId = value.id;\n\n if (dragId === hoverId) {\n return;\n }\n // 检查是否为最顶层的放置目标\n if (monitor.didDrop()) {\n return;\n }\n\n // 获取鼠标位置和目标元素位置\n const hoverBoundingRect = ref.current.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (clientOffset) {\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n const dropPosition =\n hoverClientY < hoverMiddleY ? EPutPosition.TOP : EPutPosition.BOTTOM;\n\n setDropPosition(dropPosition);\n } else setDropPosition(undefined);\n },\n drop(item: { id: string }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragId = item.id;\n const hoverId = value.id;\n\n if (dragId === hoverId) {\n return;\n }\n // 检查是否为最顶层的放置目标\n if (monitor.didDrop()) {\n return;\n }\n\n // 获取鼠标位置和目标元素位置\n const hoverBoundingRect = ref.current.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (clientOffset) {\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n // 确定放置位置\n const dropPosition =\n hoverClientY < hoverMiddleY ? EPutPosition.TOP : EPutPosition.BOTTOM;\n\n onDragEnd(dragId, hoverId, dropPosition);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver({ shallow: true }),\n canDrop: monitor.canDrop(),\n }),\n });\n\n drag(drop(ref));\n\n const isDragOver = isOver && canDrop && !isRoot;\n\n const firstRef = useCallback((node: HTMLElement | null) => {\n if (firstResizeObserverRef.current) {\n firstResizeObserverRef.current.disconnect();\n firstResizeObserverRef.current = null;\n }\n\n if (!node) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const newHeight = entry.contentRect.height;\n if (newHeight > 0) {\n setFirstNodeHight(newHeight);\n }\n }\n });\n resizeObserver.observe(node);\n firstResizeObserverRef.current = resizeObserver;\n }, []);\n\n const lastRef = useCallback((node: HTMLElement | null) => {\n if (lastResizeObserverRef.current) {\n lastResizeObserverRef.current.disconnect();\n lastResizeObserverRef.current = null;\n }\n\n if (!node) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const newHeight = entry.contentRect.height;\n if (newHeight > 0) {\n setLastNodeHight(newHeight);\n }\n }\n });\n resizeObserver.observe(node);\n lastResizeObserverRef.current = resizeObserver;\n }, []);\n\n const onAddCondition = () => {\n const { id } = value;\n addCondition(id);\n };\n\n const onAddRelation = () => {\n const { id } = value;\n addRelation(id);\n };\n\n const onRemove = () => {\n const { id } = value;\n remove(id);\n };\n\n const onChangeRelation = (logicType: ELogicType) => {\n const { id } = value;\n changeRelation(id, logicType);\n };\n\n const onChangeRecordData = (data: T) => {\n const { id } = value;\n changeRecordData(id, data);\n };\n\n useEffect(() => {\n return () => {\n if (firstResizeObserverRef.current) {\n firstResizeObserverRef.current.disconnect();\n firstResizeObserverRef.current = null;\n }\n if (lastResizeObserverRef.current) {\n lastResizeObserverRef.current.disconnect();\n lastResizeObserverRef.current = null;\n }\n };\n }, []);\n\n const isEn = locale === ELangType.EN;\n\n if (type === ENodeType.LOGIC) {\n const { nodes, logicType } = value;\n const verticalLineHeight =\n nodes.length > 1\n ? `calc(100% - ${firstNodeHight / TWO}px - ${\n lastNodeHight / TWO\n }px - 42px)`\n : `30px`;\n\n return (\n <div\n className={cn('ald-logic-tree-logic-node', {\n 'is-hover-drag-box': isHoverDragBox,\n 'is-dragging': isDragging,\n 'is-hover-top': isDragOver && dropPosition === EPutPosition.TOP,\n 'is-hover-bottom': isDragOver && dropPosition === EPutPosition.BOTTOM,\n })}\n onMouseMove={(e) => {\n e.stopPropagation();\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setHoverId('');\n }}\n ref={ref}\n >\n {_.map(nodes, (node, index) => {\n let heightRef = null;\n if (index === 0) {\n heightRef = firstRef;\n } else if (index === nodes.length - 1) {\n heightRef = lastRef;\n }\n\n return (\n <div\n className=\"ald-logic-tree-node-wrap\"\n key={node.id}\n ref={heightRef}\n >\n <div className=\"ald-logic-tree-horizontal-line\" />\n <LogicItem\n key={node.id}\n value={node}\n addCondition={addCondition}\n addRelation={addRelation}\n remove={remove}\n changeRelation={changeRelation}\n renderCondition={renderCondition}\n changeRecordData={changeRecordData}\n hoverId={hoverId}\n setHoverId={setHoverId}\n onDragEnd={onDragEnd}\n />\n </div>\n );\n })}\n <div className=\"ald-logic-tree-operation\">\n <div className=\"ald-logic-tree-left-bottom-dash-line\" />\n <TextLink icon={<PlusIcon size={24} />} onClick={onAddCondition}>\n {t.LogicTree.btn.addCondition}\n </TextLink>\n {!hideBottomBtn?.addRelation && (\n <TextLink icon={<PlusIcon size={24} />} onClick={onAddRelation}>\n {t.LogicTree.btn.addRelation}\n </TextLink>\n )}\n </div>\n {!!_.size(nodes) && (\n <div\n className=\"ald-logic-tree-logic-vertical-line\"\n style={{\n height: verticalLineHeight,\n top: `${firstNodeHight / TWO + 4}px`,\n }}\n />\n )}\n {!isRoot && (hoverId === value.id || isDragging) && (\n <div\n className=\"ald-logic-tree-node-drag-icon-wrapper\"\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(false);\n }}\n >\n <DragLightLine\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n size={16}\n color=\"#374151\"\n className=\"ald-logic-tree-node-drag-icon\"\n />\n </div>\n )}\n\n <Select\n options={logicOptions}\n className={cn('ald-logic-tree-select-relation', {\n 'ald-logic-tree-select-relation-en': isEn,\n })}\n size=\"small\"\n popupMatchSelectWidth={false}\n value={logicType}\n onChange={onChangeRelation}\n disabled={nodes.length <= 1}\n />\n <DragPreviewImage connect={preview} src={dargPreviewImg} />\n </div>\n );\n }\n\n return (\n <>\n <DragPreviewImage connect={preview} src={dargPreviewImg} />\n <div\n className={cn('ald-logic-tree-record-node', {\n 'is-hover-drag-box': isHoverDragBox,\n 'is-dragging': isDragging,\n 'is-hover-top': isDragOver && dropPosition === EPutPosition.TOP,\n 'is-hover-bottom': isDragOver && dropPosition === EPutPosition.BOTTOM,\n })}\n ref={ref}\n onMouseMove={(e) => {\n e.stopPropagation();\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setHoverId('');\n }}\n >\n <div\n className=\"ald-logic-tree-node-drag-icon-preview\"\n ref={preview}\n ></div>\n {(hoverId === value.id || isDragging) && (\n <div\n className=\"ald-logic-tree-record-node-drag-icon-wrapper\"\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(false);\n }}\n >\n <DragLightLine\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n size={16}\n color=\"#374151\"\n className=\"ald-logic-tree-record-node-drag-icon\"\n />\n </div>\n )}\n\n <div className=\"ald-logic-tree-render-condition-wrap\">\n {renderCondition(value.data, { changeData: onChangeRecordData })}\n </div>\n <IconButton\n icon={<TrashLightLine size={16} />}\n size={'small'}\n onClick={onRemove}\n />\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/LogicTree/components/LogicItem/index.tsx"],"sourcesContent":["import { cn } from '../../../lib/utils';\nimport _ from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { DragPreviewImage, useDrag, useDrop } from 'react-dnd';\nimport { EPutPosition, TRenderCondition } from '../..';\nimport DragLightLine from '../../../Icon/components/DragLightLine';\nimport PlusIcon from '../../../Icon/components/SignLightLine';\nimport TrashLightLine from '../../../Icon/components/TrashLightLine';\nimport IconButton from '../../../IconButton';\nimport Select from '../../../Select';\nimport TextLink from '../../../TextLink';\nimport {\n ELangType,\n LocaleContext,\n getTranslator,\n} from '../../../locale/default';\nimport { ELogicType, ENodeType, TNode } from '../../type';\n\nconst dargPreviewImg =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAYSURBVHgB7cAxAQAAAMKg9U9tCU8oAPgYBlQAAX19SpgAAAAASUVORK5CYII=';\n\ninterface IProps<T> {\n value: TNode<T>;\n addCondition: (id: string) => void;\n addRelation: (id: string) => void;\n remove: (id: string) => void;\n changeRecordData: (id: string, data: T) => void;\n changeRelation: (id: string, logicType: ELogicType) => void;\n renderCondition: TRenderCondition<T>;\n onDragEnd: (\n dragId: string,\n hoverId: string,\n dropPosition: EPutPosition,\n ) => void;\n hoverId: string;\n setHoverId: (id: string) => void;\n isRoot?: boolean;\n hideBottomBtn?: {\n addRelation?: boolean;\n };\n}\n\nconst TWO = 2;\n\nexport default function LogicItem<T>({\n value,\n addCondition,\n addRelation,\n changeRecordData,\n remove,\n changeRelation,\n renderCondition,\n onDragEnd,\n hoverId,\n setHoverId,\n isRoot = false,\n hideBottomBtn,\n}: IProps<T>) {\n const [isHoverDragBox, setIsHoverDragBox] = useState(false);\n const [firstNodeHight, setFirstNodeHight] = useState(0);\n const [lastNodeHight, setLastNodeHight] = useState(0);\n const [dropPosition, setDropPosition] = useState<EPutPosition>();\n\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const logicOptions = [\n {\n value: ELogicType.AND,\n label: t.LogicTree.select.and,\n },\n {\n value: ELogicType.OR,\n label: t.LogicTree.select.or,\n },\n ];\n\n const { type } = value;\n\n const ref = useRef<HTMLDivElement>(null);\n const firstResizeObserverRef = useRef<ResizeObserver | null>(null);\n const lastResizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'LOGIC_ITEM',\n item: { id: value.id },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n canDrag: !isRoot && isHoverDragBox,\n });\n\n const [{ isOver, canDrop }, drop] = useDrop({\n accept: 'LOGIC_ITEM',\n hover(item: { id: string }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragId = item.id;\n const hoverId = value.id;\n\n if (dragId === hoverId) {\n return;\n }\n // 检查是否为最顶层的放置目标\n if (monitor.didDrop()) {\n return;\n }\n\n // 获取鼠标位置和目标元素位置\n const hoverBoundingRect = ref.current.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (clientOffset) {\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n const dropPosition =\n hoverClientY < hoverMiddleY ? EPutPosition.TOP : EPutPosition.BOTTOM;\n\n setDropPosition(dropPosition);\n } else setDropPosition(undefined);\n },\n drop(item: { id: string }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragId = item.id;\n const hoverId = value.id;\n\n if (dragId === hoverId) {\n return;\n }\n // 检查是否为最顶层的放置目标\n if (monitor.didDrop()) {\n return;\n }\n\n // 获取鼠标位置和目标元素位置\n const hoverBoundingRect = ref.current.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n if (clientOffset) {\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n // 确定放置位置\n const dropPosition =\n hoverClientY < hoverMiddleY ? EPutPosition.TOP : EPutPosition.BOTTOM;\n\n onDragEnd(dragId, hoverId, dropPosition);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver({ shallow: true }),\n canDrop: monitor.canDrop(),\n }),\n });\n\n drag(drop(ref));\n\n const isDragOver = isOver && canDrop && !isRoot;\n\n const firstRef = useCallback((node: HTMLElement | null) => {\n if (firstResizeObserverRef.current) {\n firstResizeObserverRef.current.disconnect();\n firstResizeObserverRef.current = null;\n }\n\n if (!node) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const newHeight = entry.contentRect.height;\n if (newHeight > 0) {\n setFirstNodeHight(newHeight);\n }\n }\n });\n resizeObserver.observe(node);\n firstResizeObserverRef.current = resizeObserver;\n }, []);\n\n const lastRef = useCallback((node: HTMLElement | null) => {\n if (lastResizeObserverRef.current) {\n lastResizeObserverRef.current.disconnect();\n lastResizeObserverRef.current = null;\n }\n\n if (!node) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const newHeight = entry.contentRect.height;\n if (newHeight > 0) {\n setLastNodeHight(newHeight);\n }\n }\n });\n resizeObserver.observe(node);\n lastResizeObserverRef.current = resizeObserver;\n }, []);\n\n const onAddCondition = () => {\n const { id } = value;\n addCondition(id);\n };\n\n const onAddRelation = () => {\n const { id } = value;\n addRelation(id);\n };\n\n const onRemove = () => {\n const { id } = value;\n remove(id);\n };\n\n const onChangeRelation = (logicType: ELogicType) => {\n const { id } = value;\n changeRelation(id, logicType);\n };\n\n const onChangeRecordData = (data: T) => {\n const { id } = value;\n changeRecordData(id, data);\n };\n\n useEffect(() => {\n return () => {\n if (firstResizeObserverRef.current) {\n firstResizeObserverRef.current.disconnect();\n firstResizeObserverRef.current = null;\n }\n if (lastResizeObserverRef.current) {\n lastResizeObserverRef.current.disconnect();\n lastResizeObserverRef.current = null;\n }\n };\n }, []);\n\n const isEn = locale === ELangType.EN;\n\n if (type === ENodeType.LOGIC) {\n const { nodes, logicType } = value;\n const verticalLineHeight =\n nodes.length > 1\n ? `calc(100% - ${firstNodeHight / TWO}px - ${\n lastNodeHight / TWO\n }px - 42px)`\n : `30px`;\n\n return (\n <div\n className={cn('ald-logic-tree-logic-node', {\n 'is-hover-drag-box': isHoverDragBox,\n 'is-dragging': isDragging,\n 'is-hover-top': isDragOver && dropPosition === EPutPosition.TOP,\n 'is-hover-bottom': isDragOver && dropPosition === EPutPosition.BOTTOM,\n })}\n onMouseMove={(e) => {\n e.stopPropagation();\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setHoverId('');\n }}\n ref={ref}\n >\n {_.map(nodes, (node, index) => {\n let heightRef = null;\n if (index === 0) {\n heightRef = firstRef;\n } else if (index === nodes.length - 1) {\n heightRef = lastRef;\n }\n\n return (\n <div\n className=\"ald-logic-tree-node-wrap\"\n key={node.id}\n ref={heightRef}\n >\n <div className=\"ald-logic-tree-horizontal-line\" />\n <LogicItem\n key={node.id}\n value={node}\n addCondition={addCondition}\n addRelation={addRelation}\n remove={remove}\n changeRelation={changeRelation}\n renderCondition={renderCondition}\n changeRecordData={changeRecordData}\n hoverId={hoverId}\n setHoverId={setHoverId}\n onDragEnd={onDragEnd}\n />\n </div>\n );\n })}\n <div className=\"ald-logic-tree-operation\">\n <div className=\"ald-logic-tree-left-bottom-dash-line\" />\n <TextLink icon={<PlusIcon size={24} />} onClick={onAddCondition}>\n {t.LogicTree.btn.addCondition}\n </TextLink>\n {!hideBottomBtn?.addRelation && (\n <TextLink icon={<PlusIcon size={24} />} onClick={onAddRelation}>\n {t.LogicTree.btn.addRelation}\n </TextLink>\n )}\n </div>\n {!!_.size(nodes) && (\n <div\n className=\"ald-logic-tree-logic-vertical-line\"\n style={{\n height: verticalLineHeight,\n top: `${firstNodeHight / TWO + 4}px`,\n }}\n />\n )}\n {!isRoot && (hoverId === value.id || isDragging) && (\n <div\n className=\"ald-logic-tree-node-drag-icon-wrapper\"\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(false);\n }}\n >\n <DragLightLine\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n size={16}\n color=\"#374151\"\n className=\"ald-logic-tree-node-drag-icon\"\n />\n </div>\n )}\n\n <Select\n options={logicOptions}\n className={cn('ald-logic-tree-select-relation', {\n 'ald-logic-tree-select-relation-en': isEn,\n })}\n size=\"small\"\n popupMatchSelectWidth={false}\n value={logicType}\n onChange={onChangeRelation}\n />\n <DragPreviewImage connect={preview} src={dargPreviewImg} />\n </div>\n );\n }\n\n return (\n <>\n <DragPreviewImage connect={preview} src={dargPreviewImg} />\n <div\n className={cn('ald-logic-tree-record-node', {\n 'is-hover-drag-box': isHoverDragBox,\n 'is-dragging': isDragging,\n 'is-hover-top': isDragOver && dropPosition === EPutPosition.TOP,\n 'is-hover-bottom': isDragOver && dropPosition === EPutPosition.BOTTOM,\n })}\n ref={ref}\n onMouseMove={(e) => {\n e.stopPropagation();\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setHoverId('');\n }}\n >\n <div\n className=\"ald-logic-tree-node-drag-icon-preview\"\n ref={preview}\n ></div>\n {(hoverId === value.id || isDragging) && (\n <div\n className=\"ald-logic-tree-record-node-drag-icon-wrapper\"\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n onMouseOut={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(false);\n }}\n >\n <DragLightLine\n onMouseMove={(e) => {\n e.stopPropagation();\n setIsHoverDragBox(true);\n setHoverId(value.id);\n }}\n size={16}\n color=\"#374151\"\n className=\"ald-logic-tree-record-node-drag-icon\"\n />\n </div>\n )}\n\n <div className=\"ald-logic-tree-render-condition-wrap\">\n {renderCondition(\n value.data,\n { changeData: onChangeRecordData },\n value.id,\n )}\n </div>\n <IconButton\n icon={<TrashLightLine size={16} />}\n size={'small'}\n onClick={onRemove}\n />\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ export declare enum EPutPosition {
8
8
  }
9
9
  export type TRenderCondition<T> = (data: T, { changeData }: {
10
10
  changeData: (data: T) => void;
11
- }) => React.ReactNode;
11
+ }, nodeId: string) => React.ReactNode;
12
12
  interface IProps<T> {
13
13
  newInitializationData: T;
14
14
  onChange: (value: TNode<T>) => void;
@@ -6,10 +6,10 @@ import LogicItem from "./components/LogicItem/index.js";
6
6
  import { addLogicNode, addRecordNode, changeRecordData, changeRelation, findNodeById, findParentNodeById, isDescendant, removeNode } from "./helper.js";
7
7
  import "./DisplayLogicTree.js";
8
8
  import { useCallback, useState } from "react";
9
- import { jsx } from "react/jsx-runtime";
9
+ import { Fragment, jsx } from "react/jsx-runtime";
10
10
  import _ from "lodash";
11
11
  import { useControllableValue } from "ahooks";
12
- import { DndProvider } from "react-dnd";
12
+ import { DndProvider, useDragDropManager } from "react-dnd";
13
13
  import { HTML5Backend } from "react-dnd-html5-backend";
14
14
  //#region src/LogicTree/index.tsx
15
15
  var EPutPosition = /* @__PURE__ */ function(EPutPosition) {
@@ -17,8 +17,29 @@ var EPutPosition = /* @__PURE__ */ function(EPutPosition) {
17
17
  EPutPosition["BOTTOM"] = "BOTTOM";
18
18
  return EPutPosition;
19
19
  }({});
20
+ function useHasDndContext() {
21
+ try {
22
+ return !!useDragDropManager();
23
+ } catch {
24
+ return false;
25
+ }
26
+ }
27
+ function LogicTreeDndProvider({ children }) {
28
+ const hasDndContext = useHasDndContext();
29
+ const [rootElement, setRootElement] = useState(null);
30
+ if (hasDndContext) return /* @__PURE__ */ jsx(Fragment, { children });
31
+ return /* @__PURE__ */ jsx("div", {
32
+ ref: setRootElement,
33
+ style: { display: "contents" },
34
+ children: rootElement ? /* @__PURE__ */ jsx(DndProvider, {
35
+ backend: HTML5Backend,
36
+ options: { rootElement },
37
+ children
38
+ }) : null
39
+ });
40
+ }
20
41
  function LogicTree(props) {
21
- const { newInitializationData, onChange: propsOnChange, renderCondition, rootNodeAllowedEmpty, className, needDndProvider = false, hideBottomBtn } = props;
42
+ const { newInitializationData, onChange: propsOnChange, renderCondition, rootNodeAllowedEmpty, className, hideBottomBtn } = props;
22
43
  const initialNode = {
23
44
  id: getUniqId(),
24
45
  type: ENodeType.LOGIC,
@@ -73,7 +94,7 @@ function LogicTree(props) {
73
94
  }
74
95
  }, [innerValue, changeInnerValue]);
75
96
  if (!innerValue) return null;
76
- const content = /* @__PURE__ */ jsx("div", {
97
+ return /* @__PURE__ */ jsx(LogicTreeDndProvider, { children: /* @__PURE__ */ jsx("div", {
77
98
  className: cn("ald-logic-tree-wrap", className),
78
99
  children: /* @__PURE__ */ jsx(LogicItem, {
79
100
  value: innerValue,
@@ -89,12 +110,7 @@ function LogicTree(props) {
89
110
  isRoot: true,
90
111
  hideBottomBtn
91
112
  })
92
- });
93
- if (!needDndProvider) return content;
94
- return /* @__PURE__ */ jsx(DndProvider, {
95
- backend: HTML5Backend,
96
- children: content
97
- });
113
+ }) });
98
114
  }
99
115
  //#endregion
100
116
  export { EPutPosition, LogicTree as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/LogicTree/index.tsx"],"sourcesContent":["import { useControllableValue } from 'ahooks';\nimport { cn } from '../lib/utils';\nimport './logic-tree.css';\nimport _ from 'lodash';\nimport React, { useCallback, useState } from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { getUniqId } from '../_utils/getUniqId';\nimport LogicItem from './components/LogicItem';\nimport {\n addLogicNode,\n addRecordNode,\n changeRecordData,\n changeRelation,\n findNodeById,\n findParentNodeById,\n isDescendant,\n removeNode,\n} from './helper';\nimport { ELogicType, ENodeType, type TNode } from './type';\n\nexport { default as DisplayLogicTree } from './DisplayLogicTree';\nexport * from './type';\n\nexport enum EPutPosition {\n TOP = 'TOP',\n BOTTOM = 'BOTTOM',\n}\n\nexport type TRenderCondition<T> = (\n data: T,\n { changeData }: { changeData: (data: T) => void },\n) => React.ReactNode;\n\ninterface IProps<T> {\n newInitializationData: T;\n onChange: (value: TNode<T>) => void;\n value?: TNode<T>;\n renderCondition: TRenderCondition<T>;\n rootNodeAllowedEmpty?: boolean;\n className?: string;\n needDndProvider?: boolean;\n hideBottomBtn?: {\n addRelation?: boolean;\n };\n}\n\nexport default function LogicTree<T>(props: IProps<T>) {\n const {\n newInitializationData,\n onChange: propsOnChange,\n renderCondition,\n rootNodeAllowedEmpty,\n className,\n needDndProvider = false,\n hideBottomBtn,\n } = props;\n const initialNode: TNode<T> = {\n id: getUniqId(),\n type: ENodeType.LOGIC,\n logicType: ELogicType.AND,\n nodes: [\n {\n id: getUniqId(),\n type: ENodeType.RECORD,\n data: newInitializationData,\n },\n ],\n };\n\n const [innerValue, setInnerValue] = useControllableValue<TNode<T>>(\n props.value ? { value: props.value } : {},\n {\n defaultValue: initialNode,\n },\n );\n const [hoverItemId, setHoverItemId] = useState<string>('');\n\n const changeInnerValue = useCallback(\n (newValue: TNode<T>) => {\n setInnerValue(newValue);\n propsOnChange(newValue);\n },\n [propsOnChange, setInnerValue],\n );\n\n const onAddCondition = (id: string) => {\n const newRootNode = addRecordNode(id, innerValue, newInitializationData);\n changeInnerValue(newRootNode);\n };\n\n const onAddRelation = (id: string) => {\n const newRootNode = addLogicNode(id, innerValue, newInitializationData);\n changeInnerValue(newRootNode);\n };\n\n const onChangeRelation = (id: string, logicType: ELogicType) => {\n const newRootNode = changeRelation(id, logicType, innerValue);\n changeInnerValue(newRootNode);\n };\n\n const onRemove = (id: string) => {\n const newRootNode = removeNode(\n id,\n innerValue,\n initialNode,\n rootNodeAllowedEmpty,\n );\n changeInnerValue(newRootNode);\n };\n\n const onChangeRecordData = (id: string, data: T) => {\n const newRootNode = changeRecordData(id, data, innerValue);\n changeInnerValue(newRootNode);\n };\n\n const moveNode = useCallback(\n (dragId: string, hoverId: string, dropPosition: EPutPosition) => {\n const newRootNode = _.cloneDeep(innerValue);\n const dragNode = findNodeById(dragId, newRootNode);\n const hoverNode = findNodeById(hoverId, newRootNode);\n\n if (dragNode && hoverNode) {\n if (isDescendant(hoverId, dragNode)) {\n return;\n }\n\n const dragParent = findParentNodeById(dragId, newRootNode);\n const hoverParent = findParentNodeById(hoverId, newRootNode);\n\n if (dragParent && hoverParent) {\n // 从原位置移除节点\n dragParent.nodes = dragParent.nodes.filter(\n (node) => node.id !== dragId,\n );\n\n // 如果拖拽父节点为空,处理删除逻辑\n if (dragParent.nodes.length === 0) {\n const grandParent = findParentNodeById(dragParent.id, newRootNode);\n if (grandParent) {\n grandParent.nodes = grandParent.nodes.filter(\n (node) => node.id !== dragParent.id,\n );\n } else {\n dragParent.nodes = [];\n }\n }\n\n // 插入到新位置\n const hoverIndex = hoverParent.nodes.findIndex(\n (node) => node.id === hoverId,\n );\n const newIndex =\n dropPosition === EPutPosition.TOP ? hoverIndex : hoverIndex + 1;\n hoverParent.nodes.splice(newIndex, 0, dragNode);\n\n // 更新状态\n changeInnerValue(newRootNode);\n }\n }\n },\n [innerValue, changeInnerValue],\n );\n\n if (!innerValue) {\n return null;\n }\n\n const content = (\n <div className={cn('ald-logic-tree-wrap', className)}>\n <LogicItem\n value={innerValue}\n addCondition={onAddCondition}\n addRelation={onAddRelation}\n remove={onRemove}\n changeRecordData={onChangeRecordData}\n renderCondition={renderCondition}\n changeRelation={onChangeRelation}\n onDragEnd={moveNode}\n hoverId={hoverItemId}\n setHoverId={setHoverItemId}\n isRoot={true} // 将最顶层的LogicItem标记为根节点\n hideBottomBtn={hideBottomBtn}\n />\n </div>\n );\n\n if (!needDndProvider) {\n return content;\n }\n\n return <DndProvider backend={HTML5Backend}>{content}</DndProvider>;\n}\n"],"mappings":";;;;;;;;;;;;;;AAwBA,IAAY,eAAL,yBAAA,cAAA;AACL,cAAA,SAAA;AACA,cAAA,YAAA;;KACD;AAoBD,SAAwB,UAAa,OAAkB;CACrD,MAAM,EACJ,uBACA,UAAU,eACV,iBACA,sBACA,WACA,kBAAkB,OAClB,kBACE;CACJ,MAAM,cAAwB;EAC5B,IAAI,WAAW;EACf,MAAM,UAAU;EAChB,WAAW,WAAW;EACtB,OAAO,CACL;GACE,IAAI,WAAW;GACf,MAAM,UAAU;GAChB,MAAM;GACP,CACF;EACF;CAED,MAAM,CAAC,YAAY,iBAAiB,qBAClC,MAAM,QAAQ,EAAE,OAAO,MAAM,OAAO,GAAG,EAAE,EACzC,EACE,cAAc,aACf,CACF;CACD,MAAM,CAAC,aAAa,kBAAkB,SAAiB,GAAG;CAE1D,MAAM,mBAAmB,aACtB,aAAuB;AACtB,gBAAc,SAAS;AACvB,gBAAc,SAAS;IAEzB,CAAC,eAAe,cAAc,CAC/B;CAED,MAAM,kBAAkB,OAAe;AAErC,mBADoB,cAAc,IAAI,YAAY,sBAAsB,CAC3C;;CAG/B,MAAM,iBAAiB,OAAe;AAEpC,mBADoB,aAAa,IAAI,YAAY,sBAAsB,CAC1C;;CAG/B,MAAM,oBAAoB,IAAY,cAA0B;AAE9D,mBADoB,eAAe,IAAI,WAAW,WAAW,CAChC;;CAG/B,MAAM,YAAY,OAAe;AAO/B,mBANoB,WAClB,IACA,YACA,aACA,qBACD,CAC4B;;CAG/B,MAAM,sBAAsB,IAAY,SAAY;AAElD,mBADoB,iBAAiB,IAAI,MAAM,WAAW,CAC7B;;CAG/B,MAAM,WAAW,aACd,QAAgB,SAAiB,iBAA+B;EAC/D,MAAM,cAAc,EAAE,UAAU,WAAW;EAC3C,MAAM,WAAW,aAAa,QAAQ,YAAY;EAClD,MAAM,YAAY,aAAa,SAAS,YAAY;AAEpD,MAAI,YAAY,WAAW;AACzB,OAAI,aAAa,SAAS,SAAS,CACjC;GAGF,MAAM,aAAa,mBAAmB,QAAQ,YAAY;GAC1D,MAAM,cAAc,mBAAmB,SAAS,YAAY;AAE5D,OAAI,cAAc,aAAa;AAE7B,eAAW,QAAQ,WAAW,MAAM,QACjC,SAAS,KAAK,OAAO,OACvB;AAGD,QAAI,WAAW,MAAM,WAAW,GAAG;KACjC,MAAM,cAAc,mBAAmB,WAAW,IAAI,YAAY;AAClE,SAAI,YACF,aAAY,QAAQ,YAAY,MAAM,QACnC,SAAS,KAAK,OAAO,WAAW,GAClC;SAED,YAAW,QAAQ,EAAE;;IAKzB,MAAM,aAAa,YAAY,MAAM,WAClC,SAAS,KAAK,OAAO,QACvB;IACD,MAAM,WACJ,iBAAiB,aAAa,MAAM,aAAa,aAAa;AAChE,gBAAY,MAAM,OAAO,UAAU,GAAG,SAAS;AAG/C,qBAAiB,YAAY;;;IAInC,CAAC,YAAY,iBAAiB,CAC/B;AAED,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,UACJ,oBAAC,OAAD;EAAK,WAAW,GAAG,uBAAuB,UAAU;YAClD,oBAAC,WAAD;GACE,OAAO;GACP,cAAc;GACd,aAAa;GACb,QAAQ;GACR,kBAAkB;GACD;GACjB,gBAAgB;GAChB,WAAW;GACX,SAAS;GACT,YAAY;GACZ,QAAQ;GACO;GACf,CAAA;EACE,CAAA;AAGR,KAAI,CAAC,gBACH,QAAO;AAGT,QAAO,oBAAC,aAAD;EAAa,SAAS;YAAe;EAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/LogicTree/index.tsx"],"sourcesContent":["import { useControllableValue } from 'ahooks';\nimport { cn } from '../lib/utils';\nimport './logic-tree.css';\nimport _ from 'lodash';\nimport React, { useCallback, useState } from 'react';\nimport { DndProvider, useDragDropManager } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { getUniqId } from '../_utils/getUniqId';\nimport LogicItem from './components/LogicItem';\nimport {\n addLogicNode,\n addRecordNode,\n changeRecordData,\n changeRelation,\n findNodeById,\n findParentNodeById,\n isDescendant,\n removeNode,\n} from './helper';\nimport { ELogicType, ENodeType, type TNode } from './type';\n\nexport { default as DisplayLogicTree } from './DisplayLogicTree';\nexport * from './type';\n\nexport enum EPutPosition {\n TOP = 'TOP',\n BOTTOM = 'BOTTOM',\n}\n\nexport type TRenderCondition<T> = (\n data: T,\n { changeData }: { changeData: (data: T) => void },\n nodeId: string,\n) => React.ReactNode;\n\ninterface IProps<T> {\n newInitializationData: T;\n onChange: (value: TNode<T>) => void;\n value?: TNode<T>;\n renderCondition: TRenderCondition<T>;\n rootNodeAllowedEmpty?: boolean;\n className?: string;\n needDndProvider?: boolean;\n hideBottomBtn?: {\n addRelation?: boolean;\n };\n}\n\nfunction useHasDndContext() {\n try {\n return !!useDragDropManager();\n } catch {\n return false;\n }\n}\n\nfunction LogicTreeDndProvider({ children }: { children: React.ReactNode }) {\n const hasDndContext = useHasDndContext();\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null);\n\n if (hasDndContext) {\n return <>{children}</>;\n }\n\n return (\n <div ref={setRootElement} style={{ display: 'contents' }}>\n {rootElement ? (\n <DndProvider backend={HTML5Backend} options={{ rootElement }}>\n {children}\n </DndProvider>\n ) : null}\n </div>\n );\n}\n\nexport default function LogicTree<T>(props: IProps<T>) {\n const {\n newInitializationData,\n onChange: propsOnChange,\n renderCondition,\n rootNodeAllowedEmpty,\n className,\n hideBottomBtn,\n } = props;\n const initialNode: TNode<T> = {\n id: getUniqId(),\n type: ENodeType.LOGIC,\n logicType: ELogicType.AND,\n nodes: [\n {\n id: getUniqId(),\n type: ENodeType.RECORD,\n data: newInitializationData,\n },\n ],\n };\n\n const [innerValue, setInnerValue] = useControllableValue<TNode<T>>(\n props.value ? { value: props.value } : {},\n {\n defaultValue: initialNode,\n },\n );\n const [hoverItemId, setHoverItemId] = useState<string>('');\n\n const changeInnerValue = useCallback(\n (newValue: TNode<T>) => {\n setInnerValue(newValue);\n propsOnChange(newValue);\n },\n [propsOnChange, setInnerValue],\n );\n\n const onAddCondition = (id: string) => {\n const newRootNode = addRecordNode(id, innerValue, newInitializationData);\n changeInnerValue(newRootNode);\n };\n\n const onAddRelation = (id: string) => {\n const newRootNode = addLogicNode(id, innerValue, newInitializationData);\n changeInnerValue(newRootNode);\n };\n\n const onChangeRelation = (id: string, logicType: ELogicType) => {\n const newRootNode = changeRelation(id, logicType, innerValue);\n changeInnerValue(newRootNode);\n };\n\n const onRemove = (id: string) => {\n const newRootNode = removeNode(\n id,\n innerValue,\n initialNode,\n rootNodeAllowedEmpty,\n );\n changeInnerValue(newRootNode);\n };\n\n const onChangeRecordData = (id: string, data: T) => {\n const newRootNode = changeRecordData(id, data, innerValue);\n changeInnerValue(newRootNode);\n };\n\n const moveNode = useCallback(\n (dragId: string, hoverId: string, dropPosition: EPutPosition) => {\n const newRootNode = _.cloneDeep(innerValue);\n const dragNode = findNodeById(dragId, newRootNode);\n const hoverNode = findNodeById(hoverId, newRootNode);\n\n if (dragNode && hoverNode) {\n if (isDescendant(hoverId, dragNode)) {\n return;\n }\n\n const dragParent = findParentNodeById(dragId, newRootNode);\n const hoverParent = findParentNodeById(hoverId, newRootNode);\n\n if (dragParent && hoverParent) {\n // 从原位置移除节点\n dragParent.nodes = dragParent.nodes.filter(\n (node) => node.id !== dragId,\n );\n\n // 如果拖拽父节点为空,处理删除逻辑\n if (dragParent.nodes.length === 0) {\n const grandParent = findParentNodeById(dragParent.id, newRootNode);\n if (grandParent) {\n grandParent.nodes = grandParent.nodes.filter(\n (node) => node.id !== dragParent.id,\n );\n } else {\n dragParent.nodes = [];\n }\n }\n\n // 插入到新位置\n const hoverIndex = hoverParent.nodes.findIndex(\n (node) => node.id === hoverId,\n );\n const newIndex =\n dropPosition === EPutPosition.TOP ? hoverIndex : hoverIndex + 1;\n hoverParent.nodes.splice(newIndex, 0, dragNode);\n\n // 更新状态\n changeInnerValue(newRootNode);\n }\n }\n },\n [innerValue, changeInnerValue],\n );\n\n if (!innerValue) {\n return null;\n }\n\n const content = (\n <div className={cn('ald-logic-tree-wrap', className)}>\n <LogicItem\n value={innerValue}\n addCondition={onAddCondition}\n addRelation={onAddRelation}\n remove={onRemove}\n changeRecordData={onChangeRecordData}\n renderCondition={renderCondition}\n changeRelation={onChangeRelation}\n onDragEnd={moveNode}\n hoverId={hoverItemId}\n setHoverId={setHoverItemId}\n isRoot={true} // 将最顶层的LogicItem标记为根节点\n hideBottomBtn={hideBottomBtn}\n />\n </div>\n );\n\n return <LogicTreeDndProvider>{content}</LogicTreeDndProvider>;\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ var NickLabel = ({ photo, name, id, account, type, addonBefore }) => {
10
10
  children: [/* @__PURE__ */ jsx(Avatar, {
11
11
  src: photo,
12
12
  size: 20,
13
- type: type === EUserType.USER ? "user" : "userGroup",
13
+ type: type === EUserType.USER ? "user" : "team",
14
14
  children: innerName
15
15
  }, innerName), /* @__PURE__ */ jsxs("div", {
16
16
  className: "ald-member-picker-nick-label-name",
@@ -1 +1 @@
1
- {"version":3,"file":"NickLabel.js","names":[],"sources":["../../../src/MemberPicker/components/NickLabel.tsx"],"sourcesContent":["import React, { ReactNode, memo } from 'react';\nimport Avatar from '../../Avatar';\nimport { EUserType } from '../../ConfigProvider/getUserList';\n\ninterface INickLabelProps {\n name?: string;\n id: string;\n photo?: React.ReactNode;\n account?: string;\n type: EUserType;\n addonBefore?: ReactNode;\n}\nconst NickLabel: React.FC<INickLabelProps> = ({\n photo,\n name,\n id,\n account,\n type,\n addonBefore,\n}) => {\n const innerName = name || id;\n\n return (\n <div className=\"ald-member-picker-nick-label\">\n <Avatar\n key={innerName}\n src={photo}\n size={20}\n type={type === EUserType.USER ? 'user' : 'userGroup'}\n >\n {innerName}\n </Avatar>\n <div\n className=\"ald-member-picker-nick-label-name\"\n title={account ? `${name}(${account})` : `${name}`}\n >\n {innerName}\n {addonBefore}\n </div>\n </div>\n );\n};\n\nexport default memo(NickLabel);\n"],"mappings":";;;;;AAYA,IAAM,aAAwC,EAC5C,OACA,MACA,IACA,SACA,MACA,kBACI;CACJ,MAAM,YAAY,QAAQ;AAE1B,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD;GAEE,KAAK;GACL,MAAM;GACN,MAAM,SAAS,UAAU,OAAO,SAAS;aAExC;GACM,EANF,UAME,EACT,qBAAC,OAAD;GACE,WAAU;GACV,OAAO,UAAU,GAAG,KAAK,GAAG,QAAQ,KAAK,GAAG;aAF9C,CAIG,WACA,YACG;KACF;;;AAIV,IAAA,oBAAe,KAAK,UAAU"}
1
+ {"version":3,"file":"NickLabel.js","names":[],"sources":["../../../src/MemberPicker/components/NickLabel.tsx"],"sourcesContent":["import React, { ReactNode, memo } from 'react';\nimport Avatar from '../../Avatar';\nimport { EUserType } from '../../ConfigProvider/getUserList';\n\ninterface INickLabelProps {\n name?: string;\n id: string;\n photo?: React.ReactNode;\n account?: string;\n type: EUserType;\n addonBefore?: ReactNode;\n}\nconst NickLabel: React.FC<INickLabelProps> = ({\n photo,\n name,\n id,\n account,\n type,\n addonBefore,\n}) => {\n const innerName = name || id;\n\n return (\n <div className=\"ald-member-picker-nick-label\">\n <Avatar\n key={innerName}\n src={photo}\n size={20}\n type={type === EUserType.USER ? 'user' : 'team'}\n >\n {innerName}\n </Avatar>\n <div\n className=\"ald-member-picker-nick-label-name\"\n title={account ? `${name}(${account})` : `${name}`}\n >\n {innerName}\n {addonBefore}\n </div>\n </div>\n );\n};\n\nexport default memo(NickLabel);\n"],"mappings":";;;;;AAYA,IAAM,aAAwC,EAC5C,OACA,MACA,IACA,SACA,MACA,kBACI;CACJ,MAAM,YAAY,QAAQ;AAE1B,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD;GAEE,KAAK;GACL,MAAM;GACN,MAAM,SAAS,UAAU,OAAO,SAAS;aAExC;GACM,EANF,UAME,EACT,qBAAC,OAAD;GACE,WAAU;GACV,OAAO,UAAU,GAAG,KAAK,GAAG,QAAQ,KAAK,GAAG;aAF9C,CAIG,WACA,YACG;KACF;;;AAIV,IAAA,oBAAe,KAAK,UAAU"}
@@ -105,12 +105,12 @@ function Panel(props) {
105
105
  ["ald-member-picker-single"]: !multiple
106
106
  }),
107
107
  style: { width: panelwidth },
108
- children: multiple ? /* @__PURE__ */ jsxs(Fragment, { children: [
109
- /* @__PURE__ */ jsx("div", {
108
+ children: multiple ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
109
+ className: "ald-member-picker-inner",
110
+ children: [/* @__PURE__ */ jsx("div", {
110
111
  className: "ald-member-picker-member-selection-wrapper",
111
112
  children: renderDropdown()
112
- }),
113
- /* @__PURE__ */ jsx(SelectedMemberTags, {
113
+ }), /* @__PURE__ */ jsx(SelectedMemberTags, {
114
114
  className: "ald-member-picker-selected-member-tags",
115
115
  selectedUsers,
116
116
  width: (panelwidth - 3) / 2,
@@ -118,16 +118,15 @@ function Panel(props) {
118
118
  lockedIds,
119
119
  userList: dataList,
120
120
  renderSelectedTag
121
- }),
122
- /* @__PURE__ */ jsx(SelectorFooter, {
123
- className: "ald-member-picker-selector-footer",
124
- onCancel,
125
- onOk: () => {
126
- onChange?.(selectedUsers);
127
- },
128
- footer
129
- })
130
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [type === EMemberPicker.USER && /* @__PURE__ */ jsx(MemberSelection, {
121
+ })]
122
+ }), /* @__PURE__ */ jsx(SelectorFooter, {
123
+ className: "ald-member-picker-selector-footer",
124
+ onCancel,
125
+ onOk: () => {
126
+ onChange?.(selectedUsers);
127
+ },
128
+ footer
129
+ })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [type === EMemberPicker.USER && /* @__PURE__ */ jsx(MemberSelection, {
131
130
  className: "ald-member-picker-member-selection-single",
132
131
  userList: dataList.filter(isUser),
133
132
  width: panelwidth - 2,
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","names":[],"sources":["../../../src/MemberPicker/components/Panel.tsx"],"sourcesContent":["import { cn } from '../../lib/utils';\n\nimport React, {\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n EUserType,\n IUserGroup,\n TUser,\n TUserGroupValue,\n TUserValue,\n} from '../../ConfigProvider/getUserList';\nimport Tabs from '../../Tabs';\nimport { LocaleContext, getTranslator } from '../../locale/default';\nimport { EMemberPicker, IUser } from '../interface';\nimport { getId } from '../utils';\nimport { isUser, isUserGroup } from '../utils/getUsersWithUserId';\nimport MemberSelection from './MemberSelection';\nimport SelectedMemberTags from './SelectedMemberTags';\nimport SelectorFooter from './SelectorFooter';\nimport UserGroupSelection from './UserGroupSelection';\n\ninterface IPanelProps {\n type: EMemberPicker;\n multiple?: boolean;\n onChange?: (value: TUser) => void;\n dropdownWidth?: number;\n value?: TUser | (IUser | IUserGroup);\n dataList: TUser;\n onSearchValueChange?: (value: string) => void;\n onCancel?: () => void;\n loading: boolean;\n className?: string;\n lockedIds: Array<TUserValue | TUserGroupValue>;\n footer?: ReactNode;\n renderItem?: (\n item: IUser | IUserGroup,\n context: {\n isSelected: boolean;\n disabled: boolean;\n onClick: () => void;\n onNextLevel?: () => void;\n originNode: ReactNode;\n },\n ) => ReactNode;\n renderSelectedTag?: (\n user: IUser | IUserGroup,\n originNode: ReactNode,\n ) => ReactNode;\n filterItem?: (item: IUser | IUserGroup) => boolean;\n}\n\nexport const userDisplayNameIsRepeated = (\n userList: TUser,\n displayName?: string,\n) => {\n return (\n userList.filter(\n (user) => user.type === EUserType.USER && user.nickname === displayName,\n ).length > 1\n );\n};\n\nexport default function Panel(props: IPanelProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n type,\n multiple,\n dropdownWidth,\n value,\n onChange,\n dataList,\n onSearchValueChange,\n className,\n lockedIds,\n footer,\n onCancel,\n renderItem,\n renderSelectedTag,\n filterItem,\n } = props;\n\n const [selectedUsers, setSelected] = useState<TUser>([]);\n\n const onSelectionChange = useCallback(\n (selected: boolean, user: IUser | IUserGroup) => {\n if (multiple) {\n if (selected) {\n setSelected([...selectedUsers, user]);\n } else {\n setSelected(\n selectedUsers.filter((item) => getId(item) !== getId(user)),\n );\n }\n } else {\n if (selected) {\n setSelected([user]);\n onChange?.([user]);\n } else {\n setSelected([]);\n onChange?.([]);\n }\n }\n },\n [multiple, selectedUsers, onChange],\n );\n\n const onRemove = useCallback(\n (user: IUser | IUserGroup) => {\n setSelected(selectedUsers.filter((item) => getId(item) !== getId(user)));\n },\n [selectedUsers],\n );\n\n const panelwidth = useMemo(() => {\n if (dropdownWidth) {\n return dropdownWidth;\n } else if (multiple) {\n return 480;\n } else {\n return 160;\n }\n }, [dropdownWidth, multiple]);\n\n useEffect(() => {\n if (value) {\n if (Array.isArray(value)) {\n setSelected(value);\n } else {\n setSelected([value]);\n }\n }\n }, [setSelected, value]);\n\n const renderDropdown = useCallback(() => {\n const userSelection = (\n <MemberSelection\n className={'ald-member-picker-member-selection-multiple'}\n userList={dataList.filter(isUser)}\n filterItem={filterItem}\n width={(panelwidth - 6) / 2}\n selectedUsers={selectedUsers.filter(isUser)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={true}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></MemberSelection>\n );\n const userGroupSelection = (\n <UserGroupSelection\n className={'ald-member-picker-member-selection-multiple'}\n userGroupList={dataList.filter(isUserGroup)}\n filterItem={filterItem}\n width={(panelwidth - 6) / 2}\n selectedUsersGroup={selectedUsers.filter(isUserGroup)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={true}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></UserGroupSelection>\n );\n if (type === EMemberPicker.USER) {\n return userSelection;\n }\n if (type === EMemberPicker.GROUP) {\n return userGroupSelection;\n }\n if (type === EMemberPicker.BOTH) {\n return (\n <Tabs\n centered\n destroyInactiveTabPane\n items={[\n {\n key: 'user',\n label: t.MemberPicker.users,\n children: userSelection,\n },\n {\n key: 'userGroup',\n label: t.MemberPicker.userGroups,\n children: userGroupSelection,\n },\n ]}\n className=\"ald-member-tabs\"\n ></Tabs>\n );\n }\n }, [\n t,\n dataList,\n panelwidth,\n selectedUsers,\n onSelectionChange,\n onSearchValueChange,\n lockedIds,\n props.loading,\n type,\n renderItem,\n filterItem,\n ]);\n\n return (\n <div\n className={cn(className, 'ald-member-picker-wrapper', {\n ['ald-member-picker-multiple']: multiple,\n ['ald-member-picker-single']: !multiple,\n })}\n style={{ width: panelwidth }}\n >\n {multiple ? (\n <>\n <div className=\"ald-member-picker-member-selection-wrapper\">\n {renderDropdown()}\n </div>\n <SelectedMemberTags\n className={'ald-member-picker-selected-member-tags'}\n selectedUsers={selectedUsers}\n width={(panelwidth - 3) / 2}\n onRemove={onRemove}\n lockedIds={lockedIds}\n userList={dataList}\n renderSelectedTag={renderSelectedTag}\n ></SelectedMemberTags>\n <SelectorFooter\n className={'ald-member-picker-selector-footer'}\n onCancel={onCancel}\n onOk={() => {\n onChange?.(selectedUsers);\n }}\n footer={footer}\n ></SelectorFooter>\n </>\n ) : (\n <>\n {type === EMemberPicker.USER && (\n <MemberSelection\n className={'ald-member-picker-member-selection-single'}\n userList={dataList.filter(isUser)}\n width={panelwidth - 2}\n onChange={onSelectionChange}\n selectedUsers={selectedUsers.filter(isUser)}\n onSearchValueChange={onSearchValueChange}\n multiple={false && multiple}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></MemberSelection>\n )}\n {type === EMemberPicker.GROUP && (\n <UserGroupSelection\n className={'ald-member-picker-member-selection-multiple'}\n userGroupList={dataList.filter(isUserGroup)}\n width={(panelwidth - 3) / 2}\n selectedUsersGroup={selectedUsers.filter(isUserGroup)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={false}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></UserGroupSelection>\n )}\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Panel.js","names":[],"sources":["../../../src/MemberPicker/components/Panel.tsx"],"sourcesContent":["import { cn } from '../../lib/utils';\n\nimport React, {\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n EUserType,\n IUserGroup,\n TUser,\n TUserGroupValue,\n TUserValue,\n} from '../../ConfigProvider/getUserList';\nimport Tabs from '../../Tabs';\nimport { LocaleContext, getTranslator } from '../../locale/default';\nimport { EMemberPicker, IUser } from '../interface';\nimport { getId } from '../utils';\nimport { isUser, isUserGroup } from '../utils/getUsersWithUserId';\nimport MemberSelection from './MemberSelection';\nimport SelectedMemberTags from './SelectedMemberTags';\nimport SelectorFooter from './SelectorFooter';\nimport UserGroupSelection from './UserGroupSelection';\n\ninterface IPanelProps {\n type: EMemberPicker;\n multiple?: boolean;\n onChange?: (value: TUser) => void;\n dropdownWidth?: number;\n value?: TUser | (IUser | IUserGroup);\n dataList: TUser;\n onSearchValueChange?: (value: string) => void;\n onCancel?: () => void;\n loading: boolean;\n className?: string;\n lockedIds: Array<TUserValue | TUserGroupValue>;\n footer?: ReactNode;\n renderItem?: (\n item: IUser | IUserGroup,\n context: {\n isSelected: boolean;\n disabled: boolean;\n onClick: () => void;\n onNextLevel?: () => void;\n originNode: ReactNode;\n },\n ) => ReactNode;\n renderSelectedTag?: (\n user: IUser | IUserGroup,\n originNode: ReactNode,\n ) => ReactNode;\n filterItem?: (item: IUser | IUserGroup) => boolean;\n}\n\nexport const userDisplayNameIsRepeated = (\n userList: TUser,\n displayName?: string,\n) => {\n return (\n userList.filter(\n (user) => user.type === EUserType.USER && user.nickname === displayName,\n ).length > 1\n );\n};\n\nexport default function Panel(props: IPanelProps) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n type,\n multiple,\n dropdownWidth,\n value,\n onChange,\n dataList,\n onSearchValueChange,\n className,\n lockedIds,\n footer,\n onCancel,\n renderItem,\n renderSelectedTag,\n filterItem,\n } = props;\n\n const [selectedUsers, setSelected] = useState<TUser>([]);\n\n const onSelectionChange = useCallback(\n (selected: boolean, user: IUser | IUserGroup) => {\n if (multiple) {\n if (selected) {\n setSelected([...selectedUsers, user]);\n } else {\n setSelected(\n selectedUsers.filter((item) => getId(item) !== getId(user)),\n );\n }\n } else {\n if (selected) {\n setSelected([user]);\n onChange?.([user]);\n } else {\n setSelected([]);\n onChange?.([]);\n }\n }\n },\n [multiple, selectedUsers, onChange],\n );\n\n const onRemove = useCallback(\n (user: IUser | IUserGroup) => {\n setSelected(selectedUsers.filter((item) => getId(item) !== getId(user)));\n },\n [selectedUsers],\n );\n\n const panelwidth = useMemo(() => {\n if (dropdownWidth) {\n return dropdownWidth;\n } else if (multiple) {\n return 480;\n } else {\n return 160;\n }\n }, [dropdownWidth, multiple]);\n\n useEffect(() => {\n if (value) {\n if (Array.isArray(value)) {\n setSelected(value);\n } else {\n setSelected([value]);\n }\n }\n }, [setSelected, value]);\n\n const renderDropdown = useCallback(() => {\n const userSelection = (\n <MemberSelection\n className={'ald-member-picker-member-selection-multiple'}\n userList={dataList.filter(isUser)}\n filterItem={filterItem}\n width={(panelwidth - 6) / 2}\n selectedUsers={selectedUsers.filter(isUser)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={true}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></MemberSelection>\n );\n const userGroupSelection = (\n <UserGroupSelection\n className={'ald-member-picker-member-selection-multiple'}\n userGroupList={dataList.filter(isUserGroup)}\n filterItem={filterItem}\n width={(panelwidth - 6) / 2}\n selectedUsersGroup={selectedUsers.filter(isUserGroup)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={true}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></UserGroupSelection>\n );\n if (type === EMemberPicker.USER) {\n return userSelection;\n }\n if (type === EMemberPicker.GROUP) {\n return userGroupSelection;\n }\n if (type === EMemberPicker.BOTH) {\n return (\n <Tabs\n centered\n destroyInactiveTabPane\n items={[\n {\n key: 'user',\n label: t.MemberPicker.users,\n children: userSelection,\n },\n {\n key: 'userGroup',\n label: t.MemberPicker.userGroups,\n children: userGroupSelection,\n },\n ]}\n className=\"ald-member-tabs\"\n ></Tabs>\n );\n }\n }, [\n t,\n dataList,\n panelwidth,\n selectedUsers,\n onSelectionChange,\n onSearchValueChange,\n lockedIds,\n props.loading,\n type,\n renderItem,\n filterItem,\n ]);\n\n return (\n <div\n className={cn(className, 'ald-member-picker-wrapper', {\n ['ald-member-picker-multiple']: multiple,\n ['ald-member-picker-single']: !multiple,\n })}\n style={{ width: panelwidth }}\n >\n {multiple ? (\n <>\n <div className=\"ald-member-picker-inner\">\n <div className=\"ald-member-picker-member-selection-wrapper\">\n {renderDropdown()}\n </div>\n <SelectedMemberTags\n className={'ald-member-picker-selected-member-tags'}\n selectedUsers={selectedUsers}\n width={(panelwidth - 3) / 2}\n onRemove={onRemove}\n lockedIds={lockedIds}\n userList={dataList}\n renderSelectedTag={renderSelectedTag}\n ></SelectedMemberTags>\n </div>\n <SelectorFooter\n className={'ald-member-picker-selector-footer'}\n onCancel={onCancel}\n onOk={() => {\n onChange?.(selectedUsers);\n }}\n footer={footer}\n ></SelectorFooter>\n </>\n ) : (\n <>\n {type === EMemberPicker.USER && (\n <MemberSelection\n className={'ald-member-picker-member-selection-single'}\n userList={dataList.filter(isUser)}\n width={panelwidth - 2}\n onChange={onSelectionChange}\n selectedUsers={selectedUsers.filter(isUser)}\n onSearchValueChange={onSearchValueChange}\n multiple={false && multiple}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></MemberSelection>\n )}\n {type === EMemberPicker.GROUP && (\n <UserGroupSelection\n className={'ald-member-picker-member-selection-multiple'}\n userGroupList={dataList.filter(isUserGroup)}\n width={(panelwidth - 3) / 2}\n selectedUsersGroup={selectedUsers.filter(isUserGroup)}\n onChange={onSelectionChange}\n onSearchValueChange={onSearchValueChange}\n multiple={false}\n lockedIds={lockedIds}\n loading={props.loading}\n renderItem={renderItem}\n ></UserGroupSelection>\n )}\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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"}