@yoka-ui/ui 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/@Docs-yoka/exports.generated.md +71 -63
  2. package/README.md +6 -4
  3. package/dist/es/business/AiChat/index.js.map +1 -1
  4. package/dist/es/business/AiChat/intentRecognizer.js.map +1 -1
  5. package/dist/es/business/AiChat/navigationManager.js +6 -6
  6. package/dist/es/business/AiChat/navigationManager.js.map +2 -2
  7. package/dist/es/business/DrawerPageInfo/index.js +2 -2
  8. package/dist/es/business/DrawerPageInfo/index.js.map +2 -2
  9. package/dist/es/business/Editor/index.d.ts +1 -1
  10. package/dist/es/business/Editor/index.js.map +2 -2
  11. package/dist/es/business/Empty/index.js +1 -1
  12. package/dist/es/business/Empty/index.js.map +1 -1
  13. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js +2 -2
  14. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  15. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js +3 -3
  16. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  17. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js +2 -2
  18. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  19. package/dist/es/business/ModCommonFilter/index.d.ts +1 -1
  20. package/dist/es/business/ModCommonFilter/index.js.map +2 -2
  21. package/dist/es/business/YkPorjectSelect/index.d.ts +1 -1
  22. package/dist/es/business/YkPorjectSelect/index.js +2 -2
  23. package/dist/es/business/YkPorjectSelect/index.js.map +2 -2
  24. package/dist/es/components/DebounceInput/index.js.map +2 -2
  25. package/dist/es/components/MultipleSelect/index.d.ts +14 -0
  26. package/dist/es/components/MultipleSelect/index.js +1 -1
  27. package/dist/es/components/MultipleSelect/index.js.map +2 -2
  28. package/dist/es/components/RefreshButton/index.js.map +2 -2
  29. package/dist/es/components/SearchWithHistory/index.js +1 -1
  30. package/dist/es/components/SearchWithHistory/index.js.map +2 -2
  31. package/dist/es/components/TextWithToolTip/index.d.ts +1 -1
  32. package/dist/es/components/TextWithToolTip/index.js.map +2 -2
  33. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  34. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  35. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  36. package/dist/es/components/TreeTransfer/index.d.ts +1 -24
  37. package/dist/es/components/TreeTransfer/index.js +8 -8
  38. package/dist/es/components/TreeTransfer/index.js.map +2 -2
  39. package/dist/es/components/TreeTransfer/utils/index.d.ts +1 -1
  40. package/dist/es/components/TreeTransfer/utils/index.js.map +2 -2
  41. package/dist/es/components/YkDateRangePicker/index.d.ts +1 -1
  42. package/dist/es/components/YkDateRangePicker/index.js +1 -1
  43. package/dist/es/components/YkDateRangePicker/index.js.map +2 -2
  44. package/dist/es/components/YkDateRangePicker/index.module.less +2 -1
  45. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  46. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  47. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  48. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  49. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +60 -9
  50. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +3 -3
  51. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  52. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  53. package/dist/es/components/YkRangeDateWithVS/index.d.ts +4 -4
  54. package/dist/es/components/YkRangeDateWithVS/index.js +2 -3
  55. package/dist/es/components/YkRangeDateWithVS/index.js.map +2 -2
  56. package/dist/es/components/YkRangeDateWithVS/index.module.less +23 -4
  57. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +1 -18
  58. package/dist/es/components/YkRangeTimeWithRecent/index.js +27 -7
  59. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +2 -2
  60. package/dist/es/creative/ArcCheckbox/index.d.ts +12 -0
  61. package/dist/es/creative/ArcCheckbox/index.js +49 -0
  62. package/dist/es/creative/ArcCheckbox/index.js.map +7 -0
  63. package/dist/es/creative/ArcCheckbox/index.module.less +102 -0
  64. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +1 -1
  65. package/dist/es/creative/ButtonWithProgress/index.d.ts +1 -1
  66. package/dist/es/creative/ButtonWithProgress/index.js.map +2 -2
  67. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +24 -0
  68. package/dist/es/creative/GlassSegmentedRadio/index.js +75 -0
  69. package/dist/es/creative/GlassSegmentedRadio/index.js.map +7 -0
  70. package/dist/es/creative/GlassSegmentedRadio/index.module.less +241 -0
  71. package/dist/es/index.d.ts +30 -26
  72. package/dist/es/index.js +86 -82
  73. package/dist/es/index.js.map +2 -2
  74. package/dist/es/index.less +3 -1
  75. package/dist/es/layout/FlexGrid/index.d.ts +1 -1
  76. package/dist/es/layout/FlexGrid/index.js.map +2 -2
  77. package/dist/es/layout/YkContainer/index.js.map +1 -1
  78. package/dist/es/layout/YkDrawer/index.d.ts +1 -1
  79. package/dist/es/layout/YkDrawer/index.js +2 -1
  80. package/dist/es/layout/YkDrawer/index.js.map +2 -2
  81. package/dist/es/ui/LabelSelect/demo.js +1 -1
  82. package/dist/es/ui/LabelSelect/demo.js.map +2 -2
  83. package/dist/es/ui/LabelSelect/index.d.ts +1 -1
  84. package/dist/es/ui/LabelSelect/index.js +1 -1
  85. package/dist/es/ui/LabelSelect/index.js.map +2 -2
  86. package/dist/es/ui/LogicOperator/index.d.ts +1 -1
  87. package/dist/es/ui/LogicOperator/index.js.map +2 -2
  88. package/dist/es/ui/YkButton/index.d.ts +1 -1
  89. package/dist/es/ui/YkButton/index.js.map +2 -2
  90. package/dist/es/ui/YkCard/index.d.ts +1 -1
  91. package/dist/es/ui/YkCard/index.js +1 -1
  92. package/dist/es/ui/YkCard/index.js.map +2 -2
  93. package/dist/es/ui/YkCheckbox/index.d.ts +1 -1
  94. package/dist/es/ui/YkCheckbox/index.js.map +2 -2
  95. package/dist/es/ui/YkDescriptions/index.d.ts +1 -1
  96. package/dist/es/ui/YkDescriptions/index.js.map +2 -2
  97. package/dist/es/ui/YkPagination/index.d.ts +1 -1
  98. package/dist/es/ui/YkPagination/index.js.map +2 -2
  99. package/dist/es/ui/YkRadio/index.d.ts +1 -1
  100. package/dist/es/ui/YkRadio/index.js.map +2 -2
  101. package/dist/es/ui/YkSegmented/index.d.ts +1 -1
  102. package/dist/es/ui/YkSegmented/index.js.map +2 -2
  103. package/dist/es/ui/YkSelect/index.d.ts +1 -1
  104. package/dist/es/ui/YkSelect/index.js.map +2 -2
  105. package/dist/es/ui/YkSpin/index.d.ts +1 -1
  106. package/dist/es/ui/YkSpin/index.js.map +2 -2
  107. package/dist/es/ui/YkStatistic/index.d.ts +1 -1
  108. package/dist/es/ui/YkStatistic/index.js.map +2 -2
  109. package/dist/es/ui/YkSwitch/index.d.ts +1 -1
  110. package/dist/es/ui/YkSwitch/index.js.map +2 -2
  111. package/dist/es/ui/YkTabs/index.d.ts +1 -1
  112. package/dist/es/ui/YkTabs/index.js.map +2 -2
  113. package/dist/es/ui/YkTooltip/index.d.ts +1 -1
  114. package/dist/es/ui/YkTooltip/index.js.map +2 -2
  115. package/dist/es/utils/styleUtils.js.map +2 -2
  116. package/dist/es/utils/ykStorybookDoc.js +1 -1
  117. package/dist/es/utils/ykStorybookDoc.js.map +1 -1
  118. package/dist/lib/business/AiChat/index.js.map +1 -1
  119. package/dist/lib/business/AiChat/intentRecognizer.js.map +1 -1
  120. package/dist/lib/business/AiChat/navigationManager.js +6 -6
  121. package/dist/lib/business/AiChat/navigationManager.js.map +2 -2
  122. package/dist/lib/business/DrawerPageInfo/index.js +1 -1
  123. package/dist/lib/business/DrawerPageInfo/index.js.map +2 -2
  124. package/dist/lib/business/Editor/index.d.ts +1 -1
  125. package/dist/lib/business/Editor/index.js.map +2 -2
  126. package/dist/lib/business/Empty/index.js +1 -1
  127. package/dist/lib/business/Empty/index.js.map +1 -1
  128. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +3 -3
  129. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  130. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +4 -4
  131. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  132. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +3 -3
  133. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  134. package/dist/lib/business/ModCommonFilter/index.d.ts +1 -1
  135. package/dist/lib/business/ModCommonFilter/index.js.map +2 -2
  136. package/dist/lib/business/YkPorjectSelect/index.d.ts +1 -1
  137. package/dist/lib/business/YkPorjectSelect/index.js +3 -3
  138. package/dist/lib/business/YkPorjectSelect/index.js.map +2 -2
  139. package/dist/lib/components/DebounceInput/index.js.map +2 -2
  140. package/dist/lib/components/MultipleSelect/index.d.ts +14 -0
  141. package/dist/lib/components/MultipleSelect/index.js +1 -1
  142. package/dist/lib/components/MultipleSelect/index.js.map +2 -2
  143. package/dist/lib/components/RefreshButton/index.js.map +2 -2
  144. package/dist/lib/components/SearchWithHistory/index.js +1 -1
  145. package/dist/lib/components/SearchWithHistory/index.js.map +2 -2
  146. package/dist/lib/components/TextWithToolTip/index.d.ts +1 -1
  147. package/dist/lib/components/TextWithToolTip/index.js.map +2 -2
  148. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  149. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  150. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  151. package/dist/lib/components/TreeTransfer/index.d.ts +1 -24
  152. package/dist/lib/components/TreeTransfer/index.js +3 -3
  153. package/dist/lib/components/TreeTransfer/index.js.map +2 -2
  154. package/dist/lib/components/TreeTransfer/utils/index.d.ts +1 -1
  155. package/dist/lib/components/TreeTransfer/utils/index.js.map +2 -2
  156. package/dist/lib/components/YkDateRangePicker/index.d.ts +1 -1
  157. package/dist/lib/components/YkDateRangePicker/index.js +1 -1
  158. package/dist/lib/components/YkDateRangePicker/index.js.map +2 -2
  159. package/dist/lib/components/YkDateRangePicker/index.module.less +2 -1
  160. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  161. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  162. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  163. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  164. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +59 -8
  165. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +3 -3
  166. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  167. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  168. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +4 -4
  169. package/dist/lib/components/YkRangeDateWithVS/index.js +4 -5
  170. package/dist/lib/components/YkRangeDateWithVS/index.js.map +3 -3
  171. package/dist/lib/components/YkRangeDateWithVS/index.module.less +23 -4
  172. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +1 -18
  173. package/dist/lib/components/YkRangeTimeWithRecent/index.js +27 -7
  174. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +2 -2
  175. package/dist/lib/creative/ArcCheckbox/index.d.ts +12 -0
  176. package/dist/lib/creative/ArcCheckbox/index.js +50 -0
  177. package/dist/lib/creative/ArcCheckbox/index.js.map +7 -0
  178. package/dist/lib/creative/ArcCheckbox/index.module.less +102 -0
  179. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +1 -1
  180. package/dist/lib/creative/ButtonWithProgress/index.d.ts +1 -1
  181. package/dist/lib/creative/ButtonWithProgress/index.js.map +2 -2
  182. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +24 -0
  183. package/dist/lib/creative/GlassSegmentedRadio/index.js +78 -0
  184. package/dist/lib/creative/GlassSegmentedRadio/index.js.map +7 -0
  185. package/dist/lib/creative/GlassSegmentedRadio/index.module.less +241 -0
  186. package/dist/lib/index.d.ts +30 -26
  187. package/dist/lib/index.js +31 -25
  188. package/dist/lib/index.js.map +2 -2
  189. package/dist/lib/index.less +3 -1
  190. package/dist/lib/layout/FlexGrid/index.d.ts +1 -1
  191. package/dist/lib/layout/FlexGrid/index.js.map +2 -2
  192. package/dist/lib/layout/YkContainer/index.js.map +1 -1
  193. package/dist/lib/layout/YkDrawer/index.d.ts +1 -1
  194. package/dist/lib/layout/YkDrawer/index.js +2 -1
  195. package/dist/lib/layout/YkDrawer/index.js.map +2 -2
  196. package/dist/lib/ui/LabelSelect/demo.js +1 -1
  197. package/dist/lib/ui/LabelSelect/demo.js.map +2 -2
  198. package/dist/lib/ui/LabelSelect/index.d.ts +1 -1
  199. package/dist/lib/ui/LabelSelect/index.js +1 -1
  200. package/dist/lib/ui/LabelSelect/index.js.map +2 -2
  201. package/dist/lib/ui/LogicOperator/index.d.ts +1 -1
  202. package/dist/lib/ui/LogicOperator/index.js.map +2 -2
  203. package/dist/lib/ui/YkButton/index.d.ts +1 -1
  204. package/dist/lib/ui/YkButton/index.js.map +2 -2
  205. package/dist/lib/ui/YkCard/index.d.ts +1 -1
  206. package/dist/lib/ui/YkCard/index.js.map +2 -2
  207. package/dist/lib/ui/YkCheckbox/index.d.ts +1 -1
  208. package/dist/lib/ui/YkCheckbox/index.js.map +2 -2
  209. package/dist/lib/ui/YkDescriptions/index.d.ts +1 -1
  210. package/dist/lib/ui/YkDescriptions/index.js.map +2 -2
  211. package/dist/lib/ui/YkPagination/index.d.ts +1 -1
  212. package/dist/lib/ui/YkPagination/index.js.map +2 -2
  213. package/dist/lib/ui/YkRadio/index.d.ts +1 -1
  214. package/dist/lib/ui/YkRadio/index.js.map +2 -2
  215. package/dist/lib/ui/YkSegmented/index.d.ts +1 -1
  216. package/dist/lib/ui/YkSegmented/index.js.map +2 -2
  217. package/dist/lib/ui/YkSelect/index.d.ts +1 -1
  218. package/dist/lib/ui/YkSelect/index.js.map +2 -2
  219. package/dist/lib/ui/YkSpin/index.d.ts +1 -1
  220. package/dist/lib/ui/YkSpin/index.js.map +2 -2
  221. package/dist/lib/ui/YkStatistic/index.d.ts +1 -1
  222. package/dist/lib/ui/YkStatistic/index.js.map +2 -2
  223. package/dist/lib/ui/YkSwitch/index.d.ts +1 -1
  224. package/dist/lib/ui/YkSwitch/index.js.map +2 -2
  225. package/dist/lib/ui/YkTabs/index.d.ts +1 -1
  226. package/dist/lib/ui/YkTabs/index.js.map +2 -2
  227. package/dist/lib/ui/YkTooltip/index.d.ts +1 -1
  228. package/dist/lib/ui/YkTooltip/index.js.map +2 -2
  229. package/dist/lib/utils/styleUtils.js.map +2 -2
  230. package/dist/lib/utils/ykStorybookDoc.js +1 -1
  231. package/dist/lib/utils/ykStorybookDoc.js.map +1 -1
  232. package/package.json +137 -144
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/YkDateRangePicker/index.tsx"],
4
- "sourcesContent": ["/**\n * YkDateRangePicker\n *\n * 带「紧凑预设 tag」与「完整 RangePicker」双模式切换的日期范围选择器。\n *\n * 功能特性:\n * - 默认紧凑模式:以 tag 形式展示「预设标签 + 格式化时间」或「起止时间」\n * - mount 时若无初始值,自动选中「近5分钟」预设\n * - 点击 tag 后展开内嵌的完整 RangePicker,失焦后自动收起\n * - 8 个内置快捷预设,2 列 Grid 布局渲染,当前激活项高亮\n * - 受控组件:区分「用户操作」与「外部赋值」,仅用户操作触发 onChange\n * - 禁用日期:仅允许过去 7 天(含今天)\n * - allowClear:支持一键清除,清除后重置预设状态\n * - 通过 forwardRef + useImperativeHandle 对外暴露 toggleFirstPreset()\n *\n * @example\n * ```tsx\n * const pickerRef = useRef<YkDateRangePickerRef>(null);\n *\n * <YkDateRangePicker\n * value={range}\n * onChange={(val) => setRange(val)}\n * ref={pickerRef}\n * />\n *\n * // 外部强制切换到「近5分钟」\n * pickerRef.current?.toggleFirstPreset();\n * ```\n */\n\nimport { DatePicker } from 'antd';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, {\n type ComponentRef,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styles from './index.module.less';\nconst { RangePicker } = DatePicker;\n\n// ─── 类型 ─────────────────────────────────────────────────────────────────────\n\n/** 时间范围值 */\nexport type DateRangeValue = [Dayjs, Dayjs];\n\n/**\n * 预设项定义\n * - value() 每次调用都返回最新时间,避免闭包缓存旧值\n * - format() 可选,控制紧凑 tag 中的格式化展示文本\n */\ninterface RangePreset {\n label: string;\n /** 工厂函数,返回实时时间范围 */\n value: () => DateRangeValue;\n /** 自定义紧凑模式格式化:返回单个字符串或 [start, end] 数组 */\n format?: (value: DateRangeValue) => string | [string, string];\n}\n\nexport interface YkDateRangePickerProps {\n /** 受控值 */\n value?: DateRangeValue | [];\n /** 用户操作改变时触发(外部 setValue 不会触发) */\n onChange?: (value: DateRangeValue | null) => void;\n /**\n * 是否允许清除。\n * - false(默认):隐藏清除按钮,与 Vue 原版行为一致\n * - true:显示清除按钮,清除后重置预设状态并触发 onChange(null)\n */\n allowClear?: boolean;\n /**\n * 紧凑 tag 无值/清空时的占位文本。\n * 默认:「请选择时间范围」\n */\n placeholder?: string;\n /** 是否禁用选择器 */\n disabled?: boolean;\n /** 校验状态 */\n status?: '' | 'error' | 'warning';\n /** 自定义类名 */\n className?: string;\n /** 自定义内联样式 */\n style?: React.CSSProperties;\n}\n\n/** 通过 ref 对父组件暴露的方法 */\nexport interface YkDateRangePickerRef {\n /** 强制切换到第一个预设(近5分钟)并触发 onChange */\n toggleFirstPreset: () => void;\n}\n\n// ─── 工具函数 ─────────────────────────────────────────────────────────────────\n\n/** 精确到分钟的过去时间区间 */\nfunction pastTime(n: number, unit: dayjs.ManipulateType): DateRangeValue {\n const fmt = 'YYYY-MM-DD HH:mm:ss';\n return [dayjs(dayjs().subtract(n, unit).format(fmt)), dayjs(dayjs().format(fmt))];\n}\n\nconst DISPLAY_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n\n/** 格式化 Dayjs 为紧凑模式展示字符串 / 预设匹配字符串 */\nfunction formatToKey(d: Dayjs): string {\n return dayjs(d).format(DISPLAY_FORMAT);\n}\n\n/** 深度比较两个 value 是否「语义相同」(忽略 Dayjs 引用差异) */\nfunction isValueEqual(a: DateRangeValue | [] | undefined, b: DateRangeValue | [] | undefined): boolean {\n if (a === b) return true;\n if (!a || !b) return a === b;\n if (a.length !== b.length) return false;\n if (a.length < 2 || b.length < 2) return a.length === b.length;\n return (\n formatToKey(a[0] as Dayjs) === formatToKey(b[0] as Dayjs) &&\n formatToKey(a[1] as Dayjs) === formatToKey(b[1] as Dayjs)\n );\n}\n\n// ─── 内置预设列表 ─────────────────────────────────────────────────────────────\n\n/**\n * 8 个内置快捷预设。\n * value 始终是工厂函数,保证每次点击都获取最新的当前时间。\n */\nconst RANGE_PRESETS: RangePreset[] = [\n {\n label: '近5分钟',\n value: () => pastTime(5, 'minute'),\n },\n {\n label: '近15分钟',\n value: () => pastTime(15, 'minute'),\n },\n {\n label: '近30分钟',\n value: () => pastTime(30, 'minute'),\n },\n {\n label: '近1小时',\n value: () => pastTime(1, 'hour'),\n },\n {\n label: '近2小时',\n value: () => pastTime(2, 'hour'),\n },\n {\n label: '近6小时',\n value: () => pastTime(6, 'hour'),\n },\n {\n label: '今天',\n value: () =>\n [\n dayjs(dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n // 紧凑模式只展示日期,如「03-25」\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '昨天',\n value: () =>\n [\n dayjs(dayjs().subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '近7天',\n value: () =>\n [\n dayjs(dayjs().subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n // 紧凑模式展示完整日期区间,如「2024-03-19 ~ 2024-03-25」\n format: (v) => [v[0].format('YYYY-MM-DD'), v[1].format('YYYY-MM-DD')],\n },\n];\n\n// ─── 主组件 ───────────────────────────────────────────────────────────────────\n\nconst YkDateRangePicker = forwardRef<YkDateRangePickerRef, YkDateRangePickerProps>(function YkDateRangePicker(\n {\n value,\n onChange,\n allowClear = false,\n placeholder = '请选择时间范围',\n disabled = false,\n status = '',\n className,\n style,\n },\n ref,\n) {\n // ── 内部状态 ───────────────────────────────────────────────────────────────\n\n /** 是否展示完整 RangePicker(false = 紧凑 tag 模式) */\n const [showFullPicker, setShowFullPicker] = useState(false);\n\n /** RangePicker 下拉面板是否展开 */\n const [open, setOpen] = useState(false);\n\n /**\n * 当前激活的预设定义引用。\n * undefined 表示用户手动选了自定义时间范围。\n */\n const [activePreset, setActivePreset] = useState<RangePreset | undefined>(undefined);\n\n /**\n * 紧凑 tag 中预设的格式化文本。\n * 例:「12:00:00 ~ 13:00:00」或「03-25」或「2024-03-19 ~ 2024-03-25」\n */\n const [presetFormatText, setPresetFormatText] = useState<string | undefined>(undefined);\n\n // ── Refs ───────────────────────────────────────────────────────────────────\n\n /**\n * 标记本次 value 变化是否由用户操作触发(非外部赋值)。\n * 用 ref 而非 state,避免触发额外的重渲染。\n * 与 Vue 版 selfChange 逻辑一致。\n */\n const selfChangeRef = useRef(false);\n\n /**\n * 标记当前 RangePicker.onChange 是否由预设点击触发。\n * 用于区分「预设点击」vs「手动选择」,避免手动选择时错误保留预设状态。\n */\n const isPresetClickRef = useRef(false);\n\n /** 管理 setTimeout,防止竞态 */\n const collapseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n /** 组件根元素,用作 getPopupContainer */\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n /** RangePicker 实例 ref,用于编程式展开面板 */\n const pickerRef = useRef<ComponentRef<typeof RangePicker>>(null);\n\n /** 缓存上一次的 value,用于判断是否是外部变更 */\n const prevValueRef = useRef(value);\n\n /** 延迟收起完整 picker,清除旧定时器避免竞态 */\n const scheduleCollapse = useCallback((delay?: number) => {\n clearTimeout(collapseTimerRef.current);\n collapseTimerRef.current = setTimeout(() => {\n setOpen(false);\n setShowFullPicker(false);\n }, delay ?? 0);\n }, []);\n\n /** 卸载时清理定时器 */\n useEffect(() => () => clearTimeout(collapseTimerRef.current), []);\n\n // ── 默认值:mount 时无初始 value 则自动选中「近5分钟」 ───────────────────\n\n useEffect(() => {\n // 仅在外部未传有效初始值时执行一次\n if (value && (value as DateRangeValue).length === 2) return;\n\n const first = RANGE_PRESETS[0];\n const currentValue = first.value();\n const formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n\n setActivePreset(first);\n setPresetFormatText(formatText);\n\n // 标记为用户操作,避免被下方的外部 value 监听 effect 清空预设状态\n selfChangeRef.current = true;\n onChange?.(currentValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ── 外部 value 变化同步 ────────────────────────────────────────────────────\n\n useEffect(() => {\n // 跳过初始 mount(value 未真正变化)\n if (isValueEqual(prevValueRef.current, value)) return;\n prevValueRef.current = value;\n\n if (!selfChangeRef.current) {\n // 外部 setField 赋值:清空预设状态(无法得知外部值对应哪个预设)\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n }\n // 消费掉标记,等待下次用户操作重新置位\n selfChangeRef.current = false;\n }, [value]);\n\n // ── 紧凑 tag 展示文本 ──────────────────────────────────────────────────────\n\n /**\n * 紧凑模式下起止时间的字符串表示。\n * 与 Vue showState 计算属性逻辑一致。\n */\n const showState = useMemo<[string, string] | []>(() => {\n if (!value || value.length < 2) return [];\n return [formatToKey(value[0] as Dayjs), formatToKey(value[1] as Dayjs)];\n }, [value]);\n\n // ── 预设激活项检测 ─────────────────────────────────────────────────────────\n\n /**\n * 根据当前 value 匹配激活的预设 index(用于高亮渲染)。\n * 将 value 和预设值都格式化为同一字符串后比对,与 Vue presetsNode computed 一致。\n * 依赖 open,确保面板打开时(时间流逝后)重新计算。\n */\n const activePresetIndex = useMemo<number>(() => {\n if (!value || value.length < 2) return -1;\n const [v0, v1] = value as DateRangeValue;\n const valKeys = [formatToKey(v0), formatToKey(v1)];\n return RANGE_PRESETS.findIndex((preset) => {\n const presetVal = preset.value();\n const presetKeys = [formatToKey(presetVal[0]), formatToKey(presetVal[1])];\n return valKeys[0] === presetKeys[0] && valKeys[1] === presetKeys[1];\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, open]);\n\n // ── 事件处理 ──────────────────────────────────────────────────────────────\n\n /**\n * 点击预设项。\n * 对应 Vue handleTogglePreset。\n */\n const handlePresetClick = useCallback(\n (preset: RangePreset) => {\n isPresetClickRef.current = true;\n\n const currentValue = preset.value();\n\n // 计算紧凑 tag 中的格式化文本\n let formatText: string;\n if (preset.format) {\n const res = preset.format(currentValue);\n formatText = Array.isArray(res) ? res.join(' ~ ') : res;\n } else {\n // 无自定义 format:默认展示时间部分,如「12:00:00 ~ 13:00:00」\n formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n }\n\n setActivePreset(preset);\n setPresetFormatText(formatText);\n\n // 向父组件通知新值\n selfChangeRef.current = true;\n onChange?.(currentValue);\n\n // 选完预设后收起 picker\n scheduleCollapse();\n },\n [onChange],\n );\n\n /**\n * RangePicker onChange(用户手动选择日期或点击清除后触发)。\n * 对应 Vue handleChange。\n */\n const handlePickerChange = useCallback(\n (dates: [Dayjs | null, Dayjs | null] | null) => {\n // 无论是否预设点击,只要触发 change 都先清空预设状态\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n isPresetClickRef.current = false;\n\n selfChangeRef.current = true;\n\n if (dates?.[0] && dates?.[1]) {\n // 正常选择\n onChange?.(dates as DateRangeValue);\n } else {\n // 点击清除:value 置为 [](空数组),并退回紧凑 tag 模式显示 placeholder\n onChange?.(null);\n scheduleCollapse();\n }\n },\n [onChange],\n );\n\n /**\n * 点击紧凑 tag → 展开完整 RangePicker 并聚焦。\n * 对应 Vue handleClickPresetPicker。\n */\n /** 模拟按钮激活行为,同时支持鼠标点击和键盘回车/空格 */\n const activateCompactTag = useCallback(() => {\n setShowFullPicker(true);\n // 等待 DOM 渲染后再触发 picker 展开\n setTimeout(() => {\n const el = pickerRef.current?.nativeElement;\n if (el) {\n // 触发第一个 input 的点击,使 antd RangePicker 展开面板\n const input = el.querySelector<HTMLInputElement>('input');\n input?.click();\n input?.focus();\n }\n }, 0);\n }, []);\n\n /**\n * RangePicker 面板开关回调。\n * 面板关闭时延迟退回紧凑模式(避免与选择操作冲突)。\n */\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen);\n if (!isOpen) {\n scheduleCollapse(150);\n }\n },\n [scheduleCollapse],\n );\n\n /**\n * 禁用日期规则:只允许过去 7 天(含今天)。\n * 对应 Vue disabledDate。\n */\n const disabledDate = useCallback((current: Dayjs) => {\n return current && (current > dayjs().endOf('day') || current < dayjs().subtract(6, 'day').startOf('day'));\n }, []);\n\n /**\n * Popup 挂载容器:挂在组件自身 wrapper 内,避免全局定位错乱。\n * 对应 Vue getPopupContainer。\n */\n const getPopupContainer = useCallback((): HTMLElement => {\n return wrapperRef.current ?? document.body;\n }, []);\n\n // ── antd presets 节点 ──────────────────────────────────────────────────────\n\n /**\n * 构建传入 RangePicker 的 presets prop。\n * - label 为自定义 ReactNode,实现点击处理与高亮样式\n * - value 传实时值供 antd 内部使用(如 disabledDate 校验)\n * antd 5.x presets 格式:{ label: ReactNode; value: [Dayjs, Dayjs] }[]\n */\n const presetsNode = useMemo(() => {\n return RANGE_PRESETS.map((preset, index) => {\n const isActive = activePresetIndex === index;\n return {\n label: (\n <div\n className={classNames(styles.yokaPresetItem, {\n [styles.yokaPresetItemActive]: isActive,\n })}\n role=\"option\"\n tabIndex={0}\n aria-selected={isActive}\n onClick={(e) => {\n e.stopPropagation();\n handlePresetClick(preset);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n handlePresetClick(preset);\n }\n }}\n >\n {preset.label}\n </div>\n ),\n value: preset.value() as [Dayjs, Dayjs],\n };\n });\n }, [activePresetIndex, handlePresetClick]);\n\n // ── 对外暴露方法 ───────────────────────────────────────────────────────────\n\n /**\n * 通过 ref 暴露 toggleFirstPreset(),供父组件调用。\n * 对应 Vue defineExpose({ toggleFirstPreset })。\n */\n useImperativeHandle(\n ref,\n () => ({\n toggleFirstPreset() {\n handlePresetClick(RANGE_PRESETS[0]);\n },\n }),\n [handlePresetClick],\n );\n\n // ── 渲染 ──────────────────────────────────────────────────────────────────\n\n // 完整 picker 的可见性:展开状态 或 下拉面板打开时均显示\n const pickerVisible = showFullPicker || open;\n\n return (\n <div\n className={classNames(styles.YkDateRangePicker, className, {\n [styles.yokaDisabled]: disabled,\n })}\n style={style}\n ref={wrapperRef}\n >\n {/* ── 紧凑 Tag 模式 ── */}\n {!showFullPicker && (\n <span\n className={styles.yokaCompactTag}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-disabled={disabled}\n onClick={disabled ? undefined : activateCompactTag}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n activateCompactTag();\n }\n }}\n >\n {/* 图标:绝对定位固定在左侧 */}\n <i className={classNames('iconfont icon-riqi1', styles.yokaCompactTagIcon)} />\n {/* 内容区:flex:1 + justify-content:center 实现视觉居中 */}\n <span className={styles.yokaCompactTagContent}>\n {activePreset ? (\n // 已选预设:「预设名称 (格式化时间)」\n <>\n <span className={styles.yokaCompactTagPresetLabel}>{activePreset.label}</span>\n <span className={styles.yokaCompactTagPresetFormat}>({presetFormatText})</span>\n </>\n ) : showState.length === 2 ? (\n // 自定义时间:「起始时间 ~ 结束时间」\n <>\n <span className={styles.yokaCompactTagDatetime}>{showState[0]}</span>\n <span className={styles.yokaCompactTagSeparator}>~</span>\n <span className={styles.yokaCompactTagDatetime}>{showState[1]}</span>\n </>\n ) : (\n // 无值/清空:placeholder 居中显示\n <span className={styles.yokaCompactTagPlaceholder}>{placeholder}</span>\n )}\n </span>\n </span>\n )}\n\n {/* ── 完整 RangePicker(display 切换以保持 DOM 挂载,避免 focus 闪烁) ── */}\n <div className={styles.yokaPickerWrapper} style={{ display: pickerVisible ? 'flex' : 'none' }}>\n <i className={classNames('iconfont icon-riqi1', styles.yokaPickerWrapperIcon)} />\n <RangePicker\n ref={pickerRef}\n // 值与回调\n value={value && value.length === 2 ? (value as [Dayjs, Dayjs]) : undefined}\n onChange={handlePickerChange}\n open={open}\n onOpenChange={handleOpenChange}\n // 外观\n variant=\"borderless\"\n allowClear={allowClear}\n disabled={disabled}\n status={status || undefined}\n suffixIcon={null}\n // 时间选择(支持秒)\n showTime={{\n format: 'HH:mm:ss',\n hideDisabledOptions: true,\n defaultValue: [dayjs('00:00', 'HH:mm'), dayjs('23:59', 'HH:mm')],\n }}\n format=\"YYYY-MM-DD HH:mm:ss\"\n // 禁用日期\n disabledDate={disabledDate}\n // 预设(自定义渲染)\n presets={presetsNode}\n // Popup 容器\n getPopupContainer={getPopupContainer}\n classNames={{ popup: { root: 'yoka-daterangepicker-popup' } }}\n />\n </div>\n </div>\n );\n});\n\nYkDateRangePicker.displayName = 'YkDateRangePicker';\n\nexport default YkDateRangePicker;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * YkDateRangePicker\n *\n * 带「紧凑预设 tag」与「完整 RangePicker」双模式切换的日期范围选择器。\n *\n * 功能特性:\n * - 默认紧凑模式:以 tag 形式展示「预设标签 + 格式化时间」或「起止时间」\n * - mount 时若无初始值,自动选中「近5分钟」预设\n * - 点击 tag 后展开内嵌的完整 RangePicker,失焦后自动收起\n * - 8 个内置快捷预设,2 列 Grid 布局渲染,当前激活项高亮\n * - 受控组件:区分「用户操作」与「外部赋值」,仅用户操作触发 onChange\n * - 禁用日期:仅允许过去 7 天(含今天)\n * - allowClear:支持一键清除,清除后重置预设状态\n * - 通过 forwardRef + useImperativeHandle 对外暴露 toggleFirstPreset()\n *\n * @example\n * ```tsx\n * const pickerRef = useRef<YkDateRangePickerRef>(null);\n *\n * <YkDateRangePicker\n * value={range}\n * onChange={(val) => setRange(val)}\n * ref={pickerRef}\n * />\n *\n * // 外部强制切换到「近5分钟」\n * pickerRef.current?.toggleFirstPreset();\n * ```\n */\n\nimport { DatePicker } from 'antd';\nimport classNames from 'classnames';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport React, {\n type ComponentRef,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styles from './index.module.less';\n\nconst { RangePicker } = DatePicker;\n\n// ─── 类型 ─────────────────────────────────────────────────────────────────────\n\n/** 时间范围值 */\nexport type DateRangeValue = [Dayjs, Dayjs];\n\n/**\n * 预设项定义\n * - value() 每次调用都返回最新时间,避免闭包缓存旧值\n * - format() 可选,控制紧凑 tag 中的格式化展示文本\n */\ninterface RangePreset {\n label: string;\n /** 工厂函数,返回实时时间范围 */\n value: () => DateRangeValue;\n /** 自定义紧凑模式格式化:返回单个字符串或 [start, end] 数组 */\n format?: (value: DateRangeValue) => string | [string, string];\n}\n\nexport interface YkDateRangePickerProps {\n /** 受控值 */\n value?: DateRangeValue | [];\n /** 用户操作改变时触发(外部 setValue 不会触发) */\n onChange?: (value: DateRangeValue | null) => void;\n /**\n * 是否允许清除。\n * - false(默认):隐藏清除按钮,与 Vue 原版行为一致\n * - true:显示清除按钮,清除后重置预设状态并触发 onChange(null)\n */\n allowClear?: boolean;\n /**\n * 紧凑 tag 无值/清空时的占位文本。\n * 默认:「请选择时间范围」\n */\n placeholder?: string;\n /** 是否禁用选择器 */\n disabled?: boolean;\n /** 校验状态 */\n status?: '' | 'error' | 'warning';\n /** 自定义类名 */\n className?: string;\n /** 自定义内联样式 */\n style?: React.CSSProperties;\n}\n\n/** 通过 ref 对父组件暴露的方法 */\nexport interface YkDateRangePickerRef {\n /** 强制切换到第一个预设(近5分钟)并触发 onChange */\n toggleFirstPreset: () => void;\n}\n\n// ─── 工具函数 ─────────────────────────────────────────────────────────────────\n\n/** 精确到分钟的过去时间区间 */\nfunction pastTime(n: number, unit: dayjs.ManipulateType): DateRangeValue {\n const fmt = 'YYYY-MM-DD HH:mm:ss';\n return [dayjs(dayjs().subtract(n, unit).format(fmt)), dayjs(dayjs().format(fmt))];\n}\n\nconst DISPLAY_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n\n/** 格式化 Dayjs 为紧凑模式展示字符串 / 预设匹配字符串 */\nfunction formatToKey(d: Dayjs): string {\n return dayjs(d).format(DISPLAY_FORMAT);\n}\n\n/** 深度比较两个 value 是否「语义相同」(忽略 Dayjs 引用差异) */\nfunction isValueEqual(a: DateRangeValue | [] | undefined, b: DateRangeValue | [] | undefined): boolean {\n if (a === b) return true;\n if (!a || !b) return a === b;\n if (a.length !== b.length) return false;\n if (a.length < 2 || b.length < 2) return a.length === b.length;\n return (\n formatToKey(a[0] as Dayjs) === formatToKey(b[0] as Dayjs) &&\n formatToKey(a[1] as Dayjs) === formatToKey(b[1] as Dayjs)\n );\n}\n\n// ─── 内置预设列表 ─────────────────────────────────────────────────────────────\n\n/**\n * 8 个内置快捷预设。\n * value 始终是工厂函数,保证每次点击都获取最新的当前时间。\n */\nconst RANGE_PRESETS: RangePreset[] = [\n {\n label: '近5分钟',\n value: () => pastTime(5, 'minute'),\n },\n {\n label: '近15分钟',\n value: () => pastTime(15, 'minute'),\n },\n {\n label: '近30分钟',\n value: () => pastTime(30, 'minute'),\n },\n {\n label: '近1小时',\n value: () => pastTime(1, 'hour'),\n },\n {\n label: '近2小时',\n value: () => pastTime(2, 'hour'),\n },\n {\n label: '近6小时',\n value: () => pastTime(6, 'hour'),\n },\n {\n label: '今天',\n value: () =>\n [\n dayjs(dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n // 紧凑模式只展示日期,如「03-25」\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '昨天',\n value: () =>\n [\n dayjs(dayjs().subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '近7天',\n value: () =>\n [\n dayjs(dayjs().subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')),\n ] as DateRangeValue,\n // 紧凑模式展示完整日期区间,如「2024-03-19 ~ 2024-03-25」\n format: (v) => [v[0].format('YYYY-MM-DD'), v[1].format('YYYY-MM-DD')],\n },\n];\n\n// ─── 主组件 ───────────────────────────────────────────────────────────────────\n\nconst YkDateRangePicker = forwardRef<YkDateRangePickerRef, YkDateRangePickerProps>(function YkDateRangePicker(\n {\n value,\n onChange,\n allowClear = false,\n placeholder = '请选择时间范围',\n disabled = false,\n status = '',\n className,\n style,\n },\n ref,\n) {\n // ── 内部状态 ───────────────────────────────────────────────────────────────\n\n /** 是否展示完整 RangePicker(false = 紧凑 tag 模式) */\n const [showFullPicker, setShowFullPicker] = useState(false);\n\n /** RangePicker 下拉面板是否展开 */\n const [open, setOpen] = useState(false);\n\n /**\n * 当前激活的预设定义引用。\n * undefined 表示用户手动选了自定义时间范围。\n */\n const [activePreset, setActivePreset] = useState<RangePreset | undefined>(undefined);\n\n /**\n * 紧凑 tag 中预设的格式化文本。\n * 例:「12:00:00 ~ 13:00:00」或「03-25」或「2024-03-19 ~ 2024-03-25」\n */\n const [presetFormatText, setPresetFormatText] = useState<string | undefined>(undefined);\n\n // ── Refs ───────────────────────────────────────────────────────────────────\n\n /**\n * 标记本次 value 变化是否由用户操作触发(非外部赋值)。\n * 用 ref 而非 state,避免触发额外的重渲染。\n * 与 Vue 版 selfChange 逻辑一致。\n */\n const selfChangeRef = useRef(false);\n\n /**\n * 标记当前 RangePicker.onChange 是否由预设点击触发。\n * 用于区分「预设点击」vs「手动选择」,避免手动选择时错误保留预设状态。\n */\n const isPresetClickRef = useRef(false);\n\n /** 管理 setTimeout,防止竞态 */\n const collapseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n /** 组件根元素,用作 getPopupContainer */\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n /** RangePicker 实例 ref,用于编程式展开面板 */\n const pickerRef = useRef<ComponentRef<typeof RangePicker>>(null);\n\n /** 缓存上一次的 value,用于判断是否是外部变更 */\n const prevValueRef = useRef(value);\n\n /** 延迟收起完整 picker,清除旧定时器避免竞态 */\n const scheduleCollapse = useCallback((delay?: number) => {\n clearTimeout(collapseTimerRef.current);\n collapseTimerRef.current = setTimeout(() => {\n setOpen(false);\n setShowFullPicker(false);\n }, delay ?? 0);\n }, []);\n\n /** 卸载时清理定时器 */\n useEffect(() => () => clearTimeout(collapseTimerRef.current), []);\n\n // ── 默认值:mount 时无初始 value 则自动选中「近5分钟」 ───────────────────\n\n useEffect(() => {\n // 仅在外部未传有效初始值时执行一次\n if (value && (value as DateRangeValue).length === 2) return;\n\n const first = RANGE_PRESETS[0];\n const currentValue = first.value();\n const formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n\n setActivePreset(first);\n setPresetFormatText(formatText);\n\n // 标记为用户操作,避免被下方的外部 value 监听 effect 清空预设状态\n selfChangeRef.current = true;\n onChange?.(currentValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ── 外部 value 变化同步 ────────────────────────────────────────────────────\n\n useEffect(() => {\n // 跳过初始 mount(value 未真正变化)\n if (isValueEqual(prevValueRef.current, value)) return;\n prevValueRef.current = value;\n\n if (!selfChangeRef.current) {\n // 外部 setField 赋值:清空预设状态(无法得知外部值对应哪个预设)\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n }\n // 消费掉标记,等待下次用户操作重新置位\n selfChangeRef.current = false;\n }, [value]);\n\n // ── 紧凑 tag 展示文本 ──────────────────────────────────────────────────────\n\n /**\n * 紧凑模式下起止时间的字符串表示。\n * 与 Vue showState 计算属性逻辑一致。\n */\n const showState = useMemo<[string, string] | []>(() => {\n if (!value || value.length < 2) return [];\n return [formatToKey(value[0] as Dayjs), formatToKey(value[1] as Dayjs)];\n }, [value]);\n\n // ── 预设激活项检测 ─────────────────────────────────────────────────────────\n\n /**\n * 根据当前 value 匹配激活的预设 index(用于高亮渲染)。\n * 将 value 和预设值都格式化为同一字符串后比对,与 Vue presetsNode computed 一致。\n * 依赖 open,确保面板打开时(时间流逝后)重新计算。\n */\n const activePresetIndex = useMemo<number>(() => {\n if (!value || value.length < 2) return -1;\n const [v0, v1] = value as DateRangeValue;\n const valKeys = [formatToKey(v0), formatToKey(v1)];\n return RANGE_PRESETS.findIndex((preset) => {\n const presetVal = preset.value();\n const presetKeys = [formatToKey(presetVal[0]), formatToKey(presetVal[1])];\n return valKeys[0] === presetKeys[0] && valKeys[1] === presetKeys[1];\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, open]);\n\n // ── 事件处理 ──────────────────────────────────────────────────────────────\n\n /**\n * 点击预设项。\n * 对应 Vue handleTogglePreset。\n */\n const handlePresetClick = useCallback(\n (preset: RangePreset) => {\n isPresetClickRef.current = true;\n\n const currentValue = preset.value();\n\n // 计算紧凑 tag 中的格式化文本\n let formatText: string;\n if (preset.format) {\n const res = preset.format(currentValue);\n formatText = Array.isArray(res) ? res.join(' ~ ') : res;\n } else {\n // 无自定义 format:默认展示时间部分,如「12:00:00 ~ 13:00:00」\n formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n }\n\n setActivePreset(preset);\n setPresetFormatText(formatText);\n\n // 向父组件通知新值\n selfChangeRef.current = true;\n onChange?.(currentValue);\n\n // 选完预设后收起 picker\n scheduleCollapse();\n },\n [onChange],\n );\n\n /**\n * RangePicker onChange(用户手动选择日期或点击清除后触发)。\n * 对应 Vue handleChange。\n */\n const handlePickerChange = useCallback(\n (dates: [Dayjs | null, Dayjs | null] | null) => {\n // 无论是否预设点击,只要触发 change 都先清空预设状态\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n isPresetClickRef.current = false;\n\n selfChangeRef.current = true;\n\n if (dates?.[0] && dates?.[1]) {\n // 正常选择\n onChange?.(dates as DateRangeValue);\n } else {\n // 点击清除:value 置为 [](空数组),并退回紧凑 tag 模式显示 placeholder\n onChange?.(null);\n scheduleCollapse();\n }\n },\n [onChange],\n );\n\n /**\n * 点击紧凑 tag → 展开完整 RangePicker 并聚焦。\n * 对应 Vue handleClickPresetPicker。\n */\n /** 模拟按钮激活行为,同时支持鼠标点击和键盘回车/空格 */\n const activateCompactTag = useCallback(() => {\n setShowFullPicker(true);\n // 等待 DOM 渲染后再触发 picker 展开\n setTimeout(() => {\n const el = pickerRef.current?.nativeElement;\n if (el) {\n // 触发第一个 input 的点击,使 antd RangePicker 展开面板\n const input = el.querySelector<HTMLInputElement>('input');\n input?.click();\n input?.focus();\n }\n }, 0);\n }, []);\n\n /**\n * RangePicker 面板开关回调。\n * 面板关闭时延迟退回紧凑模式(避免与选择操作冲突)。\n */\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n setOpen(isOpen);\n if (!isOpen) {\n scheduleCollapse(150);\n }\n },\n [scheduleCollapse],\n );\n\n /**\n * 禁用日期规则:只允许过去 7 天(含今天)。\n * 对应 Vue disabledDate。\n */\n const disabledDate = useCallback((current: Dayjs) => {\n return current && (current > dayjs().endOf('day') || current < dayjs().subtract(6, 'day').startOf('day'));\n }, []);\n\n /**\n * Popup 挂载容器:挂在组件自身 wrapper 内,避免全局定位错乱。\n * 对应 Vue getPopupContainer。\n */\n const getPopupContainer = useCallback((): HTMLElement => {\n return wrapperRef.current ?? document.body;\n }, []);\n\n // ── antd presets 节点 ──────────────────────────────────────────────────────\n\n /**\n * 构建传入 RangePicker 的 presets prop。\n * - label 为自定义 ReactNode,实现点击处理与高亮样式\n * - value 传实时值供 antd 内部使用(如 disabledDate 校验)\n * antd 5.x presets 格式:{ label: ReactNode; value: [Dayjs, Dayjs] }[]\n */\n const presetsNode = useMemo(() => {\n return RANGE_PRESETS.map((preset, index) => {\n const isActive = activePresetIndex === index;\n return {\n label: (\n <div\n className={classNames(styles.yokaPresetItem, {\n [styles.yokaPresetItemActive]: isActive,\n })}\n role='option'\n tabIndex={0}\n aria-selected={isActive}\n onClick={(e) => {\n e.stopPropagation();\n handlePresetClick(preset);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n handlePresetClick(preset);\n }\n }}\n >\n {preset.label}\n </div>\n ),\n value: preset.value() as [Dayjs, Dayjs],\n };\n });\n }, [activePresetIndex, handlePresetClick]);\n\n // ── 对外暴露方法 ───────────────────────────────────────────────────────────\n\n /**\n * 通过 ref 暴露 toggleFirstPreset(),供父组件调用。\n * 对应 Vue defineExpose({ toggleFirstPreset })。\n */\n useImperativeHandle(\n ref,\n () => ({\n toggleFirstPreset() {\n handlePresetClick(RANGE_PRESETS[0]);\n },\n }),\n [handlePresetClick],\n );\n\n // ── 渲染 ──────────────────────────────────────────────────────────────────\n\n // 完整 picker 的可见性:展开状态 或 下拉面板打开时均显示\n const pickerVisible = showFullPicker || open;\n\n return (\n <div\n className={classNames(styles.YkDateRangePicker, className, {\n [styles.yokaDisabled]: disabled,\n })}\n ref={wrapperRef}\n >\n {/* ── 紧凑 Tag 模式 ── */}\n {!showFullPicker && (\n <span\n className={styles.yokaCompactTag}\n style={style}\n role='button'\n tabIndex={disabled ? -1 : 0}\n aria-haspopup='dialog'\n aria-expanded={open}\n aria-disabled={disabled}\n onClick={disabled ? undefined : activateCompactTag}\n onKeyDown={(e) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n activateCompactTag();\n }\n }}\n >\n {/* 图标:绝对定位固定在左侧 */}\n <i className={classNames('iconfont icon-riqi1', styles.yokaCompactTagIcon)} />\n {/* 内容区:flex:1 + justify-content:center 实现视觉居中 */}\n <span className={styles.yokaCompactTagContent}>\n {activePreset ? (\n // 已选预设:「预设名称 (格式化时间)」\n <>\n <span className={styles.yokaCompactTagPresetLabel}>{activePreset.label}</span>\n <span className={styles.yokaCompactTagPresetFormat}>({presetFormatText})</span>\n </>\n ) : showState.length === 2 ? (\n // 自定义时间:「起始时间 ~ 结束时间」\n <>\n <span className={styles.yokaCompactTagDatetime}>{showState[0]}</span>\n <span className={styles.yokaCompactTagSeparator}>~</span>\n <span className={styles.yokaCompactTagDatetime}>{showState[1]}</span>\n </>\n ) : (\n // 无值/清空:placeholder 居中显示\n <span className={styles.yokaCompactTagPlaceholder}>{placeholder}</span>\n )}\n </span>\n </span>\n )}\n\n {/* ── 完整 RangePicker(display 切换以保持 DOM 挂载,避免 focus 闪烁) ── */}\n <div className={styles.yokaPickerWrapper} style={{ display: pickerVisible ? 'flex' : 'none' }}>\n <i className={classNames('iconfont icon-riqi1', styles.yokaPickerWrapperIcon)} />\n <RangePicker\n ref={pickerRef}\n // 值与回调\n value={value && value.length === 2 ? (value as [Dayjs, Dayjs]) : undefined}\n onChange={handlePickerChange}\n open={open}\n onOpenChange={handleOpenChange}\n // 外观\n variant='borderless'\n allowClear={allowClear}\n disabled={disabled}\n status={status || undefined}\n suffixIcon={null}\n // 时间选择(支持秒)\n showTime={{\n format: 'HH:mm:ss',\n hideDisabledOptions: true,\n defaultValue: [dayjs('00:00', 'HH:mm'), dayjs('23:59', 'HH:mm')],\n }}\n format='YYYY-MM-DD HH:mm:ss'\n // 禁用日期\n disabledDate={disabledDate}\n // 预设(自定义渲染)\n presets={presetsNode}\n // Popup 容器\n getPopupContainer={getPopupContainer}\n classNames={{ popup: { root: 'yoka-daterangepicker-popup' } }}\n />\n </div>\n </div>\n );\n});\n\nYkDateRangePicker.displayName = 'YkDateRangePicker';\n\nexport default YkDateRangePicker;\n"],
5
+ "mappings": "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",
6
6
  "names": ["YkDateRangePicker"]
7
7
  }
@@ -24,7 +24,8 @@
24
24
  align-items: center;
25
25
  /* 图标绝对定位后,内容区可以真正居中 */
26
26
  position: relative;
27
- min-width: 220px;
27
+ /* 继承父容器宽度(当用户传入自定义 width 时),避免切换时伸缩 */
28
+ min-width: 260px;
28
29
  height: 30px;
29
30
  padding: 0 10px 0 32px; /* 左侧为图标留出空间 */
30
31
  border: 1px solid #1890ff;
@@ -1,4 +1,4 @@
1
- import { Dayjs } from 'dayjs';
1
+ import { type Dayjs } from 'dayjs';
2
2
  import React from 'react';
3
3
  type DateValue = Dayjs | null;
4
4
  type RangeValue = [DateValue, DateValue] | null;
@@ -4,8 +4,8 @@ import datePickerZhCN from "antd/es/date-picker/locale/zh_CN";
4
4
  import classNames from "classnames";
5
5
  import dayjs from "dayjs";
6
6
  import React, { useEffect, useState } from "react";
7
- import YkRangeDateWithVSSelect from "./YkRangeDateWithVSSelect";
8
7
  import styles from "./styles";
8
+ import YkRangeDateWithVSSelect from "./YkRangeDateWithVSSelect";
9
9
  var itemCheckIconClass = (className) => {
10
10
  return classNames("iconfont", className, styles.active);
11
11
  };
@@ -156,10 +156,11 @@ var YkRangeDateWithVSCompare = ({
156
156
  setHasDate(true);
157
157
  setDateOpen(true);
158
158
  break;
159
- default:
159
+ default: {
160
160
  const arr = checkDate(Number(v.value));
161
161
  onChange({ rangeDate: arr });
162
162
  break;
163
+ }
163
164
  }
164
165
  }
165
166
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.tsx"],
4
- "sourcesContent": ["import type { DatePickerProps } from 'antd';\nimport { DatePicker, Tooltip } from 'antd';\nimport datePickerZhCN from 'antd/es/date-picker/locale/zh_CN';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useState } from 'react';\nimport YkRangeDateWithVSSelect from './YkRangeDateWithVSSelect';\nimport styles from './styles';\ntype DateValue = Dayjs | null;\ntype RangeValue = [DateValue, DateValue] | null;\ntype optionsType = {\n label: string;\n value: number | string;\n filter: string[];\n};\n\nconst itemCheckIconClass = (className: string) => {\n return classNames('iconfont', className, styles.active);\n};\nconst shortcutClass = (v: boolean) => {\n return classNames(\n {\n [styles.checked]: v,\n },\n styles.ykRangeDateWithVsShortcutItem,\n );\n};\n\nexport interface YkRangeDateWithVSCompareProps {\n timeType: string;\n rangeDate: [DateValue, DateValue];\n originDate: RangeValue;\n dayLine: number;\n disableCompare?: boolean;\n onChange: (value: { rangeDate: RangeValue }) => void;\n}\n\nconst comparedOptions: optionsType[] = [\n { label: '前一日', value: 1, filter: ['date'] },\n { label: '前一周', value: 7, filter: ['date', 'week'] },\n { label: '前一月', value: 30, filter: ['date', 'week', 'month'] },\n { label: '自定义时间', value: 'customize', filter: ['date', 'week', 'month'] },\n];\nconst pickerMap: {\n [key: string]: 'date' | 'week' | 'month';\n} = {\n 按自然周: 'week',\n 按自然月: 'month',\n 按周: 'week',\n 按月: 'month',\n};\n\nconst YkRangeDateWithVSCompare: React.FC<YkRangeDateWithVSCompareProps> = ({\n timeType,\n rangeDate,\n originDate,\n dayLine,\n onChange,\n disableCompare = false,\n}) => {\n const [hasDate, setHasDate] = useState(false);\n const [dateOpen, setDateOpen] = useState(false);\n const [cacheStartTime, setCacheStartTime] = useState<DateValue | null>(null);\n const [comparedIndex, setComparedIndex] = useState<number | null>(null);\n const picker = pickerMap[timeType] || 'date';\n const options = comparedOptions\n .filter((v) => {\n return v.filter.includes(picker);\n })\n .map((v) => ({\n label: v.label,\n value: v.value,\n }));\n\n useEffect(() => {\n if (rangeDate && rangeDate[0] && rangeDate[1]) {\n setHasDate(true);\n setCacheStartTime(rangeDate[0]);\n }\n }, [rangeDate]);\n\n useEffect(() => {\n if (dateOpen && originDate && originDate[0] && cacheStartTime) {\n const num = originDate[0].diff(cacheStartTime, 'day');\n setComparedIndex(\n options.findIndex((v) => {\n return v.value === num;\n }),\n );\n } else {\n setComparedIndex(null);\n }\n }, [dateOpen]);\n\n const checkDate = (n: number) => {\n const arr: [DateValue, DateValue] = [null, null];\n if (originDate && originDate[0] && originDate[1]) {\n arr[0] = dayjs(originDate[0]).add(-n, 'day');\n dayjs(originDate[1]).add(-n) > dayjs().endOf('day')\n ? (arr[1] = dayjs(originDate[1]))\n : (arr[1] = dayjs(originDate[1]).add(-n, 'day'));\n }\n return arr;\n };\n\n const customFormat: DatePickerProps['format'] = (value) => {\n const endTime =\n dayjs(value).add(dayLine, 'day') > dayjs().endOf('day')\n ? dayjs().format('YYYY-MM-DD')\n : dayjs(value).add(dayLine, 'day').format('YYYY-MM-DD');\n return `${dayjs(value).format('YYYY-MM-DD')} ~ ${endTime}`;\n };\n\n const dateRender = (panelNode: React.ReactNode) => {\n return (\n <div className={styles.ykRangeDateWithVsGroup}>\n <div className={styles.ykRangeDateWithVsShortcut}>\n <div className={styles.ykRangeDateWithVsShortcutContent}>\n {options\n .filter((v) => v.value !== 'customize')\n .map((v, i) => (\n <span\n onClick={() => {\n const arr = checkDate(Number(v.value));\n setComparedIndex(i);\n if (arr[0]) {\n const endTime =\n arr[0].add(dayLine, 'day') > dayjs().endOf('day') ? dayjs() : arr[0].add(dayLine, 'day');\n onChange({\n rangeDate: [arr[0], endTime],\n });\n }\n setDateOpen(false);\n }}\n key={v.label}\n className={shortcutClass(comparedIndex === i)}\n >\n {v.label}\n </span>\n ))}\n </div>\n </div>\n <div>{panelNode}</div>\n </div>\n );\n };\n\n return (\n <div className={styles.globalMl}>\n {hasDate ? (\n <div style={{ display: 'flex' }}>\n <i className={classNames('iconfont icon-duibi', styles.globalDuibiIcon)} />\n <div className={classNames(styles.globalMl, styles.globalItem, styles.globalItemChecked)}>\n <i className={itemCheckIconClass('')} />\n <DatePicker\n locale={datePickerZhCN}\n classNames={{\n popup: {\n root: styles.globalItemDatePanel,\n },\n }}\n getPopupContainer={(triggerNode) => triggerNode.parentNode as HTMLElement}\n disabledDate={(current) => {\n return current && current > dayjs().endOf('day');\n }}\n picker={picker}\n value={cacheStartTime}\n open={dateOpen}\n placeholder='开始日期'\n className={styles.globalItemDateSingle}\n variant='borderless'\n showNow={false}\n allowClear={false}\n suffixIcon={false}\n panelRender={dateRender}\n format={customFormat}\n onChange={(val) => {\n setCacheStartTime(val);\n const endTime = val.add(dayLine, 'day') > dayjs().endOf('day') ? dayjs() : val.add(dayLine, 'day');\n onChange({\n rangeDate: [val, endTime],\n });\n }}\n onOpenChange={(flag: boolean) => {\n setDateOpen(flag);\n }}\n />\n <div className={styles.globalItemDateDel}>\n <i\n className={classNames('iconfont icon-guanbi2')}\n onClick={(e) => {\n e.stopPropagation();\n onChange({ rangeDate: [null, null] });\n setHasDate(false);\n setCacheStartTime(null);\n }}\n ></i>\n </div>\n </div>\n </div>\n ) : (\n <YkRangeDateWithVSSelect\n options={options}\n disabled={disableCompare}\n onChange={(v) => {\n switch (v.value) {\n case 'customize':\n setHasDate(true);\n setDateOpen(true);\n // setIsFocus(true);\n break;\n default:\n const arr = checkDate(Number(v.value));\n onChange({ rangeDate: arr });\n break;\n }\n }}\n >\n <Tooltip\n placement='top'\n title={\n disableCompare\n ? '日期对比不支持细分'\n : picker === 'month'\n ? '实际数据为选择的日期所在月份的整月数据'\n : null\n }\n color='#fff'\n styles={{\n body: {\n color: '#333',\n },\n }}\n >\n <div\n className={classNames(styles.globalMl, styles.globalItem, disableCompare ? styles.globalDisabled : '')}\n >\n <i className={itemCheckIconClass('icon-jiahao2')} />\n <div>日期对比</div>\n </div>\n </Tooltip>\n </YkRangeDateWithVSSelect>\n )}\n </div>\n );\n};\n\nexport default YkRangeDateWithVSCompare;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { DatePickerProps } from 'antd';\nimport { DatePicker, Tooltip } from 'antd';\nimport datePickerZhCN from 'antd/es/date-picker/locale/zh_CN';\nimport classNames from 'classnames';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport React, { useEffect, useState } from 'react';\nimport styles from './styles';\nimport YkRangeDateWithVSSelect from './YkRangeDateWithVSSelect';\n\ntype DateValue = Dayjs | null;\ntype RangeValue = [DateValue, DateValue] | null;\ntype optionsType = {\n label: string;\n value: number | string;\n filter: string[];\n};\n\nconst itemCheckIconClass = (className: string) => {\n return classNames('iconfont', className, styles.active);\n};\nconst shortcutClass = (v: boolean) => {\n return classNames(\n {\n [styles.checked]: v,\n },\n styles.ykRangeDateWithVsShortcutItem,\n );\n};\n\nexport interface YkRangeDateWithVSCompareProps {\n timeType: string;\n rangeDate: [DateValue, DateValue];\n originDate: RangeValue;\n dayLine: number;\n disableCompare?: boolean;\n onChange: (value: { rangeDate: RangeValue }) => void;\n}\n\nconst comparedOptions: optionsType[] = [\n { label: '前一日', value: 1, filter: ['date'] },\n { label: '前一周', value: 7, filter: ['date', 'week'] },\n { label: '前一月', value: 30, filter: ['date', 'week', 'month'] },\n { label: '自定义时间', value: 'customize', filter: ['date', 'week', 'month'] },\n];\nconst pickerMap: {\n [key: string]: 'date' | 'week' | 'month';\n} = {\n 按自然周: 'week',\n 按自然月: 'month',\n 按周: 'week',\n 按月: 'month',\n};\n\nconst YkRangeDateWithVSCompare: React.FC<YkRangeDateWithVSCompareProps> = ({\n timeType,\n rangeDate,\n originDate,\n dayLine,\n onChange,\n disableCompare = false,\n}) => {\n const [hasDate, setHasDate] = useState(false);\n const [dateOpen, setDateOpen] = useState(false);\n const [cacheStartTime, setCacheStartTime] = useState<DateValue | null>(null);\n const [comparedIndex, setComparedIndex] = useState<number | null>(null);\n const picker = pickerMap[timeType] || 'date';\n const options = comparedOptions\n .filter((v) => {\n return v.filter.includes(picker);\n })\n .map((v) => ({\n label: v.label,\n value: v.value,\n }));\n\n useEffect(() => {\n if (rangeDate && rangeDate[0] && rangeDate[1]) {\n setHasDate(true);\n setCacheStartTime(rangeDate[0]);\n }\n }, [rangeDate]);\n\n useEffect(() => {\n if (dateOpen && originDate && originDate[0] && cacheStartTime) {\n const num = originDate[0].diff(cacheStartTime, 'day');\n setComparedIndex(\n options.findIndex((v) => {\n return v.value === num;\n }),\n );\n } else {\n setComparedIndex(null);\n }\n }, [dateOpen]);\n\n const checkDate = (n: number) => {\n const arr: [DateValue, DateValue] = [null, null];\n if (originDate && originDate[0] && originDate[1]) {\n arr[0] = dayjs(originDate[0]).add(-n, 'day');\n dayjs(originDate[1]).add(-n) > dayjs().endOf('day')\n ? (arr[1] = dayjs(originDate[1]))\n : (arr[1] = dayjs(originDate[1]).add(-n, 'day'));\n }\n return arr;\n };\n\n const customFormat: DatePickerProps['format'] = (value) => {\n const endTime =\n dayjs(value).add(dayLine, 'day') > dayjs().endOf('day')\n ? dayjs().format('YYYY-MM-DD')\n : dayjs(value).add(dayLine, 'day').format('YYYY-MM-DD');\n return `${dayjs(value).format('YYYY-MM-DD')} ~ ${endTime}`;\n };\n\n const dateRender = (panelNode: React.ReactNode) => {\n return (\n <div className={styles.ykRangeDateWithVsGroup}>\n <div className={styles.ykRangeDateWithVsShortcut}>\n <div className={styles.ykRangeDateWithVsShortcutContent}>\n {options\n .filter((v) => v.value !== 'customize')\n .map((v, i) => (\n <span\n onClick={() => {\n const arr = checkDate(Number(v.value));\n setComparedIndex(i);\n if (arr[0]) {\n const endTime =\n arr[0].add(dayLine, 'day') > dayjs().endOf('day') ? dayjs() : arr[0].add(dayLine, 'day');\n onChange({\n rangeDate: [arr[0], endTime],\n });\n }\n setDateOpen(false);\n }}\n key={v.label}\n className={shortcutClass(comparedIndex === i)}\n >\n {v.label}\n </span>\n ))}\n </div>\n </div>\n <div>{panelNode}</div>\n </div>\n );\n };\n\n return (\n <div className={styles.globalMl}>\n {hasDate ? (\n <div style={{ display: 'flex' }}>\n <i className={classNames('iconfont icon-duibi', styles.globalDuibiIcon)} />\n <div className={classNames(styles.globalMl, styles.globalItem, styles.globalItemChecked)}>\n <i className={itemCheckIconClass('')} />\n <DatePicker\n locale={datePickerZhCN}\n classNames={{\n popup: {\n root: styles.globalItemDatePanel,\n },\n }}\n getPopupContainer={(triggerNode) => triggerNode.parentNode as HTMLElement}\n disabledDate={(current) => {\n return current && current > dayjs().endOf('day');\n }}\n picker={picker}\n value={cacheStartTime}\n open={dateOpen}\n placeholder='开始日期'\n className={styles.globalItemDateSingle}\n variant='borderless'\n showNow={false}\n allowClear={false}\n suffixIcon={false}\n panelRender={dateRender}\n format={customFormat}\n onChange={(val) => {\n setCacheStartTime(val);\n const endTime = val.add(dayLine, 'day') > dayjs().endOf('day') ? dayjs() : val.add(dayLine, 'day');\n onChange({\n rangeDate: [val, endTime],\n });\n }}\n onOpenChange={(flag: boolean) => {\n setDateOpen(flag);\n }}\n />\n <div className={styles.globalItemDateDel}>\n <i\n className={classNames('iconfont icon-guanbi2')}\n onClick={(e) => {\n e.stopPropagation();\n onChange({ rangeDate: [null, null] });\n setHasDate(false);\n setCacheStartTime(null);\n }}\n ></i>\n </div>\n </div>\n </div>\n ) : (\n <YkRangeDateWithVSSelect\n options={options}\n disabled={disableCompare}\n onChange={(v) => {\n switch (v.value) {\n case 'customize':\n setHasDate(true);\n setDateOpen(true);\n // setIsFocus(true);\n break;\n default: {\n const arr = checkDate(Number(v.value));\n onChange({ rangeDate: arr });\n break;\n }\n }\n }}\n >\n <Tooltip\n placement='top'\n title={\n disableCompare\n ? '日期对比不支持细分'\n : picker === 'month'\n ? '实际数据为选择的日期所在月份的整月数据'\n : null\n }\n color='#fff'\n styles={{\n body: {\n color: '#333',\n },\n }}\n >\n <div\n className={classNames(styles.globalMl, styles.globalItem, disableCompare ? styles.globalDisabled : '')}\n >\n <i className={itemCheckIconClass('icon-jiahao2')} />\n <div>日期对比</div>\n </div>\n </Tooltip>\n </YkRangeDateWithVSSelect>\n )}\n </div>\n );\n};\n\nexport default YkRangeDateWithVSCompare;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import type { DatePickerProps } from 'antd';
2
- import { Dayjs } from 'dayjs';
2
+ import { type Dayjs } from 'dayjs';
3
3
  import React, { type ReactNode } from 'react';
4
4
  type DateValue = Dayjs | null;
5
5
  type RangeValue = [DateValue, DateValue] | null;
@@ -23,7 +23,7 @@ import { Anchor, ConfigProvider, DatePicker, Flex, Popover, Tooltip, theme } fro
23
23
  import classNames from "classnames";
24
24
  import dayjs from "dayjs";
25
25
  import { findIndex, isEqual } from "lodash";
26
- import React, { useEffect, useMemo, useState } from "react";
26
+ import React, { useEffect, useMemo, useRef, useState } from "react";
27
27
  import styles from "./styles";
28
28
  var itemCheckIconClass = (className) => {
29
29
  return classNames("iconfont", className, styles.active);
@@ -208,6 +208,7 @@ var YkRangeDateWithVSRange = ({
208
208
  }) => {
209
209
  const { token } = theme.useToken();
210
210
  const hasCustomRangeDisplay = rangeDisplayLabel != null;
211
+ const triggerWrapRef = useRef(null);
211
212
  const [groupOpen, setGroupOpen] = useState(false);
212
213
  const [isChange, setIsChange] = useState(false);
213
214
  const filterType = milestoneFilterType;
@@ -249,6 +250,25 @@ var YkRangeDateWithVSRange = ({
249
250
  useEffect(() => {
250
251
  initRangeDate();
251
252
  }, [rangeDate, timeType]);
253
+ useEffect(() => {
254
+ if (!groupOpen)
255
+ return;
256
+ const onPointerDownCapture = (e) => {
257
+ var _a;
258
+ const el = e.target;
259
+ if (!(el instanceof Element))
260
+ return;
261
+ if ((_a = triggerWrapRef.current) == null ? void 0 : _a.contains(el))
262
+ return;
263
+ if (el.closest("[data-yk-range-date-with-vs-panel]"))
264
+ return;
265
+ if (styles.globalItemDatePanel && el.closest(`.${styles.globalItemDatePanel}`))
266
+ return;
267
+ setGroupOpen(false);
268
+ };
269
+ window.addEventListener("pointerdown", onPointerDownCapture, true);
270
+ return () => window.removeEventListener("pointerdown", onPointerDownCapture, true);
271
+ }, [groupOpen]);
252
272
  const customFormat = (value) => {
253
273
  return `${dayjs(value).format("YYYY-MM-DD")}`;
254
274
  };
@@ -338,7 +358,7 @@ var YkRangeDateWithVSRange = ({
338
358
  );
339
359
  }));
340
360
  const dateGourpRender = (panelNode) => {
341
- return /* @__PURE__ */ React.createElement("div", null, dateCompare && /* @__PURE__ */ React.createElement("div", { className: styles.ykRangeDateWithVsHeader }, /* @__PURE__ */ React.createElement(
361
+ return /* @__PURE__ */ React.createElement("div", { "data-yk-range-date-with-vs-panel": true }, dateCompare && /* @__PURE__ */ React.createElement("div", { className: styles.ykRangeDateWithVsHeader }, /* @__PURE__ */ React.createElement(
342
362
  Anchor,
343
363
  {
344
364
  className: styles.ykRangeDateWithVsHeaderAnchor,
@@ -347,6 +367,7 @@ var YkRangeDateWithVSRange = ({
347
367
  getCurrentAnchor: () => cacheTimeType,
348
368
  onClick: (event, link) => {
349
369
  event.preventDefault();
370
+ event.stopPropagation();
350
371
  setCacheTimeType(link.href);
351
372
  const defaultFn = optionsMap[link.href] ? optionsMap[link.href].default : optionsMap["按日"].default;
352
373
  setCacheRangeDate(defaultFn());
@@ -380,7 +401,7 @@ var YkRangeDateWithVSRange = ({
380
401
  value: v.value
381
402
  };
382
403
  });
383
- const resolvePopupContainer = getPopupContainer ? getPopupContainer : (triggerNode) => triggerNode.parentNode;
404
+ const resolvePopupContainer = getPopupContainer != null ? getPopupContainer : () => document.body;
384
405
  const dateTags = (milestoneListFilter || []).concat(holidays || []).map((m) => {
385
406
  return __spreadProps(__spreadValues({}, m), {
386
407
  date: m.range_day[0]
@@ -482,13 +503,43 @@ var YkRangeDateWithVSRange = ({
482
503
  separator: "~",
483
504
  className: styles.globalItemDate,
484
505
  suffixIcon: false,
485
- onChange: (val) => {
486
- let start = null;
506
+ onCalendarChange: (dates) => {
507
+ if (!dates)
508
+ return;
509
+ const [v0, v1] = dates;
510
+ setIsChange(true);
511
+ const start = v0 ? v0.startOf(picker) : null;
487
512
  let end = null;
488
- if (val && val[0] && val[1]) {
489
- start = val[0].startOf(picker);
490
- end = val[1].endOf(picker) > dayjs() ? dayjs() : val[1].endOf(picker);
513
+ if (v1) {
514
+ const endRaw = v1.endOf(picker);
515
+ end = endRaw > dayjs() ? dayjs() : endRaw;
516
+ }
517
+ setCacheRangeDate([start, end]);
518
+ },
519
+ onChange: (val) => {
520
+ if (!val || !val[0] && !val[1]) {
521
+ setIsChange(true);
522
+ setCacheRangeDate([null, null]);
523
+ onChange({
524
+ rangeDate: [null, null],
525
+ timeType: cacheTimeType
526
+ });
527
+ return;
528
+ }
529
+ const [v0, v1] = val;
530
+ if (v0 && !v1) {
531
+ setIsChange(true);
532
+ setCacheRangeDate([v0.startOf(picker), null]);
533
+ return;
534
+ }
535
+ if (!v0 && v1) {
536
+ setIsChange(true);
537
+ const end2 = v1.endOf(picker) > dayjs() ? dayjs() : v1.endOf(picker);
538
+ setCacheRangeDate([null, end2]);
539
+ return;
491
540
  }
541
+ const start = v0.startOf(picker);
542
+ const end = v1.endOf(picker) > dayjs() ? dayjs() : v1.endOf(picker);
492
543
  setIsChange(true);
493
544
  setCacheRangeDate([start, end]);
494
545
  onChange({
@@ -501,7 +552,7 @@ var YkRangeDateWithVSRange = ({
501
552
  }
502
553
  }
503
554
  );
504
- return /* @__PURE__ */ React.createElement("div", { className: classNames(styles.globalMl, styles.globalItem) }, dateCompare && !!options.length && /* @__PURE__ */ React.createElement("label", { onClick: () => setGroupOpen(true), className: styles.globalItemDateTerm }, /* @__PURE__ */ React.createElement("span", { style: { marginRight: "5px", fontSize: 14 } }, timeType), /* @__PURE__ */ React.createElement("i", { style: { marginRight: "10px" }, className: classNames("iconfont icon-xiala1") })), /* @__PURE__ */ React.createElement("i", { className: itemCheckIconClass("icon-riqi1"), style: { fontSize: 14 } }), /* @__PURE__ */ React.createElement(
555
+ return /* @__PURE__ */ React.createElement("div", { ref: triggerWrapRef, className: classNames(styles.globalMl, styles.globalItem) }, dateCompare && !!options.length && /* @__PURE__ */ React.createElement("label", { onClick: () => setGroupOpen(true), className: styles.globalItemDateTerm }, /* @__PURE__ */ React.createElement("span", { style: { marginRight: "5px", fontSize: 14 } }, timeType), /* @__PURE__ */ React.createElement("i", { style: { marginRight: "10px" }, className: classNames("iconfont icon-xiala1") })), /* @__PURE__ */ React.createElement("i", { className: itemCheckIconClass("icon-riqi1"), style: { fontSize: 14 } }), /* @__PURE__ */ React.createElement(
505
556
  ConfigProvider,
506
557
  {
507
558
  theme: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/YkRangeDateWithVS/YkRangeDateWithVSRange.tsx"],
4
- "sourcesContent": ["import type { DatePickerProps, TimeRangePickerProps } from 'antd';\nimport { Anchor, ConfigProvider, DatePicker, Flex, Popover, Tooltip, theme } from 'antd';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { findIndex, isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, type ReactNode } from 'react';\nimport styles from './styles';\n\ntype DateValue = Dayjs | null;\ntype RangeValue = [DateValue, DateValue] | null;\ntype dateOptionType = {\n label: string;\n value: () => RangeValue;\n};\n\nexport type YkRangeDateWithVSRangeProps = {\n timeType: string;\n rangeDate: RangeValue;\n timeOptions: string[];\n dateCompare: boolean;\n onChange: (value: { timeType: string; rangeDate: RangeValue }) => void;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n disabledDate?: DatePickerProps['disabledDate'];\n presetsOptions?: { label: string; value: () => [Dayjs, Dayjs] }[];\n /** 1: 运营节点 2: 广告节点 */\n milestoneFilterType?: 1 | 2;\n /** 项目节点列表(日历侧栏与日期标记) */\n milestone?: ProjectNodeItem[];\n /** 节假日(与里程碑一并用于日期 cell 标记) */\n holidays?: ProjectNodeItem[];\n /** 自定义主区间输入框展示文案(string / ReactNode);传入后默认日期格式文案由覆盖层展示,仍通过面板改期 */\n rangeDisplayLabel?: ReactNode;\n};\n\nconst itemCheckIconClass = (className: string) => {\n return classNames('iconfont', className, styles.active);\n};\n\nconst past: (n: number, picker: 'week' | 'day' | 'month' | 'year', today?: boolean) => RangeValue = (\n n,\n picker,\n today = false,\n) => [dayjs().subtract(n, picker).startOf(picker), today ? dayjs() : dayjs().subtract(n, picker).endOf(picker)];\n\nconst dateOptions: dateOptionType[] = [\n { label: '今天', value: () => past(0, 'day', true) },\n { label: '昨天', value: () => past(1, 'day') },\n { label: '本周', value: () => past(0, 'week', true) },\n { label: '上周', value: () => past(1, 'week') },\n { label: '本月', value: () => past(0, 'month', true) },\n { label: '上月', value: () => past(1, 'month') },\n { label: '今年', value: () => past(0, 'year', true) },\n { label: '去年', value: () => past(1, 'year') },\n { label: '近7天', value: () => past(6, 'day', true) },\n { label: '近14天', value: () => past(13, 'day', true) },\n { label: '近30天', value: () => past(29, 'day', true) },\n { label: '近60天', value: () => past(59, 'day', true) },\n { label: '近90天', value: () => past(89, 'day', true) },\n { label: '近180天', value: () => past(179, 'day', true) },\n {\n label: '前7天',\n value: () => [dayjs().subtract(7, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前14天',\n value: () => [dayjs().subtract(14, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前30天',\n value: () => [dayjs().subtract(30, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前60天',\n value: () => [dayjs().subtract(60, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n];\nconst weekOptions: dateOptionType[] = [\n { label: '本周', value: () => past(0, 'week', true) },\n { label: '上周', value: () => past(1, 'week') },\n { label: '近3周', value: () => past(2, 'week', true) },\n { label: '近4周', value: () => past(3, 'week', true) },\n { label: '近5周', value: () => past(4, 'week', true) },\n { label: '近6周', value: () => past(5, 'week', true) },\n { label: '近7周', value: () => past(6, 'week', true) },\n { label: '近14周', value: () => past(13, 'week', true) },\n { label: '近30周', value: () => past(29, 'week', true) },\n { label: '近60周', value: () => past(59, 'week', true) },\n {\n label: '前2周',\n value: () => [dayjs().subtract(2, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前3周',\n value: () => [dayjs().subtract(3, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前4周',\n value: () => [dayjs().subtract(4, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前5周',\n value: () => [dayjs().subtract(5, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n];\nconst monthOptions: dateOptionType[] = [\n { label: '本月', value: () => past(0, 'month', true) },\n { label: '上月', value: () => past(1, 'month') },\n { label: '今年', value: () => past(0, 'year', true) },\n { label: '去年', value: () => past(1, 'year') },\n { label: '近3月', value: () => past(2, 'month', true) },\n { label: '近4月', value: () => past(3, 'month', true) },\n { label: '近5月', value: () => past(4, 'month', true) },\n { label: '近6月', value: () => past(5, 'month', true) },\n { label: '近7月', value: () => past(6, 'month', true) },\n { label: '近8月', value: () => past(7, 'month', true) },\n { label: '近9月', value: () => past(8, 'month', true) },\n { label: '近10月', value: () => past(9, 'month', true) },\n { label: '近11月', value: () => past(10, 'month', true) },\n { label: '近12月', value: () => past(11, 'month', true) },\n {\n label: '前2月',\n value: () => [dayjs().subtract(2, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前3月',\n value: () => [dayjs().subtract(3, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前4月',\n value: () => [dayjs().subtract(4, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前5月',\n value: () => [dayjs().subtract(5, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前6月',\n value: () => [dayjs().subtract(6, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前7月',\n value: () => [dayjs().subtract(7, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前8月',\n value: () => [dayjs().subtract(8, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前9月',\n value: () => [dayjs().subtract(9, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前10月',\n value: () => [dayjs().subtract(10, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前11月',\n value: () => [dayjs().subtract(11, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前12月',\n value: () => [dayjs().subtract(12, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n];\nconst startWeekOption: dateOptionType[] = [\n { label: '近7天', value: () => past(6, 'day', true) },\n { label: '近14天', value: () => past(13, 'day', true) },\n { label: '近21天', value: () => past(20, 'day', true) },\n { label: '近28天', value: () => past(27, 'day', true) },\n { label: '近98天', value: () => past(97, 'day', true) },\n { label: '近210天', value: () => past(209, 'day', true) },\n];\nconst startMonthOption: dateOptionType[] = [\n { label: '近30天', value: () => past(29, 'day', true) },\n { label: '近60天', value: () => past(59, 'day', true) },\n { label: '近90天', value: () => past(89, 'day', true) },\n { label: '近120天', value: () => past(119, 'day', true) },\n { label: '近150天', value: () => past(149, 'day', true) },\n { label: '近180天', value: () => past(179, 'day', true) },\n { label: '近210天', value: () => past(209, 'day', true) },\n { label: '近240天', value: () => past(239, 'day', true) },\n { label: '近270天', value: () => past(269, 'day', true) },\n { label: '近300天', value: () => past(299, 'day', true) },\n { label: '近330天', value: () => past(329, 'day', true) },\n { label: '近360天', value: () => past(359, 'day', true) },\n];\n\nconst pickerMap: {\n [key: string]: 'date' | 'week' | 'month';\n} = {\n 按自然周: 'week',\n 按自然月: 'month',\n 按周: 'week',\n 按月: 'month',\n};\n\nconst optionsMap: {\n [key: string]: {\n options: dateOptionType[];\n default: () => RangeValue;\n };\n} = {\n 按日: { options: dateOptions, default: () => past(14, 'day', true) },\n 按周: { options: weekOptions, default: () => past(13, 'week', true) },\n 按月: { options: monthOptions, default: () => past(11, 'month', true) },\n 按自然周: { options: weekOptions, default: () => past(13, 'week', true) },\n 按自然月: { options: monthOptions, default: () => past(11, 'month', true) },\n 按起始周: {\n options: startWeekOption,\n default: () => past(14 * 7 - 1, 'day', true),\n },\n 按起始月: {\n options: startMonthOption,\n default: () => past(12 * 30 - 1, 'day', true),\n },\n};\n\nconst YkRangeDateWithVSRange: React.FC<YkRangeDateWithVSRangeProps> = ({\n timeType,\n rangeDate,\n timeOptions,\n dateCompare,\n getPopupContainer,\n onChange,\n disabledDate = undefined,\n presetsOptions = undefined,\n milestoneFilterType = 1,\n milestone = [],\n holidays = [],\n rangeDisplayLabel,\n}) => {\n const { token } = theme.useToken();\n const hasCustomRangeDisplay = rangeDisplayLabel != null;\n const [groupOpen, setGroupOpen] = useState(false);\n // 判断数据是否变更,若未变更,则初始化日期\n const [isChange, setIsChange] = useState(false);\n const filterType = milestoneFilterType;\n const [cacheRangeDate, setCacheRangeDate] = useState<RangeValue>([null, null]);\n const [cacheTimeType, setCacheTimeType] = useState<string>(timeType);\n const [groupIndex, setGroupIndex] = useState<number | null>(null);\n const picker = cacheTimeType && pickerMap[cacheTimeType] ? pickerMap[cacheTimeType] : 'date';\n const options = presetsOptions\n ? presetsOptions\n : optionsMap[cacheTimeType]\n ? optionsMap[cacheTimeType].options\n : optionsMap['按日'].options;\n\n // 周报月报不显示项目节点(但外面选了周月,里面有按日的type,选按日时依旧可以显示项目节点,例如分包详情里的日期组件)\n const showProjectNode = useMemo(() => {\n return (\n (!timeType.includes('周') &&\n !timeType.includes('月') &&\n !cacheTimeType.includes('周') &&\n !cacheTimeType.includes('月')) ||\n cacheTimeType.includes('日')\n );\n }, [timeType, cacheTimeType]);\n\n const timeOptionAnchors =\n timeOptions?.map((v) => {\n return {\n key: v,\n title: v,\n href: v,\n };\n }) || [];\n\n // 初始化日期与日周月\n const initRangeDate = () => {\n setCacheRangeDate(rangeDate);\n setCacheTimeType(timeType);\n setIsChange(false);\n };\n\n useEffect(() => {\n if (groupOpen) {\n setGroupIndex(\n findIndex(options, (item) => {\n return isEqual(\n item.value()?.map((v) => v?.format('YYYY-MM-DD')),\n cacheRangeDate?.map((v) => v?.format('YYYY-MM-DD')),\n );\n }),\n );\n } else if (!isChange) {\n initRangeDate();\n }\n }, [cacheTimeType, groupOpen]);\n\n useEffect(() => {\n initRangeDate();\n }, [rangeDate, timeType]);\n\n const customFormat: DatePickerProps['format'] = (value) => {\n return `${dayjs(value).format('YYYY-MM-DD')}`;\n };\n\n const milestoneSelected = (id: number) => {\n const dates = milestone.find((m) => m.id === id)?.range_day.map((m) => dayjs(m)) || [];\n let [start, end] = dates;\n if (end > dayjs().endOf('day')) end = dayjs().endOf('day');\n setIsChange(true);\n setCacheRangeDate([start, end]);\n onChange({\n rangeDate: [start, end],\n timeType: cacheTimeType,\n });\n setGroupOpen(false);\n };\n\n const checkPresets = (v) => {\n if (\n cacheRangeDate &&\n dayjs(v[0]).format('YYYY-MM-DD') === dayjs(cacheRangeDate[0]).format('YYYY-MM-DD') &&\n dayjs(v[1]).format('YYYY-MM-DD') === dayjs(cacheRangeDate[1]).format('YYYY-MM-DD')\n ) {\n return true;\n } else {\n return false;\n }\n };\n\n // 活动详情内容\n const popoverContent = (event: ProjectNodeItem) => {\n return (\n <div\n style={{\n height: 30,\n lineHeight: '30px',\n textAlign: 'left',\n color: '#666',\n padding: '0 10px 0 10px',\n fontSize: 12,\n }}\n >\n {event.tag +\n ' ' +\n (event.range_day[0] === event.range_day[1] ? event.range_day[0] : event.range_day.join(' ~ '))}\n </div>\n );\n };\n\n const milestoneListFilter = milestone\n .filter((f) => f.type === filterType)\n .filter((f) => dayjs(f.range_day[0]) <= dayjs().endOf('day'))\n .filter((f) => dayjs(f.range_day[0]) >= dayjs().startOf('year').subtract(1, 'year'))\n .sort(\n (a: ProjectNodeItem, b: ProjectNodeItem) => dayjs(b.range_day[0]).valueOf() - dayjs(a.range_day[0]).valueOf(),\n );\n const milestoneList = (\n <div className={styles.milestoneListBox}>\n {milestoneListFilter.map((v) => {\n // Popover 须高于 DatePicker 弹层(约 zIndexPopupBase+50),否则悬停内容被挡在面板下\n return (\n <Popover\n key={v.id}\n trigger='hover'\n placement='right'\n zIndex={token.zIndexPopupBase + 120}\n getPopupContainer={() => document.body}\n styles={{\n root: {\n // width: 200,\n },\n body: {\n borderRadius: 2,\n padding: 0,\n },\n }}\n content={popoverContent(v)}\n >\n <div\n data-track\n id={`milestoneListItem-${v.id}`}\n key={v.id}\n className={classNames(\n styles.milestoneListItem,\n checkPresets(v.range_day.map((m) => dayjs(m))) && styles.milestoneListActive,\n )}\n style={{\n textAlign: 'left',\n padding: '0 10px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n onClick={() => {\n milestoneSelected(v.id as number);\n }}\n >\n {v.tag}\n </div>\n </Popover>\n );\n })}\n </div>\n );\n\n const dateGourpRender = (panelNode: React.ReactNode) => {\n return (\n <div>\n {dateCompare && (\n <div className={styles.ykRangeDateWithVsHeader}>\n <Anchor\n className={styles.ykRangeDateWithVsHeaderAnchor}\n direction='horizontal'\n items={timeOptionAnchors}\n getCurrentAnchor={() => cacheTimeType}\n onClick={(event, link) => {\n event.preventDefault();\n setCacheTimeType(link.href);\n const defaultFn = optionsMap[link.href] ? optionsMap[link.href].default : optionsMap['按日'].default;\n setCacheRangeDate(defaultFn());\n }}\n />\n </div>\n )}\n <Flex>\n {milestoneListFilter && milestoneListFilter.length > 0 && showProjectNode ? (\n <div className={classNames(styles.milestoneList, 'scroll-reset')}>{milestoneList}</div>\n ) : null}\n <div className={styles.ykRangeDateWithVsGroup}>\n <div className={styles.ykRangeDateWithVsPanel}>{panelNode}</div>\n </div>\n </Flex>\n </div>\n );\n };\n\n // 当节点有已选时,不高亮presetsNode\n let hasSelect = false;\n if (milestoneListFilter && milestoneListFilter.length > 0) {\n milestoneListFilter.forEach((item) => {\n if (checkPresets(item.range_day.map((m) => dayjs(m))) && picker === 'date' && showProjectNode) {\n hasSelect = true;\n }\n });\n }\n\n const presetsNode = options.map((v, i) => {\n return {\n label: (\n <div\n className={classNames(\n 'ant-picker-presets-li',\n groupIndex === i && !hasSelect && 'ant-picker-presets-li-item',\n )}\n onClick={() => {\n setGroupIndex(i);\n }}\n >\n {v.label}\n </div>\n ),\n value: v.value,\n };\n }) as TimeRangePickerProps['presets'];\n\n const resolvePopupContainer = getPopupContainer\n ? getPopupContainer\n : (triggerNode: HTMLElement) => triggerNode.parentNode as HTMLElement;\n\n // 项目节点与节假日\n const dateTags: ProjectNodeItem[] = (milestoneListFilter || []).concat(holidays || []).map((m) => {\n return {\n ...m,\n date: m.range_day[0],\n };\n });\n const dateTagsMap = {};\n dateTags.forEach((m: any) => {\n if (dateTagsMap[m.date]) {\n dateTagsMap[m.date].push(m);\n } else {\n dateTagsMap[m.date] = [m];\n }\n });\n\n const eventsTooltips = (date: Dayjs) => {\n const dateStr = dayjs(date).format('YYYY-MM-DD');\n const tags = dateTagsMap[dateStr] || [];\n // 只展示最新创建的节点\n const lastTag =\n tags.length > 0\n ? tags.reduce((prev: ProjectNodeItem, curr: ProjectNodeItem) =>\n dayjs(prev.created_at).isAfter(dayjs(curr.created_at)) ? prev : curr,\n )\n : null;\n return lastTag ? (\n <Tooltip\n placement='right'\n title={\n lastTag.tag +\n ' ' +\n (lastTag.range_day[0] === lastTag.range_day[1] ? lastTag.range_day[0] : lastTag.range_day.join(' ~ '))\n }\n color='#fff'\n styles={{\n root: {\n maxWidth: 270,\n },\n body: {\n borderRadius: 2,\n color: '#666',\n },\n }}\n >\n <div key={lastTag.id} className={styles.ykRangeDateWithVsTag}>\n {lastTag.tag}\n </div>\n </Tooltip>\n ) : (\n <></>\n );\n };\n\n const cellRender: DatePickerProps<Dayjs>['cellRender'] = (current, info) => {\n if (info.type !== 'date') {\n return info.originNode;\n }\n if (typeof current === 'number' || typeof current === 'string') {\n return <div className='ant-picker-cell-inner'>{current}</div>;\n }\n return (\n <div\n className={classNames('ant-picker-cell-inner')}\n style={{ width: 45, height: 40, lineHeight: holidays && holidays.length > 0 ? '26px' : '40px', fontSize: 12 }}\n >\n {current.date()}\n {holidays && holidays.length > 0 && (\n <div\n style={{\n position: 'absolute',\n bottom: 2,\n height: 16,\n width: '100%',\n fontSize: '12px',\n lineHeight: '16px',\n whiteSpace: 'nowrap',\n }}\n >\n {eventsTooltips(current)}\n </div>\n )}\n </div>\n );\n };\n\n const rangePicker = (\n <DatePicker.RangePicker\n id='ykRangeDateWithVsRange'\n classNames={{\n popup: {\n root: styles.globalItemDatePanel,\n },\n }}\n styles={{\n root: {\n opacity: hasCustomRangeDisplay ? 0 : 1,\n },\n }}\n getPopupContainer={resolvePopupContainer}\n disabledDate={\n disabledDate\n ? disabledDate\n : (current) => {\n return current && current > dayjs().endOf('day');\n }\n }\n inputReadOnly={hasCustomRangeDisplay}\n open={groupOpen}\n picker={picker}\n cellRender={cellRender}\n value={cacheRangeDate}\n panelRender={dateGourpRender}\n presets={presetsNode}\n variant='borderless'\n allowClear={false}\n format={customFormat}\n showWeek={false}\n separator='~'\n className={styles.globalItemDate}\n suffixIcon={false}\n onChange={(val) => {\n let start = null;\n let end = null;\n if (val && val[0] && val[1]) {\n start = val[0].startOf(picker);\n end = val[1].endOf(picker) > dayjs() ? dayjs() : val[1].endOf(picker);\n }\n setIsChange(true);\n setCacheRangeDate([start, end]);\n onChange({\n rangeDate: [start, end],\n timeType: cacheTimeType,\n });\n }}\n onOpenChange={(open) => {\n setGroupOpen(open);\n }}\n />\n );\n\n return (\n <div className={classNames(styles.globalMl, styles.globalItem)}>\n {dateCompare && !!options.length && (\n <label onClick={() => setGroupOpen(true)} className={styles.globalItemDateTerm}>\n <span style={{ marginRight: '5px', fontSize: 14 }}>{timeType}</span>\n <i style={{ marginRight: '10px' }} className={classNames('iconfont icon-xiala1')}></i>\n </label>\n )}\n <i className={itemCheckIconClass('icon-riqi1')} style={{ fontSize: 14 }} />\n <ConfigProvider\n theme={{\n components: {\n DatePicker: {\n cellWidth: 60,\n cellHeight: 40,\n timeColumnWidth: 40,\n },\n },\n token: {},\n }}\n >\n {hasCustomRangeDisplay ? (\n <div className={styles.rangePickerCustomDisplay}>\n <span className={styles.rangePickerCustomDisplayLabel}>{rangeDisplayLabel}</span>\n {rangePicker}\n </div>\n ) : (\n rangePicker\n )}\n </ConfigProvider>\n </div>\n );\n};\n\nexport default YkRangeDateWithVSRange;\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import type { DatePickerProps, TimeRangePickerProps } from 'antd';\nimport { Anchor, ConfigProvider, DatePicker, Flex, Popover, Tooltip, theme } from 'antd';\nimport classNames from 'classnames';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport { findIndex, isEqual } from 'lodash';\nimport React, { type ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport styles from './styles';\n\ntype DateValue = Dayjs | null;\ntype RangeValue = [DateValue, DateValue] | null;\ntype dateOptionType = {\n label: string;\n value: () => RangeValue;\n};\n\nexport type YkRangeDateWithVSRangeProps = {\n timeType: string;\n rangeDate: RangeValue;\n timeOptions: string[];\n dateCompare: boolean;\n onChange: (value: { timeType: string; rangeDate: RangeValue }) => void;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n disabledDate?: DatePickerProps['disabledDate'];\n presetsOptions?: { label: string; value: () => [Dayjs, Dayjs] }[];\n /** 1: 运营节点 2: 广告节点 */\n milestoneFilterType?: 1 | 2;\n /** 项目节点列表(日历侧栏与日期标记) */\n milestone?: ProjectNodeItem[];\n /** 节假日(与里程碑一并用于日期 cell 标记) */\n holidays?: ProjectNodeItem[];\n /** 自定义主区间输入框展示文案(string / ReactNode);传入后默认日期格式文案由覆盖层展示,仍通过面板改期 */\n rangeDisplayLabel?: ReactNode;\n};\n\nconst itemCheckIconClass = (className: string) => {\n return classNames('iconfont', className, styles.active);\n};\n\nconst past: (n: number, picker: 'week' | 'day' | 'month' | 'year', today?: boolean) => RangeValue = (\n n,\n picker,\n today = false,\n) => [dayjs().subtract(n, picker).startOf(picker), today ? dayjs() : dayjs().subtract(n, picker).endOf(picker)];\n\nconst dateOptions: dateOptionType[] = [\n { label: '今天', value: () => past(0, 'day', true) },\n { label: '昨天', value: () => past(1, 'day') },\n { label: '本周', value: () => past(0, 'week', true) },\n { label: '上周', value: () => past(1, 'week') },\n { label: '本月', value: () => past(0, 'month', true) },\n { label: '上月', value: () => past(1, 'month') },\n { label: '今年', value: () => past(0, 'year', true) },\n { label: '去年', value: () => past(1, 'year') },\n { label: '近7天', value: () => past(6, 'day', true) },\n { label: '近14天', value: () => past(13, 'day', true) },\n { label: '近30天', value: () => past(29, 'day', true) },\n { label: '近60天', value: () => past(59, 'day', true) },\n { label: '近90天', value: () => past(89, 'day', true) },\n { label: '近180天', value: () => past(179, 'day', true) },\n {\n label: '前7天',\n value: () => [dayjs().subtract(7, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前14天',\n value: () => [dayjs().subtract(14, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前30天',\n value: () => [dayjs().subtract(30, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n {\n label: '前60天',\n value: () => [dayjs().subtract(60, 'day').startOf('day'), dayjs().subtract(1, 'day').endOf('day')],\n },\n];\nconst weekOptions: dateOptionType[] = [\n { label: '本周', value: () => past(0, 'week', true) },\n { label: '上周', value: () => past(1, 'week') },\n { label: '近3周', value: () => past(2, 'week', true) },\n { label: '近4周', value: () => past(3, 'week', true) },\n { label: '近5周', value: () => past(4, 'week', true) },\n { label: '近6周', value: () => past(5, 'week', true) },\n { label: '近7周', value: () => past(6, 'week', true) },\n { label: '近14周', value: () => past(13, 'week', true) },\n { label: '近30周', value: () => past(29, 'week', true) },\n { label: '近60周', value: () => past(59, 'week', true) },\n {\n label: '前2周',\n value: () => [dayjs().subtract(2, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前3周',\n value: () => [dayjs().subtract(3, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前4周',\n value: () => [dayjs().subtract(4, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n {\n label: '前5周',\n value: () => [dayjs().subtract(5, 'week').startOf('week'), dayjs().subtract(1, 'week').endOf('week')],\n },\n];\nconst monthOptions: dateOptionType[] = [\n { label: '本月', value: () => past(0, 'month', true) },\n { label: '上月', value: () => past(1, 'month') },\n { label: '今年', value: () => past(0, 'year', true) },\n { label: '去年', value: () => past(1, 'year') },\n { label: '近3月', value: () => past(2, 'month', true) },\n { label: '近4月', value: () => past(3, 'month', true) },\n { label: '近5月', value: () => past(4, 'month', true) },\n { label: '近6月', value: () => past(5, 'month', true) },\n { label: '近7月', value: () => past(6, 'month', true) },\n { label: '近8月', value: () => past(7, 'month', true) },\n { label: '近9月', value: () => past(8, 'month', true) },\n { label: '近10月', value: () => past(9, 'month', true) },\n { label: '近11月', value: () => past(10, 'month', true) },\n { label: '近12月', value: () => past(11, 'month', true) },\n {\n label: '前2月',\n value: () => [dayjs().subtract(2, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前3月',\n value: () => [dayjs().subtract(3, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前4月',\n value: () => [dayjs().subtract(4, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前5月',\n value: () => [dayjs().subtract(5, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前6月',\n value: () => [dayjs().subtract(6, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前7月',\n value: () => [dayjs().subtract(7, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前8月',\n value: () => [dayjs().subtract(8, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前9月',\n value: () => [dayjs().subtract(9, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前10月',\n value: () => [dayjs().subtract(10, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前11月',\n value: () => [dayjs().subtract(11, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n {\n label: '前12月',\n value: () => [dayjs().subtract(12, 'month').startOf('month'), dayjs().subtract(1, 'month').endOf('month')],\n },\n];\nconst startWeekOption: dateOptionType[] = [\n { label: '近7天', value: () => past(6, 'day', true) },\n { label: '近14天', value: () => past(13, 'day', true) },\n { label: '近21天', value: () => past(20, 'day', true) },\n { label: '近28天', value: () => past(27, 'day', true) },\n { label: '近98天', value: () => past(97, 'day', true) },\n { label: '近210天', value: () => past(209, 'day', true) },\n];\nconst startMonthOption: dateOptionType[] = [\n { label: '近30天', value: () => past(29, 'day', true) },\n { label: '近60天', value: () => past(59, 'day', true) },\n { label: '近90天', value: () => past(89, 'day', true) },\n { label: '近120天', value: () => past(119, 'day', true) },\n { label: '近150天', value: () => past(149, 'day', true) },\n { label: '近180天', value: () => past(179, 'day', true) },\n { label: '近210天', value: () => past(209, 'day', true) },\n { label: '近240天', value: () => past(239, 'day', true) },\n { label: '近270天', value: () => past(269, 'day', true) },\n { label: '近300天', value: () => past(299, 'day', true) },\n { label: '近330天', value: () => past(329, 'day', true) },\n { label: '近360天', value: () => past(359, 'day', true) },\n];\n\nconst pickerMap: {\n [key: string]: 'date' | 'week' | 'month';\n} = {\n 按自然周: 'week',\n 按自然月: 'month',\n 按周: 'week',\n 按月: 'month',\n};\n\nconst optionsMap: {\n [key: string]: {\n options: dateOptionType[];\n default: () => RangeValue;\n };\n} = {\n 按日: { options: dateOptions, default: () => past(14, 'day', true) },\n 按周: { options: weekOptions, default: () => past(13, 'week', true) },\n 按月: { options: monthOptions, default: () => past(11, 'month', true) },\n 按自然周: { options: weekOptions, default: () => past(13, 'week', true) },\n 按自然月: { options: monthOptions, default: () => past(11, 'month', true) },\n 按起始周: {\n options: startWeekOption,\n default: () => past(14 * 7 - 1, 'day', true),\n },\n 按起始月: {\n options: startMonthOption,\n default: () => past(12 * 30 - 1, 'day', true),\n },\n};\n\nconst YkRangeDateWithVSRange: React.FC<YkRangeDateWithVSRangeProps> = ({\n timeType,\n rangeDate,\n timeOptions,\n dateCompare,\n getPopupContainer,\n onChange,\n disabledDate = undefined,\n presetsOptions = undefined,\n milestoneFilterType = 1,\n milestone = [],\n holidays = [],\n rangeDisplayLabel,\n}) => {\n const { token } = theme.useToken();\n const hasCustomRangeDisplay = rangeDisplayLabel != null;\n const triggerWrapRef = useRef<HTMLDivElement>(null);\n const [groupOpen, setGroupOpen] = useState(false);\n // 判断数据是否变更,若未变更,则初始化日期\n const [isChange, setIsChange] = useState(false);\n const filterType = milestoneFilterType;\n const [cacheRangeDate, setCacheRangeDate] = useState<RangeValue>([null, null]);\n const [cacheTimeType, setCacheTimeType] = useState<string>(timeType);\n const [groupIndex, setGroupIndex] = useState<number | null>(null);\n const picker = cacheTimeType && pickerMap[cacheTimeType] ? pickerMap[cacheTimeType] : 'date';\n const options = presetsOptions\n ? presetsOptions\n : optionsMap[cacheTimeType]\n ? optionsMap[cacheTimeType].options\n : optionsMap['按日'].options;\n\n // 周报月报不显示项目节点(但外面选了周月,里面有按日的type,选按日时依旧可以显示项目节点,例如分包详情里的日期组件)\n const showProjectNode = useMemo(() => {\n return (\n (!timeType.includes('周') &&\n !timeType.includes('月') &&\n !cacheTimeType.includes('周') &&\n !cacheTimeType.includes('月')) ||\n cacheTimeType.includes('日')\n );\n }, [timeType, cacheTimeType]);\n\n const timeOptionAnchors =\n timeOptions?.map((v) => {\n return {\n key: v,\n title: v,\n href: v,\n };\n }) || [];\n\n // 初始化日期与日周月\n const initRangeDate = () => {\n setCacheRangeDate(rangeDate);\n setCacheTimeType(timeType);\n setIsChange(false);\n };\n\n useEffect(() => {\n if (groupOpen) {\n setGroupIndex(\n findIndex(options, (item) => {\n return isEqual(\n item.value()?.map((v) => v?.format('YYYY-MM-DD')),\n cacheRangeDate?.map((v) => v?.format('YYYY-MM-DD')),\n );\n }),\n );\n } else if (!isChange) {\n initRangeDate();\n }\n }, [cacheTimeType, groupOpen]);\n\n useEffect(() => {\n initRangeDate();\n }, [rangeDate, timeType]);\n\n /** 切换日/周/月后 rc-picker 嵌套面板偶发无法收到「点击外部」;与 window 捕获阶段兜底关闭对齐 */\n useEffect(() => {\n if (!groupOpen) return;\n const onPointerDownCapture = (e: PointerEvent) => {\n const el = e.target;\n if (!(el instanceof Element)) return;\n if (triggerWrapRef.current?.contains(el)) return;\n if (el.closest('[data-yk-range-date-with-vs-panel]')) return;\n if (styles.globalItemDatePanel && el.closest(`.${styles.globalItemDatePanel}`)) return;\n setGroupOpen(false);\n };\n window.addEventListener('pointerdown', onPointerDownCapture, true);\n return () => window.removeEventListener('pointerdown', onPointerDownCapture, true);\n }, [groupOpen]);\n\n const customFormat: DatePickerProps['format'] = (value) => {\n return `${dayjs(value).format('YYYY-MM-DD')}`;\n };\n\n const milestoneSelected = (id: number) => {\n const dates = milestone.find((m) => m.id === id)?.range_day.map((m) => dayjs(m)) || [];\n let [start, end] = dates;\n if (end > dayjs().endOf('day')) end = dayjs().endOf('day');\n setIsChange(true);\n setCacheRangeDate([start, end]);\n onChange({\n rangeDate: [start, end],\n timeType: cacheTimeType,\n });\n setGroupOpen(false);\n };\n\n const checkPresets = (v) => {\n if (\n cacheRangeDate &&\n dayjs(v[0]).format('YYYY-MM-DD') === dayjs(cacheRangeDate[0]).format('YYYY-MM-DD') &&\n dayjs(v[1]).format('YYYY-MM-DD') === dayjs(cacheRangeDate[1]).format('YYYY-MM-DD')\n ) {\n return true;\n } else {\n return false;\n }\n };\n\n // 活动详情内容\n const popoverContent = (event: ProjectNodeItem) => {\n return (\n <div\n style={{\n height: 30,\n lineHeight: '30px',\n textAlign: 'left',\n color: '#666',\n padding: '0 10px 0 10px',\n fontSize: 12,\n }}\n >\n {event.tag +\n ' ' +\n (event.range_day[0] === event.range_day[1] ? event.range_day[0] : event.range_day.join(' ~ '))}\n </div>\n );\n };\n\n const milestoneListFilter = milestone\n .filter((f) => f.type === filterType)\n .filter((f) => dayjs(f.range_day[0]) <= dayjs().endOf('day'))\n .filter((f) => dayjs(f.range_day[0]) >= dayjs().startOf('year').subtract(1, 'year'))\n .sort(\n (a: ProjectNodeItem, b: ProjectNodeItem) => dayjs(b.range_day[0]).valueOf() - dayjs(a.range_day[0]).valueOf(),\n );\n const milestoneList = (\n <div className={styles.milestoneListBox}>\n {milestoneListFilter.map((v) => {\n // Popover 须高于 DatePicker 弹层(约 zIndexPopupBase+50),否则悬停内容被挡在面板下\n return (\n <Popover\n key={v.id}\n trigger='hover'\n placement='right'\n zIndex={token.zIndexPopupBase + 120}\n getPopupContainer={() => document.body}\n styles={{\n root: {\n // width: 200,\n },\n body: {\n borderRadius: 2,\n padding: 0,\n },\n }}\n content={popoverContent(v)}\n >\n <div\n data-track\n id={`milestoneListItem-${v.id}`}\n key={v.id}\n className={classNames(\n styles.milestoneListItem,\n checkPresets(v.range_day.map((m) => dayjs(m))) && styles.milestoneListActive,\n )}\n style={{\n textAlign: 'left',\n padding: '0 10px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n onClick={() => {\n milestoneSelected(v.id as number);\n }}\n >\n {v.tag}\n </div>\n </Popover>\n );\n })}\n </div>\n );\n\n const dateGourpRender = (panelNode: React.ReactNode) => {\n return (\n <div data-yk-range-date-with-vs-panel>\n {dateCompare && (\n <div className={styles.ykRangeDateWithVsHeader}>\n <Anchor\n className={styles.ykRangeDateWithVsHeaderAnchor}\n direction='horizontal'\n items={timeOptionAnchors}\n getCurrentAnchor={() => cacheTimeType}\n onClick={(event, link) => {\n event.preventDefault();\n event.stopPropagation();\n setCacheTimeType(link.href);\n const defaultFn = optionsMap[link.href] ? optionsMap[link.href].default : optionsMap['按日'].default;\n setCacheRangeDate(defaultFn());\n }}\n />\n </div>\n )}\n <Flex>\n {milestoneListFilter && milestoneListFilter.length > 0 && showProjectNode ? (\n <div className={classNames(styles.milestoneList, 'scroll-reset')}>{milestoneList}</div>\n ) : null}\n <div className={styles.ykRangeDateWithVsGroup}>\n <div className={styles.ykRangeDateWithVsPanel}>{panelNode}</div>\n </div>\n </Flex>\n </div>\n );\n };\n\n // 当节点有已选时,不高亮presetsNode\n let hasSelect = false;\n if (milestoneListFilter && milestoneListFilter.length > 0) {\n milestoneListFilter.forEach((item) => {\n if (checkPresets(item.range_day.map((m) => dayjs(m))) && picker === 'date' && showProjectNode) {\n hasSelect = true;\n }\n });\n }\n\n const presetsNode = options.map((v, i) => {\n return {\n label: (\n <div\n className={classNames(\n 'ant-picker-presets-li',\n groupIndex === i && !hasSelect && 'ant-picker-presets-li-item',\n )}\n onClick={() => {\n setGroupIndex(i);\n }}\n >\n {v.label}\n </div>\n ),\n value: v.value,\n };\n }) as TimeRangePickerProps['presets'];\n\n /** 默认挂到 body,避免父级 overflow/transform/弹层导致点击判定异常或面板误关;业务可继续覆盖 */\n const resolvePopupContainer = getPopupContainer ?? (() => document.body);\n\n // 项目节点与节假日\n const dateTags: ProjectNodeItem[] = (milestoneListFilter || []).concat(holidays || []).map((m) => {\n return {\n ...m,\n date: m.range_day[0],\n };\n });\n const dateTagsMap = {};\n dateTags.forEach((m: any) => {\n if (dateTagsMap[m.date]) {\n dateTagsMap[m.date].push(m);\n } else {\n dateTagsMap[m.date] = [m];\n }\n });\n\n const eventsTooltips = (date: Dayjs) => {\n const dateStr = dayjs(date).format('YYYY-MM-DD');\n const tags = dateTagsMap[dateStr] || [];\n // 只展示最新创建的节点\n const lastTag =\n tags.length > 0\n ? tags.reduce((prev: ProjectNodeItem, curr: ProjectNodeItem) =>\n dayjs(prev.created_at).isAfter(dayjs(curr.created_at)) ? prev : curr,\n )\n : null;\n return lastTag ? (\n <Tooltip\n placement='right'\n title={\n lastTag.tag +\n ' ' +\n (lastTag.range_day[0] === lastTag.range_day[1] ? lastTag.range_day[0] : lastTag.range_day.join(' ~ '))\n }\n color='#fff'\n styles={{\n root: {\n maxWidth: 270,\n },\n body: {\n borderRadius: 2,\n color: '#666',\n },\n }}\n >\n <div key={lastTag.id} className={styles.ykRangeDateWithVsTag}>\n {lastTag.tag}\n </div>\n </Tooltip>\n ) : (\n <></>\n );\n };\n\n const cellRender: DatePickerProps<Dayjs>['cellRender'] = (current, info) => {\n if (info.type !== 'date') {\n return info.originNode;\n }\n if (typeof current === 'number' || typeof current === 'string') {\n return <div className='ant-picker-cell-inner'>{current}</div>;\n }\n return (\n <div\n className={classNames('ant-picker-cell-inner')}\n style={{ width: 45, height: 40, lineHeight: holidays && holidays.length > 0 ? '26px' : '40px', fontSize: 12 }}\n >\n {current.date()}\n {holidays && holidays.length > 0 && (\n <div\n style={{\n position: 'absolute',\n bottom: 2,\n height: 16,\n width: '100%',\n fontSize: '12px',\n lineHeight: '16px',\n whiteSpace: 'nowrap',\n }}\n >\n {eventsTooltips(current)}\n </div>\n )}\n </div>\n );\n };\n\n const rangePicker = (\n <DatePicker.RangePicker\n id='ykRangeDateWithVsRange'\n classNames={{\n popup: {\n root: styles.globalItemDatePanel,\n },\n }}\n styles={{\n root: {\n opacity: hasCustomRangeDisplay ? 0 : 1,\n },\n }}\n getPopupContainer={resolvePopupContainer}\n disabledDate={\n disabledDate\n ? disabledDate\n : (current) => {\n return current && current > dayjs().endOf('day');\n }\n }\n inputReadOnly={hasCustomRangeDisplay}\n open={groupOpen}\n picker={picker}\n cellRender={cellRender}\n value={cacheRangeDate}\n panelRender={dateGourpRender}\n presets={presetsNode}\n variant='borderless'\n allowClear={false}\n format={customFormat}\n showWeek={false}\n separator='~'\n className={styles.globalItemDate}\n suffixIcon={false}\n onCalendarChange={(dates) => {\n if (!dates) return;\n const [v0, v1] = dates;\n setIsChange(true);\n const start = v0 ? v0.startOf(picker) : null;\n let end: DateValue = null;\n if (v1) {\n const endRaw = v1.endOf(picker);\n end = endRaw > dayjs() ? dayjs() : endRaw;\n }\n setCacheRangeDate([start, end]);\n }}\n onChange={(val) => {\n if (!val || (!val[0] && !val[1])) {\n setIsChange(true);\n setCacheRangeDate([null, null]);\n onChange({\n rangeDate: [null, null],\n timeType: cacheTimeType,\n });\n return;\n }\n const [v0, v1] = val;\n if (v0 && !v1) {\n setIsChange(true);\n setCacheRangeDate([v0.startOf(picker), null]);\n return;\n }\n if (!v0 && v1) {\n setIsChange(true);\n const end = v1.endOf(picker) > dayjs() ? dayjs() : v1.endOf(picker);\n setCacheRangeDate([null, end]);\n return;\n }\n const start = v0.startOf(picker);\n const end = v1.endOf(picker) > dayjs() ? dayjs() : v1.endOf(picker);\n setIsChange(true);\n setCacheRangeDate([start, end]);\n onChange({\n rangeDate: [start, end],\n timeType: cacheTimeType,\n });\n }}\n onOpenChange={(open) => {\n setGroupOpen(open);\n }}\n />\n );\n\n return (\n <div ref={triggerWrapRef} className={classNames(styles.globalMl, styles.globalItem)}>\n {dateCompare && !!options.length && (\n <label onClick={() => setGroupOpen(true)} className={styles.globalItemDateTerm}>\n <span style={{ marginRight: '5px', fontSize: 14 }}>{timeType}</span>\n <i style={{ marginRight: '10px' }} className={classNames('iconfont icon-xiala1')}></i>\n </label>\n )}\n <i className={itemCheckIconClass('icon-riqi1')} style={{ fontSize: 14 }} />\n <ConfigProvider\n theme={{\n components: {\n DatePicker: {\n cellWidth: 60,\n cellHeight: 40,\n timeColumnWidth: 40,\n },\n },\n token: {},\n }}\n >\n {hasCustomRangeDisplay ? (\n <div className={styles.rangePickerCustomDisplay}>\n <span className={styles.rangePickerCustomDisplayLabel}>{rangeDisplayLabel}</span>\n {rangePicker}\n </div>\n ) : (\n rangePicker\n )}\n </ConfigProvider>\n </div>\n );\n};\n\nexport default YkRangeDateWithVSRange;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AACA,SAAS,QAAQ,gBAAgB,YAAY,MAAM,SAAS,SAAS,aAAa;AAClF,OAAO,gBAAgB;AACvB,OAAO,WAA2B;AAClC,SAAS,WAAW,eAAe;AACnC,OAAO,SAAyB,WAAW,SAAS,QAAQ,gBAAgB;AAC5E,OAAO,YAAY;AA4BnB,IAAM,qBAAqB,CAAC,cAAsB;AAChD,SAAO,WAAW,YAAY,WAAW,OAAO,MAAM;AACxD;AAEA,IAAM,OAA8F,CAClG,GACA,QACA,QAAQ,UACL,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,QAAQ,MAAM,IAAI,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9G,IAAM,cAAgC;AAAA,EACpC,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE;AAAA,EACjD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,KAAK,EAAE;AAAA,EAC3C,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,MAAM,EAAE;AAAA,EAC5C,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,OAAO,EAAE;AAAA,EAC7C,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,MAAM,EAAE;AAAA,EAC5C,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EAClG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EACnG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EACnG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,EAAE,QAAQ,KAAK,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EACnG;AACF;AACA,IAAM,cAAgC;AAAA,EACpC,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,MAAM,EAAE;AAAA,EAC5C,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,EAAE;AAAA,EACrD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,EAAE;AAAA,EACrD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,EAAE;AAAA,EACrD;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EACtG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EACtG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EACtG;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM,CAAC;AAAA,EACtG;AACF;AACA,IAAM,eAAiC;AAAA,EACrC,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,OAAO,EAAE;AAAA,EAC7C,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,MAAM,OAAO,MAAM,KAAK,GAAG,MAAM,EAAE;AAAA,EAC5C,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE;AAAA,EACrD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,SAAS,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,SAAS,IAAI,EAAE;AAAA,EACtD;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC3G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC3G;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,EAAE,QAAQ,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,OAAO,CAAC;AAAA,EAC3G;AACF;AACA,IAAM,kBAAoC;AAAA,EACxC,EAAE,OAAO,OAAO,OAAO,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AACxD;AACA,IAAM,mBAAqC;AAAA,EACzC,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACpD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,SAAS,OAAO,MAAM,KAAK,KAAK,OAAO,IAAI,EAAE;AACxD;AAEA,IAAM,YAEF;AAAA,EACF,MAAM;AAAA,EACN,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,aAKF;AAAA,EACF,IAAI,EAAE,SAAS,aAAa,SAAS,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;AAAA,EACjE,IAAI,EAAE,SAAS,aAAa,SAAS,MAAM,KAAK,IAAI,QAAQ,IAAI,EAAE;AAAA,EAClE,IAAI,EAAE,SAAS,cAAc,SAAS,MAAM,KAAK,IAAI,SAAS,IAAI,EAAE;AAAA,EACpE,MAAM,EAAE,SAAS,aAAa,SAAS,MAAM,KAAK,IAAI,QAAQ,IAAI,EAAE;AAAA,EACpE,MAAM,EAAE,SAAS,cAAc,SAAS,MAAM,KAAK,IAAI,SAAS,IAAI,EAAE;AAAA,EACtE,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS,MAAM,KAAK,KAAK,IAAI,GAAG,OAAO,IAAI;AAAA,EAC7C;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS,MAAM,KAAK,KAAK,KAAK,GAAG,OAAO,IAAI;AAAA,EAC9C;AACF;AAEA,IAAM,yBAAgE,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,YAAY,CAAC;AAAA,EACb,WAAW,CAAC;AAAA,EACZ;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,IAAI,MAAM,SAAS;AACjC,QAAM,wBAAwB,qBAAqB;AACnD,QAAM,iBAAiB,OAAuB,IAAI;AAClD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,aAAa;AACnB,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAqB,CAAC,MAAM,IAAI,CAAC;AAC7E,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,QAAQ;AACnE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,SAAS,iBAAiB,UAAU,aAAa,IAAI,UAAU,aAAa,IAAI;AACtF,QAAM,UAAU,iBACZ,iBACA,WAAW,aAAa,IACtB,WAAW,aAAa,EAAE,UAC1B,WAAW,IAAI,EAAE;AAGvB,QAAM,kBAAkB,QAAQ,MAAM;AACpC,WACG,CAAC,SAAS,SAAS,GAAG,KACrB,CAAC,SAAS,SAAS,GAAG,KACtB,CAAC,cAAc,SAAS,GAAG,KAC3B,CAAC,cAAc,SAAS,GAAG,KAC7B,cAAc,SAAS,GAAG;AAAA,EAE9B,GAAG,CAAC,UAAU,aAAa,CAAC;AAE5B,QAAM,qBACJ,2CAAa,IAAI,CAAC,MAAM;AACtB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF,OAAM,CAAC;AAGT,QAAM,gBAAgB,MAAM;AAC1B,sBAAkB,SAAS;AAC3B,qBAAiB,QAAQ;AACzB,gBAAY,KAAK;AAAA,EACnB;AAEA,YAAU,MAAM;AACd,QAAI,WAAW;AACb;AAAA,QACE,UAAU,SAAS,CAAC,SAAS;AAtRrC;AAuRU,iBAAO;AAAA,aACL,UAAK,MAAM,MAAX,mBAAc,IAAI,CAAC,MAAM,uBAAG,OAAO;AAAA,YACnC,iDAAgB,IAAI,CAAC,MAAM,uBAAG,OAAO;AAAA,UACvC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,WAAW,CAAC,UAAU;AACpB,oBAAc;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,eAAe,SAAS,CAAC;AAE7B,YAAU,MAAM;AACd,kBAAc;AAAA,EAChB,GAAG,CAAC,WAAW,QAAQ,CAAC;AAGxB,YAAU,MAAM;AACd,QAAI,CAAC;AAAW;AAChB,UAAM,uBAAuB,CAAC,MAAoB;AAzStD;AA0SM,YAAM,KAAK,EAAE;AACb,UAAI,EAAE,cAAc;AAAU;AAC9B,WAAI,oBAAe,YAAf,mBAAwB,SAAS;AAAK;AAC1C,UAAI,GAAG,QAAQ,oCAAoC;AAAG;AACtD,UAAI,OAAO,uBAAuB,GAAG,QAAQ,IAAI,OAAO,qBAAqB;AAAG;AAChF,mBAAa,KAAK;AAAA,IACpB;AACA,WAAO,iBAAiB,eAAe,sBAAsB,IAAI;AACjE,WAAO,MAAM,OAAO,oBAAoB,eAAe,sBAAsB,IAAI;AAAA,EACnF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,eAA0C,CAAC,UAAU;AACzD,WAAO,GAAG,MAAM,KAAK,EAAE,OAAO,YAAY;AAAA,EAC5C;AAEA,QAAM,oBAAoB,CAAC,OAAe;AAzT5C;AA0TI,UAAM,UAAQ,eAAU,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAjC,mBAAoC,UAAU,IAAI,CAAC,MAAM,MAAM,CAAC,OAAM,CAAC;AACrF,QAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAI,MAAM,MAAM,EAAE,MAAM,KAAK;AAAG,YAAM,MAAM,EAAE,MAAM,KAAK;AACzD,gBAAY,IAAI;AAChB,sBAAkB,CAAC,OAAO,GAAG,CAAC;AAC9B,aAAS;AAAA,MACP,WAAW,CAAC,OAAO,GAAG;AAAA,MACtB,UAAU;AAAA,IACZ,CAAC;AACD,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,eAAe,CAAC,MAAM;AAC1B,QACE,kBACA,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,YAAY,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,OAAO,YAAY,KACjF,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,YAAY,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,OAAO,YAAY,GACjF;AACA,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,iBAAiB,CAAC,UAA2B;AACjD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,QACZ;AAAA;AAAA,MAEC,MAAM,MACL,OACC,MAAM,UAAU,CAAC,MAAM,MAAM,UAAU,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,MAAM,UAAU,KAAK,KAAK;AAAA,IAChG;AAAA,EAEJ;AAEA,QAAM,sBAAsB,UACzB,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,EACnC,OAAO,CAAC,MAAM,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC,EAC3D,OAAO,CAAC,MAAM,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,EAClF;AAAA,IACC,CAAC,GAAoB,MAAuB,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,IAAI,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ;AAAA,EAC9G;AACF,QAAM,gBACJ,oCAAC,SAAI,WAAW,OAAO,oBACpB,oBAAoB,IAAI,CAAC,MAAM;AAE9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,EAAE;AAAA,QACP,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,QAAQ,MAAM,kBAAkB;AAAA,QAChC,mBAAmB,MAAM,SAAS;AAAA,QAClC,QAAQ;AAAA,UACN,MAAM;AAAA;AAAA,UAEN;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,SAAS,eAAe,CAAC;AAAA;AAAA,MAEzB;AAAA,QAAC;AAAA;AAAA,UACC,cAAU;AAAA,UACV,IAAI,qBAAqB,EAAE;AAAA,UAC3B,KAAK,EAAE;AAAA,UACP,WAAW;AAAA,YACT,OAAO;AAAA,YACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO;AAAA,UAC3D;AAAA,UACA,OAAO;AAAA,YACL,WAAW;AAAA,YACX,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,UACA,SAAS,MAAM;AACb,8BAAkB,EAAE,EAAY;AAAA,UAClC;AAAA;AAAA,QAEC,EAAE;AAAA,MACL;AAAA,IACF;AAAA,EAEJ,CAAC,CACH;AAGF,QAAM,kBAAkB,CAAC,cAA+B;AACtD,WACE,oCAAC,SAAI,oCAAgC,QAClC,eACC,oCAAC,SAAI,WAAW,OAAO,2BACrB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,OAAO;AAAA,QAClB,WAAU;AAAA,QACV,OAAO;AAAA,QACP,kBAAkB,MAAM;AAAA,QACxB,SAAS,CAAC,OAAO,SAAS;AACxB,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AACtB,2BAAiB,KAAK,IAAI;AAC1B,gBAAM,YAAY,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,UAAU,WAAW,IAAI,EAAE;AAC3F,4BAAkB,UAAU,CAAC;AAAA,QAC/B;AAAA;AAAA,IACF,CACF,GAEF,oCAAC,YACE,uBAAuB,oBAAoB,SAAS,KAAK,kBACxD,oCAAC,SAAI,WAAW,WAAW,OAAO,eAAe,cAAc,KAAI,aAAc,IAC/E,MACJ,oCAAC,SAAI,WAAW,OAAO,0BACrB,oCAAC,SAAI,WAAW,OAAO,0BAAyB,SAAU,CAC5D,CACF,CACF;AAAA,EAEJ;AAGA,MAAI,YAAY;AAChB,MAAI,uBAAuB,oBAAoB,SAAS,GAAG;AACzD,wBAAoB,QAAQ,CAAC,SAAS;AACpC,UAAI,aAAa,KAAK,UAAU,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,UAAU,iBAAiB;AAC7F,oBAAY;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,QAAQ,IAAI,CAAC,GAAG,MAAM;AACxC,WAAO;AAAA,MACL,OACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,eAAe,KAAK,CAAC,aAAa;AAAA,UACpC;AAAA,UACA,SAAS,MAAM;AACb,0BAAc,CAAC;AAAA,UACjB;AAAA;AAAA,QAEC,EAAE;AAAA,MACL;AAAA,MAEF,OAAO,EAAE;AAAA,IACX;AAAA,EACF,CAAC;AAGD,QAAM,wBAAwB,gDAAsB,MAAM,SAAS;AAGnE,QAAM,YAA+B,uBAAuB,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM;AAChG,WAAO,iCACF,IADE;AAAA,MAEL,MAAM,EAAE,UAAU,CAAC;AAAA,IACrB;AAAA,EACF,CAAC;AACD,QAAM,cAAc,CAAC;AACrB,WAAS,QAAQ,CAAC,MAAW;AAC3B,QAAI,YAAY,EAAE,IAAI,GAAG;AACvB,kBAAY,EAAE,IAAI,EAAE,KAAK,CAAC;AAAA,IAC5B,OAAO;AACL,kBAAY,EAAE,IAAI,IAAI,CAAC,CAAC;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,CAAC,SAAgB;AACtC,UAAM,UAAU,MAAM,IAAI,EAAE,OAAO,YAAY;AAC/C,UAAM,OAAO,YAAY,OAAO,KAAK,CAAC;AAEtC,UAAM,UACJ,KAAK,SAAS,IACV,KAAK;AAAA,MAAO,CAAC,MAAuB,SAClC,MAAM,KAAK,UAAU,EAAE,QAAQ,MAAM,KAAK,UAAU,CAAC,IAAI,OAAO;AAAA,IAClE,IACA;AACN,WAAO,UACL;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OACE,QAAQ,MACR,OACC,QAAQ,UAAU,CAAC,MAAM,QAAQ,UAAU,CAAC,IAAI,QAAQ,UAAU,CAAC,IAAI,QAAQ,UAAU,KAAK,KAAK;AAAA,QAEtG,OAAM;AAAA,QACN,QAAQ;AAAA,UACN,MAAM;AAAA,YACJ,UAAU;AAAA,UACZ;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,OAAO;AAAA,UACT;AAAA,QACF;AAAA;AAAA,MAEA,oCAAC,SAAI,KAAK,QAAQ,IAAI,WAAW,OAAO,wBACrC,QAAQ,GACX;AAAA,IACF,IAEA,wDAAE;AAAA,EAEN;AAEA,QAAM,aAAmD,CAAC,SAAS,SAAS;AAC1E,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,KAAK;AAAA,IACd;AACA,QAAI,OAAO,YAAY,YAAY,OAAO,YAAY,UAAU;AAC9D,aAAO,oCAAC,SAAI,WAAU,2BAAyB,OAAQ;AAAA,IACzD;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,WAAW,uBAAuB;AAAA,QAC7C,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,YAAY,SAAS,SAAS,IAAI,SAAS,QAAQ,UAAU,GAAG;AAAA;AAAA,MAE3G,QAAQ,KAAK;AAAA,MACb,YAAY,SAAS,SAAS,KAC7B;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,YAAY;AAAA,UACd;AAAA;AAAA,QAEC,eAAe,OAAO;AAAA,MACzB;AAAA,IAEJ;AAAA,EAEJ;AAEA,QAAM,cACJ;AAAA,IAAC,WAAW;AAAA,IAAX;AAAA,MACC,IAAG;AAAA,MACH,YAAY;AAAA,QACV,OAAO;AAAA,UACL,MAAM,OAAO;AAAA,QACf;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,SAAS,wBAAwB,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,MACA,mBAAmB;AAAA,MACnB,cACE,eACI,eACA,CAAC,YAAY;AACX,eAAO,WAAW,UAAU,MAAM,EAAE,MAAM,KAAK;AAAA,MACjD;AAAA,MAEN,eAAe;AAAA,MACf,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAU;AAAA,MACV,WAAW,OAAO;AAAA,MAClB,YAAY;AAAA,MACZ,kBAAkB,CAAC,UAAU;AAC3B,YAAI,CAAC;AAAO;AACZ,cAAM,CAAC,IAAI,EAAE,IAAI;AACjB,oBAAY,IAAI;AAChB,cAAM,QAAQ,KAAK,GAAG,QAAQ,MAAM,IAAI;AACxC,YAAI,MAAiB;AACrB,YAAI,IAAI;AACN,gBAAM,SAAS,GAAG,MAAM,MAAM;AAC9B,gBAAM,SAAS,MAAM,IAAI,MAAM,IAAI;AAAA,QACrC;AACA,0BAAkB,CAAC,OAAO,GAAG,CAAC;AAAA,MAChC;AAAA,MACA,UAAU,CAAC,QAAQ;AACjB,YAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAI;AAChC,sBAAY,IAAI;AAChB,4BAAkB,CAAC,MAAM,IAAI,CAAC;AAC9B,mBAAS;AAAA,YACP,WAAW,CAAC,MAAM,IAAI;AAAA,YACtB,UAAU;AAAA,UACZ,CAAC;AACD;AAAA,QACF;AACA,cAAM,CAAC,IAAI,EAAE,IAAI;AACjB,YAAI,MAAM,CAAC,IAAI;AACb,sBAAY,IAAI;AAChB,4BAAkB,CAAC,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC;AAC5C;AAAA,QACF;AACA,YAAI,CAAC,MAAM,IAAI;AACb,sBAAY,IAAI;AAChB,gBAAMA,OAAM,GAAG,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG,MAAM,MAAM;AAClE,4BAAkB,CAAC,MAAMA,IAAG,CAAC;AAC7B;AAAA,QACF;AACA,cAAM,QAAQ,GAAG,QAAQ,MAAM;AAC/B,cAAM,MAAM,GAAG,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG,MAAM,MAAM;AAClE,oBAAY,IAAI;AAChB,0BAAkB,CAAC,OAAO,GAAG,CAAC;AAC9B,iBAAS;AAAA,UACP,WAAW,CAAC,OAAO,GAAG;AAAA,UACtB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,MACA,cAAc,CAAC,SAAS;AACtB,qBAAa,IAAI;AAAA,MACnB;AAAA;AAAA,EACF;AAGF,SACE,oCAAC,SAAI,KAAK,gBAAgB,WAAW,WAAW,OAAO,UAAU,OAAO,UAAU,KAC/E,eAAe,CAAC,CAAC,QAAQ,UACxB,oCAAC,WAAM,SAAS,MAAM,aAAa,IAAI,GAAG,WAAW,OAAO,sBAC1D,oCAAC,UAAK,OAAO,EAAE,aAAa,OAAO,UAAU,GAAG,KAAI,QAAS,GAC7D,oCAAC,OAAE,OAAO,EAAE,aAAa,OAAO,GAAG,WAAW,WAAW,sBAAsB,GAAG,CACpF,GAEF,oCAAC,OAAE,WAAW,mBAAmB,YAAY,GAAG,OAAO,EAAE,UAAU,GAAG,GAAG,GACzE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAY;AAAA,UACV,YAAY;AAAA,YACV,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA,OAAO,CAAC;AAAA,MACV;AAAA;AAAA,IAEC,wBACC,oCAAC,SAAI,WAAW,OAAO,4BACrB,oCAAC,UAAK,WAAW,OAAO,iCAAgC,iBAAkB,GACzE,WACH,IAEA;AAAA,EAEJ,CACF;AAEJ;AAEA,IAAO,iCAAQ;",
6
+ "names": ["end"]
7
7
  }